1 | #!/usr/bin/env node
|
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 |
|
28 | "use strict" ;
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | require( '../lib/termkit.js' ).getDetectedTerminal( function( error , term ) {
|
37 |
|
38 |
|
39 | function terminate()
|
40 | {
|
41 | setTimeout( function() {
|
42 |
|
43 | term.grabInput( false ) ;
|
44 | term.fullscreen( false ) ;
|
45 | term.applicationKeypad( false ) ;
|
46 | term.beep() ;
|
47 |
|
48 |
|
49 | setTimeout( function() { process.exit() ; } , 100 ) ;
|
50 | } , 100 ) ;
|
51 | }
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | term.fullscreen() ;
|
57 |
|
58 |
|
59 | term.applicationKeypad() ;
|
60 |
|
61 | term.moveTo( 1 , 1 )
|
62 | .bgWhite.blue( 'Arrows: move, CTRL+Arrows: draw, SHIFT+Arrows: draw brighter\nTAB: switch mode, ENTER/SPACE: in-place drawing 1-8: change color\n' )
|
63 | .bgWhite.green( 'CTRL-C to quit (startup size: %ix%i)\n' , term.width , term.height )
|
64 | .moveTo( 40 , 20 ) ;
|
65 |
|
66 |
|
67 |
|
68 | term.grabInput( { mouse: 'button' , focus: true } ) ;
|
69 | term.requestCursorLocation().requestScreenSize() ;
|
70 |
|
71 |
|
72 | var color = 2 , x = '' , y = '' , width = '' , height = '' ;
|
73 | var mode = 0 , modeString = [ 'move' , 'draw' , 'draw brigther' ] ;
|
74 |
|
75 | term.on( 'key' , function( key , matches , data ) {
|
76 |
|
77 | switch ( key )
|
78 | {
|
79 | case '1' :
|
80 | case '2' :
|
81 | case '3' :
|
82 | case '4' :
|
83 | case '5' :
|
84 | case '6' :
|
85 | case '7' :
|
86 | case '8' :
|
87 | color = parseInt( key ) - 1 ;
|
88 | break ;
|
89 | case 'ALT_UP' : term.up( 1 ) ; break ;
|
90 | case 'ALT_DOWN' : term.down( 1 ) ; break ;
|
91 | case 'ALT_LEFT' : term.left( 1 ) ; break ;
|
92 | case 'ALT_RIGHT' : term.right( 1 ) ; break ;
|
93 | case 'CTRL_UP' : term.bgColor( color , ' ' ).left.up( 1 , 1 ).bgColor( color , ' ' ).left( 1 ) ; break ;
|
94 | case 'CTRL_DOWN' : term.bgColor( color , ' ' ).left.down( 1 , 1 ).bgColor( color , ' ' ).left( 1 ) ; break ;
|
95 | case 'CTRL_LEFT' : term.bgColor( color , ' ' ).left( 2 ).bgColor( color , ' ' ).left( 1 ) ; break ;
|
96 | case 'CTRL_RIGHT' : term.bgColor( color , ' ' ).left( 1 ) ; break ;
|
97 | case 'SHIFT_UP' : term.bgColor( color + 8 , ' ' ).left.up( 1 , 1 ).bgColor( color + 8 , ' ' ).left( 1 ) ; break ;
|
98 | case 'SHIFT_DOWN' : term.bgColor( color + 8 , ' ' ).left.down( 1 , 1 ).bgColor( color + 8 , ' ' ).left( 1 ) ; break ;
|
99 | case 'SHIFT_LEFT' : term.bgColor( color + 8 , ' ' ).left( 2 ).bgColor( color + 8 , ' ' ).left( 1 ) ; break ;
|
100 | case 'SHIFT_RIGHT' : term.bgColor( color + 8 , ' ' ).left( 1 ) ; break ;
|
101 | case 'UP' :
|
102 | if ( ! mode ) { term.up( 1 ) ; }
|
103 | else { term.bgColor( color + 8 * ( mode - 1 ) , ' ' ).left.up( 1 , 1 ).bgColor( color + 8 * ( mode - 1 ) , ' ' ).left( 1 ) ; }
|
104 | break ;
|
105 | case 'DOWN' :
|
106 | if ( ! mode ) { term.down( 1 ) ; }
|
107 | else { term.bgColor( color + 8 * ( mode - 1 ) , ' ' ).left.down( 1 , 1 ).bgColor( color + 8 * ( mode - 1 ) , ' ' ).left( 1 ) ; }
|
108 | break ;
|
109 | case 'LEFT' :
|
110 | if ( ! mode ) { term.left( 1 ) ; }
|
111 | else { term.bgColor( color + 8 * ( mode - 1 ) , ' ' ).left( 2 ).bgColor( color + 8 * ( mode - 1 ) , ' ' ).left( 1 ) ; }
|
112 | break ;
|
113 | case 'RIGHT' :
|
114 | if ( ! mode ) { term.right( 1 ) ; }
|
115 | else { term.bgColor( color + 8 * ( mode - 1 ) , ' ' ).left( 1 ) ; }
|
116 | break ;
|
117 | case 'ENTER' : term.bgColor( color , ' ' ).left( 1 ) ; break ;
|
118 | case ' ' : term.bgColor( color + 8 , ' ' ).left( 1 ) ; break ;
|
119 | case 'TAB' : mode = ( mode + 1 ) % 3 ; break ;
|
120 | case 'CTRL_C' : terminate() ; break ;
|
121 | }
|
122 |
|
123 | term.requestCursorLocation()
|
124 | .saveCursor()
|
125 | .moveTo( 1 , term.height )
|
126 | .eraseLine()
|
127 | .bgWhite.blue(
|
128 | 'Arrow mode: ' + modeString[ mode ] +
|
129 | ' -- Cur pos: ' + x + ',' + y +
|
130 | ' -- Scr size: ' + term.width + ',' + term.height +
|
131 | ' -- Key: ' + key
|
132 | )
|
133 | .restoreCursor() ;
|
134 | } ) ;
|
135 |
|
136 |
|
137 |
|
138 | term.on( 'terminal' , function( name , data ) {
|
139 |
|
140 | switch ( name )
|
141 | {
|
142 | case 'CURSOR_LOCATION' : x = data.x ; y = data.y ; break ;
|
143 | case 'SCREEN_SIZE' : width = data.width ; height = data.height ; break ;
|
144 | }
|
145 | } ) ;
|
146 |
|
147 |
|
148 |
|
149 | term.on( 'mouse' , function( name , data ) {
|
150 |
|
151 | } ) ;
|
152 |
|
153 |
|
154 |
|
155 | term.on( 'unknown' , function( buffer ) {
|
156 |
|
157 | } ) ;
|
158 |
|
159 |
|
160 | } ) ;
|
161 |
|