xyzzy
Top Page > Tips > Keybind Customize


Reference

書式

(define-key [キーマップ] #\[キー] ' [関数名])
(global-set-key #\[キー] ' [関数名])

 *global-keymap*に設定する場合は、特別にglobal-set-keyという関数が用意されています。それ以外はどちらも同じ書式です。

キーマップ

*global-keymap*
すべてのモード
*html-mode-map*
HTMLモード
*html+-mode-map* (html+-modeの導入が必要)
HTML+モード
*c-mode-map*
Cモード
*c++-mode-map*
C++モード
*lisp-mode-map*
Lispモード
*lisp-interaction-mode-map*
Lispインタラクションモード
ctl-x-map
C-xに続くコマンドのキーマップ
esc-map
ESCM-に続くコマンドのキーマップ
spec-map
C-cに続くコマンドのキーマップ
filer-keymap
ファイラーのキーマップ

使用できるキー一覧

標準

  • 単独、Ctrl+、Alt+、Ctrl+Alt+、が使用可能なもの
    !"#$%&'()*+,-./[]^_`{}~:<=>?@;\|
    0123456789
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    abcdefghijklmnopqrstuvwxyz

    記述例:
    「#\*」、「#\C-*」、「#\M-*」、「#\C-M-*」

    ただし、"'(),;`\|の9文字には
    「#\;」、「#\C-\;」、「#\M-\;」、「#\C-M-\;」
    というように「\」をつける必要がある。

  • 単独、Ctrl+、Alt+、が使用可能なもの
    SPC スペースキー

    記述例:
    「#\SPC」、「#\C-SPC」、「#\M-SPC」

  • 単独、Alt+、が使用可能なもの
    TAB Tabキー #\C-i と同じ
    LFD (LineFieldキー) #\C-j と同じ
    RET Enterキー #\C-m と同じ
    ESC Escキー #\C-[ と同じ
    DEL Deleteキー #\C-? と同じ
    NUL #\C-@ と同じ

    記述例:
    「#\TAB」、「#\M-TAB」

  • 単独、Ctrl+、Alt+、Ctrl+Alt+、Shift+、Ctrl+Shift+、Ctrl+Alt+Shift+、が使用可能なもの
    PageUp Page Upキー
    PageDown Page Downキー
    End Endキー
    Home Homeキー
    Left ←キー
    Up ↑キー
    Right →キー
    Down ↓キー
    Insert Insertキー
    Delete Deleteキー
    F1〜F24 F1〜F24キー
    LBtnDown マウス左ボタン押し
    LBtnUp マウス左ボタン離し
    LBtnMove マウス左ボタンドラッグ
    RBtnDown マウス右ボタン押し
    RBtnUp マウス右ボタン離し
    RBtnMove マウス右ボタンドラッグ
    MBtnDown マウス中ボタン押し
    MBtnUp マウス中ボタン離し
    MBtnMove マウス中ボタンドラッグ
    Select
    Print
    Execute
    Snapshot
    Help

    記述例:
    「#\PageUp」、「#\C-PageUp」、「#\S-PageUp」、「#\C-S-PageUp」、「#\M-Pageup」、「#\M-C-PageUp」、「#\M-S-PageUp」、「#\M-C-S-PageUp」

拡張

  • Enterキー
    • exkey-return
    • exkey-C-return
    • exkey-S-return
    • exkey-M-return
    • exkey-C-M-return
    • exkey-C-S-return
    • exkey-M-S-return
    • exkey-C-M-S-return
  • Tabキー
    • exkey-tab
    • exkey-C-tab
    • exkey-S-tab
    • exkey-C-S-tab
  • Escキー
    • exkey-escape
    • exkey-S-escape
  • Backspaceキー
    • exkey-backspace
    • exkey-C-backspace
    • exkey-M-backspace
    • exkey-S-backspace
    • exkey-C-M-backspace
    • exkey-C-S-backspace
    • exkey-M-S-backspace
    • exkey-C-M-S-backspace

C-iやC-mに別の機能を割り当てる

(setf (svref *kbd-translate-table* (char-code #\[キー1])) #\[キー2])
(global-set-key #\[キー2] '[関数名])

 一部のキーは、以下のように「同じもの」とみなされています。

Enter #\C-m
Tab #\C-i
Backspace #\C-h
Delete #\C-?
Esc #\C-[
LFD(Enter+Tab) #\C-j

 このキーに別の機能を割り当てるには、まず*kbd-translate-table*を使って空いているキー(キー2)に目的のキー(キー1)を割り当てます。この関数は、キー1が押された場合はキー2が押されたふりをする、というものです。
 その上で、キー2に目的の関数を割り当てます。
 例えば、C-jhtml+-insert-pathを、C-M-jhtml+-insert-path-dialogを割り当てるには、このようにします。

(setf (svref *kbd-translate-table* (char-code #\C-j)) #\C-F23)
  (define-key *html+-mode-map* #\C-F23      'html+-insert-path)
  (define-key *html+-mode-map* #\C-M-F23    'html+-insert-path-dialog)

 キー2はどのキーでも構いませんが、ファンクションキーでF13〜F24が空いているので、これを使うといいでしょう。
 同時押しもすべて使えますが(C-F20C-M-jにするなど)、複数の同時押しが絡むとややこしいので、キー1とキー2の同時押しは同じものにしておいた方がいいと思います。

その他

Windows風設定例

winkey2.l(新規作成)
(provide "winkey2")

(in-package "editor")

;;; winkey.lからコピー
(defvar *default-selection-keymap*
(let ((keymap (make-sparse-keymap)))
(define-key keymap #\C-c 'copy-selection-to-clipboard)
(define-key keymap #\C-x 'kill-selection-to-clipboard)
keymap))

(setq-default selection-keymap *default-selection-keymap*)
(global-set-key #\C-z 'undo)
(global-set-key #\C-v 'paste-from-clipboard)
(define-key esc-map #\C-x #'ctl-x-prefix)
(define-key esc-map #\C-c #'specific-command-prefix)


;;; Windowsっぽい設定
(global-set-key #\C-A 'selection-whole-buffer)
(global-set-key #\C-F 'search-dialog)
(global-set-key #\C-N 'new-file)
(global-set-key #\C-O 'open-filer)
(global-set-key #\C-P 'print-selected-buffer-dialog)
(global-set-key #\C-R 'replace-dialog)
(global-set-key #\C-S 'save-buffer-dialog)
(global-set-key #\Home 'beginning-of-virtual-line)
(global-set-key #\End 'end-of-virtual-line)
(global-set-key #\C-Home 'beginning-of-buffer)
(global-set-key #\C-End 'end-of-buffer)
(global-set-key #\S-Home 'selection-beginning-of-virtual-line)
(global-set-key #\S-End 'selection-end-of-virtual-line)
(global-set-key #\S-C-Home 'selection-beginning-of-buffer)
(global-set-key #\S-C-End 'selection-end-of-buffer)
(global-set-key #\F3 'search-forward-again)
(global-set-key #\S-F3 'search-backward-again)
(global-set-key #\M-F4 'kill-xyzzy)
(global-set-key #\C-F4 'close-selected-buffer)
(global-set-key #\C-Left 'backward-word)
(global-set-key #\C-Right 'forward-word)
(global-set-key #\S-C-Left 'selection-backward-word)
(global-set-key #\S-C-Right 'selection-forward-word)
siteinit.l(追加)
(load-library "winkey2")

 標準のwinkey.lだけでは足りないし、かといってgates.lではC-xC-cからの機能が軒並み死んでしまいます。そこで、足りないwinkey.lに追加する形で設定しましょう。
 ただし、winkey.lを書き替えると、バージョンアップの時にまた元のファイルが上書きされる危険もあるので、別ファイルを作ってxyzzy/site-lisp/に入れ、それをsiteinit.lから呼び出します。

キーボードマクロの開始・終了を同じキーに割り当てる

siteinit.l(追加)
(defun startend-kbd-macro()
  (interactive)
    (if (kbd-macro-saving-p)
        (progn
            (message "定義終了")
            (end-kbd-macro))
        (progn
            (message "定義開始")
            (start-kbd-macro))))
(global-set-key #\S-F1 'startend-kbd-macro)
▲トップページに戻る▲

解説

特殊な割当て

その他

Windows風

キーボードマクロの開始・終了