• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/emacs-93/emacs/lisp/emulation/

Lines Matching +defs:viper +defs:vi +defs:intercept +defs:map

0 ;;; viper.el --- A full-featured Vi emulator for GNU Emacs and XEmacs,
12 (defconst viper-version "3.13.1 of October 23, 2006"
64 ;; 3. Viper supports vi-style undo.
66 ;; 4. Viper fully emulates (and improves upon) vi's replacement mode.
100 ;; (require 'viper)
114 ;; in the right state (either vi-state or emacs-state). For instance, text
115 ;; files come up in vi-state, while, say, Dired appears in emacs-state by
126 ;; (add-hook 'your-favorite-mode 'viper-mode)
128 ;; (add-hook 'your-favorite-mode 'viper-change-state-to-emacs)
135 ;; Each Viper state (insert, vi, replace) is implemented as a collection of
140 ;; viper-vi-intercept-minor-mode
141 ;; viper-vi-local-user-minor-mode
142 ;; viper-vi-global-user-minor-mode
143 ;; viper-vi-kbd-minor-mode
144 ;; viper-vi-state-modifier-minor-mode
145 ;; viper-vi-diehard-minor-mode
146 ;; viper-vi-basic-minor-mode
151 ;; The last viper-vi-basic-minor-mode contains most of the usual Vi bindings
153 ;; Novice users, however, may want to set their viper-expert-level to 1
154 ;; in their .viper file. This will enable viper-vi-diehard-minor-mode. This
159 ;; A skilled user should set viper-expert-level to at least 3. This will
161 ;; In this case, viper-vi-diehard-minor-mode is inactive.
164 ;; (setq viper-expert-level 4)
165 ;; in their ~/.viper files. This will unsuppress all Emacs keys that are not
168 ;; (setq viper-expert-level 5)
169 ;; in ~/.viper. Viper will then leave it up to the user to set the variables
170 ;; viper-want-* See viper-set-expert-level for details.
172 ;; The very first minor mode, viper-vi-intercept-minor-mode, is of no
176 ;; The second mode, viper-vi-local-user-minor-mode, usually has an
184 ;; viper-add-local-keys function (see its doc).
186 ;; The third minor mode, viper-vi-global-user-minor-mode, is also intended
187 ;; for the users but, unlike viper-vi-local-user-minor-mode, its key
191 ;; The fourth minor mode, viper-vi-kbd-minor-mode, is used by keyboard
194 ;; The fifth mode, viper-vi-state-modifier-minor-mode, can be used to set
198 ;; viper-vi-local-user-minor-mode, viper-vi-global-user-minor-mode,
199 ;; and viper-vi-state-modifier-minor-mode only.
203 ;; viper-insert-intercept-minor-mode
204 ;; viper-insert-local-user-minor-mode
205 ;; viper-insert-global-user-minor-mode
206 ;; viper-insert-kbd-minor-mode
207 ;; viper-insert-state-modifier-minor-mode
208 ;; viper-insert-diehard-minor-mode
209 ;; viper-insert-basic-minor-mode
212 ;; viper-insert-intercept-minor-mode is used to bind vital keys that are not
215 ;; The next mode, viper-insert-local-user-minor-mode, is used to customize
217 ;; viper-insert-global-user-minor-mode is like
218 ;; viper-insert-local-user-minor-mode, except that its bindings are seen in
219 ;; all Viper buffers. As with viper-vi-local-user-minor-mode, its bindings
220 ;; should be done via the function viper-add-local-keys. Bindings for
221 ;; viper-insert-global-user-minor-mode can be set with the define-key command.
223 ;; The next minor mode, viper-insert-kbd-minor-mode,
224 ;; is used for keyboard VI-style macros defined with :map!.
226 ;; The fifth minor mode, viper-insert-state-modifier-minor-mode, is like
227 ;; viper-vi-state-modifier-minor-mode, except that it is used in the Insert
230 ;; The minor mode viper-insert-diehard-minor-mode is in effect when
232 ;; The last minor mode, viper-insert-basic-minor-mode, is always in effect
239 ;; viper-emacs-local-user-minor-mode
240 ;; viper-emacs-global-user-minor-mode
241 ;; viper-emacs-kbd-minor-mode
242 ;; viper-emacs-state-modifier-minor-mode
245 ;; associated with viper-emacs-global-user-minor-mode,
246 ;; viper-emacs-global-user-map, overrides the global and local keymaps as
248 ;; viper-emacs-local-user-minor-mode, viper-emacs-local-user-map, overrides
250 ;; The keymap associated with viper-emacs-state-modifier-minor-mode
252 ;; viper-emacs-kbd-minor-mode is used to define Vi-style macros in Emacs
259 ;; viper-replace-minor-mode
261 ;; and its keymap is viper-replace-map. Replace minor mode is always
268 ;; Viper provides a special function, viper-add-local-keys, to do precisely
272 ;; (viper-add-local-keys 'insert-state '((key1 . func1) (key2 .func2)))
276 ;; buffer that was current at the time of the call to viper-add-local-keys.
279 ;; (kill-all-local-variables). See viper-add-local-keys for more details.
285 ;; convoluted. Instead of viper-command-argument, keymaps should bind the
287 ;; viper-delete that will delete things based on the value of
307 (defvar viper-expert-level)
308 (defvar viper-mode-string)
309 (defvar viper-major-mode-modifier-list)
316 (or (featurep 'viper-init)
317 (load "viper-init.el" nil nil 'nosuffix))
318 (or (featurep 'viper-cmd)
319 (load "viper-cmd.el" nil nil 'nosuffix))
323 (require 'viper-init)
324 (require 'viper-keym)
327 (defvar viper-custom-file-name (convert-standard-filename "~/.viper")
331 (defgroup viper nil
333 NOTE: Viper customization should be saved in `viper-custom-file-name', which
334 defaults to `~/.viper'."
335 :prefix "viper-"
338 (require 'viper-cmd)
340 (defgroup viper-misc nil
342 :prefix "viper-"
343 :group 'viper)
346 (defcustom viper-always t
347 "Non-nil means, arrange for vi-state to be a default when appropriate.
348 This is different from `viper-mode' variable in that `viper-mode' determines
349 whether to use Viper in the first place, while `viper-always', if nil, lets
353 :group 'viper-misc)
355 ;; Non-viper variables that need to be saved in case the user decides to
357 (defvar viper-saved-non-viper-variables nil)
359 (defcustom viper-mode (cond (noninteractive nil)
370 :group 'viper-misc)
372 (defcustom viper-vi-state-mode-list
417 :group 'viper-misc)
419 (defcustom viper-emacs-state-mode-list
451 major mode has been placed on `viper-vi-state-mode-list' or
452 `viper-insert-state-mode-list'. So, don't place a new mode on this list,
455 :group 'viper-misc)
457 (defcustom viper-insert-state-mode-list
466 :group 'viper-misc)
469 ;; used to set viper-major-mode-modifier-list in defcustom
470 (defun viper-apply-major-mode-modifiers (&optional symbol value)
474 (viper-modify-major-mode
476 viper-major-mode-modifier-list))
479 ;; different than in "normal" vi/insert/emacs states
480 (defcustom viper-major-mode-modifier-list
481 '((help-mode emacs-state viper-slash-and-colon-map)
482 (comint-mode insert-state viper-comint-mode-modifier-map)
483 (comint-mode vi-state viper-comint-mode-modifier-map)
484 (shell-mode insert-state viper-comint-mode-modifier-map)
485 (inferior-emacs-lisp-mode insert-state viper-comint-mode-modifier-map)
486 (shell-mode vi-state viper-comint-mode-modifier-map)
487 (ange-ftp-shell-mode insert-state viper-comint-mode-modifier-map)
488 (ange-ftp-shell-mode vi-state viper-comint-mode-modifier-map)
489 (internal-ange-ftp-mode insert-state viper-comint-mode-modifier-map)
490 (internal-ange-ftp-mode vi-state viper-comint-mode-modifier-map)
491 (dired-mode emacs-state viper-dired-modifier-map)
492 (tar-mode emacs-state viper-slash-and-colon-map)
493 (mh-folder-mode emacs-state viper-slash-and-colon-map)
494 (gnus-group-mode emacs-state viper-gnus-modifier-map)
495 (gnus-summary-mode emacs-state viper-gnus-modifier-map)
496 (Info-mode emacs-state viper-slash-and-colon-map)
497 (Buffer-menu-mode emacs-state viper-slash-and-colon-map)
498 (erc-mode insert-state viper-comint-mode-modifier-map)
499 (erc-mode vi-state viper-comint-mode-modifier-map)
502 The list has the structure: ((mode viper-state keymap) (mode viper-state
504 the minor-mode-map-alist) in the specified viper state.
513 (const vi-state)
516 :set 'viper-apply-major-mode-modifiers
517 :group 'viper-misc)
525 (defun toggle-viper-mode ()
529 (if (eq viper-mode t)
530 (viper-go-away)
531 (setq viper-mode nil)
532 (viper-mode)))
535 (defun viper-mode ()
536 "Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'."
540 ;; if the user requested viper-mode explicitly
541 (if viper-mode
543 (setq viper-mode t)
544 (load-library "viper"))
546 (if viper-first-time ; Important check. Prevents mix-up of startup
547 (progn ; and expert-level msgs when viper-mode recurses
548 (setq viper-first-time nil)
549 (if (not viper-inhibit-startup-message)
551 (setq viper-inhibit-startup-message t)
590 b. Print Viper manual, found in ./etc/viper.dvi
596 M-x viper-go-away
602 (viper-save-setting
603 'viper-inhibit-startup-message
605 viper-custom-file-name t))
611 (viper-set-expert-level 'dont-change-unless)))
613 (if (eq major-mode 'viper-mode)
616 (or (memq major-mode viper-emacs-state-mode-list) ; don't switch to Vi
617 (memq major-mode viper-insert-state-mode-list) ; don't switch
618 (viper-change-state-to-vi))
622 ;; Apply a little heuristic to invoke vi state on major-modes
623 ;; that are not listed in viper-vi-state-mode-list
624 (defun this-major-mode-requires-vi-state (mode)
625 (cond ((memq mode viper-vi-state-mode-list) t)
626 ((memq mode viper-emacs-state-mode-list) nil)
627 ((memq mode viper-insert-state-mode-list) nil)
634 (defun viper-comint-mode-hook ()
636 (setq viper-ex-style-editing nil
637 viper-ex-style-motion nil)
638 (viper-change-state-to-insert))
641 ;; remove viper hooks from SYMBOL
642 (defun viper-remove-hooks (symbol)
646 (remove-hook symbol 'viper-mode)
647 (remove-hook symbol 'viper-change-state-to-emacs)
648 (remove-hook symbol 'viper-change-state-to-insert)
649 (remove-hook symbol 'viper-change-state-to-vi)
654 (defun viper-delocalize-var (symbol)
661 (defun viper-go-away ()
670 ;; restore non-viper vars
673 (viper-standard-value
674 'next-line-add-newlines viper-saved-non-viper-variables)
676 (viper-standard-value
677 'require-final-newline viper-saved-non-viper-variables)
679 (viper-standard-value 'scroll-step viper-saved-non-viper-variables)
681 (viper-standard-value
682 'mode-line-buffer-identification viper-saved-non-viper-variables)
684 (delq 'viper-mode-string global-mode-string))
686 (if viper-emacs-p
689 (viper-standard-value
690 'mark-even-if-inactive viper-saved-non-viper-variables)))
694 (and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists))
695 (viper-delocalize-var 'minor-mode-map-alist))
696 (viper-delocalize-var 'require-final-newline)
697 (if viper-xemacs-p (viper-delocalize-var 'bar-cursor))
701 (ad-deactivate-regexp "viper-")
703 (setq viper-mode nil)
705 (when (and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists))
706 (setq emulation-mode-map-alists
707 (delq 'viper--intercept-key-maps
708 (delq 'viper--key-maps emulation-mode-map-alists))
711 (viper-delocalize-var 'viper-vi-minibuffer-minor-mode)
712 (viper-delocalize-var 'viper-insert-minibuffer-minor-mode)
713 (viper-delocalize-var 'viper-vi-intercept-minor-mode)
714 (viper-delocalize-var 'viper-insert-intercept-minor-mode)
716 (viper-delocalize-var 'viper-vi-local-user-minor-mode)
717 (viper-delocalize-var 'viper-vi-kbd-minor-mode)
718 (viper-delocalize-var 'viper-vi-global-user-minor-mode)
719 (viper-delocalize-var 'viper-vi-state-modifier-minor-mode)
720 (viper-delocalize-var 'viper-vi-diehard-minor-mode)
721 (viper-delocalize-var 'viper-vi-basic-minor-mode)
723 (viper-delocalize-var 'viper-replace-minor-mode)
725 (viper-delocalize-var 'viper-insert-local-user-minor-mode)
726 (viper-delocalize-var 'viper-insert-kbd-minor-mode)
727 (viper-delocalize-var 'viper-insert-global-user-minor-mode)
728 (viper-delocalize-var 'viper-insert-state-modifier-minor-mode)
729 (viper-delocalize-var 'viper-insert-diehard-minor-mode)
730 (viper-delocalize-var 'viper-insert-basic-minor-mode)
732 (viper-delocalize-var 'viper-emacs-intercept-minor-mode)
733 (viper-delocalize-var 'viper-emacs-local-user-minor-mode)
734 (viper-delocalize-var 'viper-emacs-kbd-minor-mode)
735 (viper-delocalize-var 'viper-emacs-global-user-minor-mode)
736 (viper-delocalize-var 'viper-emacs-state-modifier-minor-mode)
738 (viper-delocalize-var 'viper-current-state)
739 (viper-delocalize-var 'viper-mode-string)
741 (setq-default viper-vi-minibuffer-minor-mode nil
742 viper-insert-minibuffer-minor-mode nil
743 viper-vi-intercept-minor-mode nil
744 viper-insert-intercept-minor-mode nil
746 viper-vi-local-user-minor-mode nil
747 viper-vi-kbd-minor-mode nil
748 viper-vi-global-user-minor-mode nil
749 viper-vi-state-modifier-minor-mode nil
750 viper-vi-diehard-minor-mode nil
751 viper-vi-basic-minor-mode nil
753 viper-replace-minor-mode nil
755 viper-insert-local-user-minor-mode nil
756 viper-insert-kbd-minor-mode nil
757 viper-insert-global-user-minor-mode nil
758 viper-insert-state-modifier-minor-mode nil
759 viper-insert-diehard-minor-mode nil
760 viper-insert-basic-minor-mode nil
762 viper-emacs-intercept-minor-mode nil
763 viper-emacs-local-user-minor-mode nil
764 viper-emacs-kbd-minor-mode nil
765 viper-emacs-global-user-minor-mode nil
766 viper-emacs-state-modifier-minor-mode nil
768 viper-current-state 'emacs-state
769 viper-mode-string viper-emacs-state-id
772 ;; remove all hooks set by viper
773 (mapatoms 'viper-remove-hooks)
774 (remove-hook 'comint-mode-hook 'viper-comint-mode-hook)
775 (remove-hook 'erc-mode-hook 'viper-comint-mode-hook)
776 (remove-hook 'minibuffer-setup-hook 'viper-minibuffer-setup-sentinel)
777 (remove-hook 'change-major-mode-hook 'viper-major-mode-change-sentinel)
778 (remove-hook 'post-command-hook 'viper-minibuffer-post-command-hook)
781 (viper-unbind-mouse-search-key)
782 (viper-unbind-mouse-insert-key)
784 ;; This advice is undone earlier, when all advices matchine "viper-" are
786 (if viper-xemacs-p
787 (remove-hook 'mouse-leave-frame-hook 'viper-remember-current-frame))
788 ) ; end viper-go-away
792 ;; used in a hack that triggers vi command mode whenever needed
793 (defvar viper-new-major-mode-buffer-list nil)
796 (defun set-viper-state-in-major-mode ()
799 (if (viper-buffer-live-p buf)
801 (cond ((and (this-major-mode-requires-vi-state major-mode)
802 (eq viper-current-state 'emacs-state))
803 (viper-mode))
804 ((memq major-mode viper-emacs-state-mode-list)
805 ;; not checking (eq viper-current-state 'emacs-state)
806 ;; because viper-current-state could have gotten it by
807 ;; default. We need viper-change-state-to-emacs here to have
809 (viper-change-state-to-emacs))
810 ((and (memq major-mode viper-insert-state-mode-list)
811 (not (eq viper-current-state 'insert-state)))
812 (viper-change-state-to-insert))
815 viper-new-major-mode-buffer-list)
817 (setq viper-new-major-mode-buffer-list nil)
819 (remove-hook 'viper-post-command-hooks 'set-viper-state-in-major-mode))
821 ;; sets up post-command-hook to turn viper-mode, if the current mode is
823 (defun viper-major-mode-change-sentinel ()
826 (setq viper-new-major-mode-buffer-list
827 (cons (current-buffer) viper-new-major-mode-buffer-list))))
829 (add-hook 'viper-post-command-hooks 'set-viper-state-in-major-mode t))
833 ;; This sets major mode hooks to make them come up in vi-state.
834 (defun viper-set-hooks ()
835 ;; It is of course a misnomer to call viper-mode a `major mode'.
839 ;; When viper-mode is executed in such a case, it will set the major mode
842 (setq default-major-mode 'viper-mode))
844 (add-hook 'change-major-mode-hook 'viper-major-mode-change-sentinel)
845 (add-hook 'find-file-hooks 'set-viper-state-in-major-mode)
849 (add-hook 'text-mode-hook 'viper-mode)
852 (add-hook 'emerge-startup-hook 'viper-change-state-to-emacs)
854 ;; Zap bad bindings in flyspell-mouse-map, which prevent ESC from working
859 (define-key flyspell-mouse-map viper-ESC-key nil)))
860 ;; if viper is started from .emacs, it might be impossible to get certain
867 (list (cons 'viper-vi-state-cursor-color
868 (viper-get-cursor-color))))))
872 (defadvice vc-diff (after viper-vc-ad activate)
874 (viper-change-state-to-vi))
877 '(defadvice vc-diff (after viper-vc-ad activate)
879 (viper-change-state-to-vi))))
883 '(defadvice emerge-quit (after viper-emerge-advice activate)
884 "Run `viper-change-state-to-vi' after quitting emerge."
885 (viper-change-state-to-vi)))
887 (defadvice emerge-quit (after viper-emerge-advice activate)
888 "Run `viper-change-state-to-vi' after quitting emerge."
889 (viper-change-state-to-vi))
892 ;; thus overriding the local map. We don't need Vi mode here.
895 '(defadvice read-passwd-1 (before viper-passwd-ad activate)
897 (viper-change-state-to-emacs)))
899 (defadvice self-insert-command (around viper-self-insert-ad activate)
900 "Ignore all self-inserting keys in the vi-state."
901 (if (and (eq viper-current-state 'vi-state) (interactive-p))
906 (defadvice set-cursor-color (after viper-set-cursor-color-ad activate)
910 (list (cons 'viper-vi-state-cursor-color (ad-get-arg 0))))
913 (when (and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists))
916 'emulation-mode-map-alists 'viper--intercept-key-maps 100)
918 (add-to-ordered-list 'emulation-mode-map-alists 'viper--key-maps 500)
922 (add-hook 'comint-mode-hook 'viper-comint-mode-hook) ; comint
923 (add-hook 'erc-mode-hook 'viper-comint-mode-hook) ; ERC
926 (lambda () (setq viper-auto-indent nil)))
928 (viper-set-emacs-state-searchstyle-macros nil 'dired-mode) ; dired
929 (viper-set-emacs-state-searchstyle-macros nil 'tar-mode) ; tar
930 (viper-set-emacs-state-searchstyle-macros nil 'mh-folder-mode) ; mhe
931 (viper-set-emacs-state-searchstyle-macros nil 'gnus-group-mode) ; gnus
932 (viper-set-emacs-state-searchstyle-macros nil 'gnus-summary-mode)
933 (viper-set-emacs-state-searchstyle-macros nil 'Info-mode) ; info
934 (viper-set-emacs-state-searchstyle-macros nil 'Buffer-menu-mode) ;buffer-menu
936 ;; Modify major modes according to viper-major-mode-modifier-list
937 (viper-apply-major-mode-modifiers)
943 '(defadvice rmail-cease-edit (after viper-rmail-advice activate)
945 (viper-change-state-to-emacs)))
947 (defadvice rmail-cease-edit (after viper-rmail-advice activate)
949 (viper-change-state-to-emacs))
956 '(defadvice iso-accents-mode (around viper-iso-accents-advice activate)
957 "Set viper-automatic-iso-accents to iso-accents-mode."
960 (setq viper-automatic-iso-accents
961 (if (eq viper-current-state 'vi-state)
966 ;; else: toggle viper-automatic-iso-accents
967 (not viper-automatic-iso-accents))
970 ;; turn off ISO accents in vi-state
971 (if (eq viper-current-state 'vi-state)
972 (viper-set-iso-accents-mode nil))
973 (if (memq viper-current-state '(vi-state insert-state replace-state))
975 (if viper-automatic-iso-accents "on" "off")))
979 (if viper-emacs-p
982 (defadvice inactivate-input-method (after viper-mule-advice activate)
983 "Set viper-special-input-method to disable intl. input methods."
984 (viper-inactivate-input-method-action))
985 (defadvice activate-input-method (after viper-mule-advice activate)
986 "Set viper-special-input-method to enable intl. input methods."
987 (viper-activate-input-method-action))
995 'viper-activate-input-method-action t)
997 'viper-inactivate-input-method-action t)))
1000 '(defadvice toggle-input-method (around viper-mule-advice activate)
1001 "Adjust input-method toggling in vi-state."
1002 (if (and viper-special-input-method (eq viper-current-state 'vi-state))
1003 (viper-inactivate-input-method)
1006 ) ; viper-set-hooks
1010 (defun viper-non-hook-settings ()
1015 ;; setup emacs-supported vi-style feel
1020 (if viper-emacs-p
1026 (or (memq 'viper-mode-string global-mode-string)
1028 (append '("" viper-mode-string) (cdr global-mode-string))))
1030 (defadvice describe-key (before viper-describe-key-ad protect activate)
1031 "Force to read key via `viper-read-key-sequence'."
1033 (setq key (viper-read-key-sequence
1056 (before viper-describe-key-briefly-ad protect activate)
1057 "Force to read key via `viper-read-key-sequence'."
1059 (setq key (viper-read-key-sequence
1073 (defadvice find-file (before viper-add-suffix-advice activate)
1077 (cond ((and viper-xemacs-p (featurep 'mule))
1082 ((and viper-emacs-p (boundp 'find-file-wildcards))
1086 (defadvice find-file-other-window (before viper-add-suffix-advice activate)
1091 (cond ((and viper-xemacs-p (featurep 'mule))
1096 ((and viper-emacs-p (boundp 'find-file-wildcards))
1101 (defadvice find-file-other-frame (before viper-add-suffix-advice activate)
1106 (cond ((and viper-xemacs-p (featurep 'mule))
1111 ((and viper-emacs-p (boundp 'find-file-wildcards))
1116 (defadvice read-file-name (around viper-suffix-advice activate)
1117 "Tell `exit-minibuffer' to run `viper-file-add-suffix' as a hook."
1118 (let ((viper-minibuffer-exit-hook
1119 (append viper-minibuffer-exit-hook
1120 '(viper-minibuffer-trim-tail viper-file-add-suffix))))
1123 (defadvice start-kbd-macro (after viper-kbd-advice activate)
1125 This may be needed if the previous `:map' command terminated abnormally."
1126 (define-key viper-vi-intercept-map "\C-x)" nil)
1127 (define-key viper-insert-intercept-map "\C-x)" nil)
1128 (define-key viper-emacs-intercept-map "\C-x)" nil))
1131 viper-advice-add-minor-mode
1134 "Run viper-normalize-minor-mode-map-alist after adding a minor mode."
1135 (viper-normalize-minor-mode-map-alist)
1137 (and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists))
1138 (setq-default minor-mode-map-alist minor-mode-map-alist)))
1141 (if (viper-window-display-p)
1142 (if viper-xemacs-p
1144 'viper-remember-current-frame)
1145 (defadvice handle-switch-frame (before viper-frame-advice activate)
1147 (viper-remember-current-frame (selected-frame)))) )
1149 ) ; end viper-non-hook-settings
1155 (cond ((and (eq viper-mode 'ask) (null this-command) (null last-command))
1157 (with-output-to-temp-buffer " *viper-info*"
1167 (setq viper-mode t)
1168 (require 'viper)
1174 **** The startup file name has been changed from .vip to .viper
1175 **** All vip-* style names have been converted to viper-* style."))
1177 (setq viper-mode t)
1178 (setq viper-mode nil))
1180 (kill-buffer " *viper-info*")))
1182 ;; If viper-mode is t, then just continue. Viper will kick in.
1183 ((eq viper-mode t))
1185 ;; In this case, it was either through M-x viper-mode or via something
1187 ;; M-x viper-mode, then viper will kick in anyway.
1188 (t (setq viper-mode nil)))
1190 (defun viper-load-custom-file ()
1191 (if (and (file-exists-p viper-custom-file-name)
1193 (load viper-custom-file-name)))
1201 ;; save non-viper vars that Viper might change
1202 (if (null viper-saved-non-viper-variables)
1203 (setq viper-saved-non-viper-variables
1211 (if viper-emacs-p
1217 ;; These must be BEFORE ~/.viper is loaded,
1218 ;; so the user can unrecord them in ~/.viper.
1219 (if viper-mode
1222 (viper-non-hook-settings)
1225 (viper-record-kbd-macro
1226 (vector viper-repeat-from-history-key '\1) 'vi-state
1229 (viper-record-kbd-macro
1230 (vector viper-repeat-from-history-key '\2) 'vi-state
1234 (viper-set-searchstyle-toggling-macros nil)
1236 (viper-set-parsing-style-toggling-macro nil)
1238 ;; ~/.viper is loaded if exists
1239 (viper-load-custom-file)
1243 (viper-bind-mouse-search-key)
1244 (viper-bind-mouse-insert-key)
1250 ;; Applying Viper customization -- runs after (load .viper)
1253 ;; viper-expert-level
1254 (if (null viper-saved-user-settings)
1255 (setq viper-saved-user-settings
1256 (list (cons 'viper-want-ctl-h-help (list viper-want-ctl-h-help))
1257 (cons 'viper-always (list viper-always))
1258 (cons 'viper-no-multiple-ESC (list viper-no-multiple-ESC))
1259 (cons 'viper-ex-style-motion (list viper-ex-style-motion))
1260 (cons 'viper-ex-style-editing
1261 (list viper-ex-style-editing))
1262 (cons 'viper-want-emacs-keys-in-vi
1263 (list viper-want-emacs-keys-in-vi))
1264 (cons 'viper-electric-mode (list viper-electric-mode))
1265 (cons 'viper-want-emacs-keys-in-insert
1266 (list viper-want-emacs-keys-in-insert))
1267 (cons 'viper-re-search (list viper-re-search)))))
1270 (if viper-mode
1272 (viper-set-minibuffer-style)
1273 (if viper-buffer-search-char
1274 (viper-buffer-search-enable))
1275 (viper-update-syntax-classes 'set-default)
1281 (if viper-mode
1283 (viper-harness-minor-mode "compile")
1284 (viper-harness-minor-mode "outline")
1285 (viper-harness-minor-mode "allout")
1286 (viper-harness-minor-mode "xref")
1287 (viper-harness-minor-mode "lmenu")
1288 (viper-harness-minor-mode "vc")
1289 (viper-harness-minor-mode "ltx-math") ; LaTeX-math-mode in AUC-TeX, which
1290 (viper-harness-minor-mode "latex") ; sits in one of these two files
1291 (viper-harness-minor-mode "cyrillic")
1292 (viper-harness-minor-mode "russian")
1293 (viper-harness-minor-mode "view-less")
1294 (viper-harness-minor-mode "view")
1295 (viper-harness-minor-mode "reftex")
1296 (viper-harness-minor-mode "flyspell")
1300 ;; Intercept maps could go in viper-keym.el
1301 ;; We keep them here in case someone redefines them in ~/.viper
1303 (define-key viper-vi-intercept-map viper-ESC-key 'viper-intercept-ESC-key)
1304 (define-key viper-insert-intercept-map viper-ESC-key 'viper-intercept-ESC-key)
1306 ;; This is taken care of by viper-insert-global-user-map.
1307 ;;(define-key viper-replace-map viper-ESC-key 'viper-intercept-ESC-key)
1310 ;; The default viper-toggle-key is \C-z; for the novice, it suspends or
1312 (define-key viper-vi-intercept-map viper-toggle-key 'viper-toggle-key-action)
1314 viper-emacs-intercept-map viper-toggle-key 'viper-change-state-to-vi)
1318 ;;(define-key viper-emacs-intercept-map "\C-c\\" 'viper-escape-to-vi)
1319 ;;(define-key viper-insert-intercept-map "\C-c\\" 'viper-escape-to-vi)
1321 (if viper-mode
1322 (setq-default viper-emacs-intercept-minor-mode t
1323 viper-emacs-local-user-minor-mode t
1324 viper-emacs-global-user-minor-mode t
1325 viper-emacs-kbd-minor-mode t
1326 viper-emacs-state-modifier-minor-mode t))
1327 (if (and viper-mode (eq viper-current-state 'emacs-state))
1328 (setq viper-emacs-intercept-minor-mode t
1329 viper-emacs-local-user-minor-mode t
1330 viper-emacs-global-user-minor-mode t
1331 viper-emacs-kbd-minor-mode t
1332 viper-emacs-state-modifier-minor-mode t))
1335 (if (and viper-mode
1336 (or viper-always
1337 (and (< viper-expert-level 5) (> viper-expert-level 0))))
1338 (viper-set-hooks))
1343 ;; minor-mode-map-alist = nil, unless we call viper-change-state-*
1344 (if (and viper-mode (eq viper-current-state 'emacs-state))
1346 (viper-change-state-to-emacs)
1349 (boundp 'emulation-mode-map-alists))
1350 (setq-default minor-mode-map-alist minor-mode-map-alist))
1353 (if (and viper-mode (this-major-mode-requires-vi-state major-mode))
1354 (viper-mode))
1356 (if viper-mode
1360 (set-viper-state-in-major-mode))
1365 (run-hooks 'viper-load-hook) ; the last chance to change something
1367 (provide 'viper)
1371 ;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
1375 ;;; viper.el ends here