diff options
| author | Lukas Fürmetz <fuermetz@mailbox.org> | 2018-11-11 20:39:29 +0100 |
|---|---|---|
| committer | Lukas Fürmetz <fuermetz@mailbox.org> | 2018-11-11 21:23:48 +0100 |
| commit | f577d6131d1855581fd88b990e204e7d56be0212 (patch) | |
| tree | b84630e5360fe46dfb5bf6d7fd8b5c19885a8d85 | |
| parent | 3ff58ef1417c4a38270996d1265e423976b4fe17 (diff) | |
Bind all necessary keys in vterm-mode-map
| -rw-r--r-- | README.md | 12 | ||||
| -rw-r--r-- | vterm.el | 74 |
2 files changed, 41 insertions, 45 deletions
@@ -77,9 +77,13 @@ Open a terminal in another window. Shell to run in a new vterm. Defaults to `$SHELL`. -## `vterm-keymap-exceptions` +# Keybindings -List of keys, which should be processed by emacs and not by the terminal. +If you want a key to be send to the terminal bind it to `vterm--self-insert`, +otherwise remove it from `vterm-mode-map`. By default vterm.el binds most of the +`C-<char>` and `M-<char>` keys, `<f1>` through `<f12>` and some special keys +like `<backspace>` and `<return>`. Sending a keyboard interrupt is by default +bound to `C-c C-c`. ## Colors @@ -95,7 +99,3 @@ color you like: - vterm-color-magenta - vterm-color-cyan - vterm-color-white - -# Limitations - -- Mouse support is non-existing @@ -45,7 +45,7 @@ :type 'number :group 'vterm) -(defcustom vterm-keymap-exceptions '("C-x" "C-u" "C-g" "C-h" "M-x" "M-o" "C-v" "M-v") +(defcustom vterm-keymap-exceptions '("C-c" "C-x" "C-u" "C-g" "C-h" "M-x" "M-o" "C-v" "M-v") "Exceptions for vterm-keymap. If you use a keybinding with a prefix-key that prefix-key cannot @@ -129,33 +129,30 @@ be send to the terminal." :sentinel #'ignore)))) ;; Keybindings -;; (define-key vterm-mode-map [t] #'vterm--self-insert) -(define-key vterm-mode-map [mouse-1] nil) -(define-key vterm-mode-map [mouse-2] nil) -(define-key vterm-mode-map [mouse-3] nil) -(define-key vterm-mode-map [mouse-4] #'ignore) -(define-key vterm-mode-map [mouse-5] #'ignore) -(define-key vterm-mode-map [(tab)] #'vterm--self-insert) -(define-key vterm-mode-map (kbd "TAB") #'vterm--self-insert) -(define-key vterm-mode-map (kbd "<backspace>") #'vterm--self-insert) -(define-key vterm-mode-map (kbd "M-<backspace>") #'vterm--self-insert) -(define-key vterm-mode-map [left] #'vterm--self-insert) -(define-key vterm-mode-map [right] #'vterm--self-insert) -(define-key vterm-mode-map [up] #'vterm--self-insert) -(define-key vterm-mode-map [down] #'vterm--self-insert) -(define-key vterm-mode-map [home] #'vterm--self-insert) -(define-key vterm-mode-map [end] #'vterm--self-insert) -(define-key vterm-mode-map [escape] 'vterm--self-insert) -(define-key vterm-mode-map [remap self-insert-command] 'vterm--self-insert) - -(dolist (prefix '("M-" "C-")) - (dolist (char (cl-loop for char from ?a to ?z - collect char)) - (let ((key (concat prefix (char-to-string char)))) - (unless (cl-member key vterm-keymap-exceptions) - (define-key vterm-mode-map (kbd key) #'vterm--self-insert))))) -(dolist (exception vterm-keymap-exceptions) - (define-key vterm-mode-map (kbd exception) nil)) +(define-key vterm-mode-map [tab] #'vterm--self-insert) +(define-key vterm-mode-map [backspace] #'vterm--self-insert) +(define-key vterm-mode-map [M-backspace] #'vterm--self-insert) +(define-key vterm-mode-map [return] #'vterm--self-insert) +(define-key vterm-mode-map [left] #'vterm--self-insert) +(define-key vterm-mode-map [right] #'vterm--self-insert) +(define-key vterm-mode-map [up] #'vterm--self-insert) +(define-key vterm-mode-map [down] #'vterm--self-insert) +(define-key vterm-mode-map [home] #'vterm--self-insert) +(define-key vterm-mode-map [end] #'vterm--self-insert) +(define-key vterm-mode-map [escape] #'vterm--self-insert) +(define-key vterm-mode-map [remap self-insert-command] #'vterm--self-insert) +(define-key vterm-mode-map (kbd "C-c C-c") #'vterm-send-ctrl-c) + +;; Function keys and most of C- and M- bindings +(mapcar (lambda (key) + (define-key vterm-mode-map (kbd key) #'vterm--self-insert)) + (append (cl-loop for number from 1 to 12 + collect (format "<f%i>" number)) + (cl-loop for prefix in '("C-" "M-") + append (cl-loop for char from ?a to ?z + for key = (format "%s%c" prefix char) + unless (member key vterm-keymap-exceptions) + collect key)))) (defun vterm--self-insert () "Sends invoking key to libvterm." @@ -165,24 +162,23 @@ be send to the terminal." (shift (memq 'shift modifiers)) (meta (memq 'meta modifiers)) (ctrl (memq 'control modifiers))) - (when-let ((key (key-description (vector (event-basic-type last-input-event)))) - (inhibit-redisplay t) - (inhibit-read-only t)) - (when (equal modifiers '(shift)) - (setq key (upcase key))) - (vterm--update vterm--term key shift meta ctrl))))) - + (when-let ((key (key-description (vector (event-basic-type last-input-event))))) + (vterm-send-key key shift meta ctrl))))) (defun vterm-send-key (key &optional shift meta ctrl) - "Sends key to libvterm." + "Sends KEY to libvterm with optional modifiers SHIFT, META and CTRL." (when vterm--term - (let* ((inhibit-redisplay t) - (inhibit-read-only t) - (key key)) + (let ((inhibit-redisplay t) + (inhibit-read-only t)) (when (and shift (not meta) (not ctrl)) (setq key (upcase key))) (vterm--update vterm--term key shift meta ctrl)))) +(defun vterm-send-ctrl-c () + "Sends C-c to the libvterm." + (interactive) + (vterm-send-key "c" nil nil t)) + ;;;###autoload (defun vterm () "Create a new vterm." |
