1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | "use strict" ;
|
28 |
|
29 |
|
30 |
|
31 | const tree = require( 'tree-kit' ) ;
|
32 | const xterm = require( './xterm.js' ) ;
|
33 |
|
34 |
|
35 |
|
36 | const esc = tree.extend( null , Object.create( xterm.esc ) , {
|
37 |
|
38 | setClipboardLL: { na: true } ,
|
39 | requestClipboard: { na: true } ,
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | nextLine: { on: '\x1b[%UB\x1b[1G' } ,
|
45 | previousLine: { on: '\x1b[%UA\x1b[1G' } ,
|
46 |
|
47 |
|
48 | blockCursor: { on: '\x1b]50;CursorShape=0\x07' } ,
|
49 | blinkingBlockCursor: { on: '\x1b]50;CursorShape=0\x07' } ,
|
50 | underlineCursor: { on: '\x1b]50;CursorShape=2\x07' } ,
|
51 | blinkingUnderlineCursor: { on: '\x1b]50;CursorShape=2\x07' } ,
|
52 | beamCursor: { on: '\x1b]50;CursorShape=1\x07' } ,
|
53 | blinkingBeamCursor: { on: '\x1b]50;CursorShape=1\x07' } ,
|
54 |
|
55 | requestColor: { on: '%D' , na: true }
|
56 | } ) ;
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 | const keymap = Object.create( xterm.keymap ) ;
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 | const handler = Object.create( xterm.handler ) ;
|
77 |
|
78 |
|
79 |
|
80 |
|
81 |
|
82 | handler.mouseSGRProtocol = function mouseSGRProtocol( basename , buffer ) {
|
83 | var code , pressed , matches , result ;
|
84 |
|
85 | matches = buffer.toString().match( /^([0-9]*);([0-9]*);([0-9]*)(.)/ ) ;
|
86 |
|
87 | code = parseInt( matches[ 1 ] , 10 ) ;
|
88 | pressed = matches[ 4 ] !== 'm' ;
|
89 |
|
90 | result = {
|
91 | data: {
|
92 | shift: !! ( code & 4 ) ,
|
93 | alt: !! ( code & 8 ) ,
|
94 | ctrl: !! ( code & 16 )
|
95 | }
|
96 | } ;
|
97 |
|
98 | result.data.x = parseInt( matches[ 2 ] , 10 ) ;
|
99 | result.data.y = parseInt( matches[ 3 ] , 10 ) ;
|
100 | result.eaten = matches[ 0 ].length ;
|
101 |
|
102 | if ( code & 32 ) {
|
103 |
|
104 | result.name = basename + '_MOTION' ;
|
105 | }
|
106 | else if ( code & 64 ) {
|
107 | result.name = basename + ( code & 1 ? '_WHEEL_DOWN' : '_WHEEL_UP' ) ;
|
108 | }
|
109 | else {
|
110 |
|
111 |
|
112 |
|
113 | switch ( code & 3 ) {
|
114 | case 0 :
|
115 | result.name = basename + '_LEFT_BUTTON' ;
|
116 | if ( this.state.button.left === pressed ) { result.disable = true ; }
|
117 | this.state.button.left = pressed ;
|
118 | break ;
|
119 |
|
120 | case 1 :
|
121 | result.name = basename + '_MIDDLE_BUTTON' ;
|
122 | if ( this.state.button.middle === pressed ) { result.disable = true ; }
|
123 | this.state.button.middle = pressed ;
|
124 | break ;
|
125 |
|
126 | case 2 :
|
127 | result.name = basename + '_RIGHT_BUTTON' ;
|
128 | if ( this.state.button.right === pressed ) { result.disable = true ; }
|
129 | this.state.button.right = pressed ;
|
130 | break ;
|
131 |
|
132 | case 3 :
|
133 | result.name = basename + '_OTHER_BUTTON' ;
|
134 | if ( this.state.button.other === pressed ) { result.disable = true ; }
|
135 | this.state.button.other = pressed ;
|
136 | break ;
|
137 | }
|
138 |
|
139 | result.name += pressed ? '_PRESSED' : '_RELEASED' ;
|
140 | }
|
141 |
|
142 | result.data.code = code ;
|
143 |
|
144 | return result ;
|
145 | } ;
|
146 |
|
147 |
|
148 |
|
149 | module.exports = {
|
150 | esc: esc ,
|
151 | keymap: keymap ,
|
152 | handler: handler ,
|
153 | support: {
|
154 | deltaEscapeSequence: true ,
|
155 | "256colors": false ,
|
156 | "24bitsColors": false ,
|
157 | "trueColor": false
|
158 | } ,
|
159 | colorRegister: require( '../colorScheme/konsole.json' )
|
160 | } ;
|
161 |
|