Revert "Fix viper undo breakage from undo-boundary changes"
This reverts commit c0139e32f1
.
This commit is contained in:
parent
6921f4a596
commit
291fe0aade
3 changed files with 43 additions and 32 deletions
|
@ -631,7 +631,7 @@
|
|||
(viper-over-whitespace-line))
|
||||
(indent-to-left-margin))
|
||||
(viper-add-newline-at-eob-if-necessary)
|
||||
(viper-complete-complex-command-for-undo)
|
||||
(viper-adjust-undo)
|
||||
|
||||
(if (eq viper-current-state 'emacs-state)
|
||||
(viper-restore-cursor-color 'after-emacs-mode)
|
||||
|
@ -1570,7 +1570,7 @@ If the prefix argument ARG is non-nil, it is used instead of `val'."
|
|||
(if (and (eolp) (not (bolp)))
|
||||
(backward-char 1))
|
||||
))
|
||||
(viper-complete-complex-command-for-undo) ; take care of undo
|
||||
(viper-adjust-undo) ; take care of undo
|
||||
;; If the prev cmd was rotating the command ring, this means that `.' has
|
||||
;; just executed a command from that ring. So, push it on the ring again.
|
||||
;; If we are just executing previous command , then don't push viper-d-com
|
||||
|
@ -1671,7 +1671,6 @@ invokes the command before that, etc."
|
|||
|
||||
(undo-start)
|
||||
(undo-more 2)
|
||||
(viper-complete-complex-command-for-undo)
|
||||
;;(setq undo-beg-posn (or undo-beg-posn (point))
|
||||
;; undo-end-posn (or undo-end-posn (point)))
|
||||
;;(setq undo-beg-posn (or undo-beg-posn before-undo-pt)
|
||||
|
@ -1711,17 +1710,37 @@ invokes the command before that, etc."
|
|||
;; The following two functions are used to set up undo properly.
|
||||
;; In VI, unlike Emacs, if you open a line, say, and add a bunch of lines,
|
||||
;; they are undone all at once.
|
||||
(defun viper-complete-complex-command-for-undo ()
|
||||
(setq undo-auto-disable-boundaries nil)
|
||||
(setq viper-undo-in-complex-command nil)
|
||||
(undo-boundary))
|
||||
(defun viper-adjust-undo ()
|
||||
(if viper-undo-needs-adjustment
|
||||
(let ((inhibit-quit t)
|
||||
tmp tmp2)
|
||||
(setq viper-undo-needs-adjustment nil)
|
||||
(if (listp buffer-undo-list)
|
||||
(if (setq tmp (memq viper-buffer-undo-list-mark buffer-undo-list))
|
||||
(progn
|
||||
(setq tmp2 (cdr tmp)) ; the part after mark
|
||||
|
||||
;; cut tail from buffer-undo-list temporarily by direct
|
||||
;; manipulation with pointers in buffer-undo-list
|
||||
(setcdr tmp nil)
|
||||
|
||||
(setq buffer-undo-list (delq nil buffer-undo-list))
|
||||
(setq buffer-undo-list
|
||||
(delq viper-buffer-undo-list-mark buffer-undo-list))
|
||||
;; restore tail of buffer-undo-list
|
||||
(setq buffer-undo-list (nconc buffer-undo-list tmp2)))
|
||||
(setq buffer-undo-list (delq nil buffer-undo-list)))))
|
||||
))
|
||||
|
||||
|
||||
(defun viper-set-complex-command-for-undo ()
|
||||
(when (not viper-undo-in-complex-command)
|
||||
(setq undo-auto-disable-boundaries t)
|
||||
(setq viper-undo-in-complex-command t)
|
||||
(undo-boundary)))
|
||||
(if (listp buffer-undo-list)
|
||||
(if (not viper-undo-needs-adjustment)
|
||||
(let ((inhibit-quit t))
|
||||
(setq buffer-undo-list
|
||||
(cons viper-buffer-undo-list-mark buffer-undo-list))
|
||||
(setq viper-undo-needs-adjustment t)))))
|
||||
|
||||
|
||||
;;; Viper's destructive Command ring utilities
|
||||
|
||||
|
@ -2585,7 +2604,7 @@ These keys are ESC, RET, and LineFeed."
|
|||
(delete-char 1 t)
|
||||
(insert char))
|
||||
|
||||
(viper-complete-complex-command-for-undo)
|
||||
(viper-adjust-undo)
|
||||
(backward-char arg)
|
||||
))
|
||||
|
||||
|
|
|
@ -370,8 +370,13 @@ Use `\\[viper-set-expert-level]' to change this.")
|
|||
;; VI-style Undo
|
||||
|
||||
;; Used to 'undo' complex commands, such as replace and insert commands.
|
||||
(viper-deflocalvar viper-undo-in-complex-command nil)
|
||||
(put 'viper-undo-in-complex-command 'permanent-local t)
|
||||
(viper-deflocalvar viper-undo-needs-adjustment nil)
|
||||
(put 'viper-undo-needs-adjustment 'permanent-local t)
|
||||
|
||||
;; A mark that Viper puts on buffer-undo-list. Marks the beginning of a
|
||||
;; complex command that must be undone atomically. If inserted, it is
|
||||
;; erased by viper-change-state-to-vi and viper-repeat.
|
||||
(defconst viper-buffer-undo-list-mark 'viper)
|
||||
|
||||
(defcustom viper-keep-point-on-undo nil
|
||||
"Non-nil means not to move point while undoing commands.
|
||||
|
|
|
@ -2839,18 +2839,6 @@ buffers that were changed during the last command.")
|
|||
|
||||
If set to non-nil, this will effectively disable the timer.")
|
||||
|
||||
(defvar-local undo-auto-disable-boundaries nil
|
||||
"Disable the automatic addition of boundaries.
|
||||
|
||||
If set to non-nil, `undo-boundary' will not be called
|
||||
automatically in a buffer either at the end of a command, or as a
|
||||
result of `undo-auto-current-boundary-timer'.
|
||||
|
||||
When this is set to non-nil, it is important to ensure that
|
||||
`undo-boundary' is called frequently enough. Failure to do so
|
||||
will result in user-visible warnings that the situation is
|
||||
probably a bug.")
|
||||
|
||||
(defvar undo-auto--this-command-amalgamating nil
|
||||
"Non-nil if `this-command' should be amalgamated.
|
||||
This variable is set to nil by `undo-auto--boundaries' and is set
|
||||
|
@ -2890,8 +2878,7 @@ REASON describes the reason that the boundary is being added; see
|
|||
(dolist (b undo-auto--undoably-changed-buffers)
|
||||
(when (buffer-live-p b)
|
||||
(with-current-buffer b
|
||||
(unless undo-auto-disable-boundaries
|
||||
(undo-auto--ensure-boundary cause)))))
|
||||
(undo-auto--ensure-boundary cause))))
|
||||
(setq undo-auto--undoably-changed-buffers nil))
|
||||
|
||||
(defun undo-auto--boundary-timer ()
|
||||
|
@ -2916,10 +2903,10 @@ default values.")
|
|||
"Add an `undo-boundary' in appropriate buffers."
|
||||
(undo-auto--boundaries
|
||||
(let ((amal undo-auto--this-command-amalgamating))
|
||||
(setq undo-auto--this-command-amalgamating nil)
|
||||
(if amal
|
||||
'amalgamate
|
||||
'command))))
|
||||
(setq undo-auto--this-command-amalgamating nil)
|
||||
(if amal
|
||||
'amalgamate
|
||||
'command))))
|
||||
|
||||
(defun undo-auto-amalgamate ()
|
||||
"Amalgamate undo if necessary.
|
||||
|
|
Loading…
Add table
Reference in a new issue