/[emacs]/emacs/lisp/emulation/viper-keym.el
ViewVC logotype

Diff of /emacs/lisp/emulation/viper-keym.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.27 by kifer, Tue Jan 8 04:36:00 2002 UTC revision 1.27.4.1 by miles, Fri Apr 4 06:20:19 2003 UTC
# Line 52  Line 52 
52    
53  (defvar viper-toggle-key "\C-z"  (defvar viper-toggle-key "\C-z"
54    "The key used to change states from emacs to Vi and back.    "The key used to change states from emacs to Vi and back.
55  In insert mode, this key also functions as Meta.  In insert mode, this key also functions as Meta.
56  Must be set in .viper file or prior to loading Viper.  Must be set in .viper file or prior to loading Viper.
57  This setting cannot be changed interactively.")  This setting cannot be changed interactively.")
58    
59  (defvar viper-ESC-key "\e"  (defvar viper-ESC-key "\e"
60    "Key used to ESC.    "Key used to ESC.
61  Must be set in .viper file or prior to loading Viper.  Must be set in .viper file or prior to loading Viper.
62  This setting cannot be changed interactively.")  This setting cannot be changed interactively.")
63      
64  ;;; Emacs keys in other states.    ;;; Emacs keys in other states.
65    
66  (defcustom viper-want-emacs-keys-in-insert t  (defcustom viper-want-emacs-keys-in-insert t
67    "*Set to nil if you want complete Vi compatibility in insert mode.    "*Set to nil if you want complete Vi compatibility in insert mode.
# Line 84  don't have a convenient Meta key. Line 84  don't have a convenient Meta key.
84  Setting viper-no-multiple-ESC to nil will allow as many multiple ESC,  Setting viper-no-multiple-ESC to nil will allow as many multiple ESC,
85  as is allowed by the major mode in effect."  as is allowed by the major mode in effect."
86    :type 'boolean    :type 'boolean
87    :group 'viper)    :group 'viper)
88    
89  (defcustom viper-want-ctl-h-help nil  (defcustom viper-want-ctl-h-help nil
90    "*If non-nil, C-h gets bound to help-command; otherwise, C-h gets the usual Vi bindings."    "*If non-nil, C-h gets bound to help-command; otherwise, C-h gets the usual Vi bindings."
# Line 103  as is allowed by the major mode in effec Line 103  as is allowed by the major mode in effec
103  ;; keymap used to zap all keymaps other than function-key-map,  ;; keymap used to zap all keymaps other than function-key-map,
104  ;; device-function-key-map, etc.  ;; device-function-key-map, etc.
105  (defvar viper-overriding-map (make-sparse-keymap))  (defvar viper-overriding-map (make-sparse-keymap))
106      
107  (viper-deflocalvar viper-vi-local-user-map (make-sparse-keymap)  (viper-deflocalvar viper-vi-local-user-map (make-sparse-keymap)
108    "Keymap for user-defined local bindings.    "Keymap for user-defined local bindings.
109  Useful for changing bindings such as ZZ in certain major modes.  Useful for changing bindings such as ZZ in certain major modes.
110  For instance, in letter-mode, one may want to bind ZZ to  For instance, in letter-mode, one may want to bind ZZ to
111  mh-send-letter.  In a newsreader such as gnus, tin, or rn, ZZ could be bound  mh-send-letter.  In a newsreader such as gnus, tin, or rn, ZZ could be bound
112  to save-buffers-kill-emacs then post article, etc.")  to save-buffers-kill-emacs then post article, etc.")
113  (put 'viper-vi-local-user-map 'permanent-local t)        (put 'viper-vi-local-user-map 'permanent-local t)
114    
115  (defvar viper-vi-global-user-map (make-sparse-keymap)  (defvar viper-vi-global-user-map (make-sparse-keymap)
116    "Keymap for user-defined global bindings.    "Keymap for user-defined global bindings.
# Line 126  This map is global, shared by all buffer Line 126  This map is global, shared by all buffer
126  (defvar viper-vi-diehard-map (make-sparse-keymap)  (defvar viper-vi-diehard-map (make-sparse-keymap)
127    "This keymap is in use when the user asks Viper to simulate Vi very closely.    "This keymap is in use when the user asks Viper to simulate Vi very closely.
128  This happens when viper-expert-level is 1 or 2.  See viper-set-expert-level.")  This happens when viper-expert-level is 1 or 2.  See viper-set-expert-level.")
129      
130    
131  (viper-deflocalvar viper-insert-local-user-map (make-sparse-keymap)  (viper-deflocalvar viper-insert-local-user-map (make-sparse-keymap)
132    "Auxiliary map for per-buffer user-defined keybindings in Insert state.")    "Auxiliary map for per-buffer user-defined keybindings in Insert state.")
133  (put 'viper-insert-local-user-map 'permanent-local t)    (put 'viper-insert-local-user-map 'permanent-local t)
134    
135  (defvar viper-insert-global-user-map (make-sparse-keymap)  (defvar viper-insert-global-user-map (make-sparse-keymap)
136    "Auxiliary map for global user-defined bindings in Insert state.")    "Auxiliary map for global user-defined bindings in Insert state.")
# Line 148  viper-insert-basic-map.  Not recommended Line 148  viper-insert-basic-map.  Not recommended
148    
149  (defvar viper-replace-map (make-sparse-keymap)  (defvar viper-replace-map (make-sparse-keymap)
150    "Map used in Viper's replace state.")    "Map used in Viper's replace state.")
151      
152  (defvar viper-emacs-global-user-map (make-sparse-keymap)  (defvar viper-emacs-global-user-map (make-sparse-keymap)
153    "Auxiliary map for global user-defined bindings in Emacs state.")    "Auxiliary map for global user-defined bindings in Emacs state.")
154    
155  (defvar  viper-emacs-kbd-map  (make-sparse-keymap)  (defvar  viper-emacs-kbd-map  (make-sparse-keymap)
156    "This keymap keeps Vi-style kbd macros for emacs mode.")    "This keymap keeps Vi-style kbd macros for emacs mode.")
157      
158  (viper-deflocalvar viper-emacs-local-user-map  (make-sparse-keymap)  (viper-deflocalvar viper-emacs-local-user-map  (make-sparse-keymap)
159    "Auxiliary map for local user-defined bindings in Emacs state.")    "Auxiliary map for local user-defined bindings in Emacs state.")
160  (put 'viper-emacs-local-user-map 'permanent-local t)    (put 'viper-emacs-local-user-map 'permanent-local t)
161    
162  ;; This keymap should stay empty  ;; This keymap should stay empty
163  (defvar viper-empty-keymap (make-sparse-keymap))  (defvar viper-empty-keymap (make-sparse-keymap))
# Line 170  viper-insert-basic-map.  Not recommended Line 170  viper-insert-basic-map.  Not recommended
170    
171  ;;; Variables used by minor modes  ;;; Variables used by minor modes
172    
173  ;; Association list of the form  ;; Association list of the form
174  ;; ((major-mode . keymap) (major-mode . keymap) ...)  ;; ((major-mode . keymap) (major-mode . keymap) ...)
175  ;; Viper uses these keymaps to make user-requested adjustments  ;; Viper uses these keymaps to make user-requested adjustments
176  ;; to its Vi state in various major modes.")  ;; to its Vi state in various major modes.")
177  (defvar viper-vi-state-modifier-alist nil)  (defvar viper-vi-state-modifier-alist nil)
178    
179  ;; Association list of the form  ;; Association list of the form
180  ;; ((major-mode . keymap) (major-mode . keymap) ...)  ;; ((major-mode . keymap) (major-mode . keymap) ...)
181  ;; Viper uses these keymaps to make user-requested adjustments  ;; Viper uses these keymaps to make user-requested adjustments
182  ;; to its Insert state in various major modes.")  ;; to its Insert state in various major modes.")
183  (defvar viper-insert-state-modifier-alist nil)  (defvar viper-insert-state-modifier-alist nil)
184    
185  ;; Association list of the form  ;; Association list of the form
186  ;; ((major-mode . keymap) (major-mode . keymap) ...)  ;; ((major-mode . keymap) (major-mode . keymap) ...)
187  ;; Viper uses these keymaps to make user-requested adjustments  ;; Viper uses these keymaps to make user-requested adjustments
188  ;; to its Emacs state in various major modes.  ;; to its Emacs state in various major modes.
# Line 240  viper-insert-basic-map.  Not recommended Line 240  viper-insert-basic-map.  Not recommended
240  (define-key viper-insert-basic-map "\C-d" 'viper-backward-indent)  (define-key viper-insert-basic-map "\C-d" 'viper-backward-indent)
241  (define-key viper-insert-basic-map "\C-w" 'viper-delete-backward-word)  (define-key viper-insert-basic-map "\C-w" 'viper-delete-backward-word)
242  (define-key viper-insert-basic-map "\C-t" 'viper-forward-indent)  (define-key viper-insert-basic-map "\C-t" 'viper-forward-indent)
243  (define-key viper-insert-basic-map  (define-key viper-insert-basic-map
244    (if viper-xemacs-p [(shift tab)] [S-tab]) 'viper-insert-tab)    (if viper-xemacs-p [(shift tab)] [S-tab]) 'viper-insert-tab)
245  (define-key viper-insert-basic-map "\C-v" 'quoted-insert)  (define-key viper-insert-basic-map "\C-v" 'quoted-insert)
246  (define-key viper-insert-basic-map "\C-?" 'viper-del-backward-char-in-insert)  (define-key viper-insert-basic-map "\C-?" 'viper-del-backward-char-in-insert)
# Line 420  viper-insert-basic-map.  Not recommended Line 420  viper-insert-basic-map.  Not recommended
420    
421    
422  ;;; Minibuffer keymap  ;;; Minibuffer keymap
423      
424    
425  (defvar viper-minibuffer-map (make-sparse-keymap)  (defvar viper-minibuffer-map (make-sparse-keymap)
426    "Keymap used to modify keys when Minibuffer is in Insert state.")    "Keymap used to modify keys when Minibuffer is in Insert state.")
427      
428  (define-key viper-minibuffer-map "\C-m" 'viper-exit-minibuffer)  (define-key viper-minibuffer-map "\C-m" 'viper-exit-minibuffer)
429  (define-key viper-minibuffer-map "\C-j" 'viper-exit-minibuffer)  (define-key viper-minibuffer-map "\C-j" 'viper-exit-minibuffer)
430    
# Line 469  Normally, this would be called from a ho Line 469  Normally, this would be called from a ho
469  on a per buffer basis.  on a per buffer basis.
470  Usage:  Usage:
471        (viper-add-local-keys state '((key-str . func) (key-str . func)...))   "        (viper-add-local-keys state '((key-str . func) (key-str . func)...))   "
472          
473    (let (map)    (let (map)
474      (cond ((eq state 'vi-state)      (cond ((eq state 'vi-state)
475             (if viper-need-new-vi-local-map             (if viper-need-new-vi-local-map
# Line 486  Usage: Line 486  Usage:
486                 (setq viper-emacs-local-user-map (make-sparse-keymap)))                 (setq viper-emacs-local-user-map (make-sparse-keymap)))
487             (setq viper-need-new-emacs-local-map nil             (setq viper-need-new-emacs-local-map nil
488                   map viper-emacs-local-user-map))                   map viper-emacs-local-user-map))
489            (t            (t
490             (error             (error
491              "Invalid state in viper-add-local-keys: %S.  Valid states: vi-state, insert-state or emacs-state" state)))              "Invalid state in viper-add-local-keys: %S.  Valid states: vi-state, insert-state or emacs-state" state)))
492    
# Line 507  sanity." Line 507  sanity."
507          viper-emacs-local-user-map (make-sparse-keymap)          viper-emacs-local-user-map (make-sparse-keymap)
508          viper-need-new-emacs-local-map nil)          viper-need-new-emacs-local-map nil)
509    (viper-normalize-minor-mode-map-alist))    (viper-normalize-minor-mode-map-alist))
510        
511    
512  (defun viper-modify-major-mode (mode state keymap)  (defun viper-modify-major-mode (mode state keymap)
513    "Modify key bindings in a major-mode in a Viper state using a keymap.    "Modify key bindings in a major-mode in a Viper state using a keymap.
# Line 530  Arguments: (major-mode viper-state keyma Line 530  Arguments: (major-mode viper-state keyma
530      (if (setq elt (assoc mode (eval alist)))      (if (setq elt (assoc mode (eval alist)))
531          (set alist (delq elt (eval alist))))          (set alist (delq elt (eval alist))))
532      (set alist (cons (cons mode keymap) (eval alist)))      (set alist (cons (cons mode keymap) (eval alist)))
533        
534      ;; Normalization usually doesn't help here, since one needs to      ;; Normalization usually doesn't help here, since one needs to
535      ;; normalize in the actual buffer where changes to the keymap are      ;; normalize in the actual buffer where changes to the keymap are
536      ;; to take place.  However, it doesn't hurt, and it helps whenever this      ;; to take place.  However, it doesn't hurt, and it helps whenever this
537      ;; function is actually called from within the affected buffer.      ;; function is actually called from within the affected buffer.
538      (viper-normalize-minor-mode-map-alist)      (viper-normalize-minor-mode-map-alist)
539        
540      (viper-set-mode-vars-for viper-current-state)))      (viper-set-mode-vars-for viper-current-state)))
541    
542        
543  ;; Displays variables that control Viper's keymaps  ;; Displays variables that control Viper's keymaps
544  (defun viper-debug-keymaps ()  (defun viper-debug-keymaps ()
545    (interactive)    (interactive)
# Line 575  Arguments: (major-mode viper-state keyma Line 575  Arguments: (major-mode viper-state keyma
575      (princ (format "viper-insert-global-user-minor-mode:  %S\n"      (princ (format "viper-insert-global-user-minor-mode:  %S\n"
576                     viper-insert-global-user-minor-mode))                     viper-insert-global-user-minor-mode))
577      (princ (format "viper-insert-kbd-minor-mode:  %S\n"      (princ (format "viper-insert-kbd-minor-mode:  %S\n"
578                     viper-insert-kbd-minor-mode))                     viper-insert-kbd-minor-mode))
579      (princ (format "viper-insert-state-modifier-minor-mode:  %S\n"      (princ (format "viper-insert-state-modifier-minor-mode:  %S\n"
580                     viper-insert-state-modifier-minor-mode))                     viper-insert-state-modifier-minor-mode))
581      (princ (format "viper-insert-diehard-minor-mode:  %S\n"      (princ (format "viper-insert-diehard-minor-mode:  %S\n"
# Line 590  Arguments: (major-mode viper-state keyma Line 590  Arguments: (major-mode viper-state keyma
590                     viper-emacs-global-user-minor-mode))                     viper-emacs-global-user-minor-mode))
591      (princ (format "viper-emacs-state-modifier-minor-mode:  %S\n"      (princ (format "viper-emacs-state-modifier-minor-mode:  %S\n"
592                     viper-emacs-state-modifier-minor-mode))                     viper-emacs-state-modifier-minor-mode))
593        
594      (princ (format "\nviper-expert-level  %S\n" viper-expert-level))      (princ (format "\nviper-expert-level  %S\n" viper-expert-level))
595      (princ (format "viper-no-multiple-ESC  %S\n" viper-no-multiple-ESC))      (princ (format "viper-no-multiple-ESC  %S\n" viper-no-multiple-ESC))
596      (princ (format "viper-always  %S\n" viper-always))      (princ (format "viper-always  %S\n" viper-always))
# Line 599  Arguments: (major-mode viper-state keyma Line 599  Arguments: (major-mode viper-state keyma
599      (princ (format "viper-ex-style-editing  %S\n"      (princ (format "viper-ex-style-editing  %S\n"
600                     viper-ex-style-editing))                     viper-ex-style-editing))
601      (princ (format "viper-want-emacs-keys-in-vi  %S\n"      (princ (format "viper-want-emacs-keys-in-vi  %S\n"
602                     viper-want-emacs-keys-in-vi))                     viper-want-emacs-keys-in-vi))
603      (princ (format "viper-want-emacs-keys-in-insert  %S\n"      (princ (format "viper-want-emacs-keys-in-insert  %S\n"
604                     viper-want-emacs-keys-in-insert))                     viper-want-emacs-keys-in-insert))
605      (princ (format "viper-want-ctl-h-help  %S\n" viper-want-ctl-h-help))      (princ (format "viper-want-ctl-h-help  %S\n" viper-want-ctl-h-help))
606        
607      (princ "\n\n\n")      (princ "\n\n\n")
608      (princ (format "Default value for minor-mode-map-alist:  \n%S\n\n"      (princ (format "Default value for minor-mode-map-alist:  \n%S\n\n"
609                     (default-value 'minor-mode-map-alist)))                     (default-value 'minor-mode-map-alist)))
610      (princ (format "Actual value for minor-mode-map-alist:  \n%S\n"      (princ (format "Actual value for minor-mode-map-alist:  \n%S\n"
611                     minor-mode-map-alist))                     minor-mode-map-alist))
612      ))      ))
613      
614    
615  ;;; Keymap utils  ;;; Keymap utils
616                
617  (defun viper-add-keymap (mapsrc mapdst)  (defun viper-add-keymap (mapsrc mapdst)
618    "Add contents of mapsrc to mapdst.  It is assumed that mapsrc is sparse."    "Add contents of mapsrc to mapdst.  It is assumed that mapsrc is sparse."
619    (viper-cond-compile-for-xemacs-or-emacs    (viper-cond-compile-for-xemacs-or-emacs
620     ;; xemacs     ;; xemacs
# Line 624  Arguments: (major-mode viper-state keyma Line 624  Arguments: (major-mode viper-state keyma
624     (mapcar (lambda (p) (define-key mapdst (vector (car p)) (cdr p)))     (mapcar (lambda (p) (define-key mapdst (vector (car p)) (cdr p)))
625             (cdr mapsrc))             (cdr mapsrc))
626     ))     ))
627      
628  (defun viper-modify-keymap (map alist)  (defun viper-modify-keymap (map alist)
629     "Modifies MAP with bindings specified in the ALIST.  The alist has the     "Modifies MAP with bindings specified in the ALIST.  The alist has the
630  form ((key . function) (key . function) ... )."  form ((key . function) (key . function) ... )."
631     (mapcar (lambda (p) (define-key map (eval (car p)) (cdr p)))     (mapcar (lambda (p) (define-key map (eval (car p)) (cdr p)))
632             alist))             alist))
633    
634    

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.27.4.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26