Commit 2fde356a authored by Sam Steingold's avatar Sam Steingold
Browse files

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.
parent 5d2638bd
2014-06-23 Sam Steingold <>
* simple.el (kill-append): Remove undo boundary depending on ...
(kill-append-merge-undo): New user option.
2014-06-23 Stefan Monnier <>
* simple.el (handle-shift-selection, exchange-point-and-mark)
......@@ -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.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment