From d80c03265714e7d8ea0d63cbbfc6a63930111559 Mon Sep 17 00:00:00 2001 From: "git@daemon.de" Date: Wed, 25 May 2016 14:16:42 +0200 Subject: [PATCH] fixed the other issue in #2: when deleting whitespace, continue with kill-word, as a side-effect, the order of kill funcs to be called is now customizable --- viking-mode.el | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/viking-mode.el b/viking-mode.el index 34632e1..9d7efab 100644 --- a/viking-mode.el +++ b/viking-mode.el @@ -210,7 +210,12 @@ deleted after the kill function, if any. Uses 'just-one-space." mark is set." :group 'viking-mode) +(defcustom viking-kill-funcs (list 'viking-kill-word 'viking-kill-line-from-point 'viking-kill-line 'viking-kill-paragraph 'viking-kill-buffer) + "The actual kill functions being called in a row starting with the first entry" + :group 'viking-mode) +;; internal copy +(defvar viking--current-killf ()) ;;;; Functions @@ -260,6 +265,7 @@ should be a point-moving function." (looking-at "[[:space:]]+") (eq (point) (line-end-position)))) + ;;;;; kill/delete wrappers (defun viking--kill-region (beg end) @@ -335,6 +341,17 @@ should be a point-moving function." (message "region deleted")) +(defun viking--killw (count) + "execute kill function from the list of kill functions in +'viking--current-killf, reset it to the contents of +'viking-kill-funcs if COUNT is 1 (thus the command key has been +pressed the first time in a row" + (if (eq count 1) ; start from scratch + (setq viking--current-killf viking-kill-funcs)) + (if viking--current-killf ; only call killer if not done killing + (funcall (pop viking--current-killf)))) + + ;;;;; Public interactive kill functions (defun viking-kill-word () @@ -345,11 +362,14 @@ If 'viking-greedy-kill is t, clean up spaces and newlines afterwards." (viking-kill-region) ;; region-kill can only happen on first C-d invokation ;; else normal processing - (if (viking--point-is-in-space) - (viking--kill-space) + (if (viking--point-is-in-space) + (progn + (viking--kill-space) + ;; reset kill func list: + (setq viking--current-killf viking-kill-funcs)) (progn (if (or (eq (point) (line-beginning-position)) - (looking-back "[ \t]")) + (memq (preceding-char) '(?\t ?\ ))) (viking--kill-word-right) (viking--kill-word-at-point) ) @@ -413,20 +433,14 @@ If 'viking-greedy-kill is t, clean up spaces and newlines afterwards." ;;;;; Primary key binding function + (defun viking-kill-thing-at-point() "Delete thing at point. Checks how many times the calling key has been pressed and runs the appropriate kill function then." (interactive) - (let* ((key-times (viking-last-key-repeats))) - (cond - ((eq key-times 5) (viking-kill-buffer)) - ((eq key-times 4) (viking-kill-paragraph)) - ((eq key-times 3) (viking-kill-line)) - ((eq key-times 2) (viking-kill-line-from-point)) - ((eq key-times 1) (viking-kill-word)) - ) - )) + (viking--killw (viking-last-key-repeats))) + ;;;; Interface ;;;###autoload