Initial Commit
[packages] / xemacs-packages / xwem / lisp / xwem-keytt.el
1 ;;; xwem-keytt.el --- Keyboard translate table minor mode.
2
3 ;; Copyright (C) 2005 by XWEM Org.
4
5 ;; Author: Zajcev Evgeny <zevlg@yandex.ru>
6 ;; Created: Wed Feb 16 02:15:32 MSK 2005
7 ;; Keywords: xwem, mode
8
9 ;; This file is part of XWEM.
10
11 ;; XWEM is free software; you can redistribute it and/or modify it
12 ;; under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
14 ;; any later version.
15
16 ;; XWEM is distributed in the hope that it will be useful, but WITHOUT
17 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18 ;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
19 ;; License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with XEmacs; see the file COPYING.  If not, write to the Free
23 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24 ;; 02111-1307, USA.
25
26 ;;; Synched up with: Not in FSF
27
28 ;;; Commentary:
29
30 ;; Add this:
31
32 ;;    (xwem-keytt-global-mode)
33
34 ;; to your ~/.xwem/xwemrc.el to enable keytt minor mode at manage time
35 ;; for clients that have support.
36
37 ;;; Code:
38 \f
39
40 (require 'xwem-modes)
41
42 (defcustom xwem-keytt-synth-p nil
43   "*Non-nil mean use synthetic X events."
44   :type 'boolean)
45
46 (defvar xwem-keytt-minor-mode nil
47   "*Non-nil mean keytt minor mode is enabled.")
48 (xwem-make-variable-client-local 'xwem-keytt-minor-mode)
49
50 (defvar xwem-keytt-keymap nil
51   "Keymap for keytt minor mode.")
52 (xwem-make-variable-client-local 'xwem-keytt-keymap)
53
54 (defvar xwem-keytt-translation-keymaps nil
55   "Alist of keytt keymaps.
56 Form of entries is - (MATCH-SPEC . (KEYMAP . SYNTH-P)).")
57
58 (defun xwem-keytt-add-keymap (match-spec keymap &optional use-synth-p)
59   "Add new keymap for a MATCH-SPEC clients.
60 If USE-SYNTH-P is non-nil, then set `xwem-keyboard-use-synth-events'
61 to non-nil for clients that matches MATCH-SPEC."
62   (push (cons match-spec (cons keymap use-synth-p))
63         xwem-keytt-translation-keymaps))
64
65 (defun xwem-keytt-find-keymap (client)
66   "Find an appropriate keymap to use with CLIENT."
67   (let ((ktk xwem-keytt-translation-keymaps))
68     (while (and ktk (not (xwem-cl-match-p client (caar ktk))))
69       (setq ktk (cdr ktk)))
70     (cdr (car ktk))))
71
72 ;;;###autoload(autoload 'xwem-turn-on-keytt "xwem-keytt" nil t)
73 (define-xwem-command xwem-turn-on-keytt (&optional client)
74   "Enable keytt minor mode."
75   (xwem-interactive (list (xwem-cl-selected)))
76
77   ;; Establish a grab
78   (let ((kmap (xwem-keytt-find-keymap client)))
79     (when kmap
80       (xwem-client-local-variable-set client 'xwem-keytt-keymap (car kmap))
81       (xwem-client-local-variable-set client 'xwem-keyboard-use-synth-events (cdr kmap))
82       (xwem-turn-on-minor-mode client 'xwem-keytt-minor-mode))))
83
84 ;;;###autoload(autoload 'xwem-turn-off-keytt "xwem-keytt" nil t)
85 (define-xwem-command xwem-turn-off-keytt (&optional client)
86   "Disable keytt minor mode."
87   (xwem-interactive (list (xwem-cl-selected)))
88
89   (xwem-turn-off-minor-mode client 'xwem-keytt-minor-mode)
90   (xwem-client-local-variable-set client 'xwem-keytt-keymap nil))
91
92 ;;;###autoload(autoload 'xwem-keytt-minor-mode "xwem-keytt" nil t)
93 (define-xwem-command xwem-keytt-minor-mode (arg &optional client)
94   "Toggle keytt minor mode.
95 If ARG is positive - turn it on.
96 If ARG is negative - turn it off."
97   (xwem-interactive (list xwem-prefix-arg (xwem-cl-selected)))
98
99   (if (not (numberp arg))
100       (if (xwem-client-local-variable-value client 'xwem-keytt-minor-mode)
101           (xwem-turn-off-keytt client)
102         (xwem-turn-on-keytt client))
103     (if (> arg 0)
104         (xwem-turn-on-keytt client)
105       (xwem-turn-off-keytt client))))
106
107 ;;;###autoload
108 (defun xwem-keytt-global-mode ()
109   "Enable global mode.
110 For each client that have support for keytt minor mode,
111 xwem-keytt-minor-mode will be enabled at manage time."
112   (add-hook 'xwem-cl-manage-hook 'xwem-turn-on-keytt))
113
114 \f
115 ;;;; Add some predefined keymaps:
116
117 (defmacro xwem-keytt-define-universal-argument-commands (keymap)
118   "Define command universal prefix argument commands for KEYMAP."
119   `(progn
120      (define-key ,keymap (kbd "C-u") 'xwem-universal-argument)
121      (define-key ,keymap (kbd "C-0") 'xwem-universal-digit)
122      (define-key ,keymap (kbd "C-1") 'xwem-universal-digit)
123      (define-key ,keymap (kbd "C-2") 'xwem-universal-digit)
124      (define-key ,keymap (kbd "C-3") 'xwem-universal-digit)
125      (define-key ,keymap (kbd "C-4") 'xwem-universal-digit)
126      (define-key ,keymap (kbd "C-5") 'xwem-universal-digit)
127      (define-key ,keymap (kbd "C-6") 'xwem-universal-digit)
128      (define-key ,keymap (kbd "C-7") 'xwem-universal-digit)
129      (define-key ,keymap (kbd "C-8") 'xwem-universal-digit)
130      (define-key ,keymap (kbd "C-9") 'xwem-universal-digit)))
131
132 \f
133 ;; GV
134 (defvar xwem-keytt-gv-keymap (make-sparse-keymap 'xwem-keytt-gv-keymap)
135   "Keytt keymap for GV commands.")
136 (xwem-keytt-add-keymap '((application "gv")) xwem-keytt-gv-keymap t)
137
138 ;; Universal argument, so `C-5 C-n' for exampl will emulate five `C-n'
139 (xwem-keytt-define-universal-argument-commands xwem-keytt-gv-keymap)
140 (define-key xwem-keytt-gv-keymap (kbd "C-x C-f") (kbd "<self-insert> o")) ; open
141 (define-key xwem-keytt-gv-keymap (kbd "C-x C-c") (kbd "<self-insert> q")) ; exit
142 (define-key xwem-keytt-gv-keymap (kbd "C-x C-w") (kbd "<self-insert> s")) ; save marked
143 (define-key xwem-keytt-gv-keymap (kbd "C-x C-s") (kbd "<self-insert> S")) ; save
144 (define-key xwem-keytt-gv-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ; goto first page
145 (define-key xwem-keytt-gv-keymap (kbd "M->") (kbd "<self-insert> <end>")) ; goto last page
146 (define-key xwem-keytt-gv-keymap (kbd "C-l") (kbd "<self-insert> V")) ; center page
147 (define-key xwem-keytt-gv-keymap (kbd "C-n") (kbd "<self-insert> Sh-<down>")) ; scroll down
148 (define-key xwem-keytt-gv-keymap (kbd "C-p") (kbd "<self-insert> Sh-<up>")) ; scroll up
149 (define-key xwem-keytt-gv-keymap (kbd "C-v") (kbd "<self-insert> <next>"))
150 (define-key xwem-keytt-gv-keymap (kbd "M-v") (kbd "<self-insert> <prior>"))
151 (define-key xwem-keytt-gv-keymap (kbd "C-<SPC>") (kbd "<self-insert> M")) ; mark page
152 (define-key xwem-keytt-gv-keymap (kbd "C-g") (kbd "<self-insert> N")) ; unmark page
153
154 \f
155 ;; FIREFOX
156 (defvar xwem-keytt-firefox-keymap (make-sparse-keymap 'xwem-keytt-firefox-keymap)
157   "Keytt keymap for firefox commands.")
158 (xwem-keytt-add-keymap '((application "firefox")) xwem-keytt-firefox-keymap t)
159
160 (xwem-keytt-define-universal-argument-commands xwem-keytt-firefox-keymap)
161 (define-key xwem-keytt-firefox-keymap (kbd "C-x C-f") (kbd "<self-insert> C-l")) ; open url
162 (define-key xwem-keytt-firefox-keymap (kbd "C-x C-s") (kbd "<self-insert> C-s")) ; save url
163 (define-key xwem-keytt-firefox-keymap (kbd "C-x k") (kbd "<self-insert> C-w")) ; close
164 (define-key xwem-keytt-firefox-keymap (kbd "C-n") (kbd "<self-insert> <down>")) ; scroll down
165 (define-key xwem-keytt-firefox-keymap (kbd "C-p") (kbd "<self-insert> <up>")) ; scroll up
166 (define-key xwem-keytt-firefox-keymap (kbd "C-f") (kbd "<self-insert> <right>")) ; scroll right
167 (define-key xwem-keytt-firefox-keymap (kbd "C-b") (kbd "<self-insert> <left>")) ; scroll left
168 (define-key xwem-keytt-firefox-keymap (kbd "C-/") (kbd "<self-insert> C-z")) ; undo
169 (define-key xwem-keytt-firefox-keymap (kbd "C-v") (kbd "<self-insert> <next>")) ; scroll page down
170 (define-key xwem-keytt-firefox-keymap (kbd "M-v") (kbd "<self-insert> <prior>")) ; scroll page up
171 (define-key xwem-keytt-firefox-keymap (kbd "M->") (kbd "<self-insert> <end>")) ; goto end
172 (define-key xwem-keytt-firefox-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ; goto home
173 (define-key xwem-keytt-firefox-keymap (kbd "C-s") (kbd "<self-insert> /")) ; search
174 (define-key xwem-keytt-firefox-keymap (kbd "M-C-s") (kbd "<self-insert> <F3>")) ; next search
175 (define-key xwem-keytt-firefox-keymap (kbd "M-C-r") (kbd "<self-insert> Sh-<F3>")) ; prev search
176 (define-key xwem-keytt-firefox-keymap (kbd "C-g") (kbd "<self-insert> <esc>")) ; cancel search
177 (define-key xwem-keytt-firefox-keymap (kbd "C-x [") (kbd "<self-insert> M-<left>")) ; back
178 (define-key xwem-keytt-firefox-keymap (kbd "C-x ]") (kbd "<self-insert> M-<right>")) ; forward
179 ;(define-key xwem-keytt-firefox-keymap (kbd "+") (kbd "<self-insert> C-+")) ; zoom in
180 ;(define-key xwem-keytt-firefox-keymap (kbd "-") (kbd "<self-insert> C--")) ; zoom out
181 ;(define-key xwem-keytt-firefox-keymap (kbd "=") (kbd "<self-insert> C-0")) ; normal size
182 (define-key xwem-keytt-firefox-keymap (kbd "M-\\") (kbd "<self-insert> C-i")) ; page info
183 ;(define-key xwem-keytt-firefox-keymap (kbd "\\") (kbd "<self-insert> C-u")) ; page source
184 (define-key xwem-keytt-firefox-keymap (kbd "C-x r m") (kbd "<self-insert> C-d")) ; Add bookmark
185
186 \f
187 ;; ACROREAD
188 (defvar xwem-keytt-acroread-keymap (make-sparse-keymap 'xwem-keytt-acroread-keymap)
189   "Keytt keymap for acroread commands.")
190 (xwem-keytt-add-keymap '((application "acroread")) xwem-keytt-acroread-keymap t)
191
192 (xwem-keytt-define-universal-argument-commands xwem-keytt-acroread-keymap)
193 (define-key xwem-keytt-acroread-keymap (kbd "C-x C-f") (kbd "<self-insert> C-o")) ; open file
194 (define-key xwem-keytt-acroread-keymap (kbd "C-x C-c") (kbd "<self-insert> C-q")) ; quit
195 (define-key xwem-keytt-acroread-keymap (kbd "C-x C-s") (kbd "<self-insert> C-S")) ; save copy
196 (define-key xwem-keytt-acroread-keymap (kbd "C-x k") (kbd "<self-insert> C-w")) ; close file
197 (define-key xwem-keytt-acroread-keymap (kbd "C-n") (kbd "<self-insert> <down>")) ; scroll down
198 (define-key xwem-keytt-acroread-keymap (kbd "C-p") (kbd "<self-insert> <up>")) ; scroll up
199 (define-key xwem-keytt-acroread-keymap (kbd "C-v") (kbd "<self-insert> <next>")) ; next page
200 (define-key xwem-keytt-acroread-keymap (kbd "M-v") (kbd "<self-insert> <prior>")) ; prev page
201 (define-key xwem-keytt-acroread-keymap (kbd "M->") (kbd "<self-insert> C-Sh-<next>")) ; last page
202 (define-key xwem-keytt-acroread-keymap (kbd "M-<") (kbd "<self-insert> C-Sh-<prior>")) ; first page
203 (define-key xwem-keytt-acroread-keymap (kbd "C-M-l") (kbd "<self-insert> C-<left>")) ; first page
204 (define-key xwem-keytt-acroread-keymap (kbd "C-x h") (kbd "<self-insert> C-a")) ; select all
205 (define-key xwem-keytt-acroread-keymap (kbd "C-s") (kbd "<self-insert> C-f")) ; search
206 (define-key xwem-keytt-acroread-keymap (kbd "+") (kbd "<self-insert> C-=")) ; zoom in
207 (define-key xwem-keytt-acroread-keymap (kbd "-") (kbd "<self-insert> C--")) ; zoom out
208
209 \f
210 ;; XPDF
211 (defvar xwem-keytt-xpdf-keymap (make-sparse-keymap 'xwem-keytt-xpdf-keymap)
212   "Keytt keymap for xpdf commands.")
213 (xwem-keytt-add-keymap '((application "xpdf")) xwem-keytt-xpdf-keymap t)
214
215 (xwem-keytt-define-universal-argument-commands xwem-keytt-xpdf-keymap)
216 (define-key xwem-keytt-xpdf-keymap (kbd "C-x C-f") (kbd "<self-insert> o")) ; open
217 (define-key xwem-keytt-xpdf-keymap (kbd "C-x C-c") (kbd "<self-insert> q")) ; exit
218 (define-key xwem-keytt-xpdf-keymap (kbd "C-s") (kbd "<self-insert> f")) ; find text
219 (define-key xwem-keytt-xpdf-keymap (kbd "C-g") (kbd "<self-insert> <esc>")) ; stop searching
220 (define-key xwem-keytt-xpdf-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ; goto first page
221 (define-key xwem-keytt-xpdf-keymap (kbd "M->") (kbd "<self-insert> <end>")) ; goto last page
222 (define-key xwem-keytt-xpdf-keymap (kbd "C-n") (kbd "<self-insert> <down>")) ; scroll down
223 (define-key xwem-keytt-xpdf-keymap (kbd "C-p") (kbd "<self-insert> <up>")) ; scroll up
224 (define-key xwem-keytt-xpdf-keymap (kbd "C-v") (kbd "<self-insert> n"))
225 (define-key xwem-keytt-xpdf-keymap (kbd "M-v") (kbd "<self-insert> p"))
226
227 ;; XDVI
228 (defvar xwem-keytt-xdvi-keymap (make-sparse-keymap 'xwem-keytt-xdvi-keymap)
229   "Keytt keymap for xdvi commands.")
230 (xwem-keytt-add-keymap '((application "xdvi")) xwem-keytt-xdvi-keymap t)
231
232 (xwem-keytt-define-universal-argument-commands xwem-keytt-xdvi-keymap)
233 (define-key xwem-keytt-xdvi-keymap (kbd "C-x C-f") (kbd "<self-insert> C-F")) ; open
234 (define-key xwem-keytt-xdvi-keymap (kbd "C-x C-c") (kbd "<self-insert> q")) ; exit
235 (define-key xwem-keytt-xdvi-keymap (kbd "C-s")   (kbd "<self-insert> f")); find text
236 (define-key xwem-keytt-xdvi-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ; goto first page
237 (define-key xwem-keytt-xdvi-keymap (kbd "M->") (kbd "<self-insert> <end>")) ; goto last page
238 (define-key xwem-keytt-xdvi-keymap (kbd "C-n") (kbd "<self-insert> <down>")) ; scroll down
239 (define-key xwem-keytt-xdvi-keymap (kbd "C-p") (kbd "<self-insert> <up>")) ; scroll up
240 (define-key xwem-keytt-xdvi-keymap (kbd "C-v") (kbd "<self-insert> n"))
241 (define-key xwem-keytt-xdvi-keymap (kbd "M-v") (kbd "<self-insert> p"))
242 (define-key xwem-keytt-xdvi-keymap (kbd "C-l") (kbd "<self-insert> R")) ; reread dvi 
243
244 \f
245 ;; DJVIEW
246 ;;  Note: djvu has trouble with the file menu having two of the entries liked
247 ;;        to o so not likely to work untill its fixed.
248 (defvar xwem-keytt-djvu-keymap (make-sparse-keymap 'xwem-keytt-djvu-keymap)
249   "Keytt keymap for djvu commands.")
250 (xwem-keytt-add-keymap '((application "djview")) xwem-keytt-djvu-keymap t)
251
252 (xwem-keytt-define-universal-argument-commands xwem-keytt-djvu-keymap)
253 (define-key xwem-keytt-djvu-keymap (kbd "C-x C-f") (kbd "<self-insert> A-f O")) ; open
254 (define-key xwem-keytt-djvu-keymap (kbd "C-x C-c") (kbd "<self-insert> A-f x")) ; exit
255 (define-key xwem-keytt-djvu-keymap (kbd "C-x C-w") (kbd "<self-insert> A-f a")) ; save current page 
256 (define-key xwem-keytt-djvu-keymap (kbd "C-x C-s") (kbd "<self-insert> A-f o")) ; save
257
258 (define-key xwem-keytt-djvu-keymap (kbd "C-s") (kbd "<self-insert> f")); find text
259 (define-key xwem-keytt-djvu-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ; goto first page
260 (define-key xwem-keytt-djvu-keymap (kbd "M->") (kbd "<self-insert> <end>")) ; goto last page
261 (define-key xwem-keytt-djvu-keymap (kbd "C-n") (kbd "<self-insert> <down>")) ; scroll down
262 (define-key xwem-keytt-djvu-keymap (kbd "C-p") (kbd "<self-insert> <up>")) ; scroll up
263 (define-key xwem-keytt-djvu-keymap (kbd "C-v") (kbd "<self-insert> <next>"))
264 (define-key xwem-keytt-djvu-keymap (kbd "M-v") (kbd "<self-insert> <prior>"))
265
266 \f
267 ;; XCHM
268 ;;  Note: Must send mail to the xchm developer with patches to xchm and make
269 ;;        it have more stuff it menus attached to keymaps
270 (defvar xwem-keytt-xchm-keymap (make-sparse-keymap 'xwem-keytt-xchm-keymap)
271   "Keytt keymap for xchm commands.")
272 (xwem-keytt-add-keymap '((application "xchm")) xwem-keytt-xchm-keymap t)
273
274 (xwem-keytt-define-universal-argument-commands xwem-keytt-xchm-keymap)
275 (define-key xwem-keytt-xchm-keymap (kbd "C-x C-f") (kbd "<self-insert> C-o")) ; open
276 (define-key xwem-keytt-xchm-keymap (kbd "C-x C-c") (kbd "<self-insert> C-x")) ; exit
277 (define-key xwem-keytt-xchm-keymap (kbd "C-s")   (kbd "<self-insert> C-s ")); find show tree 
278
279 \f
280 ;;; On-load actions:
281 (xwem-add-minor-mode 'xwem-keytt-minor-mode "KeyTT" 'xwem-keytt-keymap)
282
283 \f
284 (provide 'xwem-keytt)
285
286 ;;; xwem-keytt.el ends here