Am Sun, 2 Oct 2011 23:16:06 -0400 schrieb York Zhao <[email protected]>:
Hi,
I've been straggling with this for the entire afternoon and am really really frustrated. What I want is that when deleting an empty line, I don't want it to be yanked, just delete.
So I adviced `evil-delete' like this and it worked as I expected.
(defadvice evil-delete (around around-delete (beg end type register yank-handler) activate) (if (eq type 'line) (let (here) (save-excursion (goto-char beg) (skip-chars-forward " \n\t" end) (setq here (point))) (if (eq here end) (flet ((evil-yank (&rest args) t)) ad-do-it) ad-do-it)) ad-do-it))
However, as soon as I add another advice on `evil-yank', things stopped working correctly, even thougt the yank advice is empty like the following, things still not working properly.
(defadvice evil-yank (around around-yank (beg end type register yank-handler) activate) ad-do-it)
The problem is that after I deleted an empty line, I could no longer yank anything, whenever I yank I get the errer:
Debugger entered--Lisp error: (wrong-type-argument commandp evil-yank) call-interactively(evil-yank nil nil)
I do not know if this is indeed the solution, but `evil-yank' is in the end a usual Emacs command, i.e., it has an interactive-form. Your redefinition does not have an interactive form and is therefore not regarded as a command. Changing your code to ... (flet ((evil-yank (&rest args) (interactive) t)) ... may work. But I haven't tested it. Furthermore it may be easier to just call `delete-region' to remove those lines instead of redefining `evil-yank'. In fact, this is what `evil-delete' does. Frank