diff options
| author | Evgeni Kolev <evgenysw@gmail.com> | 2017-04-27 23:25:10 -0700 |
|---|---|---|
| committer | Evgeni Kolev <evgenysw@gmail.com> | 2017-04-29 16:00:02 -0700 |
| commit | a6ef14e5e938ab7cb934c16740284f7000728810 (patch) | |
| tree | 2e18854bad9d0c5f5b6b92e8f86ed68304b73a34 /evil-types.el | |
| parent | f0684c1f6644a8c4e0e5fce50a1a04796555eaf1 (diff) | |
Add support for passing REGISTER and COUNT to :delete
Diffstat (limited to 'evil-types.el')
| -rw-r--r-- | evil-types.el | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/evil-types.el b/evil-types.el index 1729803..4695b80 100644 --- a/evil-types.el +++ b/evil-types.el @@ -370,6 +370,44 @@ If visual state is inactive then those values are nil." (when (evil-ex-p) (evil-ex-get-substitute-info evil-ex-argument t))) +(evil-define-interactive-code "<d/>" + "Ex delete argument." + (when (evil-ex-p) + (evil-ex-get-delete-info evil-ex-argument))) + +(defun evil-ex-get-delete-info (string) + "Parse STRING as a :delete argument. +Returns a list (REGISTER COUNT)." + (let* ((split-args (split-string (or string ""))) + (arg-count (length split-args)) + (arg0 (car split-args)) + (arg1 (cadr split-args)) + (number-regex "^[1-9][0-9]*$") + (register-regex "^[a-zA-Z]$") + (register nil) + (count nil)) + (cond + ;; :delete REGISTER or :delete COUNT + ((= arg-count 1) + (if (string-match-p number-regex arg0) + (setq count arg0) + (setq register arg0))) + ;; :delete REGISTER COUNT + ((eq arg-count 2) + (setq register arg0 + count arg1)) + ;; more than 2 args aren't allowed + ((> arg-count 2) + (user-error "Invalid use"))) + + (when (and register (not (string-match-p register-regex register))) + (user-error "Invalid register")) + (when (and count (not (string-match-p number-regex count))) + (user-error "Invalid count")) + + (list (if register (string-to-char register) nil) + (if count (string-to-number count) nil)))) + (provide 'evil-types) ;;; evil-types.el ends here |
