Merge 08e0259bf9
into d3b497db31
This commit is contained in:
commit
e7c4198811
|
@ -40,6 +40,15 @@
|
||||||
|
|
||||||
(defvar vterm--process)
|
(defvar vterm--process)
|
||||||
|
|
||||||
|
(defcustom evil-collection-vterm-prompt-line-continuation t
|
||||||
|
"Make movements within prompt behave like it was one line.
|
||||||
|
This option becomes relevant when the command in prompt is so long that it wraps
|
||||||
|
to multiple lines. If the value is `t', movements such as `h', `l', `^', `$',
|
||||||
|
etc allows to move between lines (like it would be in any other terminal
|
||||||
|
emulator outside of Emacs or in Vterm without Evil)."
|
||||||
|
:type 'boolean
|
||||||
|
:group 'vterm)
|
||||||
|
|
||||||
(defun evil-collection-vterm-escape-stay ()
|
(defun evil-collection-vterm-escape-stay ()
|
||||||
"Go back to normal state but don't move cursor backwards.
|
"Go back to normal state but don't move cursor backwards.
|
||||||
Moving cursor backwards is the default vim behavior but
|
Moving cursor backwards is the default vim behavior but
|
||||||
|
@ -74,10 +83,18 @@ also uses `evil-mode'."
|
||||||
"Move the cursor to the first non-blank character
|
"Move the cursor to the first non-blank character
|
||||||
after the prompt."
|
after the prompt."
|
||||||
:type exclusive
|
:type exclusive
|
||||||
(if (vterm-cursor-in-command-buffer-p (point))
|
(if (and evil-collection-vterm-prompt-line-continuation
|
||||||
|
(vterm-cursor-in-command-buffer-p (point)))
|
||||||
(vterm-beginning-of-line)
|
(vterm-beginning-of-line)
|
||||||
(evil-first-non-blank)))
|
(evil-first-non-blank)))
|
||||||
|
|
||||||
|
(evil-define-motion evil-collection-vterm-end-of-line (count)
|
||||||
|
"Move the cursor to the end of the current line."
|
||||||
|
:type inclusive
|
||||||
|
(if evil-collection-vterm-prompt-line-continuation
|
||||||
|
(vterm-end-of-line)
|
||||||
|
(evil-end-of-line count)))
|
||||||
|
|
||||||
(defun evil-collection-vterm-insert ()
|
(defun evil-collection-vterm-insert ()
|
||||||
"Insert character before cursor."
|
"Insert character before cursor."
|
||||||
(interactive)
|
(interactive)
|
||||||
|
@ -223,6 +240,28 @@ But don't allow the cursor to move bellow the last prompt line."
|
||||||
(when (> (count-words (point) (point-max)) 0)
|
(when (> (count-words (point) (point-max)) 0)
|
||||||
(evil-next-line count)))
|
(evil-next-line count)))
|
||||||
|
|
||||||
|
(evil-define-motion evil-collection-vterm-forward-char
|
||||||
|
(count &optional crosslines noerror)
|
||||||
|
"Move cursor to the right by COUNT characters, bypassing line wraps."
|
||||||
|
:type exclusive
|
||||||
|
(if (and evil-collection-vterm-prompt-line-continuation
|
||||||
|
(get-text-property (1+ (point)) 'vterm-line-wrap))
|
||||||
|
(forward-char 2)
|
||||||
|
(evil-forward-char count crosslines noerror)))
|
||||||
|
|
||||||
|
(evil-define-motion evil-collection-vterm-backward-char
|
||||||
|
(count &optional crosslines noerror)
|
||||||
|
"Move cursor to the left by COUNT characters, bypassing line wraps."
|
||||||
|
:type exclusive
|
||||||
|
;; Check if one character to the left is a vterm's line wrap.
|
||||||
|
;; The `bobp' part is a special case for the first row and first character
|
||||||
|
;; of the buffer - `evil-backward-char' would throw an error otherwise.
|
||||||
|
(if (and evil-collection-vterm-prompt-line-continuation
|
||||||
|
(get-text-property (1- (point)) 'vterm-line-wrap)
|
||||||
|
(not (bobp)))
|
||||||
|
(forward-char -1)
|
||||||
|
(evil-backward-char count crosslines noerror)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun evil-collection-vterm-setup ()
|
(defun evil-collection-vterm-setup ()
|
||||||
"Set up `evil' bindings for `vterm'."
|
"Set up `evil' bindings for `vterm'."
|
||||||
|
@ -265,12 +304,10 @@ But don't allow the cursor to move bellow the last prompt line."
|
||||||
"P" 'vterm-yank
|
"P" 'vterm-yank
|
||||||
"a" 'evil-collection-vterm-append
|
"a" 'evil-collection-vterm-append
|
||||||
"A" 'evil-collection-vterm-append-line
|
"A" 'evil-collection-vterm-append-line
|
||||||
"d" 'evil-collection-vterm-delete
|
|
||||||
"D" 'evil-collection-vterm-delete-line
|
"D" 'evil-collection-vterm-delete-line
|
||||||
"x" 'evil-collection-vterm-delete-char
|
"x" 'evil-collection-vterm-delete-char
|
||||||
"X" 'evil-collection-vterm-delete-backward-char
|
"X" 'evil-collection-vterm-delete-backward-char
|
||||||
(kbd "RET") 'vterm-send-return
|
(kbd "RET") 'vterm-send-return
|
||||||
"^" 'evil-collection-vterm-first-non-blank
|
|
||||||
"i" 'evil-collection-vterm-insert
|
"i" 'evil-collection-vterm-insert
|
||||||
"I" 'evil-collection-vterm-insert-line
|
"I" 'evil-collection-vterm-insert-line
|
||||||
"u" 'vterm-undo
|
"u" 'vterm-undo
|
||||||
|
@ -282,8 +319,15 @@ But don't allow the cursor to move bellow the last prompt line."
|
||||||
"G" 'vterm-reset-cursor-point)
|
"G" 'vterm-reset-cursor-point)
|
||||||
|
|
||||||
(evil-collection-define-key 'visual 'vterm-mode-map
|
(evil-collection-define-key 'visual 'vterm-mode-map
|
||||||
|
"x" 'evil-collection-vterm-delete-backward-char)
|
||||||
|
|
||||||
|
(evil-collection-define-key '(normal visual) 'vterm-mode-map
|
||||||
"d" 'evil-collection-vterm-delete
|
"d" 'evil-collection-vterm-delete
|
||||||
"x" 'evil-collection-vterm-delete-backward-char))
|
"l" 'evil-collection-vterm-forward-char
|
||||||
|
"h" 'evil-collection-vterm-backward-char
|
||||||
|
"$" 'evil-collection-vterm-end-of-line
|
||||||
|
"^" 'evil-collection-vterm-first-non-blank))
|
||||||
|
|
||||||
|
|
||||||
(provide 'evil-collection-vterm)
|
(provide 'evil-collection-vterm)
|
||||||
;;; evil-collection-vterm.el ends here
|
;;; evil-collection-vterm.el ends here
|
||||||
|
|
Loading…
Reference in New Issue