So, I am writing a function to italize/unitalize the current line (without the surrounding blanks) by surrounding it with slashes /
.
(defun my-italize-line-dwim ()
(interactive)
(save-excursion
(if (and (progn (evil-last-non-blank) (equal (following-char) ?/))
(progn (back-to-indentation) (equal (following-char) ?/)))
(progn (delete-char 1) (evil-last-non-blank) (delete-char 1))
(progn (back-to-indentation)
(insert "/")
(evil-last-non-blank)
(evil-append 1)
(insert "/")
(evil-normal-state t)))))
While this may seem to work, there are some problems. If I want to use undo after the operation, undo-tree-undo
undoes slashes one by one, instead of both at once. What's more, going to the previous line always means the cursor will jump to its first character. I feel like there should be a way to avoid both problems by somehow "atomizing" the operation, maybe by doing a copy/replace of the whole line at once. How should this be done?