test TERM variable for backspace key code detection (^H or DEL)

ansi, cygwin, vt -> ^H
  linux, xterm, ... -> DEL (unchanged)
changed set-backspace-is-control-h to toggle-control-h.
changed CMD() command definition macro to CMD_() with arg definition
  string at the end for improved readability.
removed obsolete CMDi and CMDss command definition macros.
dired.c hex.c image.c latex-mode.c qe.c qe.h qeconfig.h shell.c tty.c
This commit is contained in:
Charlie Gordon 2005-05-08 16:31:47 +00:00
commit be58a93b28
9 changed files with 101 additions and 54 deletions

View file

@ -542,7 +542,7 @@ static CmdDef dired_commands[] = {
CMD1( KEY_CTRL('g'), KEY_NONE, "dired-abort", do_delete_window, 0)
CMD0( ' ', KEY_CTRL('t'), "dired-toggle_selection", list_toggle_selection)
/* BS should go back to previous item and unmark it */
CMD ( 's', KEY_NONE, "dired-sort\0s{Sort order: }", dired_sort)
CMD_( 's', KEY_NONE, "dired-sort", dired_sort, "s{Sort order: }")
/* s -> should also change switches */
CMD1( 'd', KEY_NONE, "dired-delete", dired_mark, 'D')
CMD1( 'c', KEY_NONE, "dired-copy", dired_mark, 'C')

4
hex.c
View file

@ -123,8 +123,8 @@ void do_toggle_hex(EditState *s)
static CmdDef hex_commands[] = {
CMD1( KEY_NONE, KEY_NONE, "decrease-width", do_incr_width, -1)
CMD1( KEY_NONE, KEY_NONE, "increase-width", do_incr_width, 1)
CMD( KEY_NONE, KEY_NONE, "set-width\0i{Width: }", do_set_width)
CMD( KEY_NONE, KEY_NONE, "goto-byte\0i{Goto byte: }", do_goto_byte)
CMD_( KEY_NONE, KEY_NONE, "set-width", do_set_width, "i{Width: }")
CMD_( KEY_NONE, KEY_NONE, "goto-byte", do_goto_byte, "i{Goto byte: }")
CMD0( KEY_NONE, KEY_NONE, "toggle-hex", do_toggle_hex)
CMD_DEF_END,
};

11
image.c
View file

@ -800,16 +800,19 @@ static void pixel_format_completion(StringArray *cs, const char *str)
/* specific image commands */
static CmdDef image_commands[] = {
CMD0( 't', KEY_NONE, "image-rotate", image_rotate)
CMD( 'c', KEY_NONE, "image-convert\0s{New pixel format: }[pixel_format]|pixel_format|", image_convert)
CMD( 'b', KEY_NONE, "image-set-background-color\0s{Background color (use 'transparent' for tiling): }",
image_set_background_color)
CMD_( 'c', KEY_NONE, "image-convert", image_convert,
"s{New pixel format: }[pixel_format]|pixel_format|")
CMD_( 'b', KEY_NONE, "image-set-background-color",
image_set_background_color,
"s{Background color (use 'transparent' for tiling): }")
#if 0
CMD0( 'n', KEY_NONE, "image-normal-size", image_normal_size)
CMD1( '>', KEY_NONE, "image-double-size", image_mult_size, 100)
CMD1( '<', KEY_NONE, "image-halve-size", image_mult_size, -50)
CMD1( '.', KEY_NONE, "image-larger-10", image_mult_size, 10)
CMD1( ',', KEY_NONE, "image-smaller-10", image_mult_size, -10)
CMD( 'S', KEY_NONE, "image-set-display-size\0i{Displayed width: }i{Displayed height: }", image_set_size)
CMD_( 'S', KEY_NONE, "image-set-display-size", image_set_size,
"i{Displayed width: }i{Displayed height: }")
#endif
CMD_DEF_END,
};

View file

@ -327,7 +327,8 @@ static void do_latex(EditState *e, const char *cmd)
static CmdDef latex_commands[] = {
CMD0('\"', KEY_NONE, "tex-insert-quote", do_tex_insert_quote)
/* this should actually be KEY_CTRLC(KEY_CTRL('c')), ie C-c C-c */
CMD (KEY_CTRL('c'), KEY_NONE, "TeX-command-master\0s{Command: (default LaTeX) }[latex]|latex|", do_latex)
CMD_(KEY_CTRL('c'), KEY_NONE, "TeX-command-master", do_latex,
"s{Command: (default LaTeX) }[latex]|latex|")
CMD_DEF_END,
};

7
qe.c
View file

@ -197,11 +197,16 @@ static void qe_register_binding2(int key,
static int backspace_is_control_h;
void do_set_backspace_is_control_h(EditState *s, int set)
void do_toggle_control_h(EditState *s, int set)
{
KeyDef *p;
int i;
if (set)
set = (set > 0);
else
set = !backspace_is_control_h;
if (backspace_is_control_h == set)
return;

6
qe.h
View file

@ -887,14 +887,12 @@ typedef struct CmdDef {
} CmdDef;
/* new command macros */
#define CMD(key, key_alt, name, func) { key, key_alt, name, { (void *)func } },
#define CMDV(key, key_alt, name, func, val) { key, key_alt, name, { (void *)func }, val },
#define CMD_(key, key_alt, name, func, args) { key, key_alt, name "\0" args, { (void *)func } },
#define CMDV(key, key_alt, name, func, val, args) { key, key_alt, name "\0" args, { (void *)func }, (void *)val },
/* old macros for compatibility */
#define CMD0(key, key_alt, name, func) { key, key_alt, name "\0", { (void *)func } },
#define CMD1(key, key_alt, name, func, val) { key, key_alt, name "\0v", { (void *)func }, (void*)(val) },
#define CMDi(key, key_alt, name, func) { key, key_alt, name "\0i", { (void *)func } },
#define CMDss(key, key_alt, name, func) { key, key_alt, name "\0ss", { (void *)func } },
#define CMD_DEF_END { 0, 0, NULL, }
void qe_register_mode(ModeDef *m);

View file

@ -28,8 +28,11 @@ CmdDef basic_commands[] = {
CMD1( KEY_META('w'), KEY_NONE, "copy-region", do_kill_region, 0 )
CMD0( KEY_META('<'), KEY_CTRL_HOME, "beginning-of-buffer", do_bof )
CMD0( KEY_META('>'), KEY_CTRL_END, "end-of-buffer", do_eof )
CMD( KEY_META('x'), KEY_NONE, "execute-extended-command\0s{Command: }[command]|command|i", do_execute_command )
CMD0( KEY_CTRL('u'), KEY_NONE, "universal-argument", do_universal_argument )
CMD_( KEY_META('x'), KEY_NONE, "execute-extended-command",
do_execute_command,
"s{Command: }[command]|command|i" )
CMD0( KEY_CTRL('u'), KEY_NONE, "universal-argument",
do_universal_argument )
CMD0( KEY_CTRL('y'), KEY_NONE, "yank", do_yank)
CMD0( KEY_META('y'), KEY_NONE, "yank-pop", do_yank_pop)
CMD0( KEY_CTRL('i'), KEY_NONE, "tabulate", do_tab)
@ -37,32 +40,35 @@ CmdDef basic_commands[] = {
CMD1( KEY_CTRLX(KEY_CTRL('s')), KEY_NONE, "save-buffer", do_save, 0 )
CMD1( KEY_CTRLX(KEY_CTRL('w')), KEY_NONE, "write-file", do_save, 1 )
CMD0( KEY_CTRLX(KEY_CTRL('c')), KEY_NONE, "suspend-emacs", do_quit )
CMD( KEY_CTRLX(KEY_CTRL('f')), KEY_NONE, "find-file\0s{Find file: }[file]|file|", do_load)
CMD( KEY_CTRLX(KEY_CTRL('v')), KEY_NONE, "find-alternate-file\0s{Find alternate file: }[file]|file|",
do_find_alternate_file)
CMD( KEY_CTRLX('b'), KEY_NONE,
"switch-to-buffer\0s{Switch to buffer: }[buffer]|buffer|", do_switch_to_buffer)
CMD( KEY_CTRLX('k'), KEY_NONE,
"kill-buffer\0s{Kill buffer: }[buffer]|buffer|", do_kill_buffer)
CMD( KEY_CTRLX('i'), KEY_NONE, "insert-file\0s{Insert file: }[file]|file|",
do_insert_file)
CMD_( KEY_CTRLX(KEY_CTRL('f')), KEY_NONE, "find-file", do_load,
"s{Find file: }[file]|file|")
CMD_( KEY_CTRLX(KEY_CTRL('v')), KEY_NONE, "find-alternate-file",
do_find_alternate_file,
"s{Find alternate file: }[file]|file|")
CMD_( KEY_CTRLX('b'), KEY_NONE, "switch-to-buffer", do_switch_to_buffer,
"s{Switch to buffer: }[buffer]|buffer|")
CMD_( KEY_CTRLX('k'), KEY_NONE, "kill-buffer", do_kill_buffer,
"s{Kill buffer: }[buffer]|buffer|")
CMD_( KEY_CTRLX('i'), KEY_NONE, "insert-file", do_insert_file,
"s{Insert file: }[file]|file|")
CMD0( KEY_CTRL('g'), KEY_NONE, "abort", do_break)
CMD0( KEY_NONE, KEY_NONE, "doctor", do_doctor)
CMD1( KEY_CTRL('s'), KEY_NONE, "isearch-forward", do_isearch, 1 )
CMD1( KEY_CTRL('r'), KEY_NONE, "isearch-backward", do_isearch, -1 )
CMD( KEY_META('%'), KEY_NONE, "query-replace\0s{Query replace: }|search|s{With: }|replace|", do_query_replace )
CMD_( KEY_META('%'), KEY_NONE, "query-replace", do_query_replace,
"s{Query replace: }|search|s{With: }|replace|")
CMD0( KEY_CTRLX('u'), KEY_CTRL('_'), "undo", do_undo)
CMD0( KEY_RET, KEY_NONE, "newline", do_return)
CMD0( KEY_CTRL('l'), KEY_NONE, "refresh", do_refresh)
CMD( KEY_META('g'), KEY_NONE, "goto-line\0i{Goto line: }", do_goto_line)
CMDi( KEY_NONE, KEY_NONE, "goto-char\0i{Goto char: }", do_goto_char)
CMD( KEY_NONE, KEY_NONE, "global-set-key\0s{Set key globally: }s{command: }[command]|command|", do_global_set_key)
CMD_( KEY_META('g'), KEY_NONE, "goto-line", do_goto_line, "i{Goto line: }")
CMD_( KEY_NONE, KEY_NONE, "goto-char", do_goto_char, "i{Goto char: }")
CMD0( KEY_CTRLX(KEY_CTRL('q')), KEY_NONE, "vc-toggle-read-only",
do_toggle_read_only)
CMD0( KEY_META('q'), KEY_NONE, "fill-paragraph", do_fill_paragraph)
CMD0( KEY_META('{'), KEY_NONE, "backward-paragraph", do_backward_paragraph)
CMD0( KEY_META('}'), KEY_NONE, "forward-paragraph", do_forward_paragraph)
CMD0( KEY_CTRLX(KEY_CTRL('x')), KEY_NONE, "exchange-point-and-mark", do_exchange_point_and_mark)
CMD0( KEY_CTRLX(KEY_CTRL('x')), KEY_NONE, "exchange-point-and-mark",
do_exchange_point_and_mark)
CMD1( KEY_META('l'), KEY_NONE, "downcase-word", do_changecase_word, 0)
CMD1( KEY_META('u'), KEY_NONE, "upcase-word", do_changecase_word, 1)
CMD1( KEY_CTRLX(KEY_CTRL('l')), KEY_NONE, "downcase-region",
@ -74,6 +80,8 @@ CmdDef basic_commands[] = {
CMD0( KEY_CTRLX('('), KEY_NONE, "start-kbd-macro", do_start_macro)
CMD0( KEY_CTRLX(')'), KEY_NONE, "end-kbd-macro", do_end_macro)
CMD0( KEY_CTRLX('e'), KEY_NONE, "call-last-kbd-macro", do_call_macro)
CMD_( KEY_NONE, KEY_NONE, "global-set-key", do_global_set_key,
"s{Set key globally: }s{command: }[command]|command|")
/* window handling */
CMD0( KEY_CTRLX('o'), KEY_NONE, "other-window", do_other_window)
@ -84,49 +92,66 @@ CmdDef basic_commands[] = {
CMD0( KEY_CTRL('x'), KEY_LEFT, "next-window", do_other_window)
CMD0( KEY_CTRL('x'), KEY_RIGHT, "next-window", do_other_window)
CMD1( KEY_CTRLX('0'), KEY_NONE, "delete-window", do_delete_window, 0)
CMD0( KEY_CTRLX('1'), KEY_NONE, "delete-other-windows", do_delete_other_windows)
CMD1( KEY_CTRLX('2'), KEY_NONE, "split-window-vertically", do_split_window, 0)
CMD1( KEY_CTRLX('3'), KEY_NONE, "split-window-horizontally", do_split_window, 1)
CMD0( KEY_CTRLX('1'), KEY_NONE, "delete-other-windows",
do_delete_other_windows)
CMD1( KEY_CTRLX('2'), KEY_NONE, "split-window-vertically",
do_split_window, 0)
CMD1( KEY_CTRLX('3'), KEY_NONE, "split-window-horizontally",
do_split_window, 1)
/* help */
CMD0( KEY_CTRLH(KEY_CTRL('h')), KEY_F1, "help-for-help", do_help_for_help)
CMD0( KEY_CTRLH('b'), KEY_NONE, "describe-bindings",
do_describe_bindings)
CMD0( KEY_CTRLH('b'), KEY_NONE, "describe-bindings", do_describe_bindings)
CMD0( KEY_CTRLH('c'), KEY_NONE, "describe-key-briefly",
do_describe_key_briefly)
/* international */
CMD( KEY_CTRLXRET('f'), KEY_NONE, "set-buffer-file-coding-system\0s{Charset: }[charset]",
do_set_buffer_file_coding_system)
CMD( KEY_NONE, KEY_NONE, "convert-buffer-file-coding-system\0s{Charset: }[charset]",
do_convert_buffer_file_coding_system)
CMD_( KEY_CTRLXRET('f'), KEY_NONE, "set-buffer-file-coding-system",
do_set_buffer_file_coding_system,
"s{Charset: }[charset]")
CMD_( KEY_NONE, KEY_NONE, "convert-buffer-file-coding-system",
do_convert_buffer_file_coding_system,
"s{Charset: }[charset]")
CMD0( KEY_CTRLXRET('b'), KEY_NONE, "toggle-bidir", do_toggle_bidir)
CMD( KEY_CTRLXRET(KEY_CTRL('\\')), KEY_NONE,
"set-input-method\0s{Input method: }[input]", do_set_input_method)
CMD_( KEY_CTRLXRET(KEY_CTRL('\\')), KEY_NONE, "set-input-method",
do_set_input_method,
"s{Input method: }[input]")
CMD0( KEY_CTRL('\\'), KEY_NONE,
"switch-input-method", do_switch_input_method)
/* styles & display */
CMD( KEY_NONE, KEY_NONE, "define-color\0s{Color name: }[color]|color|s{Color value: }", do_define_color)
CMD( KEY_NONE, KEY_NONE, "set-style\0s{Style: }[style]|style|s{CSS Property Name: }s{CSS Property Value: }", do_set_style)
CMD( KEY_NONE, KEY_NONE, "set-display-size\0i{Width: }i{Height: }", do_set_display_size)
CMD( KEY_NONE, KEY_NONE, "set-system-font\0ss", do_set_system_font)
CMD0( KEY_CTRLX('f'), KEY_NONE, "toggle-full-screen", do_toggle_full_screen)
CMD_( KEY_NONE, KEY_NONE, "define-color", do_define_color,
"s{Color name: }[color]|color|s{Color value: }")
CMD_( KEY_NONE, KEY_NONE, "set-style", do_set_style,
"s{Style: }[style]|style|s{CSS Property Name: }"
"s{CSS Property Value: }")
CMD_( KEY_NONE, KEY_NONE, "set-display-size", do_set_display_size,
"i{Width: }i{Height: }")
CMD_( KEY_NONE, KEY_NONE, "set-system-font", do_set_system_font,
"s{Font family: }s{System fonts: }")
CMD0( KEY_CTRLX('f'), KEY_NONE, "toggle-full-screen",
do_toggle_full_screen)
CMD0( KEY_NONE, KEY_NONE, "toggle-mode-line", do_toggle_mode_line)
CMD( KEY_NONE, KEY_NONE, "parse-config-file\0s{Configuration file: }[file]|file|", parse_config)
/* other stuff */
CMD_( KEY_NONE, KEY_NONE, "parse-config-file", parse_config,
"s{Configuration file: }[file]|file|")
CMD_( KEY_NONE, KEY_NONE, "load-qerc", do_load_qerc,
"s{path: }[file]|file|")
/* non standard mappings */
CMD0( KEY_CTRLXRET('l'), KEY_NONE, "toggle-line-numbers", do_line_numbers)
CMD0( KEY_CTRLXRET('t'), KEY_NONE, "truncate-lines", do_line_truncate )
CMD0( KEY_CTRLXRET('w'), KEY_NONE, "word-wrap", do_word_wrap)
CMD1( KEY_NONE, KEY_NONE, "set-backspace-is-control-h", do_set_backspace_is_control_h, 1)
CMD1( KEY_NONE, KEY_NONE, "toggle-control-h", do_toggle_control_h, 0)
/* tab & indent */
CMD( KEY_NONE, KEY_NONE, "set-tab-width\0i{Tab width: }", do_set_tab_width)
CMD( KEY_NONE, KEY_NONE, "set-indent-width\0i{Indent width: }",
do_set_indent_width)
CMD( KEY_NONE, KEY_NONE, "set-indent-tabs-mode\0i{Indent tabs mode (0 or 1): }",
do_set_indent_tabs_mode)
CMD_( KEY_NONE, KEY_NONE, "set-tab-width", do_set_tab_width,
"i{Tab width: }")
CMD_( KEY_NONE, KEY_NONE, "set-indent-width", do_set_indent_width,
"i{Indent width: }")
CMD_( KEY_NONE, KEY_NONE, "set-indent-tabs-mode", do_set_indent_tabs_mode,
"i{Indent tabs mode (0 or 1): }")
CMD_DEF_END,
};

View file

@ -251,7 +251,7 @@ static void tty_emulate(ShellState *s, int c)
int i, offset, offset1, offset2, n;
unsigned char buf1[10];
switch(s->state) {
switch (s->state) {
case TTY_STATE_NORM:
switch(c) {
case 8:
@ -900,7 +900,8 @@ static CmdDef shell_commands[] = {
/* compilation commands */
static CmdDef compile_commands[] = {
CMD( KEY_CTRLX(KEY_CTRL('e')), KEY_NONE, "compile\0s{Compile command: }", do_compile)
CMD_( KEY_CTRLX(KEY_CTRL('e')), KEY_NONE, "compile", do_compile,
"s{Compile command: }|compile|")
CMD1( KEY_CTRLX(KEY_CTRL('p')), KEY_NONE, "previous-error",
do_compile_error, -1)
CMD1( KEY_CTRLX(KEY_CTRL('n')), KEY_NONE, "next-error",

14
tty.c
View file

@ -77,6 +77,7 @@ static int term_init(QEditScreen *s, int w, int h)
TTYState *ts;
struct termios tty;
struct sigaction sig;
char *term;
memcpy(&s->dpy, &tty_dpy, sizeof(QEDisplay));
@ -135,6 +136,19 @@ static int term_init(QEditScreen *s, int w, int h)
set_read_handler(0, tty_read_handler, s);
tty_resize(0);
/* Test TERM env var:
* linux and xterm -> kbs=\177
* ansi cygwin vt100 -> kbs=^H
*/
term = getenv("TERM");
if (term) {
if (strstart(term, "ansi", NULL) ||
strstart(term, "cygwin", NULL) ||
strstart(term, "vt", NULL)) {
do_toggle_control_h(NULL, 1);
}
}
return 0;
}