mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
new version
This commit is contained in:
parent
8d0cab5714
commit
41497c90ae
5 changed files with 248 additions and 187 deletions
|
|
@ -362,12 +362,14 @@
|
|||
(cons 'viper-vi-global-user-minor-mode viper-vi-global-user-map)
|
||||
(cons 'viper-vi-state-modifier-minor-mode
|
||||
(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))
|
||||
viper-empty-keymap))
|
||||
(cons 'viper-vi-diehard-minor-mode viper-vi-diehard-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)
|
||||
;; viper-insert-minibuffer-minor-mode must come after
|
||||
;; viper-replace-minor-mode
|
||||
|
|
@ -380,10 +382,10 @@
|
|||
viper-insert-global-user-map)
|
||||
(cons 'viper-insert-state-modifier-minor-mode
|
||||
(if (keymapp
|
||||
(cdr
|
||||
(assoc major-mode viper-insert-state-modifier-alist)))
|
||||
(cdr
|
||||
(assoc major-mode viper-insert-state-modifier-alist))
|
||||
(cdr (assoc major-mode
|
||||
viper-insert-state-modifier-alist)))
|
||||
(cdr (assoc major-mode
|
||||
viper-insert-state-modifier-alist))
|
||||
viper-empty-keymap))
|
||||
(cons 'viper-insert-diehard-minor-mode viper-insert-diehard-map)
|
||||
(cons 'viper-insert-basic-minor-mode viper-insert-basic-map)
|
||||
|
|
@ -574,8 +576,7 @@
|
|||
|
||||
(defsubst viper-downgrade-to-insert ()
|
||||
(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))
|
||||
(setq suff (nth count viper-smart-suffix-list)
|
||||
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
|
||||
(setq found t)
|
||||
(insert suff))))
|
||||
|
|
@ -3835,7 +3837,7 @@ cursor move past the beginning of line."
|
|||
(condition-case conds
|
||||
(if (or viper-allow-multiline-replace-regions
|
||||
(viper-same-line (viper-replace-start)
|
||||
(viper-replace-end)))
|
||||
(viper-replace-end)))
|
||||
(progn
|
||||
;; tabs cause problems in replace, so untabify
|
||||
(goto-char (viper-replace-end))
|
||||
|
|
|
|||
|
|
@ -325,16 +325,6 @@ delete the text being replaced, as in standard Vi."
|
|||
(viper-deflocalvar viper-replace-overlay nil "")
|
||||
(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 "$"
|
||||
"A string marking the end of replacement regions.
|
||||
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.
|
||||
(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
|
||||
|
|
|
|||
|
|
@ -424,7 +424,7 @@ this command."
|
|||
|
||||
(defun viper-mouse-catch-frame-switch (event arg)
|
||||
"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."
|
||||
(interactive "e\nP")
|
||||
(setq viper-frame-of-focus nil)
|
||||
|
|
|
|||
|
|
@ -50,16 +50,17 @@
|
|||
(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
|
||||
|
||||
;; 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
|
||||
(progn
|
||||
|
|
@ -108,14 +109,14 @@
|
|||
(cdr (assoc 'cursor-color (frame-parameters)))
|
||||
(color-instance-name (frame-property (selected-frame) 'cursor-color))))
|
||||
|
||||
(defun viper-set-face-pixmap (face pixmap)
|
||||
"Set face pixmap on a monochrome display."
|
||||
(if (and (viper-window-display-p) (not (viper-color-display-p)))
|
||||
(condition-case nil
|
||||
(set-face-background-pixmap face pixmap)
|
||||
(error
|
||||
(message "Pixmap not found for %S: %s" (face-name face) pixmap)
|
||||
(sit-for 1)))))
|
||||
;;(defun viper-set-face-pixmap (face pixmap)
|
||||
;; "Set face pixmap on a monochrome display."
|
||||
;; (if (and (viper-window-display-p) (not (viper-color-display-p)))
|
||||
;; (condition-case nil
|
||||
;; (set-face-background-pixmap face pixmap)
|
||||
;; (error
|
||||
;; (message "Pixmap not found for %S: %s" (face-name face) pixmap)
|
||||
;; (sit-for 1)))))
|
||||
|
||||
|
||||
;; OS/2
|
||||
|
|
@ -124,20 +125,16 @@
|
|||
(function (lambda (color) (assoc color pm-color-alist))))))
|
||||
|
||||
;; needed to smooth out the difference between Emacs and XEmacs
|
||||
(defsubst viper-italicize-face (face)
|
||||
(if viper-xemacs-p
|
||||
(make-face-italic face)
|
||||
(make-face-italic face nil 'noerror)))
|
||||
;;(defsubst viper-italicize-face (face)
|
||||
;; (if viper-xemacs-p
|
||||
;; (make-face-italic face)
|
||||
;; (make-face-italic face nil 'noerror)))
|
||||
|
||||
;; test if display is color and the colors are defined
|
||||
(defsubst viper-can-use-colors (&rest colors)
|
||||
(if (viper-color-display-p)
|
||||
(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)))
|
||||
;;(defsubst viper-can-use-colors (&rest colors)
|
||||
;; (if (viper-color-display-p)
|
||||
;; (not (memq nil (mapcar 'viper-color-defined-p colors)))
|
||||
;; ))
|
||||
|
||||
;; cursor colors
|
||||
(defun viper-change-cursor-color (new-color)
|
||||
|
|
@ -161,114 +158,6 @@
|
|||
(defsubst viper-restore-cursor-color-after-insert ()
|
||||
(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
|
||||
|
|
@ -979,10 +868,11 @@ to write a custom function, similar to `viper-ex-nontrivial-find-file-unix'."
|
|||
(defun viper-read-key ()
|
||||
(let ((overriding-local-map viper-overriding-map)
|
||||
(inhibit-quit t)
|
||||
key)
|
||||
help-char key)
|
||||
(use-global-map viper-overriding-map)
|
||||
(setq key (elt (read-key-sequence nil) 0))
|
||||
(use-global-map global-map)
|
||||
(unwind-protect
|
||||
(setq key (elt (read-key-sequence nil) 0))
|
||||
(use-global-map global-map))
|
||||
key))
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -361,8 +361,11 @@ DO NOT set this variable interactively."
|
|||
:tag "Set Viper Mode on Loading"
|
||||
:group 'viper)
|
||||
|
||||
(defcustom viper-non-vi-major-modes nil
|
||||
"*A list of major modes that should never come up in vi command mode.
|
||||
(defcustom viper-non-vi-major-modes
|
||||
'(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
|
||||
`dired-mode', `tar-mode', etc. So, don't put modes on this list, unless
|
||||
it comes up in a wrong Viper state."
|
||||
|
|
@ -599,7 +602,12 @@ remains buffer-local."
|
|||
;; unbind Viper mouse bindings
|
||||
(viper-unbind-mouse-search-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-set-emacs-state-searchstyle-macros nil 'dired-mode)
|
||||
(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
|
||||
(viper-modify-major-mode 'tar-mode 'emacs-state viper-slash-and-colon-map)
|
||||
(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
|
||||
(viper-modify-major-mode
|
||||
|
|
@ -770,8 +774,6 @@ remains buffer-local."
|
|||
;; 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-show-mode-hook 'viper-mode)
|
||||
(setq viper-non-vi-major-modes
|
||||
(cons 'mh-folder-mode viper-non-vi-major-modes))
|
||||
|
||||
;; Gnus
|
||||
(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-summary-mode-hook 'viper-change-state-to-emacs)
|
||||
(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
|
||||
(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)
|
||||
"Switch to emacs mode."
|
||||
(viper-change-state-to-emacs))
|
||||
(setq viper-non-vi-major-modes (cons 'Info-mode viper-non-vi-major-modes))
|
||||
|
||||
;; Buffer menu
|
||||
(viper-modify-major-mode
|
||||
|
|
@ -805,15 +803,12 @@ remains buffer-local."
|
|||
(defadvice Buffer-menu-mode (after viper-Buffer-menu-ad activate)
|
||||
"Switch to emacs mode."
|
||||
(viper-change-state-to-emacs))
|
||||
(setq viper-non-vi-major-modes
|
||||
(cons 'Buffer-menu-mode viper-non-vi-major-modes))
|
||||
|
||||
;; View mode
|
||||
(defvar view-mode-hook)
|
||||
(defvar view-hook)
|
||||
(add-hook 'view-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.
|
||||
;; Put summary and other VM buffers in Emacs state.
|
||||
|
|
@ -821,8 +816,6 @@ remains buffer-local."
|
|||
(defvar vm-summary-mode-hooks)
|
||||
(add-hook 'vm-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.
|
||||
;; 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-insert-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
|
||||
|
||||
|
||||
(if (eq viper-mode 'ask)
|
||||
(progn
|
||||
(save-window-excursion
|
||||
(with-output-to-temp-buffer " *viper-info*"
|
||||
(princ "
|
||||
;; Ask only if this-command/last-command are nil, i.e., when loading
|
||||
(cond ((and (eq viper-mode 'ask) (null this-command) (null last-command))
|
||||
(save-window-excursion
|
||||
(with-output-to-temp-buffer " *viper-info*"
|
||||
(princ "
|
||||
You have loaded Viper, and are about to Viperize your emacs!
|
||||
|
||||
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:
|
||||
**** The startup file name has been changed from .vip to .viper
|
||||
**** All vip-* style names have been converted to viper-* style."))
|
||||
(if (y-or-n-p "Viperize? ")
|
||||
(setq viper-mode t)
|
||||
(setq viper-mode nil))
|
||||
(message "")
|
||||
(kill-buffer " *viper-info*"))))
|
||||
(if (y-or-n-p "Viperize? ")
|
||||
(setq viper-mode t)
|
||||
(setq viper-mode nil))
|
||||
(message "")
|
||||
(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 ()
|
||||
(if (and (file-exists-p viper-custom-file-name)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue