From: Michael Kifer Date: Fri, 6 Sep 1996 01:17:30 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: emacs-20.1~3809 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=34da0a2b03788d285b8e05e4885d9a5076811afd;p=emacs.git *** empty log message *** --- diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el index d017e4c7c4f..34e23efc644 100644 --- a/lisp/emulation/viper.el +++ b/lisp/emulation/viper.el @@ -8,7 +8,7 @@ ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. -(defconst viper-version "2.90 of June 19, 1996" +(defconst viper-version "2.91 of August 5, 1996" "The current version of Viper") ;; This file is part of GNU Emacs. @@ -338,6 +338,12 @@ Use `M-x vip-set-expert-level' to change this.") ;;; Viper minor modes ;; This is not local in Emacs, so we make it local. +;; This must be local because although the stack of minor modes can be the same +;; for all buffers, the associated *keymaps* can be different. In Viper, +;; vip-vi-local-user-map, vip-insert-local-user-map, and others can have +;; different keymaps for different buffers. +;; Also, the keymaps associated with vip-vi/insert-state-modifier-minor-mode +;; can be different. (make-variable-buffer-local 'minor-mode-map-alist) ;; Mode for vital things like \e, C-z. @@ -478,22 +484,31 @@ it better fits your working style.") (vip-deflocalvar vip-replace-overlay nil "") (put 'vip-replace-overlay 'permanent-local t) -(if (vip-has-face-support-p) - (progn - (make-face 'vip-replace-overlay-face) - (vip-hide-face 'vip-replace-overlay-face) - (or (face-differs-from-default-p 'vip-replace-overlay-face) - (progn - (if (vip-can-use-colors "darkseagreen2" "Black") - (progn - (set-face-background - 'vip-replace-overlay-face "darkseagreen2") - (set-face-foreground 'vip-replace-overlay-face "Black"))) - (set-face-underline-p 'vip-replace-overlay-face t)) - ))) - -(defvar vip-replace-overlay-face 'vip-replace-overlay-face - "*Face for highlighting replace regions on a window display.") +(defvar vip-replace-overlay-pixmap "gray3" + "Pixmap to use for search face on non-color displays.") +(defvar vip-search-face-pixmap "gray3" + "Pixmap to use for search face on non-color displays.") + + +(defun vip-set-replace-overlay-face () + (if (vip-has-face-support-p) + (defvar vip-replace-overlay-face + (progn + (make-face 'vip-replace-overlay-face) + (vip-hide-face 'vip-replace-overlay-face) + (or (face-differs-from-default-p 'vip-replace-overlay-face) + (progn + (if (vip-can-use-colors "darkseagreen2" "Black") + (progn + (set-face-background + 'vip-replace-overlay-face "darkseagreen2") + (set-face-foreground 'vip-replace-overlay-face "Black"))) + (set-face-underline-p 'vip-replace-overlay-face t) + (vip-set-face-pixmap + 'vip-replace-overlay-face vip-replace-overlay-pixmap))) + 'vip-replace-overlay-face) + "*Face for highlighting replace regions on a window display.") + )) (defvar vip-replace-region-end-delimiter "$" "A string marking the end of replacement regions. @@ -503,12 +518,10 @@ is non-nil.") "A string marking the beginning of replacement regions. It is used only with TTYs or if `vip-use-replace-region-delimiters' is non-nil.") -(defvar vip-use-replace-region-delimiters - (or (not (vip-has-face-support-p)) (not (vip-color-display-p))) +(defvar vip-use-replace-region-delimiters (not (vip-has-face-support-p)) "*If non-nil, Viper will always use `vip-replace-region-end-delimiter' and `vip-replace-region-start-delimiter' to delimit replacement regions, even on -color displays. By default, the delimiters are used only on TTYs or -monochrome displays.") +color displays. By default, the delimiters are used only on TTYs.") ;; XEmacs requires glyphs (if vip-xemacs-p @@ -563,21 +576,8 @@ monochrome displays.") ;; Current mode. One of: `emacs-state', `vi-state', `insert-state' (vip-deflocalvar vip-current-state 'emacs-state) - -(defvar vip-toggle-key "\C-z" - "The key used to change states from emacs to Vi and back. -In insert mode, this key also functions as Meta. -Must be set in .vip file or prior to loading Viper. -This setting cannot be changed interactively.") - -(defvar vip-ESC-key "\e" - "Key used to ESC. -Must be set in .vip file or prior to loading Viper. -This setting cannot be changed interactively.") - (defvar vip-no-multiple-ESC t "*If true, multiple ESC in Vi mode will cause bell to ring. -\_ is then mapped to Meta. This is set to t on a windowing terminal and to 'twice on a dumb terminal (unless the user level is 1, 2, or 5). On a dumb terminal, this enables cursor keys and is generally more convenient, as terminals usually @@ -821,8 +821,13 @@ These buffers can be cycled through via :R and :P commands.") (defvar vip-always t "t means, arrange that vi-state will be a default.") -(defvar vip-custom-file-name - (convert-standard-filename "~/.vip") +(defvar vip-custom-file-name (cond (vip-vms-os-p "sys$login:.vip") + ((memq system-type '(emx ms-dos)) + "/_vip") + ((memq system-type '(windows-nt windows-95)) + "~/_vip") + (t ; Unix + "~/.vip")) "Viper customisation file. This variable must be set _before_ loading Viper.") @@ -927,7 +932,7 @@ Should be set in `~/.vip' file.") "Movement commands") (vip-test-com-defun vip-movement-command) -;; Commands that can be repeated by .(dotted) +;; Commands that can be repeated by . (dotted) (defconst vip-dotable-commands '(?c ?d ?C ?D ?> ?<)) (vip-test-com-defun vip-dotable-command) @@ -939,6 +944,14 @@ Should be set in `~/.vip' file.") (defconst vip-regsuffix-commands '(?d ?y ?Y ?D ?p ?P ?x ?X)) (vip-test-com-defun vip-regsuffix-command) +(defconst vip-vi-commands (append vip-movement-commands + vip-dotable-commands + vip-charpair-commands + vip-hash-cmds + vip-prefix-commands + vip-regsuffix-commands) + "The list of all commands in Vi-state.") +(vip-test-com-defun vip-vi-command) ;;; Arrange the keymaps @@ -1272,7 +1285,7 @@ and improving upon much of it. 4. Viper supports multiple undo: `u' will undo. Typing `.' will repeat undo. Another `u' changes direction. - 6. Emacs Meta functions are invoked by typing `_' or `\\ ESC'. + 6. Emacs Meta functions are invoked by typing `C-\\' or `\\ ESC'. On a window system, the best way is to use the Meta-key. 7. Try \\[keyboard-quit] and \\[abort-recursive-edit] repeatedly,if something funny happens. This would abort the current editing command. @@ -1487,20 +1500,24 @@ This startup message appears whenever you load Viper, unless you type `y' now." 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 (= last-command-char ?\\) + (message "Switched to EMACS state for the next command...")) (vip-escape-to-state arg events 'emacs-state)) ;; escape to Vi mode termporarily -(defun vip-escape-to-vi () +(defun vip-escape-to-vi (arg) "Escape from Emacs state to Vi state for one Vi 1-character command. -This doesn't work with prefix arguments or most complex commands like -cw, dw, etc. But it does work with some 2-character commands, -like dd or dr." - (interactive) - (vip-escape-to-state nil nil 'vi-state)) +If the Vi command that the user types has a prefix argument, e.g., `d2w', then +Vi's prefix argument will be used. Otherwise, the prefix argument passed to +`vip-escape-to-vi' is used." + (interactive "P") + (message "Switched to VI state for the next command...") + (vip-escape-to-state arg nil 'vi-state)) ;; Escape to STATE mode for one Emacs command. (defun vip-escape-to-state (arg events state) - (let (com key prefix-arg) + ;;(let (com key prefix-arg) + (let (com key) ;; this temporarily turns off Viper's minor mode keymaps (vip-set-mode-vars-for state) (vip-normalize-minor-mode-map-alist) @@ -1508,23 +1525,26 @@ like dd or dr." ;; protect against keyboard quit and other errors (condition-case nil - (progn + (let (vip-vi-kbd-minor-mode + vip-insert-kbd-minor-mode + vip-emacs-kbd-minor-mode) (unwind-protect (progn (setq com (key-binding (setq key (if vip-xemacs-p (read-key-sequence nil) (read-key-sequence nil t))))) - ;; In case of indirection--chase definitions. + ;; In case of binding indirection--chase definitions. ;; Have to do it here because we execute this command under ;; different keymaps, so command-execute may not do the ;; right thing there (while (vectorp com) (setq com (key-binding com)))) nil) - ;; exec command in the right Viper state - ;; otherwise, if we switch buffers in the escaped command, - ;; Viper's mode vars will remain those of `state'. When we return - ;; to the orig buffer, the bindings will be screwed up. + ;; Execute command com in the original Viper state, not in state + ;; `state'. Otherwise, if we switch buffers while executing the + ;; escaped to command, Viper's mode vars will remain those of + ;; `state'. When we return to the orig buffer, the bindings will be + ;; screwed up. (vip-set-mode-vars-for vip-current-state) ;; this-command, last-command-char, last-command-event @@ -1538,13 +1558,27 @@ like dd or dr." (if (commandp com) (progn - (setq prefix-arg arg) + (setq prefix-arg (or prefix-arg arg)) (command-execute com))) ) (quit (ding)) (error (beep 1)))) - (vip-set-mode-vars-for vip-current-state)) ; set state in new buffer + ;; set state in the new buffer + (vip-set-mode-vars-for vip-current-state)) +(defun vip-exec-form-in-vi (form) + "Execute FORM in Vi state, regardless of the Ccurrent Vi state." + (let ((buff (current-buffer)) + result) + (vip-set-mode-vars-for 'vi-state) + (setq result (eval form)) + (if (not (equal buff (current-buffer))) ; cmd switched buffer + (save-excursion + (set-buffer buff) + (vip-set-mode-vars-for vip-current-state))) + (vip-set-mode-vars-for vip-current-state) + result)) + (defun vip-exec-form-in-emacs (form) "Execute FORM in Emacs, temporarily disabling Viper's minor modes. Similar to vip-escape-to-emacs, but accepts forms rather than keystrokes." @@ -1587,13 +1621,13 @@ Suffixes such as .el or .elc should be stripped." (defun vip-ESC (arg) "Emulate ESC key in Emacs. -Prevents multiple escape keystrokes if vip-no-multiple-ESC is true. In that -case \@ will be bound to ESC. If vip-no-multiple-ESC is 'twice double ESC -would dings in vi-state. Other ESC sequences are emulated via the current -Emacs's major mode keymap. This is more convenient on dumb terminals and in -Emacs -nw, since this won't block functional keys such as up,down, -etc. Meta key also will work. When vip-no-multiple-ESC is nil, ESC key -behaves as in Emacs, any number of multiple escapes is allowed." +Prevents multiple escape keystrokes if vip-no-multiple-ESC is true. +If vip-no-multiple-ESC is 'twice double ESC would ding in vi-state. +Other ESC sequences are emulated via the current Emacs's major mode +keymap. This is more convenient on TTYs, since this won't block +function keys such as up,down, etc. ESC will also will also work as +a Meta key in this case. When vip-no-multiple-ESC is nil, ESC functions +as a Meta key and any number of multiple escapes is allowed." (interactive "P") (let (char) (cond ((and (not vip-no-multiple-ESC) (eq vip-current-state 'vi-state)) @@ -1608,11 +1642,21 @@ behaves as in Emacs, any number of multiple escapes is allowed." (t (ding))) )) -(defun vip-alternate-ESC (arg) - "ESC key without checking for multiple keystrokes." +(defun vip-alternate-Meta-key (arg) + "Simulate Emacs Meta key." (interactive "P") + (sit-for 1) (message "ESC-") (vip-escape-to-emacs arg '(?\e))) - + +(defun vip-toggle-key-action () + "Action bound to `vip-toggle-key'." + (interactive) + (if (and (< vip-expert-level 2) (equal vip-toggle-key "\C-z")) + (if (vip-window-display-p) + (vip-iconify) + (suspend-emacs)) + (vip-change-state-to-emacs))) + ;; Intercept ESC sequences on dumb terminals. ;; Based on the idea contributed by Marcelino Veiga Tuimil @@ -1783,9 +1827,9 @@ behaves as in Emacs, any number of multiple escapes is allowed." ;; Compute numeric prefix arg value. -;; Invoked by CHAR. COM is the command part obtained so far. +;; Invoked by EVENT. COM is the command part obtained so far. (defun vip-prefix-arg-value (event com) - (let (value) + (let (value func) ;; read while number (while (and (vip-characterp event) (>= event ?0) (<= event ?9)) (setq value (+ (* (if (vip-characterp value) value 0) 10) (- event ?0))) @@ -1796,11 +1840,39 @@ behaves as in Emacs, any number of multiple escapes is allowed." (while (eq event ?U) (vip-describe-arg prefix-arg) (setq event (vip-read-event-convert-to-char))) - (vip-set-unread-command-events event))) + + (if (or com (and (not (eq vip-current-state 'vi-state)) + ;; make sure it is a Vi command + (vip-characterp event) (vip-vi-command-p event) + )) + ;; If appears to be one of the vi commands, + ;; then execute it with funcall and clear prefix-arg in order to not + ;; confuse subsequent commands + (progn + ;; last-command-char is the char we want emacs to think was typed + ;; last. If com is not nil, the vip-digit-argument command was called + ;; from within vip-prefix-arg command, such as `d', `w', etc., i.e., + ;; the user typed, say, d2. In this case, `com' would be `d', `w', + ;; etc. + ;; If vip-digit-argument was invoked by vip-escape-to-vi (which is + ;; indicated by the fact that the current state is not vi-state, + ;; then `event' represents the vi command to be executed (e.g., `d', + ;; `w', etc. Again, last-command-char must make emacs believe that + ;; this is the command we typed. + (setq last-command-char (or com event)) + (setq func (vip-exec-form-in-vi + (` (key-binding (char-to-string (, event)))))) + (funcall func prefix-arg) + (setq prefix-arg nil)) + ;; some other command -- let emacs do it in its own way + (vip-set-unread-command-events event)) + )) + ;; Vi operator as prefix argument." (defun vip-prefix-arg-com (char value com) - (let ((cont t)) + (let ((cont t) + cmd-info mv-or-digit-cmd) (while (and cont (memq char (list ?c ?d ?y ?! ?< ?> ?= ?# ?r ?R ?\" @@ -1834,20 +1906,23 @@ behaves as in Emacs, any number of multiple escapes is allowed." (setq char (read-char)))) (t (setq com char) - (setq char (vip-read-char-exclusive))))))) + (setq char (vip-read-char-exclusive)))))) + (if (atom com) - ;; com is a single char, so we construct prefix-arg - ;; and if char is ?, describe prefix arg, otherwise exit by - ;; pushing the char back into vip-set-unread-command-events - ;; Since char is a command, the command will execute with the prefix - ;; argument that we just constructed. + ;; `com' is a single char, so we construct the command argument + ;; and if `char' is `?', we describe the arg; otherwise + ;; we prepare the command that will be executed at the end. (progn - (setq prefix-arg (cons value com)) + (setq cmd-info (cons value com)) (while (= char ?U) - (vip-describe-arg prefix-arg) + (vip-describe-arg cmd-info) (setq char (read-char))) - (vip-set-unread-command-events char) - ) + ;; `char' is a movement command or a digit arg command---so we execute + ;; it at the very end + (setq mv-or-digit-cmd + (vip-exec-form-in-vi + (` (key-binding (char-to-string (, char))))))) + ;; as com is non-nil, this means that we have a command to execute (if (memq (car com) '(?r ?R)) ;; execute apropriate region command. @@ -1868,7 +1943,13 @@ behaves as in Emacs, any number of multiple escapes is allowed." ((equal com '(?> . ?>)) (vip-line (cons value ?>))) ((equal com '(?! . ?!)) (vip-line (cons value ?!))) ((equal com '(?= . ?=)) (vip-line (cons value ?=))) - (t (error "")))))) + (t (error ""))))) + + (if mv-or-digit-cmd + (progn + (setq last-command-char char) + (funcall mv-or-digit-cmd cmd-info))) + )) (defun vip-describe-arg (arg) (let (val com) @@ -1886,8 +1967,8 @@ behaves as in Emacs, any number of multiple escapes is allowed." "Begin numeric argument for the next command." (interactive "P") (vip-leave-region-active) - (vip-prefix-arg-value last-command-char - (if (consp arg) (cdr arg) nil))) + (vip-prefix-arg-value + last-command-char (if (consp arg) (cdr arg) nil))) (defun vip-command-argument (arg) "Accept a motion command as an argument." @@ -2537,8 +2618,8 @@ Undo previous insertion and inserts new." (progn (set-face-background 'vip-search-face "khaki") (set-face-foreground 'vip-search-face "Black")) - (copy-face 'italic 'vip-search-face) - (set-face-underline-p 'vip-search-face t))) + (set-face-underline-p 'vip-search-face t) + (vip-set-face-pixmap 'vip-search-face vip-search-face-pixmap))) 'vip-search-face) "*Face used to flash out the search pattern.") )) @@ -3905,21 +3986,30 @@ controlled by the sign of prefix numeric value." (setq scroll-step 1) -(defun vip-scroll (arg) +(defun vip-scroll-screen (arg) "Scroll to next screen." (interactive "p") - (if (> arg 0) - (while (> arg 0) - (scroll-up) - (setq arg (1- arg))) - (while (> 0 arg) - (scroll-down) - (setq arg (1+ arg))))) - -(defun vip-scroll-back (arg) + (condition-case nil + (if (> arg 0) + (while (> arg 0) + (scroll-up) + (setq arg (1- arg))) + (while (> 0 arg) + (scroll-down) + (setq arg (1+ arg)))) + (error (beep 1) + (if (> arg 0) + (progn + (message "End of buffer") + (goto-char (point-max))) + (message "Beginning of buffer") + (goto-char (point-min)))) + )) + +(defun vip-scroll-screen-back (arg) "Scroll to previous screen." (interactive "p") - (vip-scroll (- arg))) + (vip-scroll-screen (- arg))) (defun vip-scroll-down (arg) "Pull down half screen." @@ -4084,7 +4174,7 @@ Null string will repeat previous search." (search-failed (if (and (not fail-if-not-found) vip-search-wrap-around-t) (progn - (message "Search wrapped around end of buffer") + (message "Search wrapped around BOTTOM of buffer") (goto-char (point-min)) (vip-search string forward (cons 1 com) t start-point 'fail) ;; don't wait in macros @@ -4111,7 +4201,7 @@ Null string will repeat previous search." (search-failed (if (and (not fail-if-not-found) vip-search-wrap-around-t) (progn - (message "Search wrapped around beginning of buffer") + (message "Search wrapped around TOP of buffer") (goto-char (point-max)) (vip-search string forward (cons 1 com) t start-point 'fail) ;; don't wait in macros @@ -4743,6 +4833,7 @@ One can use `` and '' to temporarily jump 1 step back." (if (and (vip-same-line (point) vip-last-jump) (= (point) vip-last-jump-ignore)) (goto-char vip-last-jump)) + (if (null (mark t)) (error "Mark is not set in this buffer")) (if (= (point) (mark t)) (pop-mark)) (exchange-point-and-mark) (setq vip-last-jump (point-marker) @@ -4943,13 +5034,10 @@ sensitive for VI-style look-and-feel." vip-ex-style-editing-in-insert t vip-want-ctl-h-help nil) - (cond - ;; a novice or a beginner - ((eq vip-expert-level 1) - (global-set-key vip-toggle-key ;; in emacs-state - (if (vip-window-display-p) - 'vip-iconify - 'suspend-emacs)) + (cond ((eq vip-expert-level 1) ; novice or beginner + (global-set-key ; in emacs-state + vip-toggle-key + (if (vip-window-display-p) 'vip-iconify 'suspend-emacs)) (setq vip-no-multiple-ESC t vip-re-search t vip-vi-style-in-minibuffer t @@ -4957,8 +5045,8 @@ sensitive for VI-style look-and-feel." vip-want-emacs-keys-in-vi nil vip-want-emacs-keys-in-insert nil)) - ;; an intermediate to guru ((and (> vip-expert-level 1) (< vip-expert-level 5)) + ;; intermediate to guru (setq vip-no-multiple-ESC (if (vip-window-display-p) t 'twice) vip-want-emacs-keys-in-vi t vip-want-emacs-keys-in-insert (> vip-expert-level 2)) @@ -4983,9 +5071,9 @@ sensitive for VI-style look-and-feel." (cdr (assoc 'vip-no-multiple-ESC vip-saved-user-settings)))))) - ;; A wizard + ;; A wizard!! ;; Ideally, if 5 is selected, a buffer should pop up to let the - ;; user toggle variable values. + ;; user toggle the values of variables. (t (setq-default vip-ex-style-editing-in-insert (cdr (assoc 'vip-ex-style-editing-in-insert vip-saved-user-settings)) @@ -5365,17 +5453,11 @@ Mail anyway (y or n)? ") ;; This hook designed to enable Vi-style editing in comint-based modes." (defun vip-comint-mode-hook () - (setq require-final-newline nil) - (setq vip-ex-style-editing-in-insert nil + (setq require-final-newline nil + vip-ex-style-editing-in-insert nil vip-ex-style-motion nil) - (vip-add-local-keys 'vi-state - '(("\C-m" . comint-send-input) ; return - ("\C-d" . comint-delchar-or-maybe-eof))) ; \C-d - (vip-add-local-keys 'insert-state - '(("\C-m" . comint-send-input) ; return - ("\C-d" . comint-delchar-or-maybe-eof))) ; \C-d - ) - + (vip-change-state-to-insert)) + ;; This sets major mode hooks to make them come up in vi-state. (defun vip-set-hooks () @@ -5404,6 +5486,8 @@ Mail anyway (y or n)? ") (add-hook 'html-mode-hook 'viper-mode) (defvar html-helper-mode-hook) (add-hook 'html-helper-mode-hook 'viper-mode) + (defvar java-mode-hook) + (add-hook 'java-mode-hook 'viper-mode) (defvar emacs-lisp-mode-hook) (add-hook 'emacs-lisp-mode-hook 'viper-mode) @@ -5440,7 +5524,18 @@ Mail anyway (y or n)? ") (defvar emerge-startup-hook) (add-hook 'emerge-startup-hook 'vip-change-state-to-emacs) - ;; Run vip-change-state-to-vi after quitting emerge. + + ;; Tell vc-diff to put *vc* in Vi mode + (if (featurep 'vc) + (defadvice vc-diff (after vip-vc-ad activate) + "Force Vi state in VC diff buffer." + (vip-change-state-to-vi)) + (vip-eval-after-load + "vc" + '(defadvice vc-diff (after vip-vc-ad activate) + "Force Vi state in VC diff buffer." + (vip-change-state-to-vi)))) + (vip-eval-after-load "emerge" '(defadvice emerge-quit (after vip-emerge-advice activate) @@ -5473,7 +5568,10 @@ Mail anyway (y or n)? ") ;; Emacs shell, ange-ftp, and comint-based modes (defvar comint-mode-hook) - (add-hook 'comint-mode-hook 'vip-change-state-to-insert) + (vip-modify-major-mode + 'comint-mode 'insert-state vip-comint-mode-modifier-map) + (vip-modify-major-mode + 'comint-mode 'vi-state vip-comint-mode-modifier-map) (add-hook 'comint-mode-hook 'vip-comint-mode-hook) ;; Shell scripts @@ -5483,9 +5581,40 @@ Mail anyway (y or n)? ") (add-hook 'ksh-mode-hook 'viper-mode) ;; Dired - ;; This is only necessary when the user uses vip-modify-major-mode + (vip-modify-major-mode 'dired-mode 'emacs-state vip-dired-modifier-map) (add-hook 'dired-mode-hook 'vip-change-state-to-emacs) + ;; MH-E + (vip-modify-major-mode 'mh-folder-mode 'emacs-state vip-slash-and-colon-map) + ;; changing state to emacs is needed so the preceding will take hold + (add-hook 'mh-folder-mode-hook 'vip-change-state-to-emacs) + (add-hook 'mh-show-mode-hook 'viper-mode) + + ;; Gnus + (vip-modify-major-mode 'gnus-group-mode 'emacs-state vip-slash-and-colon-map) + (vip-modify-major-mode + 'gnus-summary-mode 'emacs-state vip-slash-and-colon-map) + ;; changing state to emacs is needed so the preceding will take hold + (add-hook 'gnus-group-mode-hook 'vip-change-state-to-emacs) + (add-hook 'gnus-summary-mode-hook 'vip-change-state-to-emacs) + (add-hook 'gnus-article-mode-hook 'viper-mode) + + ;; Info + (vip-modify-major-mode 'Info-mode 'emacs-state vip-slash-and-colon-map) + ;; Switching to emacs is needed so the above will take hold + (defadvice Info-mode (after vip-Info-ad activate) + "Switch to emacs mode." + (vip-change-state-to-emacs)) + + ;; Buffer menu + (vip-modify-major-mode + 'Buffer-menu-mode 'emacs-state vip-slash-and-colon-map) + ;; Switching to emacs is needed so the above will take hold + (defadvice Buffer-menu-mode (after vip-Buffer-menu-ad activate) + "Switch to emacs mode." + (vip-change-state-to-emacs)) + + ;; View mode (if vip-emacs-p (progn (defvar view-mode-hook) @@ -5566,6 +5695,7 @@ Mail anyway (y or n)? ") (vip-set-minibuffer-style) (vip-set-minibuffer-faces) (vip-set-search-face) +(vip-set-replace-overlay-face) (if vip-buffer-search-char (vip-buffer-search-enable)) (vip-update-alphanumeric-class) @@ -5594,15 +5724,10 @@ Mail anyway (y or n)? ") ;; This is taken care of by vip-insert-global-user-map. ;;(define-key vip-replace-map vip-ESC-key 'vip-intercept-ESC-key) -(define-key vip-insert-intercept-map vip-toggle-key 'vip-alternate-ESC) + ;; The default vip-toggle-key is \C-z; for the novice, it suspends or ;; iconifies Emacs -(define-key vip-vi-intercept-map vip-toggle-key - '(lambda () (interactive) - (if (and (< vip-expert-level 2) (equal vip-toggle-key "\C-z")) - (if (vip-window-display-p) (vip-iconify) (suspend-emacs)) - (vip-change-state-to-emacs)))) - +(define-key vip-vi-intercept-map vip-toggle-key 'vip-toggle-key-action) (define-key vip-emacs-intercept-map vip-toggle-key 'vip-change-state-to-vi)