slime 中默认的快捷键绑定(slime.el)
slime 有许多用于编程调试的命令函数,已经默认绑定到一些快捷键上,如下就是绑定的具体代码
;;;;; Key bindings
(defvar slime-parent-map nil
"Parent keymap for shared between all Slime related modes.")
(defvar slime-parent-bindings
'(("\M-." slime-edit-definition)
("\M-," slime-pop-find-definition-stack)
("\M-_" slime-edit-uses) ; for German layout
("\M-?" slime-edit-uses) ; for USian layout
("\C-x4." slime-edit-definition-other-window)
("\C-x5." slime-edit-definition-other-frame)
("\C-x\C-e" slime-eval-last-expression)
("\C-\M-x" slime-eval-defun)
;; Include PREFIX keys...
("\C-c" slime-prefix-map)))
(defvar slime-prefix-map nil
"Keymap for commands prefixed with `slime-prefix-key'.")
(defvar slime-prefix-bindings
'(("\C-r" slime-eval-region)
(":" slime-interactive-eval)
("\C-e" slime-interactive-eval)
("E" slime-edit-value)
("\C-l" slime-load-file)
("\C-b" slime-interrupt)
("\M-d" slime-disassemble-symbol)
("\C-t" slime-toggle-trace-fdefinition)
("I" slime-inspect)
("\C-xt" slime-list-threads)
("\C-xn" slime-cycle-connections)
("\C-xc" slime-list-connections)
("<" slime-list-callers)
(">" slime-list-callees)
;; Include DOC keys...
("\C-d" slime-doc-map)
;; Include XREF WHO-FOO keys...
("\C-w" slime-who-map)
))
(defvar slime-editing-map nil
"These keys are useful for buffers where the user can insert and
edit s-exprs, e.g. for source buffers and the REPL.")
(defvar slime-editing-keys
`(;; Arglist display & completion
("\M-\t" slime-complete-symbol)
(" " slime-space)
;; Evaluating
;;("\C-x\M-e" slime-eval-last-expression-display-output :inferior t)
("\C-c\C-p" slime-pprint-eval-last-expression)
;; Macroexpand
("\C-c\C-m" slime-expand-1)
("\C-c\M-m" slime-macroexpand-all)
;; Misc
("\C-c\C-u" slime-undefine-function)
(,(kbd "C-M-.") slime-next-location)
(,(kbd "C-M-,") slime-previous-location)
;; Obsolete, redundant bindings
("\C-c\C-i" slime-complete-symbol)
;;("\M-*" pop-tag-mark) ; almost to clever
))
(defvar slime-mode-map nil
"Keymap for slime-mode.")
(defvar slime-keys
'( ;; Compiler notes
("\M-p" slime-previous-note)
("\M-n" slime-next-note)
("\C-c\M-c" slime-remove-notes)
("\C-c\C-k" slime-compile-and-load-file)
("\C-c\M-k" slime-compile-file)
("\C-c\C-c" slime-compile-defun)))
(defun slime-nop ()
"The null command. Used to shadow currently-unused keybindings."
(interactive)
(call-interactively 'undefined))
(defvar slime-doc-map nil
"Keymap for documentation commands. Bound to a prefix key.")
(defvar slime-doc-bindings
'((?a slime-apropos)
(?z slime-apropos-all)
(?p slime-apropos-package)
(?d slime-describe-symbol)
(?f slime-describe-function)
(?h slime-documentation-lookup)
(?~ common-lisp-hyperspec-format)
(?# common-lisp-hyperspec-lookup-reader-macro)))
(defvar slime-who-map nil
"Keymap for who-xref commands. Bound to a prefix key.")
(defvar slime-who-bindings
'((?c slime-who-calls)
(?w slime-calls-who)
(?r slime-who-references)
(?b slime-who-binds)
(?s slime-who-sets)
(?m slime-who-macroexpands)
(?a slime-who-specializes)))
(defun slime-init-keymaps ()
"(Re)initialize the keymaps for `slime-mode'."
(interactive)
(slime-init-keymap 'slime-doc-map t t slime-doc-bindings)
(slime-init-keymap 'slime-who-map t t slime-who-bindings)
(slime-init-keymap 'slime-prefix-map t nil slime-prefix-bindings)
(slime-init-keymap 'slime-parent-map nil nil slime-parent-bindings)
(slime-init-keymap 'slime-editing-map nil nil slime-editing-keys)
(set-keymap-parent slime-editing-map slime-parent-map)
(slime-init-keymap 'slime-mode-map nil nil slime-keys)
(set-keymap-parent slime-mode-map slime-editing-map)
(set-keymap-parent slime-mode-indirect-map slime-mode-map))
(defun slime-init-keymap (keymap-name prefixp bothp bindings)
(set keymap-name (make-sparse-keymap))
(when prefixp (define-prefix-command keymap-name))
(slime-bind-keys (eval keymap-name) bothp bindings))
(defun slime-bind-keys (keymap bothp bindings)
"Add BINDINGS to KEYMAP.
If BOTHP is true also add bindings with control modifier."
(loop for (key command) in bindings do
(cond (bothp
(define-key keymap `[,key] command)
(unless (equal key ?h) ; But don't bind C-h
(define-key keymap `[(control ,key)] command)))
(t (define-key keymap key command)))))
(slime-init-keymaps)
(define-minor-mode slime-editing-mode
"Minor mode which makes slime-editing-map available.
\\{slime-editing-map}"
nil
nil
slime-editing-map)
。。。