[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r117384: Optionally, undo several consequential dele
From: |
Sam Steingold |
Subject: |
[Emacs-diffs] trunk r117384: Optionally, undo several consequential deletion in one step. |
Date: |
Mon, 23 Jun 2014 20:23:36 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117384
revision-id: address@hidden
parent: address@hidden
committer: Sam Steingold <address@hidden>
branch nick: trunk
timestamp: Mon 2014-06-23 16:23:33 -0400
message:
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.
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/simple.el simple.el-20091113204419-o5vbwnq5f7feedwu-403
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2014-06-23 15:32:24 +0000
+++ b/lisp/ChangeLog 2014-06-23 20:23:33 +0000
@@ -1,3 +1,8 @@
+2014-06-23 Sam Steingold <address@hidden>
+
+ * simple.el (kill-append): Remove undo boundary depending on ...
+ (kill-append-merge-undo): New user option.
+
2014-06-23 Stefan Monnier <address@hidden>
* simple.el (handle-shift-selection, exchange-point-and-mark)
=== modified file 'lisp/simple.el'
--- a/lisp/simple.el 2014-06-23 15:32:24 +0000
+++ b/lisp/simple.el 2014-06-23 20:23:33 +0000
@@ -3742,14 +3742,34 @@
(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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117384: Optionally, undo several consequential deletion in one step.,
Sam Steingold <=