branch: elpa/evil
commit 4b45f2619258374ebb34b07212806e77bc2997c3
Author: Axel Forsman <[email protected]>
Commit: Axel Forsman <[email protected]>
Format Normal mode "!" prompt as ".,.+N!"
---
evil-commands.el | 95 +++++++++++++++++++++++---------------------------------
evil-common.el | 26 +++++++---------
evil-ex.el | 7 ++---
evil-states.el | 21 +++++++------
4 files changed, 64 insertions(+), 85 deletions(-)
diff --git a/evil-commands.el b/evil-commands.el
index 0924885a5b..fb8263ba90 100644
--- a/evil-commands.el
+++ b/evil-commands.el
@@ -577,24 +577,24 @@ and jump to the corresponding one."
(evil-next-flyspell-error (- (or count 1))))
(evil-define-motion evil-previous-open-paren (count)
- "Go to [count] previous unmatched '('."
+ "Go to COUNT previous unmatched \"(\"."
:type exclusive
(evil-up-paren ?\( ?\) (- (or count 1))))
(evil-define-motion evil-next-close-paren (count)
- "Go to [count] next unmatched ')'."
+ "Go to COUNT next unmatched \")\"."
:type exclusive
(forward-char)
(evil-up-paren ?\( ?\) (or count 1))
(backward-char))
(evil-define-motion evil-previous-open-brace (count)
- "Go to [count] previous unmatched '{'."
+ "Go to COUNT previous unmatched \"{\"."
:type exclusive
(evil-up-paren ?{ ?} (- (or count 1))))
(evil-define-motion evil-next-close-brace (count)
- "Go to [count] next unmatched '}'."
+ "Go to COUNT next unmatched \"}\"."
:type exclusive
(forward-char)
(evil-up-paren ?{ ?} (or count 1))
@@ -631,7 +631,7 @@ Loop back to the top of buffer if the end is reached."
(goto-char (marker-position (cdar descending-markers)))))))))
(evil-define-motion evil-next-mark (count)
- "Go to [count] next lowercase mark."
+ "Go to COUNT next lowercase mark."
:keep-visual t
:repeat nil
:type exclusive
@@ -640,7 +640,7 @@ Loop back to the top of buffer if the end is reached."
(evil--next-mark t)))
(evil-define-motion evil-next-mark-line (count)
- "Go to [count] line of next lowercase mark after current line."
+ "Go to COUNT line of next lowercase mark after current line."
:keep-visual t
:repeat nil
:type exclusive
@@ -653,7 +653,7 @@ Loop back to the top of buffer if the end is reached."
(user-error "No marks in this buffer")))
(evil-define-motion evil-previous-mark (count)
- "Go to [count] previous lowercase mark."
+ "Go to COUNT previous lowercase mark."
:keep-visual t
:repeat nil
:type exclusive
@@ -662,7 +662,7 @@ Loop back to the top of buffer if the end is reached."
(evil--next-mark nil)))
(evil-define-motion evil-previous-mark-line (count)
- "Go to [count] line of previous lowercase mark before current line."
+ "Go to COUNT line of previous lowercase mark before current line."
:keep-visual t
:repeat nil
:type exclusive
@@ -1719,7 +1719,7 @@ of the block."
(forward-line -1)))
(evil-define-command evil-move (beg end address)
- "Move lines in BEG END below line given by ADDRESS."
+ "Move lines in BEG .. END below the line given by ADDRESS."
:motion evil-line-or-visual-line
(interactive "<r><addr>")
(unless (= (1+ address) (line-number-at-pos beg))
@@ -1849,25 +1849,19 @@ but doesn't insert or remove any spaces."
(evil-define-operator evil-ex-join (beg end &optional count bang)
"Join the selected lines with optional COUNT and BANG."
(interactive "<r><a><!>")
- (if (and count (not (string-match-p "^[1-9][0-9]*$" count)))
- (user-error "Invalid count")
- (let ((join-fn (if bang 'evil-join-whitespace 'evil-join)))
- (cond
- ((not count)
+ (let ((join-fn (if bang 'evil-join-whitespace 'evil-join)))
+ (if (not count)
;; without count - just join the given region
- (funcall join-fn beg end))
- (t
- ;; emulate vim's :join when count is given - start from the
- ;; end of the region and join COUNT lines from there
- (let* ((count-num (string-to-number count))
- (beg-adjusted (save-excursion
- (goto-char end)
- (forward-line -1)
- (point)))
- (end-adjusted (save-excursion
- (goto-char end)
- (line-beginning-position count-num))))
- (funcall join-fn beg-adjusted end-adjusted)))))))
+ (funcall join-fn beg end)
+ (unless (string-match-p "^[1-9][0-9]*$" count)
+ (user-error "Invalid count"))
+ ;; emulate Vim's :join when count is given - start from the
+ ;; end of the region and join COUNT lines from there
+ (save-excursion
+ (goto-char end)
+ (let ((beg-adjusted (line-beginning-position 0))
+ (end-adjusted (line-beginning-position (string-to-number
count))))
+ (funcall join-fn beg-adjusted end-adjusted))))))
(defun evil--ex-string-for-print (beg end linump borderline)
"Return a string to be printed by :print etc.
@@ -2724,7 +2718,7 @@ lines. This is the default behaviour for Visual-state
insertion."
(current-column)
vcount))
evil-insert-skip-empty-lines skip-empty-lines)
- (evil-insert-state 1)))
+ (evil-insert-state)))
(defun evil-append (count &optional vcount skip-empty-lines)
"Switch to Insert state just after point.
@@ -2814,7 +2808,7 @@ The insertion will be repeated COUNT times."
(unwind-protect
(when evil-auto-indent
(indent-according-to-mode))
- (evil-insert-state 1)))
+ (evil-insert-state)))
(evil-define-command evil-open-below (count)
"Insert a new line below point and switch to Insert state.
@@ -2831,7 +2825,7 @@ The insertion will be repeated COUNT times."
(unwind-protect
(when evil-auto-indent
(indent-according-to-mode))
- (evil-insert-state 1)))
+ (evil-insert-state)))
(defun evil--insert-line (count vcount non-blank-p)
"Switch to insert state at the beginning of the current line.
@@ -2860,7 +2854,7 @@ in the next VCOUNT - 1 lines below the current one."
(list (line-number-at-pos)
(if non-blank-p #'evil-first-non-blank
#'evil-beginning-of-line)
vcount)))
- (evil-insert-state 1))
+ (evil-insert-state))
(defun evil-insert-line (count &optional vcount)
"Switch to insert state at beginning of current line.
@@ -2898,7 +2892,7 @@ next VCOUNT - 1 lines below the current one."
(list (line-number-at-pos)
#'end-of-line
vcount)))
- (evil-insert-state 1))
+ (evil-insert-state))
(evil-define-command evil-insert-digraph (count)
"Insert COUNT digraphs."
@@ -3562,25 +3556,13 @@ output is displayed in its own buffer. If PREVIOUS is
non-nil,
the previous shell command is executed instead."
(interactive "<R><sh><!>")
(if (not (evil-ex-p))
- (let ((evil-ex-initial-input
- (if (and beg
- (not (evil-visual-state-p))
- (not current-prefix-arg))
- (let ((range (evil-range beg end type)))
- (evil-contract-range range)
- ;; TODO: this is not exactly the same as Vim, which
- ;; uses .,+count as range. However, this is easier
- ;; to achieve with the current implementation and
- ;; the very inconvenient range interface.
- ;;
- ;; TODO: the range interface really needs some
- ;; rework!
- (format
- "%d,%d!"
- (line-number-at-pos (evil-range-beginning range))
- (line-number-at-pos (evil-range-end range))))
- "!")))
- (call-interactively 'evil-ex))
+ (let ((current-prefix-arg
+ (if (or current-prefix-arg (evil-visual-state-p))
+ current-prefix-arg
+ (goto-char (min beg end))
+ (setq current-prefix-arg (count-lines beg end))))
+ (evil-ex-initial-input "!"))
+ (call-interactively #'evil-ex))
(when command
(setq command (evil-ex-replace-special-filenames command)))
(if (zerop (length command))
@@ -3588,8 +3570,7 @@ the previous shell command is executed instead."
(setq evil-previous-shell-command command))
(cond
((zerop (length command))
- (if previous (user-error "No previous shell command")
- (user-error "No shell command")))
+ (user-error "No%s shell command" (if previous " previous" "")))
(evil-ex-range
(if (not evil-display-shell-error-in-message)
(shell-command-on-region beg end command nil t)
@@ -3608,8 +3589,7 @@ the previous shell command is executed instead."
(display-message-or-buffer error-buffer))
(kill-buffer output-buffer)
(kill-buffer error-buffer)))))
- (t
- (shell-command command)))))
+ (t (shell-command command)))))
(evil-define-command evil-make (arg)
"Call a build command in the current directory.
@@ -3948,8 +3928,9 @@ reveal.el. OPEN-SPOTS is a local version of
`reveal-open-spots'."
(defun evil--ex-substitute-final-message (nreplaced flags)
"Display message according to replacements and flags.
-If FLAGS contains `p' or `#' and NREPLACED is more than 0, print the last line
-to the echo area. Otherwise, print the number of replacements made or found."
+If FLAGS contains \"p\" or \"#\" and NREPLACED is more than 0, print
+the last line to the echo area. Otherwise, print the number of
+replacements made or found."
(let ((replaced-any (< 0 nreplaced)))
(cond
((and replaced-any (memq ?p flags))
diff --git a/evil-common.el b/evil-common.el
index 145d12a313..7e6b568c24 100644
--- a/evil-common.el
+++ b/evil-common.el
@@ -2355,7 +2355,7 @@ The tracked insertion is set to `evil-last-insertion'."
"Save the characters defined by the region BEG and END in the kill-ring."
(let ((text (filter-buffer-substring beg end)))
(when yank-handler
- (setq text (propertize text 'yank-handler (list yank-handler))))
+ (put-text-property 0 (length text) 'yank-handler (list yank-handler)
text))
(when register
(evil-set-register register text))
(when evil-was-yanked-without-register
@@ -2365,17 +2365,16 @@ The tracked insertion is set to `evil-last-insertion'."
(defun evil-yank-lines (beg end &optional register yank-handler)
"Save the lines in the region BEG and END into the kill-ring."
- (let* ((text (filter-buffer-substring beg end))
- (yank-handler (list (or yank-handler
- #'evil-yank-line-handler)
- nil
- t)))
+ (let ((text (filter-buffer-substring beg end))
+ (yank-handler (list (or yank-handler #'evil-yank-line-handler)
+ nil
+ t)))
;; Ensure the text ends with a newline. This is required
;; if the deleted lines were the last lines in the buffer.
(when (or (zerop (length text))
(/= (aref text (1- (length text))) ?\n))
(setq text (concat text "\n")))
- (setq text (propertize text 'yank-handler yank-handler))
+ (put-text-property 0 (length text) 'yank-handler yank-handler text)
(when register
(evil-set-register register text))
(when evil-was-yanked-without-register
@@ -2393,13 +2392,12 @@ The tracked insertion is set to `evil-last-insertion'."
(setq lines (nreverse (cdr lines)))
;; `text' is used as default insert text when pasting this rectangle
;; in another program, e.g., using the X clipboard.
- (let* ((yank-handler (list (or yank-handler
- #'evil-yank-block-handler)
- lines
- t
- 'evil-delete-yanked-rectangle))
- (text (propertize (mapconcat #'identity lines "\n")
- 'yank-handler yank-handler)))
+ (let ((yank-handler (list (or yank-handler #'evil-yank-block-handler)
+ lines
+ t
+ #'evil-delete-yanked-rectangle))
+ (text (mapconcat #'identity lines "\n")))
+ (put-text-property 0 (length text) 'yank-handler yank-handler text)
(when register
(evil-set-register register text))
(when evil-was-yanked-without-register
diff --git a/evil-ex.el b/evil-ex.el
index 8157bd2df4..7b42930551 100644
--- a/evil-ex.el
+++ b/evil-ex.el
@@ -138,7 +138,7 @@ of the syntax.")
Given e.g. $4, return 4."
(when (symbolp obj)
(let ((str (symbol-name obj)))
- (when (string-match "\\$\\([0-9]+\\)" str)
+ (when (string-match "\\`\\$\\([0-9]+\\)\\'" str)
(string-to-number (match-string 1 str))))))
(defmacro evil-parser (grammar &rest entrypoints)
@@ -360,10 +360,9 @@ is appended to the line."
(let ((arg (prefix-numeric-value current-prefix-arg)))
(cond ((< arg 0) (setq arg (1+ arg)))
((> arg 0) (setq arg (1- arg))))
- (if (= arg 0) "."
- (format ".,.%+d" arg)))))
+ (if (= arg 0) "." (format ".,.%+d" arg)))))
evil-ex-initial-input)))
- (list (when (> (length s) 0) s))))
+ (list (unless (string= s "") s))))
(let ((evil-ex-current-buffer (current-buffer))
(evil-ex-previous-command (unless initial-input
(car evil-ex-history)))
diff --git a/evil-states.el b/evil-states.el
index 9c824ab592..450ad2b5a3 100644
--- a/evil-states.el
+++ b/evil-states.el
@@ -150,12 +150,12 @@ Handles the repeat-count of the insertion command."
(indent-according-to-mode)))
(evil-execute-repeat-info (cdr evil-insert-repeat-info))))
(when evil-insert-vcount
- (let ((buffer-invisibility-spec buffer-invisibility-spec))
- ;; make all lines hidden by hideshow temporarily visible
- (when (listp buffer-invisibility-spec)
- (setq buffer-invisibility-spec
- (cl-remove-if (lambda (x) (eq (or (car-safe x) x) 'hs))
- buffer-invisibility-spec)))
+ (let ((buffer-invisibility-spec
+ (if (listp buffer-invisibility-spec)
+ ;; make all lines hidden by hideshow temporarily visible
+ (cl-remove-if (lambda (x) (eq (or (car-safe x) x) 'hs))
+ buffer-invisibility-spec)
+ buffer-invisibility-spec)))
(cl-destructuring-bind (line col vcount) evil-insert-vcount
(save-excursion
(dotimes (v (1- vcount))
@@ -796,14 +796,15 @@ CORNER defaults to `upper-left'."
(let* ((point (or point (point)))
(mark (or mark (mark t)))
(corner (or corner
- (when (overlayp evil-visual-overlay)
+ (when evil-visual-overlay
(overlay-get evil-visual-overlay :corner))
'upper-left))
(point-col (evil-column point))
(mark-col (evil-column mark))
- (upperp (if (= (line-number-at-pos point) (line-number-at-pos mark))
- (memq corner '(upper-left upper-right))
- (< point mark)))
+ (upperp (if (save-excursion (goto-char (min point mark))
+ (search-forward "\n" (max point mark) t))
+ (< point mark)
+ (memq corner '(upper-left upper-right))))
(leftp (if (= point-col mark-col)
(memq corner '(upper-left lower-left))
(< point-col mark-col))))