From 433d9ace74fbd35205c06bcef487bd3e5d41e6bb Mon Sep 17 00:00:00 2001 From: Michael Kifer Date: Sun, 22 Nov 2009 03:14:14 +0000 Subject: [PATCH] 2009-11-22 Michael Kifer * viper-cmd.el: use viper-last-command-char instead of last-command-char/last-command-event. (viper-prefix-arg-value): do correct conversion of event-char for XEmacs. * viper-util.el, viper.el: use viper-last-command-char instead of last-command-char/last-command-event. * ediff-init.el, ediff-mult.el, ediff-util.el: relpace last-command-char and last-command-event with (ediff-last-command-char) everywhere. * ediff-vers.el (ediff-rcs-get-output-buffer): make sure the buffer is created in fundamental mode. * ediff.el (ediff-version): revert the change of interactive-p to called-interactively-p. --- doc/misc/ChangeLog | 19 +++++++++++++++++++ lisp/ediff-init.el | 3 +++ lisp/ediff-mult.el | 4 ++-- lisp/ediff-util.el | 26 +++++++++++++------------- lisp/ediff-vers.el | 3 ++- lisp/ediff.el | 4 +++- lisp/emulation/viper-cmd.el | 27 +++++++++++++++++++-------- lisp/emulation/viper-util.el | 11 +++++++++-- lisp/emulation/viper.el | 5 ++++- 9 files changed, 74 insertions(+), 28 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 8d5dcc09a0b..00038eec491 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,22 @@ +2009-11-22 Michael Kifer + + * viper-cmd.el: use viper-last-command-char instead of + last-command-char/last-command-event. + (viper-prefix-arg-value): do correct conversion of event-char for + XEmacs. + + * viper-util.el, viper.el: use viper-last-command-char instead of + last-command-char/last-command-event. + + * ediff-init.el, ediff-mult.el, ediff-util.el: relpace + last-command-char and last-command-event with (ediff-last-command-char) everywhere. + + * ediff-vers.el (ediff-rcs-get-output-buffer): make sure the buffer is + created in fundamental mode. + + * ediff.el (ediff-version): revert the change of interactive-p to + called-interactively-p. + 2009-11-22 Jay Belanger * calc.texi (Radix modes): Discuss alternate bases for two's complement diff --git a/lisp/ediff-init.el b/lisp/ediff-init.el index d58008f9d12..09c62df631d 100644 --- a/lisp/ediff-init.el +++ b/lisp/ediff-init.el @@ -1551,6 +1551,9 @@ This default should work without changes." (if (eventp event-or-key) (event-key event-or-key) event-or-key) event-or-key)) +(defun ediff-last-command-char () + (ediff-event-key last-command-event)) + (defsubst ediff-frame-iconified-p (frame) (and (ediff-window-display-p) (frame-live-p frame) diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el index a1dfbded153..f2365f53060 100644 --- a/lisp/ediff-mult.el +++ b/lisp/ediff-mult.el @@ -2342,10 +2342,10 @@ If this is a session registry buffer then just bury it." This is used only for sessions that involve 2 or 3 files at the same time. ACTION is an optional argument that can be ?h, ?m, ?=, to mark for hiding, mark for operation, or simply indicate which are equal files. If it is nil, then -`last-command-event' is used to decide which action to take." +`(ediff-last-command-char)' is used to decide which action to take." (interactive) (if (null action) - (setq action last-command-event)) + (setq action (ediff-last-command-char))) (let ((list (cdr ediff-meta-list)) marked1 marked2 marked3 fileinfo1 fileinfo2 fileinfo3 elt) diff --git a/lisp/ediff-util.el b/lisp/ediff-util.el index a6247395eff..ea12ef7532a 100644 --- a/lisp/ediff-util.el +++ b/lisp/ediff-util.el @@ -1011,7 +1011,7 @@ of the current buffer." (interactive) (ediff-barf-if-not-control-buffer) (let ((ctl-buf (if (null buf) (current-buffer))) - (buf-type (ediff-char-to-buftype last-command-event))) + (buf-type (ediff-char-to-buftype (ediff-last-command-char)))) (or buf (ediff-recenter)) (or buf (setq buf (ediff-get-buffer buf-type))) @@ -1513,7 +1513,7 @@ the one half of the height of window-A." (error ediff-KILLED-VITAL-BUFFER)) (ediff-operate-on-windows - (if (memq last-command-event '(?v ?\C-v)) + (if (memq (ediff-last-command-char) '(?v ?\C-v)) 'scroll-up 'scroll-down) ;; calculate argument to scroll-up/down @@ -1561,7 +1561,7 @@ the width of the A/B/C windows." ;; interactively so that they set the window's min_hscroll. ;; Otherwise, automatic hscrolling will undo the effect of ;; hscrolling. - (if (= last-command-event ?<) + (if (= (ediff-last-command-char) ?<) (lambda (arg) (let ((prefix-arg arg)) (call-interactively 'scroll-left))) @@ -1825,7 +1825,7 @@ With a prefix argument, synchronize all files around the current point position in the specified buffer." (interactive "P") (ediff-barf-if-not-control-buffer) - (let* ((buf-type (ediff-char-to-buftype last-command-event)) + (let* ((buf-type (ediff-char-to-buftype (ediff-last-command-char))) (buffer (ediff-get-buffer buf-type)) (pt (ediff-with-current-buffer buffer (point))) (diff-no (ediff-diff-at-point buf-type nil (if arg 'after))) @@ -2161,13 +2161,13 @@ ARG is a prefix argument. If nil, copy the current difference region." "Restore ARGth diff from `ediff-killed-diffs-alist'. ARG is a prefix argument. If ARG is nil, restore the current-difference. If the second optional argument, a character, is given, use it to -determine the target buffer instead of last-command-event" +determine the target buffer instead of (ediff-last-command-char)" (interactive "P") (ediff-barf-if-not-control-buffer) (if (numberp arg) (ediff-jump-to-difference arg)) (ediff-pop-diff ediff-current-difference - (ediff-char-to-buftype (or key last-command-event))) + (ediff-char-to-buftype (or key (ediff-last-command-char)))) ;; recenter with rehighlighting, but no messages (let (ediff-verbose-p) (ediff-recenter))) @@ -2191,13 +2191,13 @@ a regular expression typed in by the user." (cond ((or (and (eq ediff-skip-diff-region-function ediff-focus-on-regexp-matches-function) - (eq last-command-event ?f)) + (eq (ediff-last-command-char) ?f)) (and (eq ediff-skip-diff-region-function ediff-hide-regexp-matches-function) - (eq last-command-event ?h))) + (eq (ediff-last-command-char) ?h))) (message "Selective browsing by regexp turned off") (setq ediff-skip-diff-region-function 'ediff-show-all-diffs)) - ((eq last-command-event ?h) + ((eq (ediff-last-command-char) ?h) (setq ediff-skip-diff-region-function ediff-hide-regexp-matches-function regexp-A (read-string @@ -2235,7 +2235,7 @@ a regular expression typed in by the user." (or (string= regexp-B "") (setq ediff-regexp-hide-B regexp-B)) (or (string= regexp-C "") (setq ediff-regexp-hide-C regexp-C))) - ((eq last-command-event ?f) + ((eq (ediff-last-command-char) ?f) (setq ediff-skip-diff-region-function ediff-focus-on-regexp-matches-function regexp-A @@ -3301,10 +3301,10 @@ Without an argument, it saves customized diff argument, if available (ediff-barf-if-not-control-buffer) (ediff-compute-custom-diffs-maybe) (ediff-with-current-buffer - (cond ((memq last-command-event '(?a ?b ?c)) + (cond ((memq (ediff-last-command-char) '(?a ?b ?c)) (ediff-get-buffer - (ediff-char-to-buftype last-command-event))) - ((eq last-command-event ?d) + (ediff-char-to-buftype (ediff-last-command-char)))) + ((eq (ediff-last-command-char) ?d) (message "Saving diff output ...") (sit-for 1) ; let the user see the message (cond ((and arg (ediff-buffer-live-p ediff-diff-buffer)) diff --git a/lisp/ediff-vers.el b/lisp/ediff-vers.el index b5c0c0bd942..0cc321ade33 100644 --- a/lisp/ediff-vers.el +++ b/lisp/ediff-vers.el @@ -136,7 +136,8 @@ comparison or merge operations are being performed." ;; Optional NAME is name to use instead of `*RCS-output*'. ;; This is a modified version from rcs.el v1.1. I use it here to make ;; Ediff immune to changes in rcs.el - (let ((buf (get-buffer-create name))) + (let* ((default-major-mode 'fundamental-mode) ; no frills! + (buf (get-buffer-create name))) (with-current-buffer buf (setq buffer-read-only nil default-directory (file-name-directory (expand-file-name file))) diff --git a/lisp/ediff.el b/lisp/ediff.el index 33f53130caf..ad2f3c0de2e 100644 --- a/lisp/ediff.el +++ b/lisp/ediff.el @@ -1451,7 +1451,9 @@ Uses `vc.el' or `rcs.el' depending on `ediff-version-control-package'." "Return string describing the version of Ediff. When called interactively, displays the version." (interactive) - (if (called-interactively-p 'interactive) + ;; called-interactively-p - not in XEmacs + ;; (if (called-interactively-p 'interactive) + (if (interactive-p) (message "%s" (ediff-version)) (format "Ediff %s of %s" ediff-version ediff-date))) diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el index fdaeb13f3e2..56fead09156 100644 --- a/lisp/emulation/viper-cmd.el +++ b/lisp/emulation/viper-cmd.el @@ -719,7 +719,7 @@ ARG is used as the prefix value for the executed command. If EVENTS is a list of events, which become the beginning of the command." (interactive "P") - (if (viper= last-command-event ?\\) + (if (viper= (viper-last-command-char) ?\\) (message "Switched to EMACS state for the next command...")) (viper-escape-to-state arg events 'emacs-state)) @@ -1181,7 +1181,10 @@ as a Meta key and any number of multiple escapes is allowed." ((eq event-char 'delete) (setq event-char ?\C-?)) ((eq event-char 'backspace) (setq event-char ?\C-h)) ((eq event-char 'space) (setq event-char ?\ ))) - (setq last-command-event (or com event-char)) + (setq last-command-event + (if (featurep 'xemacs) + (character-to-event (or com event-char)) + (or com event-char))) (setq func (viper-exec-form-in-vi `(key-binding (char-to-string ,event-char)))) (funcall func prefix-arg) @@ -1311,7 +1314,7 @@ as a Meta key and any number of multiple escapes is allowed." (interactive "P") (viper-leave-region-active) (viper-prefix-arg-value - last-command-event (if (consp arg) (cdr arg) nil))) + (viper-last-command-char) (if (consp arg) (cdr arg) nil))) (defun viper-command-argument (arg) "Accept a motion command as an argument." @@ -1319,7 +1322,7 @@ as a Meta key and any number of multiple escapes is allowed." (let ((viper-intermediate-command 'viper-command-argument)) (condition-case nil (viper-prefix-arg-com - last-command-event + (viper-last-command-char) (cond ((null arg) nil) ((consp arg) (car arg)) ((integerp arg) arg) @@ -2096,7 +2099,7 @@ Undo previous insertion and inserts new." "Exit minibuffer Viper way." (interactive) (let (command) - (setq command (local-key-binding (char-to-string last-command-event))) + (setq command (local-key-binding (char-to-string (viper-last-command-char)))) (run-hooks 'viper-minibuffer-exit-hook) (if command (command-execute command) @@ -3771,7 +3774,9 @@ If MAJOR-MODE is set, set the macros only in that major mode." "///" 'vi-state [2 (meta x) v i p e r - t o g g l e - s e a r c h - s t y l e return] scope) - (if (called-interactively-p 'interactive) + ;; XEmacs has no called-interactively-p + ;; (if (called-interactively-p 'interactive) + (if (interactive-p) (message "// and /// now toggle case-sensitivity and regexp search"))) (viper-unrecord-kbd-macro "//" 'vi-state) @@ -3794,7 +3799,10 @@ With a prefix argument, unsets the macro." "%%%" 'vi-state [(meta x) v i p e r - t o g g l e - p a r s e - s e x p - i g n o r e - c o m m e n t s return] 't) - (if (called-interactively-p 'interactive) + ;; XEmacs has no called-interactively-p. And interactive-p + ;; works fine here. + ;; (if (called-interactively-p 'interactive) + (if (interactive-p) (message "%%%%%% now toggles whether comments should be parsed for matching parentheses"))) (viper-unrecord-kbd-macro "%%%" 'vi-state)))) @@ -3823,7 +3831,10 @@ the macros are set in the current major mode. "///" 'emacs-state [2 (meta x) v i p e r - t o g g l e - s e a r c h - s t y l e return] (or arg-majormode major-mode)) - (if (called-interactively-p 'interactive) + ;; called-interactively-p does not work for + ;; XEmacs. interactive-p is ok here. + ;; (if (called-interactively-p 'interactive) + (if (interactive-p) (message "// and /// now toggle case-sensitivity and regexp search."))) (viper-unrecord-kbd-macro "//" 'emacs-state) diff --git a/lisp/emulation/viper-util.el b/lisp/emulation/viper-util.el index 503265c8b85..80cf3c78f60 100644 --- a/lisp/emulation/viper-util.el +++ b/lisp/emulation/viper-util.el @@ -174,12 +174,14 @@ Otherwise return the normal value." (viper-frame-value viper-vi-state-cursor-color) frame)))) -;; By default, saves current frame cursor color in the -;; viper-saved-cursor-color-in-replace-mode property of viper-replace-overlay +;; By default, saves current frame cursor color before changing viper state (defun viper-save-cursor-color (before-which-mode) (if (and (viper-window-display-p) (viper-color-display-p)) (let ((color (viper-get-cursor-color))) (if (and (stringp color) (viper-color-defined-p color) + ;; there is something fishy in that the color is not saved if + ;; it is the same as frames default cursor color. need to be + ;; checked. (not (string= color (viper-frame-value viper-replace-overlay-cursor-color)))) @@ -1047,6 +1049,11 @@ Otherwise return the normal value." (append mod (list basis)) basis)))) +(defun viper-last-command-char () + (if (featurep 'xemacs) + (event-to-character last-command-event) + last-command-event)) + (defun viper-key-to-emacs-key (key) (let (key-name char-p modifiers mod-char-list base-key base-key-name) (cond ((featurep 'xemacs) key) diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el index 24ed2dc80ba..a02c144d7bd 100644 --- a/lisp/emulation/viper.el +++ b/lisp/emulation/viper.el @@ -889,7 +889,10 @@ It also can't undo some Viper settings." (defadvice self-insert-command (around viper-self-insert-ad activate) "Ignore all self-inserting keys in the vi-state." (if (and (eq viper-current-state 'vi-state) - (called-interactively-p 'interactive)) + ;; Do not use called-interactively-p here. XEmacs does not have it + ;; and interactive-p is just fine. + ;; (called-interactively-p 'interactive)) + (interactive-p)) (beep 1) ad-do-it )) -- 2.11.4.GIT