Source: handler/osc.js

function emitter(name) {
	var args_ = arguments;
	return function(cmd, arg) {
		var args = Array.prototype.slice(args_, 1);
		args.unshift(arg);
		this.emit.apply(name, args);
	};
}

function meta(name) {
	return function(cmd, arg) {
		this.state.setMeta(name, arg);
	};
}

var specialColor = {
	0: 'bold',
	1: 'underline',
	2: 'blink',
	3: 'reverse'
};

/**
* handlers for OSC escape characters
* @enum {Function|string}
* @readonly
* @this refers to calling {@link Terminal}
*/
var osc = {
	'': '0',
	0: function(cmd, args) {
		this.state.setMeta('title', args[0]);
		this.state.setMeta('icon', args[0]);
	},
	1: meta('icon'),
	2: meta('title'),
	3: function() {},
	4: function(cmd, arg) {
		arg = arg.split(';');
		this.emit('colorchange', arg[0], arg[1]);
	},
	5: function(cmd, arg) {
		arg = arg.split(';');
		this.emit('colorchange', specialColor[arg[0]], arg[1]);
	},
	10: emitter('colorchange', 'fg'),
	11: emitter('colorchange', 'bg'),
	12: emitter('colorchange', 'cursor'),
	13: emitter('colorchange', 'mousefg'),
	14: emitter('colorchange', 'mousebg'),
	15: emitter('colorchange', 'tektronixfg'),
	16: emitter('colorchange', 'tektronixbg'),
	17: emitter('colorchange', 'highlightbg'),
	18: emitter('colorchange', 'tektronixhighlight'),
	19: emitter('colorchange', 'highlightfg'),

	46: emitter('logfilechange'),
	50: emitter('fontchange'),
	51: emitter('emacs'),

	// TODO: Manipulate Selection Data
	52: function() {
		
	},
	104: function(cmd, arg) {
		this.emit('colorreset', arg);
	},
	105: function(cmd, arg) {
		this.emit('colorreset', specialColor[arg]);
	},

	110: emitter('colorreset', 'fg'),
	111: emitter('colorreset', 'bg'),
	112: emitter('colorreset', 'cursor'),
	113: emitter('colorreset', 'mousefg'),
	114: emitter('colorreset', 'mousebg'),
	115: emitter('colorreset', 'tektronixfg'),
	116: emitter('colorreset', 'tektronixbg'),
	117: emitter('colorreset', 'highlightbg'),
	118: emitter('colorreset', 'tektronixhighlight'),
	119: emitter('colorreset', 'highlightfg'),
};
module.exports = osc;