1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-02 02:10:46 -08:00

new version

This commit is contained in:
Michael Kifer 1997-08-07 04:48:48 +00:00
parent 8d0cab5714
commit 41497c90ae
5 changed files with 248 additions and 187 deletions

View file

@ -362,12 +362,14 @@
(cons 'viper-vi-global-user-minor-mode viper-vi-global-user-map) (cons 'viper-vi-global-user-minor-mode viper-vi-global-user-map)
(cons 'viper-vi-state-modifier-minor-mode (cons 'viper-vi-state-modifier-minor-mode
(if (keymapp (if (keymapp
(cdr (assoc major-mode viper-vi-state-modifier-alist))) (cdr (assoc major-mode
viper-vi-state-modifier-alist)))
(cdr (assoc major-mode viper-vi-state-modifier-alist)) (cdr (assoc major-mode viper-vi-state-modifier-alist))
viper-empty-keymap)) viper-empty-keymap))
(cons 'viper-vi-diehard-minor-mode viper-vi-diehard-map) (cons 'viper-vi-diehard-minor-mode viper-vi-diehard-map)
(cons 'viper-vi-basic-minor-mode viper-vi-basic-map) (cons 'viper-vi-basic-minor-mode viper-vi-basic-map)
(cons 'viper-insert-intercept-minor-mode viper-insert-intercept-map) (cons 'viper-insert-intercept-minor-mode
viper-insert-intercept-map)
(cons 'viper-replace-minor-mode viper-replace-map) (cons 'viper-replace-minor-mode viper-replace-map)
;; viper-insert-minibuffer-minor-mode must come after ;; viper-insert-minibuffer-minor-mode must come after
;; viper-replace-minor-mode ;; viper-replace-minor-mode
@ -380,10 +382,10 @@
viper-insert-global-user-map) viper-insert-global-user-map)
(cons 'viper-insert-state-modifier-minor-mode (cons 'viper-insert-state-modifier-minor-mode
(if (keymapp (if (keymapp
(cdr (cdr (assoc major-mode
(assoc major-mode viper-insert-state-modifier-alist))) viper-insert-state-modifier-alist)))
(cdr (cdr (assoc major-mode
(assoc major-mode viper-insert-state-modifier-alist)) viper-insert-state-modifier-alist))
viper-empty-keymap)) viper-empty-keymap))
(cons 'viper-insert-diehard-minor-mode viper-insert-diehard-map) (cons 'viper-insert-diehard-minor-mode viper-insert-diehard-map)
(cons 'viper-insert-basic-minor-mode viper-insert-basic-map) (cons 'viper-insert-basic-minor-mode viper-insert-basic-map)
@ -574,8 +576,7 @@
(defsubst viper-downgrade-to-insert () (defsubst viper-downgrade-to-insert ()
(setq viper-current-state 'insert-state (setq viper-current-state 'insert-state
viper-replace-minor-mode nil) viper-replace-minor-mode nil))
)
@ -3576,7 +3577,8 @@ To turn this feature off, set this variable to nil."
(while (and (not found) (< count len)) (while (and (not found) (< count len))
(setq suff (nth count viper-smart-suffix-list) (setq suff (nth count viper-smart-suffix-list)
count (1+ count)) count (1+ count))
(if (file-exists-p (format "%s%s" file suff)) (if (file-exists-p
(format "%s%s" (substitute-in-file-name file) suff))
(progn (progn
(setq found t) (setq found t)
(insert suff)))) (insert suff))))
@ -3835,7 +3837,7 @@ cursor move past the beginning of line."
(condition-case conds (condition-case conds
(if (or viper-allow-multiline-replace-regions (if (or viper-allow-multiline-replace-regions
(viper-same-line (viper-replace-start) (viper-same-line (viper-replace-start)
(viper-replace-end))) (viper-replace-end)))
(progn (progn
;; tabs cause problems in replace, so untabify ;; tabs cause problems in replace, so untabify
(goto-char (viper-replace-end)) (goto-char (viper-replace-end))

View file

@ -325,16 +325,6 @@ delete the text being replaced, as in standard Vi."
(viper-deflocalvar viper-replace-overlay nil "") (viper-deflocalvar viper-replace-overlay nil "")
(put 'viper-replace-overlay 'permanent-local t) (put 'viper-replace-overlay 'permanent-local t)
(defcustom viper-replace-overlay-pixmap "gray3"
"Pixmap to use for search face on non-color displays."
:type 'string
:group 'viper)
(defcustom viper-search-face-pixmap "gray3"
"Pixmap to use for search face on non-color displays."
:type 'string
:group 'viper)
(defcustom viper-replace-region-end-delimiter "$" (defcustom viper-replace-region-end-delimiter "$"
"A string marking the end of replacement regions. "A string marking the end of replacement regions.
It is used only with TTYs or if `viper-use-replace-region-delimiters' It is used only with TTYs or if `viper-use-replace-region-delimiters'
@ -699,6 +689,174 @@ Related buffers can be cycled through via :R and :P commands."
;; Last shell command executed with ! command. ;; Last shell command executed with ! command.
(defvar viper-last-shell-com nil) (defvar viper-last-shell-com nil)
;;; Face-saving tricks
(defcustom viper-replace-overlay-pixmap "gray3"
"Pixmap to use for search face on non-color displays."
:type 'string
:group 'viper)
(defcustom viper-search-face-pixmap "gray3"
"Pixmap to use for search face on non-color displays."
:type 'string
:group 'viper)
(defun viper-hide-face (face)
(if (and (viper-has-face-support-p) viper-emacs-p)
(add-to-list 'facemenu-unlisted-faces face)))
(defgroup viper-highlighting nil
"Hilighting of replace region, search pattern, minibuffer, etc."
:prefix "viper-"
:group 'viper)
;;(defvar viper-search-face
;; (if (viper-has-face-support-p)
;; (progn
;; (make-face 'viper-search-face)
;; (or (face-differs-from-default-p 'viper-search-face)
;; ;; face wasn't set in .viper or .Xdefaults
;; (if (viper-can-use-colors "Black" "khaki")
;; (progn
;; (set-face-background 'viper-search-face "khaki")
;; (set-face-foreground 'viper-search-face "Black"))
;; (set-face-underline-p 'viper-search-face t)
;; (viper-set-face-pixmap 'viper-search-face
;; viper-search-face-pixmap)))
;; 'viper-search-face))
;; "*Face used to flash out the search pattern.")
(defface viper-search-face
'((((class color)) (:foreground "Black" :background "khaki"))
(t (:underline t :stipple viper-search-face-pixmap)))
"*Face used to flash out the search pattern."
:group 'viper-highlighting)
;; An internal variable. Viper takes the face from here.
(defvar viper-search-face 'viper-search-face)
(viper-hide-face 'viper-search-face)
;;(defvar viper-replace-overlay-face
;; (if (viper-has-face-support-p)
;; (progn
;; (make-face 'viper-replace-overlay-face)
;; (or (face-differs-from-default-p 'viper-replace-overlay-face)
;; (progn
;; (if (viper-can-use-colors "darkseagreen2" "Black")
;; (progn
;; (set-face-background
;; 'viper-replace-overlay-face "darkseagreen2")
;; (set-face-foreground 'viper-replace-overlay-face "Black")))
;; (set-face-underline-p 'viper-replace-overlay-face t)
;; (viper-set-face-pixmap
;; 'viper-replace-overlay-face viper-replace-overlay-pixmap)))
;; 'viper-replace-overlay-face))
;; "*Face for highlighting replace regions on a window display.")
(defface viper-replace-overlay-face
'((((class color)) (:foreground "Black" :background "darkseagreen2"))
(t (:underline t :stipple viper-replace-overlay-face-pixmap)))
"*Face for highlighting replace regions on a window display."
:group 'viper-highlighting)
;; An internal variable. Viper takes the face from here.
(defvar viper-replace-overlay-face 'viper-replace-overlay-face)
(viper-hide-face 'viper-replace-overlay-face)
;;(defvar viper-minibuffer-emacs-face
;; (if (viper-has-face-support-p)
;; (progn
;; (make-face 'viper-minibuffer-emacs-face)
;; (or (face-differs-from-default-p 'viper-minibuffer-emacs-face)
;; ;; face wasn't set in .viper or .Xdefaults
;; (if viper-vi-style-in-minibuffer
;; ;; emacs state is an exception in the minibuffer
;; (if (viper-can-use-colors "darkseagreen2" "Black")
;; (progn
;; (set-face-background
;; 'viper-minibuffer-emacs-face "darkseagreen2")
;; (set-face-foreground
;; 'viper-minibuffer-emacs-face "Black"))
;; (copy-face 'modeline 'viper-minibuffer-emacs-face))
;; ;; emacs state is the main state in the minibuffer
;; (if (viper-can-use-colors "Black" "pink")
;; (progn
;; (set-face-background 'viper-minibuffer-emacs-face "pink")
;; (set-face-foreground
;; 'viper-minibuffer-emacs-face "Black"))
;; (copy-face 'italic 'viper-minibuffer-emacs-face))
;; ))
;; 'viper-minibuffer-emacs-face))
;; "Face used in the Minibuffer when it is in Emacs state.")
(defface viper-minibuffer-emacs-face
'((((class color)) (:foreground "Black" :background "darkseagreen2"))
(t (:bold t)))
"Face used in the Minibuffer when it is in Emacs state."
:group 'viper-highlighting)
;; An internal variable. Viper takes the face from here.
(defvar viper-minibuffer-emacs-face 'viper-minibuffer-emacs-face)
(viper-hide-face 'viper-minibuffer-emacs-face)
;;(defvar viper-minibuffer-insert-face
;; (if (viper-has-face-support-p)
;; (progn
;; (make-face 'viper-minibuffer-insert-face)
;; (or (face-differs-from-default-p 'viper-minibuffer-insert-face)
;; (if viper-vi-style-in-minibuffer
;; (if (viper-can-use-colors "Black" "pink")
;; (progn
;; (set-face-background 'viper-minibuffer-insert-face "pink")
;; (set-face-foreground
;; 'viper-minibuffer-insert-face "Black"))
;; (copy-face 'italic 'viper-minibuffer-insert-face))
;; ;; If Insert state is an exception
;; (if (viper-can-use-colors "darkseagreen2" "Black")
;; (progn
;; (set-face-background
;; 'viper-minibuffer-insert-face "darkseagreen2")
;; (set-face-foreground
;; 'viper-minibuffer-insert-face "Black"))
;; (copy-face 'modeline 'viper-minibuffer-insert-face))
;; (viper-italicize-face 'viper-minibuffer-insert-face)))
;; 'viper-minibuffer-insert-face))
;; "Face used in the Minibuffer when it is in Insert state.")
(defface viper-minibuffer-insert-face
'((((class color)) (:foreground "Black" :background "pink"))
(t (:italic t)))
"Face used in the Minibuffer when it is in Insert state."
:group 'viper-highlighting)
;; An internal variable. Viper takes the face from here.
(defvar viper-minibuffer-insert-face 'viper-minibuffer-insert-face)
(viper-hide-face 'viper-minibuffer-insert-face)
;;(defvar viper-minibuffer-vi-face
;; (if (viper-has-face-support-p)
;; (progn
;; (make-face 'viper-minibuffer-vi-face)
;; (or (face-differs-from-default-p 'viper-minibuffer-vi-face)
;; (if viper-vi-style-in-minibuffer
;; (if (viper-can-use-colors "Black" "grey")
;; (progn
;; (set-face-background 'viper-minibuffer-vi-face "grey")
;; (set-face-foreground 'viper-minibuffer-vi-face "Black"))
;; (copy-face 'bold 'viper-minibuffer-vi-face))
;; (copy-face 'bold 'viper-minibuffer-vi-face)
;; (invert-face 'viper-minibuffer-vi-face)))
;; 'viper-minibuffer-vi-face))
;; "Face used in the Minibuffer when it is in Vi state.")
(defface viper-minibuffer-vi-face
'((((class color)) (:foreground "DarkGreen" :background "grey"))
(t (:inverse-video t)))
"Face used in the Minibuffer when it is in Vi state."
:group 'viper-highlighting)
;; An internal variable. Viper takes the face from here.
(defvar viper-minibuffer-vi-face 'viper-minibuffer-vi-face)
(viper-hide-face 'viper-minibuffer-vi-face)
;; the current face to be used in the minibuffer
(viper-deflocalvar viper-minibuffer-current-face viper-minibuffer-emacs-face "")
;;; Miscellaneous ;;; Miscellaneous

View file

@ -424,7 +424,7 @@ this command."
(defun viper-mouse-catch-frame-switch (event arg) (defun viper-mouse-catch-frame-switch (event arg)
"Catch the event of switching frame. "Catch the event of switching frame.
Usually is bound to a 'down-mouse' event to work properly. See sample Usually is bound to a `down-mouse' event to work properly. See sample
bindings in the Viper manual." bindings in the Viper manual."
(interactive "e\nP") (interactive "e\nP")
(setq viper-frame-of-focus nil) (setq viper-frame-of-focus nil)

View file

@ -50,16 +50,17 @@
(require 'viper-init) (require 'viper-init)
;; A fix for NeXT Step
;; Should go away, when NS people fix the design flaw, which leaves the
;; two x-* functions undefined.
(if (and (not (fboundp 'x-display-color-p)) (fboundp 'ns-display-color-p))
(fset 'x-display-color-p (symbol-function 'ns-display-color-p)))
(if (and (not (fboundp 'x-color-defined-p)) (fboundp 'ns-color-defined-p))
(fset 'x-color-defined-p (symbol-function 'ns-color-defined-p)))
;;; XEmacs support ;;; XEmacs support
;; A fix for NeXT Step
;; Should probably be eliminated in later versions.
(if (and (viper-window-display-p) (eq (viper-device-type) 'ns))
(progn
(fset 'x-display-color-p (symbol-function 'ns-display-color-p))
(fset 'x-color-defined-p (symbol-function 'ns-color-defined-p))
))
(if viper-xemacs-p (if viper-xemacs-p
(progn (progn
@ -108,14 +109,14 @@
(cdr (assoc 'cursor-color (frame-parameters))) (cdr (assoc 'cursor-color (frame-parameters)))
(color-instance-name (frame-property (selected-frame) 'cursor-color)))) (color-instance-name (frame-property (selected-frame) 'cursor-color))))
(defun viper-set-face-pixmap (face pixmap) ;;(defun viper-set-face-pixmap (face pixmap)
"Set face pixmap on a monochrome display." ;; "Set face pixmap on a monochrome display."
(if (and (viper-window-display-p) (not (viper-color-display-p))) ;; (if (and (viper-window-display-p) (not (viper-color-display-p)))
(condition-case nil ;; (condition-case nil
(set-face-background-pixmap face pixmap) ;; (set-face-background-pixmap face pixmap)
(error ;; (error
(message "Pixmap not found for %S: %s" (face-name face) pixmap) ;; (message "Pixmap not found for %S: %s" (face-name face) pixmap)
(sit-for 1))))) ;; (sit-for 1)))))
;; OS/2 ;; OS/2
@ -124,20 +125,16 @@
(function (lambda (color) (assoc color pm-color-alist)))))) (function (lambda (color) (assoc color pm-color-alist))))))
;; needed to smooth out the difference between Emacs and XEmacs ;; needed to smooth out the difference between Emacs and XEmacs
(defsubst viper-italicize-face (face) ;;(defsubst viper-italicize-face (face)
(if viper-xemacs-p ;; (if viper-xemacs-p
(make-face-italic face) ;; (make-face-italic face)
(make-face-italic face nil 'noerror))) ;; (make-face-italic face nil 'noerror)))
;; test if display is color and the colors are defined ;; test if display is color and the colors are defined
(defsubst viper-can-use-colors (&rest colors) ;;(defsubst viper-can-use-colors (&rest colors)
(if (viper-color-display-p) ;; (if (viper-color-display-p)
(not (memq nil (mapcar 'viper-color-defined-p colors))) ;; (not (memq nil (mapcar 'viper-color-defined-p colors)))
)) ;; ))
(defun viper-hide-face (face)
(if (and (viper-has-face-support-p) viper-emacs-p)
(add-to-list 'facemenu-unlisted-faces face)))
;; cursor colors ;; cursor colors
(defun viper-change-cursor-color (new-color) (defun viper-change-cursor-color (new-color)
@ -161,114 +158,6 @@
(defsubst viper-restore-cursor-color-after-insert () (defsubst viper-restore-cursor-color-after-insert ()
(viper-change-cursor-color viper-saved-cursor-color)) (viper-change-cursor-color viper-saved-cursor-color))
;; Face-saving tricks
(defvar viper-search-face
(if (viper-has-face-support-p)
(progn
(make-face 'viper-search-face)
(viper-hide-face 'viper-search-face)
(or (face-differs-from-default-p 'viper-search-face)
;; face wasn't set in .viper or .Xdefaults
(if (viper-can-use-colors "Black" "khaki")
(progn
(set-face-background 'viper-search-face "khaki")
(set-face-foreground 'viper-search-face "Black"))
(set-face-underline-p 'viper-search-face t)
(viper-set-face-pixmap 'viper-search-face viper-search-face-pixmap)))
'viper-search-face))
"*Face used to flash out the search pattern.")
(defvar viper-replace-overlay-face
(if (viper-has-face-support-p)
(progn
(make-face 'viper-replace-overlay-face)
(viper-hide-face 'viper-replace-overlay-face)
(or (face-differs-from-default-p 'viper-replace-overlay-face)
(progn
(if (viper-can-use-colors "darkseagreen2" "Black")
(progn
(set-face-background
'viper-replace-overlay-face "darkseagreen2")
(set-face-foreground 'viper-replace-overlay-face "Black")))
(set-face-underline-p 'viper-replace-overlay-face t)
(viper-set-face-pixmap
'viper-replace-overlay-face viper-replace-overlay-pixmap)))
'viper-replace-overlay-face))
"*Face for highlighting replace regions on a window display.")
(defvar viper-minibuffer-emacs-face
(if (viper-has-face-support-p)
(progn
(make-face 'viper-minibuffer-emacs-face)
(viper-hide-face 'viper-minibuffer-emacs-face)
(or (face-differs-from-default-p 'viper-minibuffer-emacs-face)
;; face wasn't set in .viper or .Xdefaults
(if viper-vi-style-in-minibuffer
;; emacs state is an exception in the minibuffer
(if (viper-can-use-colors "darkseagreen2" "Black")
(progn
(set-face-background
'viper-minibuffer-emacs-face "darkseagreen2")
(set-face-foreground
'viper-minibuffer-emacs-face "Black"))
(copy-face 'modeline 'viper-minibuffer-emacs-face))
;; emacs state is the main state in the minibuffer
(if (viper-can-use-colors "Black" "pink")
(progn
(set-face-background 'viper-minibuffer-emacs-face "pink")
(set-face-foreground
'viper-minibuffer-emacs-face "Black"))
(copy-face 'italic 'viper-minibuffer-emacs-face))
))
'viper-minibuffer-emacs-face))
"Face used in the Minibuffer when it is in Emacs state.")
(defvar viper-minibuffer-insert-face
(if (viper-has-face-support-p)
(progn
(make-face 'viper-minibuffer-insert-face)
(viper-hide-face 'viper-minibuffer-insert-face)
(or (face-differs-from-default-p 'viper-minibuffer-insert-face)
(if viper-vi-style-in-minibuffer
(if (viper-can-use-colors "Black" "pink")
(progn
(set-face-background 'viper-minibuffer-insert-face "pink")
(set-face-foreground
'viper-minibuffer-insert-face "Black"))
(copy-face 'italic 'viper-minibuffer-insert-face))
;; If Insert state is an exception
(if (viper-can-use-colors "darkseagreen2" "Black")
(progn
(set-face-background
'viper-minibuffer-insert-face "darkseagreen2")
(set-face-foreground
'viper-minibuffer-insert-face "Black"))
(copy-face 'modeline 'viper-minibuffer-insert-face))
(viper-italicize-face 'viper-minibuffer-insert-face)))
'viper-minibuffer-insert-face))
"Face used in the Minibuffer when it is in Insert state.")
(defvar viper-minibuffer-vi-face
(if (viper-has-face-support-p)
(progn
(make-face 'viper-minibuffer-vi-face)
(viper-hide-face 'viper-minibuffer-vi-face)
(or (face-differs-from-default-p 'viper-minibuffer-vi-face)
(if viper-vi-style-in-minibuffer
(if (viper-can-use-colors "Black" "grey")
(progn
(set-face-background 'viper-minibuffer-vi-face "grey")
(set-face-foreground 'viper-minibuffer-vi-face "Black"))
(copy-face 'bold 'viper-minibuffer-vi-face))
(copy-face 'bold 'viper-minibuffer-vi-face)
(invert-face 'viper-minibuffer-vi-face)))
'viper-minibuffer-vi-face))
"Face used in the Minibuffer when it is in Vi state.")
;; the current face to be used in the minibuffer
(viper-deflocalvar viper-minibuffer-current-face viper-minibuffer-emacs-face "")
;; Check the current version against the major and minor version numbers ;; Check the current version against the major and minor version numbers
@ -979,10 +868,11 @@ to write a custom function, similar to `viper-ex-nontrivial-find-file-unix'."
(defun viper-read-key () (defun viper-read-key ()
(let ((overriding-local-map viper-overriding-map) (let ((overriding-local-map viper-overriding-map)
(inhibit-quit t) (inhibit-quit t)
key) help-char key)
(use-global-map viper-overriding-map) (use-global-map viper-overriding-map)
(setq key (elt (read-key-sequence nil) 0)) (unwind-protect
(use-global-map global-map) (setq key (elt (read-key-sequence nil) 0))
(use-global-map global-map))
key)) key))

View file

@ -361,8 +361,11 @@ DO NOT set this variable interactively."
:tag "Set Viper Mode on Loading" :tag "Set Viper Mode on Loading"
:group 'viper) :group 'viper)
(defcustom viper-non-vi-major-modes nil (defcustom viper-non-vi-major-modes
"*A list of major modes that should never come up in vi command mode. '(custom-mode dired-mode efs-mode internal-ange-ftp-mode tar-mode
mh-folder-mode gnus-group-mode gnus-summary-mode Info-mode
Buffer-menu-mode view-mode vm-mode vm-summary-mode)
"*A list of major modes that should never come up in Vi command mode.
Viper automatically augments this list with some obvious modes, such as Viper automatically augments this list with some obvious modes, such as
`dired-mode', `tar-mode', etc. So, don't put modes on this list, unless `dired-mode', `tar-mode', etc. So, don't put modes on this list, unless
it comes up in a wrong Viper state." it comes up in a wrong Viper state."
@ -599,7 +602,12 @@ remains buffer-local."
;; unbind Viper mouse bindings ;; unbind Viper mouse bindings
(viper-unbind-mouse-search-key) (viper-unbind-mouse-search-key)
(viper-unbind-mouse-insert-key) (viper-unbind-mouse-insert-key)
) ;; In emacs, we have to advice handle-switch-frame
;; This advice is undone earlier, when all advices matchine "viper-" are
;; deactivated.
(if viper-xemacs-p
(remove-hook 'mouse-leave-frame-hook 'viper-remember-current-frame))
) ; end viper-go-away
@ -754,14 +762,10 @@ remains buffer-local."
(viper-modify-major-mode 'dired-mode 'emacs-state viper-dired-modifier-map) (viper-modify-major-mode 'dired-mode 'emacs-state viper-dired-modifier-map)
(viper-set-emacs-state-searchstyle-macros nil 'dired-mode) (viper-set-emacs-state-searchstyle-macros nil 'dired-mode)
(add-hook 'dired-mode-hook 'viper-change-state-to-emacs) (add-hook 'dired-mode-hook 'viper-change-state-to-emacs)
(setq viper-non-vi-major-modes
(append '(dired-mode efs-mode internal-ange-ftp-mode)
viper-non-vi-major-modes))
;; Tar ;; Tar
(viper-modify-major-mode 'tar-mode 'emacs-state viper-slash-and-colon-map) (viper-modify-major-mode 'tar-mode 'emacs-state viper-slash-and-colon-map)
(viper-set-emacs-state-searchstyle-macros nil 'tar-mode) (viper-set-emacs-state-searchstyle-macros nil 'tar-mode)
(setq viper-non-vi-major-modes (cons 'tar-mode viper-non-vi-major-modes))
;; MH-E ;; MH-E
(viper-modify-major-mode (viper-modify-major-mode
@ -770,8 +774,6 @@ remains buffer-local."
;; changing state to emacs is needed so the preceding will take hold ;; changing state to emacs is needed so the preceding will take hold
(add-hook 'mh-folder-mode-hook 'viper-change-state-to-emacs) (add-hook 'mh-folder-mode-hook 'viper-change-state-to-emacs)
(add-hook 'mh-show-mode-hook 'viper-mode) (add-hook 'mh-show-mode-hook 'viper-mode)
(setq viper-non-vi-major-modes
(cons 'mh-folder-mode viper-non-vi-major-modes))
;; Gnus ;; Gnus
(viper-modify-major-mode (viper-modify-major-mode
@ -784,9 +786,6 @@ remains buffer-local."
(add-hook 'gnus-group-mode-hook 'viper-change-state-to-emacs) (add-hook 'gnus-group-mode-hook 'viper-change-state-to-emacs)
(add-hook 'gnus-summary-mode-hook 'viper-change-state-to-emacs) (add-hook 'gnus-summary-mode-hook 'viper-change-state-to-emacs)
(add-hook 'gnus-article-mode-hook 'viper-mode) (add-hook 'gnus-article-mode-hook 'viper-mode)
(setq viper-non-vi-major-modes
(append '(gnus-group-mode gnus-summary-mode)
viper-non-vi-major-modes))
;; Info ;; Info
(viper-modify-major-mode 'Info-mode 'emacs-state viper-slash-and-colon-map) (viper-modify-major-mode 'Info-mode 'emacs-state viper-slash-and-colon-map)
@ -795,7 +794,6 @@ remains buffer-local."
(defadvice Info-mode (after viper-Info-ad activate) (defadvice Info-mode (after viper-Info-ad activate)
"Switch to emacs mode." "Switch to emacs mode."
(viper-change-state-to-emacs)) (viper-change-state-to-emacs))
(setq viper-non-vi-major-modes (cons 'Info-mode viper-non-vi-major-modes))
;; Buffer menu ;; Buffer menu
(viper-modify-major-mode (viper-modify-major-mode
@ -805,15 +803,12 @@ remains buffer-local."
(defadvice Buffer-menu-mode (after viper-Buffer-menu-ad activate) (defadvice Buffer-menu-mode (after viper-Buffer-menu-ad activate)
"Switch to emacs mode." "Switch to emacs mode."
(viper-change-state-to-emacs)) (viper-change-state-to-emacs))
(setq viper-non-vi-major-modes
(cons 'Buffer-menu-mode viper-non-vi-major-modes))
;; View mode ;; View mode
(defvar view-mode-hook) (defvar view-mode-hook)
(defvar view-hook) (defvar view-hook)
(add-hook 'view-hook 'viper-change-state-to-emacs) (add-hook 'view-hook 'viper-change-state-to-emacs)
(add-hook 'view-mode-hook 'viper-change-state-to-emacs) (add-hook 'view-mode-hook 'viper-change-state-to-emacs)
(setq viper-non-vi-major-modes (cons 'view-mode viper-non-vi-major-modes))
;; For VM users. ;; For VM users.
;; Put summary and other VM buffers in Emacs state. ;; Put summary and other VM buffers in Emacs state.
@ -821,8 +816,6 @@ remains buffer-local."
(defvar vm-summary-mode-hooks) (defvar vm-summary-mode-hooks)
(add-hook 'vm-mode-hooks 'viper-change-state-to-emacs) (add-hook 'vm-mode-hooks 'viper-change-state-to-emacs)
(add-hook 'vm-summary-mode-hooks 'viper-change-state-to-emacs) (add-hook 'vm-summary-mode-hooks 'viper-change-state-to-emacs)
(setq viper-non-vi-major-modes
(append '(vm-mode vm-summary-mode) viper-non-vi-major-modes))
;; For RMAIL users. ;; For RMAIL users.
;; Put buf in Emacs state after edit. ;; Put buf in Emacs state after edit.
@ -970,14 +963,24 @@ remains buffer-local."
(define-key viper-vi-intercept-map "\C-x)" nil) (define-key viper-vi-intercept-map "\C-x)" nil)
(define-key viper-insert-intercept-map "\C-x)" nil) (define-key viper-insert-intercept-map "\C-x)" nil)
(define-key viper-emacs-intercept-map "\C-x)" nil)) (define-key viper-emacs-intercept-map "\C-x)" nil))
;; catch frame switching event
(if (viper-window-display-p)
(if viper-xemacs-p
(add-hook 'mouse-leave-frame-hook
'viper-remember-current-frame)
(defadvice handle-switch-frame (before viper-frame-advice activate)
"Remember the selected frame before the switch-frame event."
(viper-remember-current-frame (selected-frame)))) )
) ; end viper-non-hook-settings ) ; end viper-non-hook-settings
(if (eq viper-mode 'ask) ;; Ask only if this-command/last-command are nil, i.e., when loading
(progn (cond ((and (eq viper-mode 'ask) (null this-command) (null last-command))
(save-window-excursion (save-window-excursion
(with-output-to-temp-buffer " *viper-info*" (with-output-to-temp-buffer " *viper-info*"
(princ " (princ "
You have loaded Viper, and are about to Viperize your emacs! You have loaded Viper, and are about to Viperize your emacs!
Viper is a Package for Emacs Rebels and a venomous VI PERil, Viper is a Package for Emacs Rebels and a venomous VI PERil,
@ -995,11 +998,19 @@ These two lines must come in the order given.
** Viper users: ** Viper users:
**** The startup file name has been changed from .vip to .viper **** The startup file name has been changed from .vip to .viper
**** All vip-* style names have been converted to viper-* style.")) **** All vip-* style names have been converted to viper-* style."))
(if (y-or-n-p "Viperize? ") (if (y-or-n-p "Viperize? ")
(setq viper-mode t) (setq viper-mode t)
(setq viper-mode nil)) (setq viper-mode nil))
(message "") (message "")
(kill-buffer " *viper-info*")))) (kill-buffer " *viper-info*")))
;; If viper-mode is t, then just continue. Viper will kick in.
((eq viper-mode t))
;; Otherwise, it was asking mode and Viper was not loaded through .emacs
;; In this case, it was either through M-x viper-mode or via something
;; else, like the custom widget. If Viper was loaded through
;; M-x viper-mode, then viper will kick in anyway.
(t (setq viper-mode nil)))
(defun viper-load-custom-file () (defun viper-load-custom-file ()
(if (and (file-exists-p viper-custom-file-name) (if (and (file-exists-p viper-custom-file-name)