(defvar upn-keymap (make-keymap))
(load "upn-my-keymaps")
(global-set-key [(control c)] upn-keymap)
;; | | | | | |
;; +----------+--------------+-------------------+-----------------+--------------+
;; | F8 | Define |Define local abbrev| Inverse global |Inverse local |
;; | |global abbrev | | abbrev | abbrev |
;; | | | | | |
;; +----------+--------------+-------------------+-----------------+--------------+
;; | F9 | Find all |Delete all matching| Copy buffer | Activate |
;; | |matching lines| lines | to kill ring | Tables |
;; +----------+--------------+-------------------+-----------------+--------------+
;; | | | Switch to shell | Build shell | Test shell |
;; | F10 | shell | with directory | | |
;; | | | update | | |
;; +----------+--------------+-------------------+-----------------+--------------+
;; | F11 |Kill rectangle| Yank rectangle |Copy rectangle to| String |
;; | | | | register | rectangle |
;; +----------+--------------+-------------------+-----------------+--------------+
;; | F12 | Other frame | Compile | Other window |Show function |
;; | | | | | name |
;; | | | | | |
;; +----------+--------------+-------------------+-----------------+--------------+
;; Since the function keys are not accessible from telnet windows, I map
;; C-c f 1 to F1 and C-c C-f 1 to F2 etc...
;; Also, I map C-c C-h for help-command, since C-h produces backspace
(global-set-key [(control c) (control h)] 'help-command)
;; C-/ for undo (already default) and C-. for redo
;; (global-set-key [(control ?/)] 'undo)
(global-set-key [(control ?.)] 'redo)
;; F1 is reserved for mode specific help features
(global-set-key [C-f1] 'apropos)
(global-set-key [S-f1] 'man)
(global-set-key [M-f1] 'grep)
(add-hook
'latex-mode-hook
'(lambda()
(local-set-key [M-f1] 'upn-grep-in-tex)))
(global-set-key [f2] 'indent-region)
(global-set-key [S-f2] 'upn-indent-buffer)
(global-set-key [C-f2] 'upn-pretty-print)
(global-set-key [M-f2] 'name-last-kbd-macro)
;; F2 and combinations redefined in comint modes, where
;; indenting etc do not make sense
(add-hook
'comint-mode-hook
'(lambda()
(local-set-key [f2] 'upn-comint-insert-prev-last-arg)
(local-set-key [S-f2] 'upn-fix-last-output)
))
;; S-F2 is rebound in VM mode, to pretty print the current
;; mail message
;; (define-key vm-mode-map [S-f2] 'upn-print-vm-message)
(global-set-key [f3] 'call-last-kbd-macro)
(global-set-key [C-f3] 'start-kbd-macro)
(global-set-key [S-f3] 'end-kbd-macro)
(global-set-key [M-f3] 'execute-kbd-macro)
(global-set-key [f4] 'font-lock-mode)
(global-set-key [C-f4] 'toggle-case-fold-search)
(global-set-key [S-f4] 'auto-fill-mode)
(global-set-key [M-f4] 'abbrev-mode)
(global-set-key [f5] 'upn-underline)
(global-set-key [C-f5] 'upn-comment-and-duplicate)
(global-set-key [S-f5] '(lambda()
(interactive)
(recover-file (buffer-file-name))))
(global-set-key [M-f5] 'upn-dispose-useless-buffers)
(global-set-key [f6] 'upn-upcase-last-word) ; Also on M--M-u
(global-set-key [C-f6] 'upn-upcase-whole-word)
(global-set-key [S-f6] 'upcase-region) ; Also on C-x C-u
(global-set-key [M-f6] 'upn-capitalize-last-word)
;; Register handling
;; S-f7 and f7 are used to insert and retrieve arbitary text from arbitary registers
(global-set-key [f7] 'insert-register)
(global-set-key [S-f7] 'copy-to-register)
;; C-f7 and M-f7 are used to store and retrieve buffer points.
;; By default, they store into and retrieve from register '0'.
;; Also, by providing a numeric prefix, we can store into any
;; register in '1', '2', '3', '4', '5', '6', '7', '8' and '9'.
;; These keys are chosen so that they can be used with the Control- and
;; Meta- numeric prefixes. For example C-5 C-f7 stores point to register '5',
;; while M-5 M-f7 jumps to that point.
(global-set-key [C-f7] 'upn-point-to-register)
(global-set-key [M-f7] 'upn-jump-to-register)
;; Abbreviation. Their default keybindings are too long.
(global-set-key [f8] 'add-global-abbrev) ;; C-x a g
(global-set-key [C-f8] 'add-mode-abbrev) ;; C-x a l
(global-set-key [S-f8] 'inverse-add-global-abbrev) ;; C-x a i g
(global-set-key [M-f8] 'inverse-add-mode-abbrev) ;; C-x a i l
(global-set-key [f9] 'find-all)
(global-set-key [C-f9] 'delete-matching-lines)
(global-set-key [S-f9] 'upn-copy-buffer-file-name-to-kill-ring)
(global-set-key [M-f9] 'upn-activate-tables)
;; F10 to invoke shell
;; C-F10 to invoke a shell and move to the directory of the current
;; buffer
;; S-F10 and M-f10 to go to some special shells
(global-set-key [f10] 'shell)
(global-set-key [C-f10] 'switch-to-shell)
(global-set-key [S-f10] '(lambda () (interactive) (shell "build-shell")))
(global-set-key [M-f10] '(lambda () (interactive) (shell "test-shell")))
;; Rectangle commands. Their default keybindings are too long
(global-set-key [f11] 'kill-rectangle) ;; C-x r k
(global-set-key [C-f11] 'yank-rectangle) ;; C-x r y
(global-set-key [S-f11] 'copy-rectangle-to-register) ;; C-x r r
(global-set-key [M-f11] 'string-rectangle) ;; C-x r t
;; f11 is called SunF36 on sun keyboards
(global-set-key [SunF36] 'kill-rectangle) ;; C-x r k
(global-set-key [C-SunF36] 'yank-rectangle) ;; C-x r y
(global-set-key [S-SunF36] 'copy-rectangle-to-register) ;; C-x r r
(global-set-key [M-SunF36] 'string-rectangle) ;; C-x r t
;; Some other very much used commands
(global-set-key [f12] 'other-frame) ;; C-x 5 o
(global-set-key [C-f12] 'compile)
(global-set-key [S-f12] 'other-window) ;; C-x o
(global-set-key [M-f12] 'upn-show-function-name)
;; f12 is called SunF37 on sun keyboards
(global-set-key [SunF37] 'other-frame) ;; C-x 5 o
(global-set-key [C-SunF37] 'upn-goto-inbox-summary)
(global-set-key [S-SunF37] 'other-window) ;; C-x o
(global-set-key [M-SunF37] 'upn-show-function-name)
;; Bind M-ENTER for resynching directories in shell mode
(add-hook
'shell-mode-hook
'(lambda()
;; (local-set-key [(meta return)] 'dirs)))
(local-set-key [(meta return)] 'upn-shell-resync-dirs)))
(global-set-key [(control return)] 'upn-visit-point-pathname)
(global-set-key "\C-c\C-o" 'oo-browser)
;; Rebindings by Mark A Flacy. HOME/END keys will go to
;; beginning/end of line, window or buffer, depending on the
;; current buffer position
(defun goto-line-screen-buffer-beginning ()
"If point is at the the start of the window, move it to the start of
the buffer. If point is not at the start of the window and
is at the start of a line, move the point to the start of the window.
Otherwise, move the point to the beginning of the line."
(interactive)
(cond ((= (window-start) (point))
(goto-char (point-min)))
((bolp)
(goto-char (window-start)))
(t
(beginning-of-line))))
(defun goto-line-screen-buffer-end ()
"If point is just before the end of the window, move the point
to the end of the buffer.
If point is not just before the end of the window and is at the
end of a line, move the point to just before the end of the window.
Otherwise, move the point to the end of the current line."
(interactive)
(cond ((= (- (window-end) 1) (point))
(goto-char (point-max)))
((eolp)
(goto-char (- (window-end) 1)))
(t
(end-of-line))))
(global-set-key [home] 'goto-line-screen-buffer-beginning)
(global-set-key [end] 'goto-line-screen-buffer-end)
(global-set-key [kpd-home] 'goto-line-screen-buffer-beginning)
(global-set-key [kpd-end] 'goto-line-screen-buffer-end)
;;; Traditional Navigational keys
;;; Normal keys and numeric keypad keys
;; (These are the defaults in Emacs 21.)
(global-set-key [(control home)] 'beginning-of-buffer) ; CTRL-HOME
(global-set-key [(control end)] 'end-of-buffer) ; CTRL-END
(global-set-key [(control kpd-home)] 'beginning-of-buffer) ; CTRL-HOME
(global-set-key [(control kpd-end)] 'end-of-buffer) ; CTRL-END
(global-set-key [kpd-pgup] 'scroll-down) ; keypad pgup
(global-set-key [kpd-pgdn] 'scroll-up) ; keypad pgdwn
;; M-g -> goto-line
(global-set-key [(meta g)] 'goto-line)
(global-set-key [(meta control z)] 'eval-last-sexp-sep-result)
(unless upn-is-it-xemacs
(global-set-key [(control x)(control b)] 'electric-buffer-list))
;;; Since I am using VM for reading e-mails, rebind the RMAIL keys to
;;; call VM functions
(unless upn-is-it-xemacs
(global-set-key [(control x) ?m] 'vm-mail)
(global-set-key [(control x) ?4 ?m] 'vm-mail-other-window)
(global-set-key [(control x) ?5 ?m] 'vm-mail-other-frame)
)
;;; Keyboard shortcuts for the worklog mode
(global-set-key [(control ?+)] 'upn-worklog-login)
(global-set-key [(control ?=)] 'upn-worklog-new-task)
;; This is normally bound to 'toggle-input-method, which I
;; don't use
(global-set-key [(control ?\\)] 'worklog-show)
(global-set-key [(control ?`)] 'bury-buffer)
;;; Other key bindings
;; (global-set-key [(meta m)] 'man) ;View man page
(defun upn-vt100-settings ()
(interactive)
(add-hook
'term-setup-hook
'(lambda ()
;; Termcap or terminfo should set these.
;; (define-key function-key-map "\e[A" [up])
;; (define-key function-key-map "\e[B" [down])
;; (define-key function-key-map "\e[C" [right])
;; (define-key function-key-map "\e[D" [left])
(define-key function-key-map "\e[1~" [find])
(define-key function-key-map "\e[2~" [insert])
;; (define-key function-key-map "\e[3~" [delete])
(define-key function-key-map "\e[4~" [select])
(define-key function-key-map "\e[5~" [prior])
(define-key function-key-map "\e[6~" [next])
(define-key function-key-map "\e[5s~" [S-prior])
(define-key function-key-map "\e[6s~" [S-next])
(define-key function-key-map "\e[11~" [f1])
(define-key function-key-map "\e[12~" [f2])
(define-key function-key-map "\e[13~" [f3])
(define-key function-key-map "\e[14~" [f4])
(define-key function-key-map "\e[15~" [f5])
(define-key function-key-map "\e[17~" [f6])
(define-key function-key-map "\e[18~" [f7])
(define-key function-key-map "\e[19~" [f8])
(define-key function-key-map "\e[20~" [f9])
(define-key function-key-map "\e[21~" [f10])
;; Customarily F11 is used as the ESC key.
;; The file that includes this one, takes care of that.
;; (additional note: since we are loading this file AFTER any other initializatons,
;; we should be ok to use f11 as a regular function key and not an escape key [brentg]).
(define-key function-key-map "\e[23~" [f11])
(define-key function-key-map "\e[24~" [f12])
(define-key function-key-map "\e[25~" [f13])
(define-key function-key-map "\e[26~" [f14])
(define-key function-key-map "\e[28~" [help])
(define-key function-key-map "\e[29~" [menu])
(define-key function-key-map "\e[31~" [f17])
(define-key function-key-map "\e[32~" [f18])
(define-key function-key-map "\e[33~" [f19])
(define-key function-key-map "\e[34~" [f20])
;; Termcap or terminfo should set these.
;; (define-key function-key-map "\eOA" [up])
;; (define-key function-key-map "\eOB" [down])
;; (define-key function-key-map "\eOC" [right])
;; (define-key function-key-map "\eOD" [left])
;; Redefine the above commented out entries as control arrow keys, and
;; force a different set of escape sequences, as the termcap will
;; force \eOA ... \eOD as up down left right.
(define-key function-key-map "\eOE" [C-up])
(define-key function-key-map "\eOF" [C-down])
(define-key function-key-map "\eOG" [C-right])
(define-key function-key-map "\eOH" [C-left])
;; define control function keys with some sequences that are not used:
(define-key function-key-map "\e[P1~" [C-f1])
(define-key function-key-map "\e[P2~" [C-f2])
(define-key function-key-map "\e[P3~" [C-f3])
(define-key function-key-map "\e[P4~" [C-f4])
(define-key function-key-map "\e[P5~" [C-f5])
(define-key function-key-map "\e[P6~" [C-f6])
(define-key function-key-map "\e[P7~" [C-f7])
(define-key function-key-map "\e[P8~" [C-f8])
(define-key function-key-map "\e[P9~" [C-f9])
(define-key function-key-map "\e[Q0~" [C-f10])
(define-key function-key-map "\e[Q1~" [C-f11])
(define-key function-key-map "\e[Q2~" [C-f12])
(define-key function-key-map "\e[sZ~" [S-f1])
(define-key function-key-map "\e[s2~" [S-f2])
(define-key function-key-map "\e[s3~" [S-f3])
(define-key function-key-map "\e[s4~" [S-f4])
(define-key function-key-map "\e[s5~" [S-f5])
(define-key function-key-map "\e[s6~" [S-f6])
(define-key function-key-map "\e[s7~" [S-f7])
(define-key function-key-map "\e[s8~" [S-f8])
(define-key function-key-map "\e[s9~" [S-f9])
(define-key function-key-map "\e[sA~" [S-f10])
(define-key function-key-map "\e[sB~" [S-f11])
(define-key function-key-map "\e[sC~" [S-f12])
(define-key function-key-map "\e[sI~" [S-tab])
(define-key function-key-map "\e[Qp~" [pause])
(define-key function-key-map "\e[cb~" [C-backspace])
(define-key function-key-map "\e[b~" [backspace])
(define-key function-key-map "\e[cr~" [C-return])
(define-key function-key-map "\e[asu~" [S-up])
(define-key function-key-map "\e[asd~" [S-down])
(define-key function-key-map "\e[asl~" [S-left])
(define-key function-key-map "\e[asr~" [S-right])
;; Termcap or terminfo should set these, but doesn't properly.
;; Termcap sets these to k1-k4, which get mapped to f1-f4 in term.c
(define-key function-key-map "\eOP" [kp-f1])
(define-key function-key-map "\eOQ" [kp-f2])
(define-key function-key-map "\eOR" [kp-f3])
(define-key function-key-map "\eOS" [kp-f4])
(define-key function-key-map "\eOI" [kp-tab])
(define-key function-key-map "\eOj" [kp-multiply])
(define-key function-key-map "\eOk" [kp-add])
(define-key function-key-map "\eOl" [kp-separator])
(define-key function-key-map "\eOM" [kp-enter])
(define-key function-key-map "\eOm" [kp-subtract])
(define-key function-key-map "\eOn" [kp-decimal])
(define-key function-key-map "\eOo" [kp-divide])
(define-key function-key-map "\eOp" [kp-0])
(define-key function-key-map "\eOq" [kp-1])
(define-key function-key-map "\eOr" [kp-2])
(define-key function-key-map "\eOs" [kp-3])
(define-key function-key-map "\eOt" [kp-4])
(define-key function-key-map "\eOu" [kp-5])
(define-key function-key-map "\eOv" [kp-6])
(define-key function-key-map "\eOw" [kp-7])
(define-key function-key-map "\eOx" [kp-8])
(define-key function-key-map "\eOy" [kp-9])
(define-key function-key-map "\e[ck0" [C-kp-0])
(define-key function-key-map "\e[ck1" [C-kp-1])
(define-key function-key-map "\e[ck2" [C-kp-2])
(define-key function-key-map "\e[ck3" [C-kp-3])
(define-key function-key-map "\e[ck4" [C-kp-4])
(define-key function-key-map "\e[ck5" [C-kp-5])
(define-key function-key-map "\e[ck6" [C-kp-6])
(define-key function-key-map "\e[ck7" [C-kp-7])
(define-key function-key-map "\e[ck8" [C-kp-8])
(define-key function-key-map "\e[ck9" [C-kp-9])
(define-key function-key-map "\e[uh~" [home])
(define-key function-key-map "\e[Ch~" [C-home])
(define-key function-key-map "\e[ue~" [end])
(define-key function-key-map "\e[Ce~" [C-end])
(define-key function-key-map "\e[ui~" [insert])
(define-key function-key-map "\e[C1~" [C-1])
(define-key function-key-map "\e[C2~" [C-2])
(define-key function-key-map "\e[C3~" [C-3])
(define-key function-key-map "\e[C4~" [C-4])
(define-key function-key-map "\e[C5~" [C-5])
(define-key function-key-map "\e[C6~" [C-6])
(define-key function-key-map "\e[C7~" [C-7])
(define-key function-key-map "\e[C8~" [C-8])
(define-key function-key-map "\e[C9~" [C-9])
(define-key function-key-map "\e[C0~" [C-0])
(define-key function-key-map "\e[C=~" [?\C-=])
(define-key function-key-map "\e[C`~" [?\C-`])
(define-key function-key-map "\e[C.~" [?\C-.])
(define-key function-key-map "\e[C,~" [?\C-,])
)))