Variable: hkey-alist
hkey-alist is a variable defined in hui-mouse.el.
Value
Large value
(((and (boundp 'company-active-map)
(memq company-active-map (current-minor-mode-maps)))
(smart-company-to-definition) smart-company-help)
((eq major-mode 'treemacs-mode) (smart-treemacs) smart-treemacs)
((eq major-mode 'dired-sidebar-mode) (smart-dired-sidebar)
smart-dired-sidebar)
((button-at (point))
(smart-push-button nil (mouse-event-p last-command-event))
smart-push-button-help nil (mouse-event-p last-command-event))
((and (bound-and-true-p vertico-mode)
(vertico--command-p nil (current-buffer)))
(funcall (lookup-key vertico-map (kbd "M-RET"))) funcall
(lookup-key vertico-map (kbd "M-RET")))
((and hargs:reading-type (> (minibuffer-depth) 0)
(eq (selected-window) (minibuffer-window))
(not (bound-and-true-p ivy-mode))
(not
(and (bound-and-true-p vertico-mode)
(vertico--command-p nil (current-buffer))))
(not (eq hargs:reading-type 'hmenu)) (not (smart-helm-alive-p)))
(funcall (key-binding (kbd "RET"))) smart-completion-help)
((and (> (minibuffer-depth) 0) (setq hkey-value (hargs:at-p)))
(hargs:select-p hkey-value) hargs:select-p hkey-value 'assist)
((and (> (minibuffer-depth) 0)
(eq (selected-window) (minibuffer-window))
(or (eq hargs:reading-type 'hmenu) (smart-helm-alive-p)))
(funcall (key-binding (kbd "RET"))) funcall
(key-binding (kbd "RET")))
((and (smart-eolp)
(not
(and (funcall hsys-org-mode-function)
(not (equal hsys-org-enable-smart-keys t)))))
(hact action-key-eol-function) hact assist-key-eol-function)
((and (not (hyperb:stack-frame '(smart-org)))
(let ((hrule:action #'actype:identity)) (smart-org)))
(smart-org) smart-org)
((and (boundp 'id-edit-mode) id-edit-mode (not buffer-read-only)
(not (smart-helm-alive-p)))
(id-edit-yank) id-edit-yank)
((hsys-xref-item-at-point) (xref-goto-xref)
xref-show-location-at-point)
((eq major-mode 'smart-menu-mode) (smart-menu-select) smart-menu-help)
((derived-mode-p 'dired-mode) (smart-dired) smart-dired-assist)
((string-prefix-p "magit-" (symbol-name major-mode)) (smart-magit)
smart-magit-assist)
((and
(if (setq hkey-at-hbut (hbut:at-p))
(or (eq (point) (hattr:get 'hbut:current 'lbl-end))
(eq (point) (hattr:get 'hbut:current 'name-end)))
t)
(hui-select-at-delimited-thing-p))
(hui-select-thing) progn (hui-select-thing) (hmouse-kill-region))
((and
(if hkey-at-hbut
(or (eq (point) (hattr:get 'hbut:current 'lbl-end))
(eq (point) (hattr:get 'hbut:current 'name-end)))
t)
(hui-select-at-delimited-sexp-p))
(hui-select-mark-delimited-sexp) progn
(hui-select-mark-delimited-sexp) (hmouse-kill-region))
(hkey-at-hbut (hui:hbut-act 'hbut:current) hui:hbut-help
'hbut:current)
((and (fboundp 'smart-menu-choose-menu)
(setq hkey-value
(and hkey-always-display-menu (smart-menu-choose-menu)))
(not
(and (get-buffer-window *smart-menu-buffer*)
(eq hkey-value *smart-menu-curr*))))
(smart-menu hkey-value) smart-menu hkey-value)
((bound-and-true-p view-mode)
(cond ((last-line-p) (view-quit))
((pos-visible-in-window-p (point-max)) (goto-char (point-max)))
(t (View-scroll-page-forward)))
View-scroll-page-backward)
((setq hkey-value
(and
(or (eq major-mode 'helm-major-mode)
(and (featurep 'helm)
(equal helm-action-buffer (buffer-name))))
(or (eolp) (smart-helm-at-header)
(smart-helm-line-has-action))))
(smart-helm) smart-helm-assist)
((and (eq major-mode 'ert-results-mode) (featurep 'ert-results)
(setq hkey-value (ert-results-filter-status-p)))
(smart-ert-results hkey-value) smart-ert-results-assist hkey-value)
((or (string-equal (buffer-name) "*Implementors*")
(string-match "-Elements\\'" (buffer-name))
(and (boundp 'br-feature-tags-file)
(stringp br-feature-tags-file)
(equal br-feature-tags-file (hypb:buffer-file-name))))
(smart-element) hkey-help)
((eq major-mode 'occur-mode) (occur-mode-goto-occurrence)
occur-mode-goto-occurrence)
((eq major-mode 'moccur-mode) (moccur-mode-goto-occurrence)
moccur-mode-goto-occurrence)
((eq major-mode 'amoccur-mode) (amoccur-mode-goto-occurrence)
amoccur-mode-goto-occurrence)
((eq major-mode 'kotl-mode) (kotl-mode:action-key)
kotl-mode:assist-key)
((eq major-mode 'flymake-diagnostics-buffer-mode)
(flymake-goto-diagnostic (point)) flymake-show-diagnostic (point) t)
((eq major-mode 'profiler-report-mode) (smart-profiler-report)
smart-profiler-report-assist)
((eq major-mode 'rdb-mode) (rdb:action-key) rdb:assist-key)
((if (= (point) (point-max))
(string-match "^\\*Help\\|Help\\*$" (buffer-name)))
(hkey-help-hide) hkey-help-hide)
((eq major-mode 'Custom-mode) (smart-custom) smart-custom-assist)
((eq major-mode 'bookmark-bmenu-mode)
(bookmark-jump (bookmark-bmenu-bookmark)
(hpath:display-buffer-function))
hkey-help)
((eq major-mode 'pages-directory-mode) (pages-directory-goto)
pages-directory-goto)
((and (setq hkey-value (smart-prog-at-tag-p))
(hbut:is-p (intern-soft hkey-value)))
(ignore-errors (smart-prog-tag hkey-value)) hbut:report
(intern-soft hkey-value))
((and (setq hkey-value (smart-prog-at-tag-p))
(smart-tags-find-p hkey-value))
(ignore-errors (smart-prog-tag hkey-value)) ignore-errors
(smart-prog-tag hkey-value))
((and
(or
(and (derived-mode-p 'python-mode 'python-ts-mode)
(hypb:buffer-file-name))
(and (featurep 'hsys-org) (hsys-org-mode-p)
(equal (hsys-org-get-value :language) "python"))
(let ((case-fold-search))
(string-match "\\`\\([ *]?Pydoc[: ]\\|\\*?Python\\)"
(buffer-name))))
(setq hkey-value (smart-python-at-tag-p)))
(smart-python hkey-value) smart-python hkey-value 'next-tag)
((and (memq major-mode '(c-mode c-ts-mode)) (hypb:buffer-file-name)
(smart-c-at-tag-p))
(smart-c) smart-c nil 'next-tag)
((and (memq major-mode '(c++-mode c++-ts-mode))
(hypb:buffer-file-name) (smart-c-at-tag-p))
(smart-c++) smart-c++ nil 'next-tag)
((and (eq major-mode 'asm-mode) (hypb:buffer-file-name)
(smart-asm-at-tag-p))
(smart-asm) smart-asm nil 'next-tag)
((setq hkey-value nil hkey-value
(or
(when (smart-lisp-mode-p)
(or (setq hkey-value (smart-lisp-at-load-expression-p))
(smart-lisp-at-tag-p)))
(when hkey-value (smart-lisp-at-change-log-tag-p))))
(smart-lisp) smart-lisp 'show-doc)
((and (memq major-mode '(java-mode java-ts-mode))
(hypb:buffer-file-name)
(or (smart-java-at-tag-p) (looking-at "@see[ ]+")
(save-excursion
(and (re-search-backward "[@\n
\f]" nil t)
(looking-at "@see[ ]+")))))
(smart-java) smart-java nil 'next-tag)
((and
(memq major-mode
'(html-mode javascript-mode js-mode js-ts-mode js2-mode
js3-mode web-mode))
(hypb:buffer-file-name) (smart-javascript-at-tag-p))
(smart-javascript) smart-javascript nil 'next-tag)
((and (eq major-mode 'objc-mode) (hypb:buffer-file-name)
(smart-objc-at-tag-p))
(smart-objc) smart-objc nil 'next-tag)
((smart-imenu-item-at-p)
(smart-imenu-display-item-where (car hkey-value) (cdr hkey-value))
imenu-choose-buffer-index)
((and (memq major-mode '(fortran-mode f90-mode))
(hypb:buffer-file-name) (smart-fortran-at-tag-p))
(smart-fortran) smart-fortran nil 'next-tag)
((eq major-mode 'calendar-mode) (smart-calendar)
smart-calendar-assist)
((eq major-mode 'unix-apropos-mode) (smart-apropos)
smart-apropos-assist)
((eq major-mode 'outline-mode) (smart-outline) smart-outline-assist)
((eq major-mode 'Info-mode) (smart-info) smart-info-assist)
((if (boundp 'hmail:reader)
(or (eq major-mode hmail:reader) (eq major-mode hmail:lister)))
(smart-hmail) smart-hmail-assist)
((eq major-mode 'gnus-group-mode) (smart-gnus-group)
smart-gnus-group-assist)
((eq major-mode 'gnus-summary-mode) (smart-gnus-summary)
smart-gnus-summary-assist)
((eq major-mode 'gnus-article-mode) (smart-gnus-article)
smart-gnus-article-assist)
((eq major-mode 'Buffer-menu-mode) (smart-buffer-menu)
smart-buffer-menu-assist)
((eq major-mode 'ibuffer-mode) (smart-ibuffer-menu)
smart-ibuffer-menu-assist)
((eq major-mode 'tar-mode) (smart-tar) smart-tar-assist)
((setq hkey-value (smart-man-entry-ref))
(smart-man-display hkey-value) smart-man-display hkey-value)
((eq major-mode 'w3-mode) (w3-follow-link) w3-goto-last-buffer)
((eq major-mode 'hyrolo-mode) (smart-hyrolo) smart-hyrolo-assist)
((eq major-mode 'image-dired-thumbnail-mode)
(smart-image-dired-thumbnail) smart-image-dired-thumbnail-assist)
((eq major-mode 'gomoku-mode) (gomoku-human-plays)
gomoku-human-takes-back)
((or (br-in-browser) (eq major-mode 'br-mode)) (smart-br-dispatch)
smart-br-assist-dispatch)
((and (boundp 'outline-minor-mode) outline-minor-mode)
(smart-outline) smart-outline-assist)
((eq major-mode 'todotxt-mode) (smart-todotxt) smart-todotxt-assist))
Documentation
Alist of predicates and form-conses for the Action and Assist Keyboard Keys.
Each element is: (PREDICATE-FORM . (ACTION-KEY-FORM . ASSIST-KEY-FORM)). When the Action or Assist Key is pressed, the first or second form, respectively, associated with the first non-nil predicate is evaluated.
See also hmouse-alist for a superset of this list utilized by the
Action and Assist Mouse Keys.
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hui-mouse.el
(defvar hkey-alist
'(
;; Company completion mode
((and (boundp 'company-active-map)
(memq company-active-map (current-minor-mode-maps)))
. ((smart-company-to-definition) . (smart-company-help)))
;;
;; Treemacs hierarchical file manager
((eq major-mode 'treemacs-mode)
. ((smart-treemacs) . (smart-treemacs)))
;;
;; dired-sidebar-mode
((eq major-mode 'dired-sidebar-mode)
. ((smart-dired-sidebar) . (smart-dired-sidebar)))
;;
;; Handle Emacs push buttons in buffers
((button-at (point))
. ((smart-push-button nil (mouse-event-p last-command-event))
. (smart-push-button-help nil (mouse-event-p last-command-event))))
;;
;; If in a window reading an argument with vertico, run the
;; vertico command on {M-RET} which by default accepts the
;; existing input at the prompt rather than the candidate pointed
;; to.
((and (bound-and-true-p vertico-mode)
;; Is vertico prompting for an argument?
(vertico--command-p nil (current-buffer)))
. ((funcall (lookup-key vertico-map (kbd "M-RET")))
. (funcall (lookup-key vertico-map (kbd "M-RET")))))
;;
;; If in the minibuffer and reading a non-menu Hyperbole argument
;; (aside from with vertico or ivy), accept the argument or give
;; completion help.
((and hargs:reading-type
(> (minibuffer-depth) 0)
(eq (selected-window) (minibuffer-window))
(not (bound-and-true-p ivy-mode))
(not (and (bound-and-true-p vertico-mode)
;; Is vertico prompting for an argument?
(vertico--command-p nil (current-buffer))))
(not (eq hargs:reading-type 'hmenu))
(not (smart-helm-alive-p)))
. ((funcall (key-binding (kbd "RET"))) . (smart-completion-help)))
;;
;; If reading a Hyperbole menu item or a Hyperbole completion-based
;; argument, allow selection of an item at point.
((and (> (minibuffer-depth) 0) (setq hkey-value (hargs:at-p)))
. ((hargs:select-p hkey-value) . (hargs:select-p hkey-value 'assist)))
;;
;; If reading a Hyperbole menu item and nothing is selected, just return.
;; Or if in a helm session with point in the minibuffer, quit the
;; session and activate the selected item.
((and (> (minibuffer-depth) 0)
(eq (selected-window) (minibuffer-window))
(or (eq hargs:reading-type 'hmenu)
(smart-helm-alive-p)))
. ((funcall (key-binding (kbd "RET"))) . (funcall (key-binding (kbd "RET")))))
;;
;; If at the end of a line (eol), invoke the associated Smart Key
;; handler EOL handler.
((and (smart-eolp)
(not (and (funcall hsys-org-mode-function)
(not (equal hsys-org-enable-smart-keys t)))))
. ((hact action-key-eol-function) . (hact assist-key-eol-function)))
;;
;; Handle any Org mode-specific contexts but give priority to Hyperbole
;; buttons prior to cycling Org headlines
((and (not (hyperb:stack-frame '(smart-org)))
(let ((hrule:action #'actype:identity))
(smart-org)))
. ((smart-org) . (smart-org)))
;;
;; The ID-edit package supports rapid killing, copying, yanking and
;; display management. It is available only as a part of InfoDock.
;; It is not included with Hyperbole.
((and (boundp 'id-edit-mode) id-edit-mode
(not buffer-read-only)
(not (smart-helm-alive-p)))
. ((id-edit-yank) . (id-edit-yank)))
;;
;; If in an xref buffer on a listing of matching identifier lines, go to
;; the source line referenced by the current entry.
((hsys-xref-item-at-point)
. ((xref-goto-xref) . (xref-show-location-at-point)))
;;
;; The Smart Menu system is an attractive in-buffer menu system
;; that works on any display system that supports Emacs. It
;; predates Emacs' menu systems; it is a part of InfoDock.
;; It is not included with Hyperbole but is compatible with the
;; Smart Keys.
;;
;; This selects or gives help for a menu item.
((eq major-mode 'smart-menu-mode)
. ((smart-menu-select) . (smart-menu-help)))
;;
((derived-mode-p 'dired-mode)
. ((smart-dired) . (smart-dired-assist)))
;;
((string-prefix-p "magit-" (symbol-name major-mode))
. ((smart-magit) . (smart-magit-assist)))
;;
;; Select or select-and-kill a markup pair (e.g. hmtl tags), list,
;; array/vector, set, function, comment or string that begins or
;; ends at point. For markup pairs, point must be at the first
;; character of the opening or closing tag. Ignore delimiters in
;; the middle of a Hyperbole button.
((and (if (setq hkey-at-hbut (hbut:at-p))
(or (eq (point) (hattr:get 'hbut:current 'lbl-end))
(eq (point) (hattr:get 'hbut:current 'name-end)))
t)
(hui-select-at-delimited-thing-p))
. ((hui-select-thing) . (progn (hui-select-thing)
(hmouse-kill-region))))
;;
;; If the prior test failed and point is at the start or end of an
;; sexpression, mark it for editing or kill it (assist key). This
;; only handles the special case where point is just after the
;; closing delimiter and not at an end-of-line, so this may be
;; removed someday. Ignore delimiters in the middle of a
;; Hyperbole button.
((and (if hkey-at-hbut
(or (eq (point) (hattr:get 'hbut:current 'lbl-end))
(eq (point) (hattr:get 'hbut:current 'name-end)))
t)
(hui-select-at-delimited-sexp-p))
. ((hui-select-mark-delimited-sexp)
. (progn (hui-select-mark-delimited-sexp) (hmouse-kill-region))))
;;
;; If on a Hyperbole button, perform action or give help.
(hkey-at-hbut
. ((hui:hbut-act 'hbut:current) . (hui:hbut-help 'hbut:current)))
;;
;; This potentially displays a Smart Menu.
((and (fboundp 'smart-menu-choose-menu)
(setq hkey-value (and hkey-always-display-menu
(smart-menu-choose-menu)))
(not (and (get-buffer-window *smart-menu-buffer*)
(eq hkey-value *smart-menu-curr*))))
. ((smart-menu hkey-value)
. (smart-menu hkey-value)))
;;
;; View minor mode
((bound-and-true-p view-mode)
. ((cond ((last-line-p)
(view-quit))
((pos-visible-in-window-p (point-max))
(goto-char (point-max)))
(t (View-scroll-page-forward)))
. (View-scroll-page-backward)))
;;
;; Direct access selection of helm-major-mode completions
((setq hkey-value (and (or (eq major-mode 'helm-major-mode)
(and (featurep 'helm) (equal helm-action-buffer (buffer-name))))
(or (eolp)
(smart-helm-at-header)
(smart-helm-line-has-action))))
. ((smart-helm) . (smart-helm-assist)))
;;
((and (eq major-mode 'ert-results-mode)
(featurep 'ert-results)
(setq hkey-value (ert-results-filter-status-p)))
. ((smart-ert-results hkey-value) . (smart-ert-results-assist hkey-value)))
;;
;; Support the OO-Browser when available. It is a separate Emacs
;; package not included with Hyperbole. Within an OO-Browser
;; OOBR-FTR buffer, an *Implementors* listing buffer, or an
;; Element signatures listing buffer of the OO-Browser, display
;; the associated element.
((or (string-equal (buffer-name) "*Implementors*")
(string-match "-Elements\\'" (buffer-name))
(and (boundp 'br-feature-tags-file)
(stringp br-feature-tags-file)
(equal br-feature-tags-file (hypb:buffer-file-name))))
. ((smart-element) . (hkey-help)))
;;
((eq major-mode 'occur-mode)
. ((occur-mode-goto-occurrence) . (occur-mode-goto-occurrence)))
;;
((eq major-mode 'moccur-mode)
. ((moccur-mode-goto-occurrence) . (moccur-mode-goto-occurrence)))
((eq major-mode 'amoccur-mode)
. ((amoccur-mode-goto-occurrence) . (amoccur-mode-goto-occurrence)))
;;
((eq major-mode 'kotl-mode)
. ((kotl-mode:action-key) . (kotl-mode:assist-key)))
;;
;; If in the flymake linter list of issues buffer, jump to or show
;; issue at point.
((eq major-mode 'flymake-diagnostics-buffer-mode)
. ((flymake-goto-diagnostic (point)) . (flymake-show-diagnostic (point) t)))
;;
;; If in the CPU and memory profile report mode, jump to or expand/contract
;; the entry at point.
((eq major-mode 'profiler-report-mode)
. ((smart-profiler-report) . (smart-profiler-report-assist)))
;;
;; Rdb-mode supports direct selection and viewing of in-memory relational
;; databases. Rdb-mode is available as a part of InfoDock.
;; It is not included with Hyperbole.
((eq major-mode 'rdb-mode)
. ((rdb:action-key) . (rdb:assist-key)))
;;
;; Restore window config and hide help buffer when click at buffer end.
((if (= (point) (point-max))
(string-match "^\\*Help\\|Help\\*$" (buffer-name)))
. ((hkey-help-hide) . (hkey-help-hide)))
;;
;; Handle widgets in Custom-mode
((eq major-mode 'Custom-mode)
. ((smart-custom) . (smart-custom-assist)))
;;
;; Emacs bookmarks menu (bookmark.el)
((eq major-mode 'bookmark-bmenu-mode)
. ((bookmark-jump (bookmark-bmenu-bookmark) (hpath:display-buffer-function))
.
;; Below we want the Assist Key to show what the Action Key does.
(hkey-help)))
;;
;; Pages directory listing mode (page-ext.el)
((eq major-mode 'pages-directory-mode)
. ((pages-directory-goto) . (pages-directory-goto)))
;;
;; If a variable holding an in-memory Hyperbole button object, e.g. hbut:current:
;; Action Key - Jump to variable definition
;; Assist Key - Display button attributes of any Hyperbole button symbol at point
((and (setq hkey-value (smart-prog-at-tag-p))
(hbut:is-p (intern-soft hkey-value)))
. ((ignore-errors (smart-prog-tag hkey-value)) .
(hbut:report (intern-soft hkey-value))))
;;
;; Handle programming language tag definition finding via xref.
;; For most programming languages use xref which supports various
;; Language Servers
((and (setq hkey-value (smart-prog-at-tag-p))
(smart-tags-find-p hkey-value))
. ((ignore-errors (smart-prog-tag hkey-value)) .
(ignore-errors (smart-prog-tag hkey-value))))
;;
;; Python files - ensure this comes before Imenu for more advanced
;; definition lookups
((and (or (and (derived-mode-p 'python-mode 'python-ts-mode) (hypb:buffer-file-name))
(and (featurep 'hsys-org) (hsys-org-mode-p)
(equal (hsys-org-get-value :language) "python"))
(let ((case-fold-search))
(string-match "\\`\\([ *]?Pydoc[: ]\\|\\*?Python\\)" (buffer-name))))
(setq hkey-value (smart-python-at-tag-p)))
. ((smart-python hkey-value) . (smart-python hkey-value 'next-tag)))
;;
((and (memq major-mode '(c-mode c-ts-mode))
(hypb:buffer-file-name) (smart-c-at-tag-p))
. ((smart-c) . (smart-c nil 'next-tag)))
;;
((and (memq major-mode '(c++-mode c++-ts-mode)) (hypb:buffer-file-name)
;; Don't use smart-c++-at-tag-p here since it will prevent #include
;; lines from matching.
(smart-c-at-tag-p))
. ((smart-c++) . (smart-c++ nil 'next-tag)))
;;
((and (eq major-mode 'asm-mode)
(hypb:buffer-file-name) (smart-asm-at-tag-p))
. ((smart-asm) . (smart-asm nil 'next-tag)))
;;
((setq hkey-value nil
hkey-value
(or (when (smart-lisp-mode-p)
(or (setq hkey-value (smart-lisp-at-load-expression-p))
(smart-lisp-at-tag-p)))
;; Tightly limit Lisp matches in change-log-mode but
;; call this only if hkey-value is true since
;; otherwise, already know there is no tag at point.
(when hkey-value
(smart-lisp-at-change-log-tag-p))))
. ((smart-lisp) . (smart-lisp 'show-doc)))
;;
;;
((and (memq major-mode '(java-mode java-ts-mode)) (hypb:buffer-file-name)
(or (smart-java-at-tag-p)
;; Also handle Java @see cross-references.
(looking-at "@see[ \t]+")
(save-excursion
(and (re-search-backward "[@\n\r\f]" nil t)
(looking-at "@see[ \t]+")))))
. ((smart-java) . (smart-java nil 'next-tag)))
;;
((and (memq major-mode '(html-mode javascript-mode js-mode js-ts-mode js2-mode js3-mode web-mode))
(hypb:buffer-file-name)
(smart-javascript-at-tag-p))
. ((smart-javascript) . (smart-javascript nil 'next-tag)))
;;
((and (eq major-mode 'objc-mode) (hypb:buffer-file-name)
(smart-objc-at-tag-p))
. ((smart-objc) . (smart-objc nil 'next-tag)))
;;
;; Imenu listing in GNU Emacs
((smart-imenu-item-at-p)
. ((smart-imenu-display-item-where (car hkey-value) (cdr hkey-value)) .
(imenu-choose-buffer-index)))
;;
((and (memq major-mode '(fortran-mode f90-mode))
(hypb:buffer-file-name) (smart-fortran-at-tag-p))
. ((smart-fortran) . (smart-fortran nil 'next-tag)))
;;
((eq major-mode 'calendar-mode)
. ((smart-calendar) . (smart-calendar-assist)))
;;
;; Part of InfoDock
((eq major-mode 'unix-apropos-mode)
. ((smart-apropos) . (smart-apropos-assist)))
;;
((eq major-mode 'outline-mode)
. ((smart-outline) . (smart-outline-assist)))
;;
((eq major-mode 'Info-mode)
. ((smart-info) . (smart-info-assist)))
;;
((if (boundp 'hmail:reader)
(or (eq major-mode hmail:reader)
(eq major-mode hmail:lister)))
. ((smart-hmail) . (smart-hmail-assist)))
;;
((eq major-mode 'gnus-group-mode)
(smart-gnus-group) . (smart-gnus-group-assist))
;;
((eq major-mode 'gnus-summary-mode)
. ((smart-gnus-summary) . (smart-gnus-summary-assist)))
;;
((eq major-mode 'gnus-article-mode)
. ((smart-gnus-article) . (smart-gnus-article-assist)))
;;
((eq major-mode 'Buffer-menu-mode)
. ((smart-buffer-menu) . (smart-buffer-menu-assist)))
;;
((eq major-mode 'ibuffer-mode)
. ((smart-ibuffer-menu) . (smart-ibuffer-menu-assist)))
;;
((eq major-mode 'tar-mode)
. ((smart-tar) . (smart-tar-assist)))
;;
;; Follow references in man pages.
((setq hkey-value (smart-man-entry-ref))
. ((smart-man-display hkey-value) . (smart-man-display hkey-value)))
;;
((eq major-mode 'w3-mode)
. ((w3-follow-link) . (w3-goto-last-buffer)))
;;
;; Future Hyperbole mode, not yet released
;; ((eq major-mode 'hynote-mode)
;; . ((smart-hynote) . (smart-hynote-assist)))
;;
((eq major-mode 'hyrolo-mode)
. ((smart-hyrolo) . (smart-hyrolo-assist)))
;;
((eq major-mode 'image-dired-thumbnail-mode)
. ((smart-image-dired-thumbnail) . (smart-image-dired-thumbnail-assist)))
;;
;; Gomoku game
((eq major-mode 'gomoku-mode)
. ((gomoku-human-plays) . (gomoku-human-takes-back)))
;;
;; Support the OO-Browser when available. It is a separate Emacs
;; package not included with Hyperbole. Hyperbole supplies a stub
;; `br-in-browser' test for use here.
((or (br-in-browser) (eq major-mode 'br-mode))
. ((smart-br-dispatch) . (smart-br-assist-dispatch)))
;;
;; Outline minor mode is on and usable.
((and (boundp 'outline-minor-mode) outline-minor-mode)
. ((smart-outline) . (smart-outline-assist)))
;;
;; Todotxt
((eq major-mode 'todotxt-mode)
. ((smart-todotxt) . (smart-todotxt-assist)))
;;
;; Any other programming modes not specially supported
;; Use xref which supports various Language Servers
)
"Alist of predicates and form-conses for the Action and Assist Keyboard Keys.
Each element is: (PREDICATE-FORM . (ACTION-KEY-FORM . ASSIST-KEY-FORM)).
When the Action or Assist Key is pressed, the first or second form,
respectively, associated with the first non-nil predicate is evaluated.
See also `hmouse-alist' for a superset of this list utilized by the
Action and Assist Mouse Keys.")