1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-05 11:45:45 +00:00

Optionally, undo several consequential deletion in one step.

* lisp/simple.el (kill-append): Remove undo boundary depending on ...
(kill-append-merge-undo): New user option.
This commit is contained in:
Sam Steingold 2014-06-23 16:23:33 -04:00
parent 5d2638bd31
commit 2fde356acb
2 changed files with 26 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2014-06-23 Sam Steingold <sds@gnu.org>
* simple.el (kill-append): Remove undo boundary depending on ...
(kill-append-merge-undo): New user option.
2014-06-23 Stefan Monnier <monnier@iro.umontreal.ca>
* simple.el (handle-shift-selection, exchange-point-and-mark)

View File

@ -3742,14 +3742,34 @@ argument should still be a \"useful\" string for such uses."
(if interprogram-cut-function
(funcall interprogram-cut-function string)))
;; It has been argued that this should work similar to `self-insert-command'
;; which merges insertions in undo-list in groups of 20 (hard-coded in cmds.c).
(defcustom kill-append-merge-undo nil
"Whether appending to kill ring also makes \\[undo] restore both pieces of text simultaneously."
:type 'boolean
:group 'killing
:version "24.5")
(defun kill-append (string before-p)
"Append STRING to the end of the latest kill in the kill ring.
If BEFORE-P is non-nil, prepend STRING to the kill.
Also removes the last undo boundary in the current buffer,
depending on `kill-append-merge-undo'.
If `interprogram-cut-function' is set, pass the resulting kill to it."
(let* ((cur (car kill-ring)))
(kill-new (if before-p (concat string cur) (concat cur string))
(or (= (length cur) 0)
(equal nil (get-text-property 0 'yank-handler cur))))))
(equal nil (get-text-property 0 'yank-handler cur))))
(when (and kill-append-merge-undo (not buffer-read-only))
(let ((prev buffer-undo-list)
(next (cdr buffer-undo-list)))
;; find the next undo boundary
(while (car next)
(pop next)
(pop prev))
;; remove this undo boundary
(when prev
(setcdr prev (cdr next)))))))
(defcustom yank-pop-change-selection nil
"Whether rotating the kill ring changes the window system selection.