Imported sources
[vee.git] / viper.el
blob92ad670870b8b0bf46ba1f29390764fe074fc6b7
1 (setq-default ;; viper-always nil
2 viper-expert-level '5
3 viper-ex-style-editing nil
4 viper-ex-style-motion nil
5 viper-auto-indent t
6 viper-inhibit-startup-message t
7 viper-eletric-mode t
8 viper-want-ctl-h-help t
9 viper-want-emacs-keys-in-insert t
10 viper-want-emacs-keys-in-vi t
11 viper-vi-style-in-minibuffer nil
12 viper-no-multiple-ESC t
13 viper-case-fold-search t
14 viper-re-search t
15 viper-re-query-replace t
16 viper-syntax-preference 'emacs
17 viper-delete-backwards-in-replace t
18 viper-parse-sexp-ignore-comments nil
19 viper-ESC-moves-cursor-back nil)
21 (custom-set-variables '(viper-toggle-key [(control escape)]))
23 (defface viper-insert-face nil "Viper insert face")
25 (defun viper-add-mode-to-state (mode state)
26 (let* ((state-alist '((vi viper-vi-state-mode-list)
27 (emacs viper-emacs-state-mode-list)
28 (insert viper-insert-state-mode-list)))
29 (state-mode-list (assoc state state-alist)))
30 (add-to-list (cadr state-mode-list) mode)
31 (mapcar (lambda (x)
32 (set (cadr x) (remove mode (symbol-value (cadr x)))))
33 (remove state-mode-list state-alist))))
35 (put 'viper-add-local-keys 'lisp-indent-function 1)
37 (and (fboundp 'viper-buffer-search-enable)
38 (viper-buffer-search-enable))
40 (set 'viper-read-buffer-function
41 (cond
42 ((featurep 'ido) 'ido-read-buffer)
43 ((featurep 'iswitchb) 'iswitchb-read-buffer)
44 (t 'read-buffer)))
46 ;; FIXME
47 (and window-system
48 (setq viper-minibuffer-insert-face 'viper-insert-face
49 viper-vi-state-cursor-color "cyan"))
51 (add-hook 'viper-load-hook 'viper-define-aditional-bindings)
53 (defun viper-esc-command-lambda (command)
54 `(lambda nil (interactive)
55 (call-interactively (cond ((eq viper-current-state 'vi-state)
56 'viper-ESC)
57 ((eq viper-current-state 'insert-state)
58 'viper-exit-insert-state)
59 ((eq viper-current-state 'replace-state)
60 'viper-replace-state-exit-cmd)
61 (t 'viper-change-state-to-vi)))
62 (call-interactively ',(or (and (symbolp command)
63 (command-remapping command)) command))))
65 (defun viper-define-aditional-bindings nil
66 (define-key viper-vi-global-user-map [(meta ?#)] 'comment-or-uncomment-line-or-region)
67 (define-key viper-vi-global-user-map [(control ??)] 'help)
68 (define-key viper-vi-global-user-map "q" 'kill-buffer)
69 (define-key viper-vi-global-user-map "\M-[" 'backward-paragraph)
70 (define-key viper-vi-global-user-map "\M-]" 'forward-paragraph)
71 (define-key viper-vi-global-user-map "\C-f" 'forward-char)
72 (define-key viper-vi-global-user-map "\C-b" 'backward-char)
73 (define-key viper-vi-global-user-map "\M-v" 'scroll-down)
74 (define-key viper-vi-global-user-map "\C-v" 'scroll-up)
75 (define-key viper-vi-global-user-map "\C-y" 'yank)
76 (define-key viper-vi-global-user-map "\C-h" 'backward-word)
77 (define-key viper-vi-global-user-map "\C-l" 'forward-word)
78 ;;(define-key viper-vi-global-user-map " " 'scroll-up)
79 ;;(define-key viper-vi-global-user-map [(backspace)] 'scroll-down)
80 (define-key viper-vi-global-user-map "\C-j" 'forward-paragraph)
81 (define-key viper-vi-global-user-map "\C-k" 'backward-paragraph)
82 (define-key viper-vi-global-user-map "\C-xp"
83 (lambda nil (interactive) (other-window -1)))
84 (define-key viper-vi-global-user-map "\C-e"
85 (or (command-remapping 'move-end-of-line) 'move-end-of-line))
86 (define-key viper-insert-global-user-map "\C-xo"
87 (viper-esc-command-lambda 'other-window))
88 (define-key viper-insert-global-user-map "\C-xp"
89 (viper-esc-command-lambda (lambda nil (interactive) (other-window -1))))
90 (define-key viper-insert-global-user-map [(control return)]
91 (viper-esc-command-lambda 'viper-nil))
92 (define-key viper-insert-global-user-map "\C-x\C-s"
93 (viper-esc-command-lambda 'save-buffer))
94 (define-key viper-insert-global-user-map "\C-g"
95 (viper-esc-command-lambda 'keyboard-quit))
96 (define-key viper-insert-global-user-map "\C-]"
97 (viper-esc-command-lambda 'abort-recursive-edit))
98 (define-key viper-insert-global-user-map "\C-x\C-f"
99 (viper-esc-command-lambda 'find-file)))
101 (defun viper-show-current-state nil
102 (unless (window-minibuffer-p)
103 (message "%s %s %s"
104 (let ((str (buffer-name nil)))
105 (add-text-properties
106 0 (length str)
107 (list 'face
108 (cond ((eq viper-current-state 'vi-state)
109 'minibuffer-prompt)
110 ((eq viper-current-state 'insert-state)
111 'viper-insert-face)
112 ((eq viper-current-state 'replace-state)
113 'viper-replace-overlay-face)
114 ((eq viper-current-state 'emacs-state)
115 'mode-line)))
116 str)
117 str)
118 mode-name
119 (cond ((eq viper-current-state 'vi-state)
120 (if window-system
121 #("[ € v ı Ł ]"
122 0 1 (face widget-inactive-face)
123 2 9 (face fringe)
124 4 7 (face highlight)
125 10 11 (face widget-inactive-face))
126 "[ E v i L ]"))
127 ((eq viper-current-state 'insert-state)
128 (if window-system
129 #("[ ı n § ]"
130 0 1 (face widget-inactive-face)
131 2 7 (face viper-insert-face)
132 8 9 (face widget-inactive-face))
133 "[ I N S ]"))
134 ((eq viper-current-state 'replace-state)
135 (if window-system
136 #("[ r æ þ ]"
137 0 1 (face widget-inactive-face)
138 2 7 (face query-replace)
139 8 9 (face widget-inactive-face))
140 "[ R E P ]"))
141 ((eq viper-current-state 'emacs-state)
142 (if window-system
143 #("[ € µ æ ¢ § ]"
144 0 1 (face widget-inactive-face)
145 2 11 (face secondary-selection)
146 12 13 (face widget-inactive-face))
147 "[ E M A C S ]"))))))
149 (add-hook 'viper-vi-state-hook 'viper-show-current-state)
150 (add-hook 'viper-insert-state-hook 'viper-show-current-state)
151 (add-hook 'viper-replace-state-hook 'viper-show-current-state)
152 (add-hook 'viper-emacs-state-hook 'viper-show-current-state)
154 (provide 'dot-viper)