Сколько сочетаний клавиш в Emacs?
Я смотрел на XKCD Comic 378:

Так я там интересно, сколько клавиатура ярлыки на самом деле? Насколько преувеличением является этот комикс?
Сколько сочетаний клавиш в Emacs?
Я смотрел на XKCD Comic 378:

Так я там интересно, сколько клавиатура ярлыки на самом деле? Насколько преувеличением является этот комикс?
Описывают ли M-x describe-bindings (или M-? b если его сопоставили) и сосчитать их.
Может отличаться в зависимости от пользовательских настроек, установленных модулей и т.д.
Вот мой, в моем списке 532 (несколько меньше, если не считать "скучных" в начале, например "backspace"):
Local Bindings:
key binding
--- -------
linefeed eval-print-last-sexp
C-j eval-print-last-sexp
M-; lisp-indent-for-comment
M-tab lisp-complete-symbol
M-C-i lisp-complete-symbol
M-C-q indent-sexp
M-C-x eval-defun
Global Bindings:
key binding
--- -------
! .. ~ self-insert-command
€ .. ÿ self-insert-command
again repeat-complex-command
backspace delete-backward-char
begin beginning-of-line
button1 mouse-track
button1up release-toolbar-button
button2 mouse-track
button3 popup-mode-menu
delete backward-or-forward-delete-char
deletechar delete-char
deleteline kill-line
down next-line
end end-of-line
execute execute-extended-command
f1 >
find search-forward
help help-for-help
home beginning-of-line
insert overwrite-mode
insertline open-line
kp-0 self-insert-command
kp-1 self-insert-command
kp-2 self-insert-command
kp-3 self-insert-command
kp-4 self-insert-command
kp-5 self-insert-command
kp-6 self-insert-command
kp-7 self-insert-command
kp-8 self-insert-command
kp-9 self-insert-command
kp-add self-insert-command
kp-decimal self-insert-command
kp-delete backward-or-forward-delete-char
kp-divide self-insert-command
kp-down next-line
kp-end end-of-line
kp-enter Kbd Macro: return
kp-equal self-insert-command
kp-home beginning-of-line
kp-insert overwrite-mode
kp-left backward-char-command
kp-multiply self-insert-command
kp-next scroll-up-command
kp-prior scroll-down-command
kp-right forward-char-command
kp-separator self-insert-command
kp-space self-insert-command
kp-subtract self-insert-command
kp-tab Kbd Macro: tab
kp-up previous-line
left backward-char-command
menu popup-mode-menu
next scroll-up-command
prior scroll-down-command
redo repeat-complex-command
return newline
right forward-char-command
space self-insert-command
tab indent-for-tab-command
undo undo
up previous-line
C- set-mark-command
C-- negative-argument
C-/ undo
C-0 .. C-9 digit-argument
C- mark-end-of-buffer
C-@ set-mark-command
C-T transpose-line-down
C-] abort-recursive-edit
C-_ undo
C-a beginning-of-line
C-b backward-char-command
C-c >
C-d delete-char
C-e end-of-line
C-f forward-char-command
C-g keyboard-quit
C-h >
C-i indent-for-tab-command
C-k kill-line
C-l recenter
C-m newline
C-n next-line
C-o open-line
C-p previous-line
C-q quoted-insert
C-r isearch-backward
C-s isearch-forward
C-t transpose-chars
C-u universal-argument
C-v scroll-up-command
C-w kill-region
C-x >
C-y yank
C-z suspend-emacs-or-iconify-frame
C-begin beginning-of-buffer
C-button1 mouse-track-insert
C-delete delete-primary-selection
C-down forward-block-of-lines
C-end end-of-buffer
C-home beginning-of-buffer
C-insert copy-primary-selection
C-kp-down forward-block-of-lines
C-kp-end end-of-buffer
C-kp-home beginning-of-buffer
C-kp-left backward-word
C-kp-next scroll-left
C-kp-prior scroll-right
C-kp-right forward-word
C-kp-up backward-block-of-lines
C-left backward-word
C-next scroll-left
C-prior scroll-right
C-right forward-word
C-space set-mark-command
C-tab other-window
C-up backward-block-of-lines
M-! shell-command
M-# calc-dispatch
M-$ ispell-word
M-% query-replace
M-' abbrev-prefix-mark
M-( insert-parentheses
M-) move-past-close-and-reindent
M-* pop-tag-mark
M-, tags-loop-continue
M-- negative-argument
M-. find-tag
M-/ dabbrev-expand
M-0 .. M-9 digit-argument
M-: eval-expression
M- end-of-buffer
M-? >
M-@ mark-word
M-T transpose-line-up
M-V scroll-other-window-down
M-\ delete-horizontal-space
M-^ delete-indentation
M-a backward-sentence
M-b backward-word
M-c capitalize-region-or-word
M-d kill-word
M-e forward-sentence
M-f forward-word
M-g goto-line
M-h mark-paragraph
M-i tab-to-tab-stop
M-j indent-new-comment-line
M-k kill-sentence
M-l downcase-region-or-word
M-m back-to-indentation
M-q fill-paragraph-or-region
M-r move-to-window-line
M-t transpose-words
M-u upcase-region-or-word
M-v scroll-down-command
M-w kill-ring-save
M-x execute-extended-command
M-y yank-pop
M-z zap-to-char
M-{ backward-paragraph
M-| shell-command-on-region
M-} forward-paragraph
M-~ not-modified
M-backspace backward-kill-word
M-button1 mouse-track-do-rectangle
M-delete backward-or-forward-kill-word
M-down forward-paragraph
M-end end-of-buffer-other-window
M-escape >
M-f4 save-buffers-kill-emacs
M-home beginning-of-buffer-other-window
M-kp-delete backward-or-forward-kill-word
M-kp-down forward-paragraph
M-kp-end end-of-buffer-other-window
M-kp-home beginning-of-buffer-other-window
M-kp-left backward-sexp
M-kp-next scroll-other-window
M-kp-prior scroll-other-window-down
M-kp-right forward-sexp
M-kp-up backward-paragraph
M-left backward-sexp
M-linefeed indent-new-comment-line
M-next scroll-other-window
M-prior scroll-other-window-down
M-right forward-sexp
M-space just-one-space
M-up backward-paragraph
M-C-% query-replace-regexp
M-C-- negative-argument
M-C-/ dabbrev-completion
M-C-0 .. M-C-9 digit-argument
M-C-@ mark-sexp
M-C-[ >
M-C-\ indent-region
M-C-a beginning-of-defun
M-C-b backward-sexp
M-C-c exit-recursive-edit
M-C-d down-list
M-C-e end-of-defun
M-C-f forward-sexp
M-C-h mark-defun
M-C-j indent-new-comment-line
M-C-k kill-sexp
M-C-l switch-to-other-buffer
M-C-n forward-list
M-C-o split-line
M-C-p backward-list
M-C-r isearch-backward-regexp
M-C-s isearch-forward-regexp
M-C-t transpose-sexps
M-C-u backward-up-list
M-C-v scroll-other-window
M-C-w append-next-kill
M-C-z activate-region
M-C-backspace backward-kill-sexp
M-C-button3 popup-buffer-menu
M-C-delete backward-or-forward-kill-sexp
M-C-down scroll-up-one
M-C-end end-of-defun
M-C-home beginning-of-defun
M-C-kp-delete backward-or-forward-kill-sexp
M-C-kp-down scroll-up-one
M-C-kp-end end-of-defun
M-C-kp-home beginning-of-defun
M-C-kp-left backward-sentence
M-C-kp-next forward-page
M-C-kp-prior backward-page
M-C-kp-right forward-sentence
M-C-kp-up scroll-down-one
M-C-left backward-sentence
M-C-next forward-page
M-C-prior backward-page
M-C-right forward-sentence
M-C-space mark-sexp
M-C-up scroll-down-one
Sh-button1 mouse-track-adjust
Sh-delete kill-primary-selection
Sh-insert yank-clipboard-selection
Sh-tab tab-to-tab-stop
C-Sh-button1 mouse-track-delete-and-insert
C-Sh-tab backward-other-window
M-C-[ : eval-expression
M-C-[ escape keyboard-escape-quit
M-C-[ C-[ keyboard-escape-quit
M-? ? help-for-help
M-? A command-apropos
M-? B describe-beta
M-? C customize
M-? F xemacs-local-faq
M-? a hyper-apropos
M-? b describe-bindings
M-? c describe-key-briefly
M-? d describe-function
M-? e describe-last-error
M-? f describe-function
M-? i info
M-? k describe-key
M-? l view-lossage
M-? m describe-mode
M-? n view-emacs-news
M-? p finder-by-keyword
M-? q help-quit
M-? s describe-syntax
M-? t help-with-tutorial
M-? v describe-variable
M-? w where-is
M-? f1 help-for-help
M-? help help-for-help
M-? return manual-entry
M-? C-c Info-goto-emacs-command-node
M-? C-d describe-distribution
M-? C-f Info-elisp-ref
M-? C-h help-for-help
M-? C-i Info-query
M-? C-k Info-goto-emacs-key-command-node
M-? C-l describe-copying
M-? C-m manual-entry
M-? C-n view-emacs-news
M-? C-p describe-pointer
M-? C-w describe-no-warranty
M-escape : eval-expression
M-escape escape keyboard-escape-quit
M-escape C-[ keyboard-escape-quit
C-c ! >
C-c M-h pydoc-commands
C-h ? help-for-help
C-h A command-apropos
C-h B describe-beta
C-h C customize
C-h F xemacs-local-faq
C-h a hyper-apropos
C-h b describe-bindings
C-h c describe-key-briefly
C-h d describe-function
C-h e describe-last-error
C-h f describe-function
C-h i info
C-h k describe-key
C-h l view-lossage
C-h m describe-mode
C-h n view-emacs-news
C-h p finder-by-keyword
C-h q help-quit
C-h s describe-syntax
C-h t help-with-tutorial
C-h v describe-variable
C-h w where-is
C-h f1 help-for-help
C-h help help-for-help
C-h return manual-entry
C-h C-c Info-goto-emacs-command-node
C-h C-d describe-distribution
C-h C-f Info-elisp-ref
C-h C-h help-for-help
C-h C-i Info-query
C-h C-k Info-goto-emacs-key-command-node
C-h C-l describe-copying
C-h C-m manual-entry
C-h C-n view-emacs-news
C-h C-p describe-pointer
C-h C-w describe-no-warranty
C-x $ set-selective-display
C-x ' expand-abbrev
C-x ( start-kbd-macro
C-x ) end-kbd-macro
C-x + balance-windows
C-x - shrink-window-if-larger-than-buffer
C-x . set-fill-prefix
C-x / point-to-register
C-x 0 delete-window
C-x 1 delete-other-windows
C-x 2 split-window-vertically
C-x 3 split-window-horizontally
C-x 4 >
C-x 5 >
C-x 6 window-configuration-to-register
C-x ; set-comment-column
C-x scroll-right
C-x F >
C-x K find-function-on-key
C-x V find-variable
C-x [ backward-page
C-x ] forward-page
C-x ^ enlarge-window
C-x ` next-error
C-x a >
C-x b switch-to-buffer
C-x d dired
C-x e call-last-kbd-macro
C-x f set-fill-column
C-x g insert-register
C-x h mark-whole-buffer
C-x i insert-file
C-x j jump-to-register
C-x k kill-buffer
C-x l count-lines-page
C-x m compose-mail
C-x n >
C-x o other-window
C-x q kbd-macro-query
C-x r >
C-x s save-some-buffers
C-x u advertised-undo
C-x x copy-to-register
C-x { shrink-window-horizontally
C-x } enlarge-window-horizontally
C-x backspace backward-kill-sentence
C-x delete backward-or-forward-kill-sentence
C-x kp-delete backward-or-forward-kill-sentence
C-x linefeed dired-jump-back
C-x return >
C-x tab indent-rigidly
C-x C- pop-global-mark
C-x C-@ pop-global-mark
C-x C-b list-buffers
C-x C-c save-buffers-kill-emacs
C-x C-d list-directory
C-x C-e eval-last-sexp
C-x C-f find-file
C-x C-i indent-rigidly
C-x C-j dired-jump-back
C-x C-k edit-kbd-macro
C-x C-l downcase-region
C-x C-m >
C-x C-o delete-blank-lines
C-x C-p mark-page
C-x C-q toggle-read-only
C-x C-r find-file-read-only
C-x C-s save-buffer
C-x C-t transpose-lines
C-x C-u upcase-region
C-x C-v find-alternate-file
C-x C-w write-file
C-x C-x exchange-point-and-mark
C-x C-z suspend-or-iconify-emacs
C-x C-space pop-global-mark
C-x M-: repeat-complex-command
C-x M-escape repeat-complex-command
C-x M-C-[ repeat-complex-command
f1 ? help-for-help
f1 A command-apropos
f1 B describe-beta
f1 C customize
f1 F xemacs-local-faq
f1 a hyper-apropos
f1 b describe-bindings
f1 c describe-key-briefly
f1 d describe-function
f1 e describe-last-error
f1 f describe-function
f1 i info
f1 k describe-key
f1 l view-lossage
f1 m describe-mode
f1 n view-emacs-news
f1 p finder-by-keyword
f1 q help-quit
f1 s describe-syntax
f1 t help-with-tutorial
f1 v describe-variable
f1 w where-is
f1 f1 help-for-help
f1 help help-for-help
f1 return manual-entry
f1 C-c Info-goto-emacs-command-node
f1 C-d describe-distribution
f1 C-f Info-elisp-ref
f1 C-h help-for-help
f1 C-i Info-query
f1 C-k Info-goto-emacs-key-command-node
f1 C-l describe-copying
f1 C-m manual-entry
f1 C-n view-emacs-news
f1 C-p describe-pointer
f1 C-w describe-no-warranty
C-c ! a Footnote-add-footnote
C-c ! b Footnote-back-to-message
C-c ! c Footnote-cycle-style
C-c ! d Footnote-delete-footnote
C-c ! g Footnote-goto-footnote
C-c ! r Footnote-renumber-footnotes
C-c ! s Footnote-set-style
C-x 4 . find-tag-other-window
C-x 4 0 kill-buffer-and-window
C-x 4 F find-function-other-window
C-x 4 V find-variable-other-window
C-x 4 a add-change-log-entry-other-window
C-x 4 b switch-to-buffer-other-window
C-x 4 d dired-other-window
C-x 4 f find-file-other-window
C-x 4 l find-library-other-window
C-x 4 m compose-mail-other-window
C-x 4 r find-file-read-only-other-window
C-x 4 linefeed dired-jump-back-other-window
C-x 4 C-f find-file-other-window
C-x 4 C-j dired-jump-back-other-window
C-x 4 C-o display-buffer
C-x 5 0 delete-frame
C-x 5 2 make-frame
C-x 5 F find-function-other-frame
C-x 5 V find-variable-other-frame
C-x 5 b switch-to-buffer-other-frame
C-x 5 d dired-other-frame
C-x 5 f find-file-other-frame
C-x 5 l find-library-other-frame
C-x 5 m compose-mail-other-frame
C-x 5 o other-frame
C-x 5 r find-file-read-only-other-frame
C-x 5 linefeed dired-jump-back-other-frame
C-x 5 C-f find-file-other-frame
C-x 5 C-j dired-jump-back-other-frame
C-x F o facemenu-set-face
C-x a ' expand-abbrev
C-x a + add-mode-abbrev
C-x a - inverse-add-global-abbrev
C-x a e expand-abbrev
C-x a g add-global-abbrev
C-x a i >
C-x a l add-mode-abbrev
C-x a C-a add-mode-abbrev
C-x n d narrow-to-defun
C-x n n narrow-to-region
C-x n p narrow-to-page
C-x n w widen
C-x r + increment-register
C-x r b bookmark-jump
C-x r c clear-rectangle
C-x r d delete-rectangle
C-x r g insert-register
C-x r i insert-register
C-x r j jump-to-register
C-x r k kill-rectangle
C-x r l bookmark-bmenu-list
C-x r m bookmark-set
C-x r n number-to-register
C-x r o open-rectangle
C-x r p replace-rectangle
C-x r r copy-rectangle-to-register
C-x r s copy-to-register
C-x r t string-rectangle
C-x r w window-configuration-to-register
C-x r x copy-to-register
C-x r y yank-rectangle
C-x r space point-to-register
C-x r C-@ point-to-register
C-x r C-space point-to-register
C-x C-m F set-default-buffer-file-coding-system
C-x C-m c universal-coding-system-argument
C-x C-m f set-buffer-file-coding-system
C-x C-m p set-buffer-process-coding-system
C-x C-m t set-terminal-coding-system
C-x return F set-default-buffer-file-coding-system
C-x return c universal-coding-system-argument
C-x return f set-buffer-file-coding-system
C-x return p set-buffer-process-coding-system
C-x return t set-terminal-coding-system
C-x a i g inverse-add-global-abbrev
C-x a i l inverse-add-mode-abbrev
Также обратите внимание, что M-x ... позволяет вам выполнять любую команду, даже если она не ограничена, поэтому я предполагаю, что вы могли бы посчитать их как "сочетания клавиш" своего рода.