ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/command.C
(Generate patch)

Comparing rxvt-unicode/src/command.C (file contents):
Revision 1.67 by pcg, Thu Mar 11 00:53:19 2004 UTC vs.
Revision 1.73 by pcg, Mon Mar 15 00:08:11 2004 UTC

140 valid_keysym = keysym != NoSymbol; 140 valid_keysym = keysym != NoSymbol;
141 } 141 }
142 142
143 if (valid_keysym) 143 if (valid_keysym)
144 { 144 {
145 /* for some backwards compatibility */
146#if defined(HOTKEY_CTRL) || defined(HOTKEY_META)
147# ifdef HOTKEY_CTRL
148 if (ctrl)
149# else
150 if (meta)
151# endif
152 {
153 if (keysym == ks_bigfont)
154 {
155 change_font (FONT_UP);
156 return;
157 }
158 else if (keysym == ks_smallfont)
159 {
160 change_font (FONT_DN);
161 return;
162 }
163 }
164#endif
165
166 if (TermWin.saveLines) 145 if (TermWin.saveLines)
167 { 146 {
168#ifdef UNSHIFTED_SCROLLKEYS 147#ifdef UNSHIFTED_SCROLLKEYS
169 if (!ctrl && !meta) 148 if (!ctrl && !meta)
170 { 149 {
261#ifdef KEYSYM_RESOURCE 240#ifdef KEYSYM_RESOURCE
262 if (! (shft | ctrl) && Keysym_map[keysym & 0xFF] != NULL) 241 if (! (shft | ctrl) && Keysym_map[keysym & 0xFF] != NULL)
263 { 242 {
264 unsigned int l; 243 unsigned int l;
265 const unsigned char *kbuf0; 244 const unsigned char *kbuf0;
266 const unsigned char ch = C0_ESC;
267 245
268 kbuf0 = (Keysym_map[keysym & 0xFF]); 246 kbuf0 = (Keysym_map[keysym & 0xFF]);
269 l = (unsigned int)*kbuf0++; 247 l = (unsigned int)*kbuf0++;
270 248
271 /* escape prefix */ 249 /* escape prefix */
272 if (meta) 250 if (meta
273# ifdef META8_OPTION 251# ifdef META8_OPTION
274 if (meta_char == C0_ESC) 252 && meta_char == C0_ESC
275# endif 253# endif
254 )
255 {
256 const unsigned char ch = C0_ESC;
276 tt_write (&ch, 1); 257 tt_write (&ch, 1);
258 }
259
277 tt_write (kbuf0, l); 260 tt_write (kbuf0, l);
278 return; 261 return;
279 } 262 }
280 else 263 else
281#endif 264#endif
545 break; 528 break;
546 } 529 }
547 if (newlen) 530 if (newlen)
548 len = STRLEN (kbuf); 531 len = STRLEN (kbuf);
549 } 532 }
533
550 /* 534 /*
551 * Pass meta for all function keys, if 'meta' option set 535 * Pass meta for all function keys, if 'meta' option set
552 */ 536 */
553#ifdef META8_OPTION 537#ifdef META8_OPTION
554 if (meta && (meta_char == 0x80) && len > 0) 538 if (meta && (meta_char == 0x80) && len > 0)
569 { 553 {
570 unsigned char *ch; 554 unsigned char *ch;
571 555
572 for (ch = kbuf; ch < kbuf + len; ch++) 556 for (ch = kbuf; ch < kbuf + len; ch++)
573 *ch |= 0x80; 557 *ch |= 0x80;
558
574 meta = 0; 559 meta = 0;
575 } 560 }
576#endif 561#endif
577 /* nil */ ; 562 /* nil */ ;
578 } 563 }
774 759
775bool 760bool
776rxvt_term::cmd_parse () 761rxvt_term::cmd_parse ()
777{ 762{
778 bool flag = false; 763 bool flag = false;
779 uint32_t ch = NOCHAR; 764 unicode_t ch = NOCHAR;
780 765
781 for (;;) 766 for (;;)
782 { 767 {
783 if (ch == NOCHAR) 768 if (ch == NOCHAR)
784 ch = next_char (); 769 ch = next_char ();
787 break; 772 break;
788 773
789 if (ch >= ' ' || ch == '\t' || ch == '\n' || ch == '\r') 774 if (ch >= ' ' || ch == '\t' || ch == '\n' || ch == '\r')
790 { 775 {
791 /* Read a text string from the input buffer */ 776 /* Read a text string from the input buffer */
792 uint32_t buf[BUFSIZ]; 777 unicode_t buf[BUFSIZ];
793 bool refreshnow = false; 778 bool refreshnow = false;
794 int nlines = 0; 779 int nlines = 0;
795 uint32_t *str = buf; 780 unicode_t *str = buf;
796 781
797 *str++ = ch; 782 *str++ = ch;
798 783
799 for (;;) 784 for (;;)
800 { 785 {
878 return flag; 863 return flag;
879} 864}
880 865
881// read the next character, currently handles UTF-8 866// read the next character, currently handles UTF-8
882// will probably handle all sorts of other stuff in the future 867// will probably handle all sorts of other stuff in the future
883uint32_t 868unicode_t
884rxvt_term::next_char () 869rxvt_term::next_char ()
885{ 870{
886 while (cmdbuf_ptr < cmdbuf_endp) 871 while (cmdbuf_ptr < cmdbuf_endp)
887 { 872 {
888 // assume 0x20 .. 0x7f to be ascii ALWAYS (all shift-states etc.) uh-oh 873 // assume 0x20 .. 0x7f to be ascii ALWAYS (all shift-states etc.) uh-oh
914/* rxvt_cmd_getc () - Return next input character */ 899/* rxvt_cmd_getc () - Return next input character */
915/* 900/*
916 * Return the next input character after first passing any keyboard input 901 * Return the next input character after first passing any keyboard input
917 * to the command. 902 * to the command.
918 */ 903 */
919uint32_t 904unicode_t
920rxvt_term::cmd_getc () 905rxvt_term::cmd_getc ()
921{ 906{
922 for (;;) 907 for (;;)
923 { 908 {
924 uint32_t c = next_char (); 909 unicode_t c = next_char ();
925 if (c != NOCHAR) 910 if (c != NOCHAR)
926 return c; 911 return c;
927 912
928 // incomplete sequences should occur rarely, still, a better solution 913 // incomplete sequences should occur rarely, still, a better solution
929 // would be preferred. either setjmp/longjmp or better design. 914 // would be preferred. either setjmp/longjmp or better design.
2346 break; 2331 break;
2347 2332
2348 /* 8.3.87: NEXT LINE */ 2333 /* 8.3.87: NEXT LINE */
2349 case C1_NEL: /* ESC E */ 2334 case C1_NEL: /* ESC E */
2350 { 2335 {
2351 uint32_t nlcr[] = { '\n', '\r' }; 2336 unicode_t nlcr[] = { L'\n', L'\r' };
2352 scr_add_lines (nlcr, 1, 2); 2337 scr_add_lines (nlcr, 1, 2);
2353 } 2338 }
2354 break; 2339 break;
2355 2340
2356 /* kidnapped escape sequence: Should be 8.3.48 */ 2341 /* kidnapped escape sequence: Should be 8.3.48 */
3141 { menuBar_esc, PrivMode_menuBar }, 3126 { menuBar_esc, PrivMode_menuBar },
3142#endif 3127#endif
3143#ifdef scrollBar_esc 3128#ifdef scrollBar_esc
3144 { scrollBar_esc, PrivMode_scrollBar }, 3129 { scrollBar_esc, PrivMode_scrollBar },
3145#endif 3130#endif
3131 // 18, 19 printing-related
3146 { 25, PrivMode_VisibleCursor }, 3132 { 25, PrivMode_VisibleCursor },
3133 // 30 show scrollbar rxvt. extension
3147 { 35, PrivMode_ShiftKeys }, 3134 { 35, PrivMode_ShiftKeys }, // rxvt extension
3148 { 40, PrivMode_132OK }, 3135 { 40, PrivMode_132OK },
3136 // 41 xterm more fixes NYI
3137 // 45 margin bell NYI
3138 // 46 start logging
3149 { 47, PrivMode_Screen }, 3139 { 47, PrivMode_Screen },
3150 { 66, PrivMode_aplKP }, 3140 { 66, PrivMode_aplKP },
3151#ifndef NO_BACKSPACE_KEY 3141#ifndef NO_BACKSPACE_KEY
3152 { 67, PrivMode_BackSpace }, 3142 { 67, PrivMode_BackSpace },
3153#endif 3143#endif
3154 { 1000, PrivMode_MouseX11 }, 3144 { 1000, PrivMode_MouseX11 },
3145 // 1001 Use Hilite Mouse Tracking. NYI, TODO
3146 // 1002 Use Cell Motion Mouse Tracking. NYI, TODO
3147 // 1003 Use All Motion Mouse Tracking. NYI, TODO
3155 { 1010, PrivMode_TtyOutputInh }, 3148 { 1010, PrivMode_TtyOutputInh }, // rxvt extension
3156 { 1011, PrivMode_Keypress }, 3149 { 1011, PrivMode_Keypress }, // rxvt extension
3150 // 1035 enable modifiers for alt, numlock NYI
3151 // 1036 send ESC for meta keys NYI
3152 // 1037 send DEL for keypad delete NYI
3157 { 1047, PrivMode_Screen }, 3153 { 1047, PrivMode_Screen },
3154 // 1048 save and restore cursor
3158 { 1049, PrivMode_Screen }, /* xterm extension, not fully implemented */ 3155 { 1049, PrivMode_Screen }, /* xterm extension, not fully implemented */
3156 // 1051, 1052, 1060, 1061 keyboard emulation NYI
3159 }; 3157 };
3160 3158
3161 if (nargs == 0) 3159 if (nargs == 0)
3162 return; 3160 return;
3163 3161
3178 state = privcases (mode, argtopriv[j].bit); 3176 state = privcases (mode, argtopriv[j].bit);
3179 break; 3177 break;
3180 } 3178 }
3181 3179
3182 /* extra handling for values with state unkept */ 3180 /* extra handling for values with state unkept */
3181 switch (arg[i])
3182 {
3183 case 1048: /* alternative cursor save */
3184 case 1049:
3185 if (mode == 0)
3186 scr_cursor (RESTORE);
3187 else if (mode == 1)
3188 scr_cursor (SAVE);
3189 /* FALLTHROUGH */
3190 }
3191
3183 if (state == -1) 3192 if (state >= 0)
3193 /* extra handling for values with valid 0 or 1 state */
3184 switch (arg[i]) 3194 switch (arg[i])
3185 { 3195 {
3186 case 1048: /* alternative cursor save */ 3196 /* case 1: - application cursor keys */
3197 case 2: /* VT52 mode */
3198 /* oddball mode. should be set regardless of set/reset
3199 * parameter. Return from VT52 mode with an ESC < from
3200 * within VT52 mode
3201 */
3202 PrivMode (1, PrivMode_vt52);
3203 break;
3204 case 3: /* 80/132 */
3205 if (PrivateModes & PrivMode_132OK)
3206 set_widthheight (((state ? 132 : 80) * TermWin.fwidth), TermWin.height);
3207 break;
3208 case 4: /* smooth scrolling */
3187 if (mode == 0) 3209 if (state)
3188 scr_cursor (RESTORE); 3210 Options &= ~Opt_jumpScroll;
3189 else if (mode == 1) 3211 else
3190 scr_cursor (SAVE); 3212 Options |= Opt_jumpScroll;
3213 break;
3214 case 5: /* reverse video */
3215 scr_rvideo_mode (state);
3216 break;
3217 case 6: /* relative/absolute origins */
3218 scr_relative_origin (state);
3219 break;
3220 case 7: /* autowrap */
3221 scr_autowrap (state);
3222 break;
3223 /* case 8: - auto repeat, can't do on a per window basis */
3224 case 9: /* X10 mouse reporting */
3225 if (state) /* orthogonal */
3226 PrivateModes &= ~ (PrivMode_MouseX11);
3227 break;
3228#ifdef menuBar_esc
3229 case menuBar_esc:
3230#ifdef MENUBAR
3231 map_menuBar (state);
3232#endif
3233 break;
3234#endif
3235#ifdef scrollBar_esc
3236 case scrollBar_esc:
3237 if (scrollbar_mapping (state))
3238 {
3239 resize_all_windows (0, 0, 0);
3240 scr_touch (true);
3241 }
3242 break;
3243#endif
3244 case 25: /* visible/invisible cursor */
3245 scr_cursor_visible (state);
3246 break;
3247 /* case 35: - shift keys */
3248 /* case 40: - 80 <--> 132 mode */
3249 case 47: /* secondary screen */
3250 scr_change_screen (state);
3251 break;
3252 /* case 66: - application key pad */
3253 /* case 67: - backspace key */
3254 case 1000: /* X11 mouse reporting */
3255 if (state) /* orthogonal */
3256 PrivateModes &= ~ (PrivMode_MouseX10);
3257 break;
3258#if 0
3259 case 1001:
3260 break; /* X11 mouse highlighting */
3261#endif
3262 case 1010: /* scroll to bottom on TTY output inhibit */
3263 if (state)
3264 Options &= ~Opt_scrollTtyOutput;
3265 else
3266 Options |= Opt_scrollTtyOutput;
3267 break;
3268 case 1011: /* scroll to bottom on key press */
3269 if (state)
3270 Options |= Opt_scrollTtyKeypress;
3271 else
3272 Options &= ~Opt_scrollTtyKeypress;
3273 break;
3274 case 1047: /* secondary screen w/ clearing */
3275 case 1049: /* better secondary screen w/ clearing, but not fully implemented */
3276 if (current_screen != PRIMARY)
3277 scr_erase_screen (2);
3278 scr_change_screen (state);
3191 /* FALLTHROUGH */ 3279 /* FALLTHROUGH */
3192 default: 3280 default:
3193 continue; /* for (;i;) */ 3281 break;
3194 } 3282 }
3195
3196 /* extra handling for values with valid 0 or 1 state */
3197 switch (arg[i])
3198 {
3199 /* case 1: - application cursor keys */
3200 case 2: /* VT52 mode */
3201 /* oddball mode. should be set regardless of set/reset
3202 * parameter. Return from VT52 mode with an ESC < from
3203 * within VT52 mode
3204 */
3205 PrivMode (1, PrivMode_vt52);
3206 break;
3207 case 3: /* 80/132 */
3208 if (PrivateModes & PrivMode_132OK)
3209 set_widthheight (((state ? 132 : 80) * TermWin.fwidth), TermWin.height);
3210 break;
3211 case 4: /* smooth scrolling */
3212 if (state)
3213 Options &= ~Opt_jumpScroll;
3214 else
3215 Options |= Opt_jumpScroll;
3216 break;
3217 case 5: /* reverse video */
3218 scr_rvideo_mode (state);
3219 break;
3220 case 6: /* relative/absolute origins */
3221 scr_relative_origin (state);
3222 break;
3223 case 7: /* autowrap */
3224 scr_autowrap (state);
3225 break;
3226 /* case 8: - auto repeat, can't do on a per window basis */
3227 case 9: /* X10 mouse reporting */
3228 if (state) /* orthogonal */
3229 PrivateModes &= ~ (PrivMode_MouseX11);
3230 break;
3231#ifdef menuBar_esc
3232 case menuBar_esc:
3233#ifdef MENUBAR
3234 map_menuBar (state);
3235#endif
3236 break;
3237#endif
3238#ifdef scrollBar_esc
3239 case scrollBar_esc:
3240 if (scrollbar_mapping (state))
3241 {
3242 resize_all_windows (0, 0, 0);
3243 scr_touch (true);
3244 }
3245 break;
3246#endif
3247 case 25: /* visible/invisible cursor */
3248 scr_cursor_visible (state);
3249 break;
3250 /* case 35: - shift keys */
3251 /* case 40: - 80 <--> 132 mode */
3252 case 47: /* secondary screen */
3253 scr_change_screen (state);
3254 break;
3255 /* case 66: - application key pad */
3256 /* case 67: - backspace key */
3257 case 1000: /* X11 mouse reporting */
3258 if (state) /* orthogonal */
3259 PrivateModes &= ~ (PrivMode_MouseX10);
3260 break;
3261#if 0
3262 case 1001:
3263 break; /* X11 mouse highlighting */
3264#endif
3265 case 1010: /* scroll to bottom on TTY output inhibit */
3266 if (state)
3267 Options &= ~Opt_scrollTtyOutput;
3268 else
3269 Options |= Opt_scrollTtyOutput;
3270 break;
3271 case 1011: /* scroll to bottom on key press */
3272 if (state)
3273 Options |= Opt_scrollTtyKeypress;
3274 else
3275 Options &= ~Opt_scrollTtyKeypress;
3276 break;
3277 case 1047: /* secondary screen w/ clearing */
3278 case 1049: /* better secondary screen w/ clearing, but not fully implemented */
3279 if (current_screen != PRIMARY)
3280 scr_erase_screen (2);
3281 scr_change_screen (state);
3282 /* FALLTHROUGH */
3283 default:
3284 break;
3285 }
3286 } 3283 }
3287} 3284}
3288/*}}} */ 3285/*}}} */
3289 3286
3290/*{{{ process sgr sequences */ 3287/*{{{ process sgr sequences */
3318 rendset = 1, rendstyle = RS_Blink; 3315 rendset = 1, rendstyle = RS_Blink;
3319 break; 3316 break;
3320 case 7: 3317 case 7:
3321 rendset = 1, rendstyle = RS_RVid; 3318 rendset = 1, rendstyle = RS_RVid;
3322 break; 3319 break;
3320 case 8:
3321 // invisible. NYI
3322 break;
3323 case 22: 3323 case 22:
3324 rendset = 0, rendstyle = RS_Bold; 3324 rendset = 0, rendstyle = RS_Bold;
3325 break; 3325 break;
3326 case 24: 3326 case 24:
3327 rendset = 0, rendstyle = RS_Uline; 3327 rendset = 0, rendstyle = RS_Uline;
3330 rendset = 0, rendstyle = RS_Blink; 3330 rendset = 0, rendstyle = RS_Blink;
3331 break; 3331 break;
3332 case 27: 3332 case 27:
3333 rendset = 0, rendstyle = RS_RVid; 3333 rendset = 0, rendstyle = RS_RVid;
3334 break; 3334 break;
3335 case 28:
3336 // visible. NYI
3337 break;
3335 } 3338 }
3339
3336 if (rendset != -1) 3340 if (rendset != -1)
3337 { 3341 {
3338 scr_rendition (rendset, rendstyle); 3342 scr_rendition (rendset, rendstyle);
3339 continue; /* for (;i;) */ 3343 continue; /* for (;i;) */
3340 } 3344 }
3347 case 33: 3351 case 33:
3348 case 34: 3352 case 34:
3349 case 35: 3353 case 35:
3350 case 36: 3354 case 36:
3351 case 37: 3355 case 37:
3352 scr_color ((unsigned int) (minCOLOR + (arg[i] - 30)), 3356 scr_color ((unsigned int) (minCOLOR + (arg[i] - 30)), Color_fg);
3353 Color_fg);
3354 break; 3357 break;
3355#ifdef TTY_256COLOR 3358#ifdef TTY_256COLOR
3356 case 38: 3359 case 38:
3357 if (nargs > i + 2 && arg[i + 1] == 5) 3360 if (nargs > i + 2 && arg[i + 1] == 5)
3358 { 3361 {
3359 scr_color ((unsigned int) (minCOLOR + arg[i + 2]), 3362 scr_color ((unsigned int) (minCOLOR + arg[i + 2]), Color_fg);
3360 Color_fg);
3361 i += 2; 3363 i += 2;
3362 } 3364 }
3363 break; 3365 break;
3364#endif 3366#endif
3365 case 39: /* default fg */ 3367 case 39: /* default fg */
3372 case 43: 3374 case 43:
3373 case 44: 3375 case 44:
3374 case 45: 3376 case 45:
3375 case 46: 3377 case 46:
3376 case 47: 3378 case 47:
3377 scr_color ((unsigned int) (minCOLOR + (arg[i] - 40)), 3379 scr_color ((unsigned int) (minCOLOR + (arg[i] - 40)), Color_bg);
3378 Color_bg);
3379 break; 3380 break;
3380#ifdef TTY_256COLOR 3381#ifdef TTY_256COLOR
3381 case 48: 3382 case 48:
3382 if (nargs > i + 2 && arg[i + 1] == 5) 3383 if (nargs > i + 2 && arg[i + 1] == 5)
3383 { 3384 {
3384 scr_color ((unsigned int) (minCOLOR + arg[i + 2]), 3385 scr_color ((unsigned int) (minCOLOR + arg[i + 2]), Color_bg);
3385 Color_bg);
3386 i += 2; 3386 i += 2;
3387 } 3387 }
3388 break; 3388 break;
3389#endif 3389#endif
3390 case 49: /* default bg */ 3390 case 49: /* default bg */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines