summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fe-text/gui-readline.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/fe-text/gui-readline.c b/src/fe-text/gui-readline.c
index 45e623c6..4bc6c494 100644
--- a/src/fe-text/gui-readline.c
+++ b/src/fe-text/gui-readline.c
@@ -35,6 +35,8 @@
#include <signal.h>
+#define CTRL(x) ((x) & 0x1f) /* Ctrl+x */
+
typedef void (*ENTRY_REDIRECT_KEY_FUNC) (int key, void *data, SERVER_REC *server, WI_ITEM_REC *item);
typedef void (*ENTRY_REDIRECT_ENTRY_FUNC) (const char *line, void *data, SERVER_REC *server, WI_ITEM_REC *item);
@@ -130,7 +132,7 @@ void handle_key(int key)
int c;
/* Quit if we get 5 CTRL-C's in a row. */
- if (key != 3)
+ if (key != CTRL('c'))
sigint_count = 0;
else if (++sigint_count >= 5)
raise(SIGTERM);
@@ -194,16 +196,17 @@ void handle_key(int key)
gui_entry_move_pos(-1);
break;
- case 21:
+ case CTRL('u'):
/* Ctrl-U, clear line */
g_free_not_null(savebuffer);
savebuffer = g_strdup(gui_entry_get_text());
gui_entry_set_text("");
break;
- case 25:
+ case CTRL('y'):
/* Ctrl-Y, write last ^U'd line */
- gui_entry_insert_text(savebuffer);
+ if (savebuffer != NULL)
+ gui_entry_insert_text(savebuffer);
break;
case 9:
key_pressed("Tab", NULL);
@@ -215,12 +218,12 @@ void handle_key(int key)
gui_entry_erase(1);
break;
- case 23:
+ case CTRL('w'):
/* C-w - erase word to the left of marker */
gui_entry_erase_word();
break;
- case 4:
+ case CTRL('d'):
case KEY_DC:
if (gui_entry_get_pos() < strlen(gui_entry_get_text())) {
gui_entry_move_pos(1);
@@ -228,7 +231,7 @@ void handle_key(int key)
}
break;
- case 11:
+ case CTRL('k'):
/* C-K - erase the rest of the line */
c = gui_entry_get_pos();
gui_entry_set_pos(strlen(gui_entry_get_text()));
@@ -238,11 +241,11 @@ void handle_key(int key)
case 0:
/* Ctrl-space - ignore */
break;
- case 1:
+ case CTRL('a'):
/* C-A, home */
gui_entry_set_pos(0);
break;
- case 5:
+ case CTRL('e'):
/* C-E, end */
gui_entry_set_pos(strlen(gui_entry_get_text()));
break;