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.")