qemacs-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemacs-commit] qemacs shell.c


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs shell.c
Date: Sat, 28 May 2016 10:34:17 +0000 (UTC)

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        16/05/28 10:34:17

Modified files:
        .              : shell.c 

Log message:
        shell: improve shell history handling
        
        - add shell_previous_next() function:
          - does previous/next command at shell prompt
          - moves by four lines elsewhere
        - bind shell-previous command on M-p
        - bind shell-next command on M-n
        - flag shell-kill-line, shell-kill-beginning-of-line, shell-yank,
          shell-enter, shell-backward-delete-char, shell-tabulate commands
          as modifying the buffer

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/shell.c?cvsroot=qemacs&r1=1.107&r2=1.108

Patches:
Index: shell.c
===================================================================
RCS file: /sources/qemacs/qemacs/shell.c,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -b -r1.107 -r1.108
--- shell.c     27 May 2016 18:20:30 -0000      1.107
+++ shell.c     28 May 2016 10:34:17 -0000      1.108
@@ -1635,6 +1635,21 @@
     }
 }
 
+static void shell_previous_next(EditState *e, int dir)
+{
+    ShellState *s = shell_get_state(e, 1);
+
+    if (s && e->interactive) {
+        /* hack: M-p silently converted to C-p */
+        tty_write(s, dir > 0 ? s->kcud1 : s->kcuu1, -1);
+    } else {
+        /* hack: M-p silently converted to C-u C-p */
+        text_move_up_down(e, dir * 4);
+        if (s && (s->shell_flags & SF_INTERACTIVE))
+            e->interactive = (e->offset == s->cur_offset);
+    }
+}
+
 static void shell_scroll_up_down(EditState *e, int dir)
 {
     ShellState *s = shell_get_state(e, 1);
@@ -2045,11 +2060,11 @@
 static CmdDef shell_commands[] = {
     CMD0( KEY_CTRL('o'), KEY_NONE,
           "shell-toggle-input", do_shell_toggle_input)
-    CMD0( '\r', KEY_NONE,
-          "shell-enter", do_shell_enter)
+    CMD2( '\r', KEY_NONE,
+          "shell-enter", do_shell_enter, ES, "*")
     /* CG: should send s->kbs */
-    CMD0( KEY_DEL, KEY_NONE,
-          "shell-backward-delete-char", do_shell_backspace)
+    CMD2( KEY_DEL, KEY_NONE,
+          "shell-backward-delete-char", do_shell_backspace, ES, "*")
     CMD0( KEY_CTRLC(KEY_CTRL('c')), KEY_NONE,   /* C-c C-c */
           "shell-intr", do_shell_intr)
     CMD2( KEY_CTRL('d'), KEY_DELETE,
@@ -2058,16 +2073,18 @@
           "shell-delete-word", do_shell_delete_word, ESi, 1, "*v")
     CMD3( KEY_META(KEY_DEL), KEY_META(KEY_BS) ,
           "shell-backward-delete-word", do_shell_delete_word, ESi, -1, "*v")
-    CMD2( KEY_META('p'), KEY_META('n'),
-          "shell-history-search", shell_write_char, ESi, "*ki")
-    CMD0( KEY_CTRL('i'), KEY_NONE,
-          "shell-tabulate", do_shell_tabulate)
-    CMD1( KEY_CTRL('k'), KEY_NONE,
-          "shell-kill-line", do_shell_kill_line, 1)
-    CMD1( KEY_META('k'), KEY_NONE,
-          "shell-kill-beginning-of-line", do_shell_kill_line, -1)
-    CMD0( KEY_CTRL('y'), KEY_NONE,
-          "shell-yank", do_shell_yank)
+    CMD1( KEY_META('p'), KEY_NONE,
+          "shell-previous", shell_previous_next, -1)
+    CMD1( KEY_META('n'), KEY_NONE,
+          "shell-next", shell_previous_next, -1)
+    CMD2( KEY_CTRL('i'), KEY_NONE,
+          "shell-tabulate", do_shell_tabulate, ES, "*")
+    CMD3( KEY_CTRL('k'), KEY_NONE,
+          "shell-kill-line", do_shell_kill_line, ESi, 1, "*v")
+    CMD3( KEY_META('k'), KEY_NONE,
+          "shell-kill-beginning-of-line", do_shell_kill_line, ESi, -1, "*v")
+    CMD2( KEY_CTRL('y'), KEY_NONE,
+          "shell-yank", do_shell_yank, ES, "*")
     CMD_DEF_END,
 };
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]