branch: externals/hyperbole commit eaa2ac0b13d8d97bf2712ed5056ab7f9685ff078 Author: Bob Weiner <r...@gnu.org> Commit: Bob Weiner <r...@gnu.org>
Fix many outstanding issues for V8 release * kotl/kotl-mode.el (kotl-mode:exchange-cells): Signal error if invalid type or value is given for a cell ref. Also, fix setting of idstamps when label type is idstamp. * hmouse-tag.el (smart-lisp-find-tag): With 'show-doc' arg, if 'tag' is unbound, return nil and ignore this as a tag instead of triggering an error. * hpath.el (hpath:substitute-value): Fix to properly return unchanged 'path' when it contains a PATH-type colon-separated list of directories but no matching path is found. Previously the 'substitute-in-file-name' call would improperly expand the variable. * DEMO (Defining New Action Button Types): man/hyperbole.texi: (Action Button Link Types): Fix to refer to PYTHONLIBPATH instead of PYTHONPATH. * man/hyperbole.texi: (Smart Keys): Add description of how to activate Hyperbole with {C-h h} or change this binding. * man/hyperbole.texi: (Smart Key Bindings): Remove discussion of hyperbole-toggle-bindings. Toggle hyperbole-mode instead. * hmouse-info.el (Info-read-index-item-name): Remove local binding of Info-complete-menu-buffer to fix completion when linking to Info index items. * hui-jmenu.el (hui-menu-sort-buffer): Replace 'with-current-buffer' with 'with-temp-buffer'. (hui-menu-buffer-mode-name): Fix to replace spaces in mode-names with dashes. --- ChangeLog | 29 ++++++ DEMO | 15 ++-- hmouse-info.el | 11 +-- hmouse-tag.el | 11 ++- hpath.el | 66 +++++++------- hui-jmenu.el | 46 +++++----- hui-mini.el | 3 +- hui-mouse.el | 2 +- hyperbole.el | 9 +- kotl/kotl-mode.el | 65 +++++++++----- man/hyperbole.html | 255 ++++++++++++++++++++++++++--------------------------- man/hyperbole.info | Bin 554577 -> 554080 bytes man/hyperbole.pdf | Bin 1309176 -> 1310127 bytes man/hyperbole.texi | 209 ++++++++++++++++++++----------------------- man/version.texi | 4 +- 15 files changed, 382 insertions(+), 343 deletions(-) diff --git a/ChangeLog b/ChangeLog index c1e75f21b0..6035f2216f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,32 @@ +2021-12-26 Bob Weiner <r...@gnu.org> + +* kotl/kotl-mode.el (kotl-mode:exchange-cells): Signal error if invalid type or value + is given for a cell ref. Also, fix setting of idstamps when label type is idstamp. + +* hmouse-tag.el (smart-lisp-find-tag): With 'show-doc' arg, if 'tag' is unbound, return + nil and ignore this as a tag instead of triggering an error. + +* hpath.el (hpath:substitute-value): Fix to properly return unchanged 'path' when it + contains a PATH-type colon-separated list of directories but no matching path is + found. Previously the 'substitute-in-file-name' call would improperly expand the + variable. + +* DEMO (Defining New Action Button Types): + man/hyperbole.texi: (Action Button Link Types): + Fix to refer to PYTHONLIBPATH instead of PYTHONPATH. + +* man/hyperbole.texi: (Smart Keys): Add description of how to activate Hyperbole + with {C-h h} or change this binding. + +* man/hyperbole.texi: (Smart Key Bindings): + Remove discussion of hyperbole-toggle-bindings. Toggle hyperbole-mode instead. + +* hmouse-info.el (Info-read-index-item-name): Remove local binding of + Info-complete-menu-buffer to fix completion when linking to Info index items. + +* hui-jmenu.el (hui-menu-sort-buffer): Replace 'with-current-buffer' with 'with-temp-buffer'. + (hui-menu-buffer-mode-name): Fix to replace spaces in mode-names with dashes. + 2021-12-19 Bob Weiner <r...@gnu.org> * hyrolo.el (hyrolo-map-level): Fix {C-h h r o} order cmd / sorting just hangs. diff --git a/DEMO b/DEMO index ba754ab02a..7cc94c4e6b 100644 --- a/DEMO +++ b/DEMO @@ -813,11 +813,10 @@ button. *** Defining New Action Button Types -You can do a huge number of things with existing Action Button types -but sometimes you may want to define your own types for more advanced -usage. Hyperbole let's you easily create your own Action Button link -types without knowing Elisp, if you understand basic pattern -replacement. +You can do many things with existing Action Button types but sometimes you +may want to define your own types for more advanced usage. Hyperbole lets +you easily create your own Action Button link types without knowing Elisp, if +you understand basic regular expression-based pattern replacement. In your Emacs initialization file, e.g. ~/.emacs, you will add a line of the form: @@ -827,11 +826,13 @@ the form: where: TYPE is the name of the new type you want to create; + LINK-EXPR is a regular expression containing a %s replacement string into which Hyperbole will substitute the button text following the TYPE from each button activated of this type; alternatively, LINK-EXPR may be the name of a function of one argument, the button text sans the function name; + Hyperbole automatically creates a doc string for the type but you can override this by providing an optional DOC string. @@ -844,10 +845,10 @@ activated as one of these 4 kinds: (4) or a function or action type of one argument, the button text sans the function name. -Let's try an example. If you use Python and have a PYTHONPATH +Let's try an example. If you use Python and have a PYTHONLIBPATH environment variable, then pressing {C-x C-e} after this expression: - (defal pylib "${PYTHONPATH}/%s") + (defal pylib "${PYTHONLIBPATH}/%s") defines a new action button link type called 'pylib’ whose buttons take the form of: diff --git a/hmouse-info.el b/hmouse-info.el index 77f9e32039..96f05f2675 100644 --- a/hmouse-info.el +++ b/hmouse-info.el @@ -36,16 +36,17 @@ the Top node in filename. Signal an error if a filename without an index is given." (let ((completion-ignore-case t) (Info-history-list nil) - Info-complete-menu-buffer item-name) (save-window-excursion (info) (setq Info-complete-menu-buffer (clone-buffer))) (unwind-protect - (progn (while (equal "" (setq item-name - (completing-read prompt #'Info-read-index-item-name-1 nil t)))) - item-name) - (kill-buffer Info-complete-menu-buffer)))) + (progn + (while (equal "" (setq item-name + (completing-read prompt #'Info-read-index-item-name-1 nil t)))) + item-name) + (kill-buffer Info-complete-menu-buffer) + (makunbound 'Info-complete-menu-buffer)))) ;;;###autoload (defun smart-info () diff --git a/hmouse-tag.el b/hmouse-tag.el index 2486991a47..5ea45bf68d 100644 --- a/hmouse-tag.el +++ b/hmouse-tag.el @@ -597,8 +597,9 @@ Otherwise, if a definition for the identifier is found within a TAGS file in the current directory or any of its ancestor directories, this jumps to the definition. -Optional SHOW-DOC flag means show documentation for the tag at point -rather than displaying its source code definition. +With optional SHOW-DOC flag, show documentation for the tag at point +rather than displaying its source code definition. In this case, tag +must be a bound or fbound symbol or it is ignored. This command assumes that its caller has already checked that the key was pressed in an appropriate buffer and has moved the cursor to the selected @@ -638,7 +639,7 @@ buffer." (smart-lisp-find-tag nil show-doc))) (defun smart-lisp-find-tag (&optional tag show-doc) - "Find the definition of optional Lisp TAG (or identifier at point) or show its documentation with optional prefix arg SHOW-DOC non-nil. + "Find the definition of optional Lisp TAG (or identifier at point when TAG is nil) or show its documentation with optional prefix arg SHOW-DOC non-nil. Use `hpath:display-buffer' to show definition or documentation." (interactive (list (read-string (format "%s Lisp identifier: " @@ -654,7 +655,9 @@ Use `hpath:display-buffer' to show definition or documentation." (cond ((fboundp tag-sym) (describe-function tag-sym)) ((and tag-sym (boundp tag-sym)) (describe-variable tag-sym)) ((facep tag-sym) (describe-face tag-sym)) - (t (error "(smart-lisp): `%s' unbound symbol definition not found" tag)))) + ;; (t (error "(smart-lisp): `%s' unbound symbol definition not found" tag)) + ;; Ignore unbound symbols if displaying doc. + (t nil))) ((and elisp-flag (fboundp 'find-function-noselect) (let ((result (smart-lisp-bound-symbol-def tag-sym))) (when (cdr result) diff --git a/hpath.el b/hpath.el index 9900602483..90440fcd04 100644 --- a/hpath.el +++ b/hpath.el @@ -1562,39 +1562,39 @@ in-buffer path will not match." (defun hpath:substitute-value (path) "Substitute matching value for Emacs Lisp variables and environment variables in PATH and return PATH." - (substitute-in-file-name - (hpath:substitute-match-value - "\\$@?\{\\([^\}]+\\)@?\}" - path - (lambda (_matched_str) - (let* ((match (match-beginning 0)) - (start (match-end 0)) - (var-group (substring path match start)) - (rest-of-path (substring path start)) - (var-ext (substring path (match-beginning 1) (match-end 1))) - (var-name (if (= ?@ (aref var-ext (1- (length var-ext)))) - (substring var-ext 0 -1) - var-ext)) - (trailing-dir-sep-flag (and (not (string-empty-p rest-of-path)) - (memq (aref rest-of-path 0) '(?/ ?\\)))) - (sym (intern-soft var-name))) - (when (file-name-absolute-p rest-of-path) - (setq rest-of-path (substring rest-of-path 1))) - (if (or (and sym (boundp sym)) (getenv var-name)) - ;; directory-file-name or hpath:substitute-dir may trigger - ;; an error but this may be called when testing for - ;; implicit button matches where no error should occur, so - ;; catch the error and ignore variable expansion in such a - ;; case. - ;; -- RSW, 08-26-2019 - ;; Removed errors on non-existent paths. - ;; -- RSW, 04-19-2021 - (condition-case nil - (funcall (if trailing-dir-sep-flag #'directory-file-name #'identity) - (hpath:substitute-dir var-name rest-of-path)) - (error "")) - var-group))) - t t))) + (let ((new-path (hpath:substitute-match-value + "\\$@?\{\\([^\}]+\\)@?\}" + path + (lambda (_matched_str) + (let* ((var-group (match-string 0 path)) + (var-ext (match-string 1 path)) + (rest-of-path (substring path (match-end 0))) + (var-name (if (= ?@ (aref var-ext (1- (length var-ext)))) + (substring var-ext 0 -1) + var-ext)) + (trailing-dir-sep-flag (and (not (string-empty-p rest-of-path)) + (memq (aref rest-of-path 0) '(?/ ?\\)))) + (sym (intern-soft var-name))) + (when (file-name-absolute-p rest-of-path) + (setq rest-of-path (substring rest-of-path 1))) + (if (or (and sym (boundp sym)) (getenv var-name)) + ;; directory-file-name or hpath:substitute-dir may trigger + ;; an error but this may be called when testing for + ;; implicit button matches where no error should occur, so + ;; catch the error and ignore variable expansion in such a + ;; case. + ;; -- RSW, 08-26-2019 + ;; Removed errors on non-existent paths. + ;; -- RSW, 04-19-2021 + (condition-case nil + (funcall (if trailing-dir-sep-flag #'directory-file-name #'identity) + (hpath:substitute-dir var-name rest-of-path)) + (error "")) + var-group))) + t t))) + (if (equal new-path path) + path + (substitute-in-file-name new-path)))) (defun hpath:substitute-var (path) "Replace up to one match in PATH with the first variable from `hpath:variables' whose value contain a string match to PATH. diff --git a/hui-jmenu.el b/hui-jmenu.el index 1beb9ca822..7fdb2cc40b 100644 --- a/hui-jmenu.el +++ b/hui-jmenu.el @@ -143,8 +143,9 @@ (let ((mname (buffer-local-value 'mode-name buffer))) (if mname ;; Next line needed to ensure mode name is always formatted as - ;; a string. - (format-mode-line (or (car-safe mname) mname)) + ;; a string and spaces are replaced with dashes. + (subst-char-in-string ?\ ?- + (format-mode-line (or (car-safe mname) mname))) (capitalize (symbol-name (buffer-local-value 'major-mode buffer)))))) (defun hui-menu-frame-name (frame) @@ -196,27 +197,26 @@ (defun hui-menu-sort-buffers (buffer-and-mode-name-list) "Reverse sort and return list of (`buffer-name' . `mode-name') elements by `mode-name' and then by `buffer-name'." - (let ((buf (get-buffer-create " tmp-sort"))) - (with-current-buffer buf - (setq buffer-read-only nil) - (erase-buffer) - (let ((standard-output (current-buffer))) - (mapc #'print buffer-and-mode-name-list)) - (while (search-forward "\n\n" nil t) - (replace-match "\n")) - (if (hui-menu-program-path "sort") - (call-process-region (point-min) (point-max) - "sort" t t nil "-r" "-k3,3" "-k1,1") - ;; This fallback of sort-fields can only sort on one field, so - ;; sort by major-mode and leave buffers within each mode - ;; unsorted when no UNIX sort program is available. - (sort-fields 3 (point-min) (point-max)) - (reverse-region (point-min) (point-max))) - (insert "\)\n") - (goto-char (point-min)) - (insert "\(") - (goto-char (point-min)) - (read (current-buffer))))) + (with-temp-buffer + (setq buffer-read-only nil) + (erase-buffer) + (let ((standard-output (current-buffer))) + (mapc #'print buffer-and-mode-name-list)) + (while (search-forward "\n\n" nil t) + (replace-match "\n")) + (if (hui-menu-program-path "sort") + (call-process-region (point-min) (point-max) + "sort" t t nil "-r" "-k3,3" "-k1,1") + ;; This fallback of sort-fields can only sort on one field, so + ;; sort by major-mode and leave buffers within each mode + ;; unsorted when no UNIX sort program is available. + (sort-fields 3 (point-min) (point-max)) + (reverse-region (point-min) (point-max))) + (insert "\)\n") + (goto-char (point-min)) + (insert "\(") + (goto-char (point-min)) + (read (current-buffer)))) (defun hui-menu-of-frames () (let ((frames (copy-sequence (frame-list)))) diff --git a/hui-mini.el b/hui-mini.el index aa763d322a..301374ab72 100644 --- a/hui-mini.el +++ b/hui-mini.el @@ -25,8 +25,7 @@ ;;; ************************************************************************ (defvar hui:hypb-exit "X" - "*Upper case character string which exits from / disable Hyperbole mode, and any active minibuffer menu.") - + "*Upper case character string which exits from / disables Hyperbole mode and any active minibuffer menu.") (defvar hui:menu-select "\C-m" "*Character string which selects the Hyperbole menu item at point.") (defvar hui:menu-quit "Q" diff --git a/hui-mouse.el b/hui-mouse.el index 1b85b2204b..b3be47f23b 100644 --- a/hui-mouse.el +++ b/hui-mouse.el @@ -1783,7 +1783,7 @@ If key is pressed: (defun smart-outline-assist () - "Collaps, expand, and move outline entries. + "Collapse, expand, and move outline entries. Invoked via an assist-key press when in `outline-mode'. It assumes that its caller has already checked that the assist-key was pressed in an appropriate buffer and has moved the cursor to the selected buffer. diff --git a/hyperbole.el b/hyperbole.el index daf85c1c2c..8871a5a476 100644 --- a/hyperbole.el +++ b/hyperbole.el @@ -138,17 +138,19 @@ See `hkey-initialize'.") ;;;###autoload (define-minor-mode hyperbole-mode - "Toggle the Everyday Hypertextual Information Manager global minor mode (Hyperbole mode). + "Toggle Hyperbole global minor mode, the Everyday Hypertextual Information Manager. When Hyperbole mode is enabled, the `hyperbole-mode' variable is non-nil, Hyperbole menus are enabled, as are Hyperbole keys. Invoke the Hyperbole minibuffer menu with \\[hyperbole]. See the -documentation at \"(hyperbole)Top\". +Info documentation at \"(hyperbole)Top\". \\{hyperbole-mode-map}" :global t + :keymap 'hyperbole-mode-map :lighter hyperbole-mode-lighter + :require 'hyperbole (if hyperbole-mode (hyperbole--enable-mode) (hyperbole--disable-mode))) @@ -242,6 +244,9 @@ of the commands." (or (where-is-internal #'hkey-help) (hkey-set-key (vector help-char ?A) #'hkey-help)) ;; + ;; Define virtual key used to activate hyperbole minor modeline menu + ;; (hkey-set-key [hyperbole] (infodock-hyperbole-menu t)) + ;; ;; Provide a site standard way of emulating most Hyperbole mouse drag ;; commands from the keyboard. This is most useful for rapidly creating ;; Hyperbole link buttons from the keyboard without invoking the Hyperbole diff --git a/kotl/kotl-mode.el b/kotl/kotl-mode.el index c624ee83fc..ae3268cedf 100644 --- a/kotl/kotl-mode.el +++ b/kotl/kotl-mode.el @@ -2309,28 +2309,30 @@ to one level and kotl-mode:refill-flag is treated as true." (kcell-view:label)) (t (error "(kotl-mode:exchange-cells): No two visible cells available"))))))) + (unless (and (or (stringp cell-ref-1) (natnump cell-ref-1)) + (or (stringp cell-ref-2) (natnump cell-ref-2))) + (error "(kotl-mode:exchange-cells): Cell refs must be either strings or numbers >= 0, not: '%s' and '%s'" + cell-ref-1 cell-ref-2)) + (when (equal cell-ref-1 cell-ref-2) + (error "(kotl-mode:exchange-cells): Cannot exchange as both cell refs are the same: '%s' and '%s'" + cell-ref-1 cell-ref-2)) (save-excursion - (let (kcell-1 contents-1 - kcell-2 contents-2) + (let (kcell-1 contents-1 idstamp-1 + kcell-2 contents-2 idstamp-2) ;; ;; Save cell-1 attributes (kotl-mode:goto-cell cell-ref-1 t) (setq kcell-1 (kcell-view:cell) + idstamp-1 (kcell-view:idstamp) contents-1 (kcell-view:contents)) ;; ;; Save cell-2 attributes (kotl-mode:goto-cell cell-ref-2 t) - (setq kcell-2 (kcell-view:cell) + (setq kcell-2 (copy-list (kcell-view:cell)) + idstamp-2 (kcell-view:idstamp) contents-2 (kcell-view:contents)) - ;; - ;; Substitute cell-1 attributes into cell-2 location. - ;; - ;; Set kcell properties. - (kcell-view:set-cell kcell-1) - ;; If idstamp labels are on, then must exchange labels in view. - (when (eq (kview:label-type kview) 'id) - (klabel:set (kcell-view:idstamp))) - ;; Exchange cell contents. + + ;; Substitute cell-1 contents into cell-2 location. (delete-region (kcell-view:start) (kcell-view:end-contents)) (insert (hypb:replace-match-string @@ -2338,15 +2340,9 @@ to one level and kotl-mode:refill-flag is treated as true." contents-1 (concat "\\1" (make-string (kcell-view:indent) ?\ )))) (when kotl-mode:refill-flag (kotl-mode:fill-cell)) - ;; - ;; Substitute cell-2 attributes into cell-1 location. - ;; - ;; Set kcell properties. + + ;; Substitute cell-2 contents into cell-1 location. (kotl-mode:goto-cell cell-ref-1 t) - (kcell-view:set-cell kcell-2) - ;; If idstamp labels are on, then must exchange labels in view. - (when (eq (kview:label-type kview) 'id) - (klabel:set (kcell-view:idstamp))) ;; Exchange cell contents. (delete-region (kcell-view:start) (kcell-view:end-contents)) ;; Add indentation to all but first line. @@ -2355,7 +2351,27 @@ to one level and kotl-mode:refill-flag is treated as true." "\\([\n\r]\\)" contents-2 (concat "\\1" (make-string (kcell-view:indent) ?\ )))) (when kotl-mode:refill-flag - (kotl-mode:fill-cell))))) + (kotl-mode:fill-cell)) + + (save-excursion + ;; + ;; Substitute cell-1 attributes into cell-2 location. + ;; + (kotl-mode:goto-cell cell-ref-2 t) + ;; Set kcell properties. + (kcell-view:set-cell kcell-1) + ;; If idstamp labels are on, then must exchange labels in view. + (when (eq (kview:label-type kview) 'id) + (klabel:set idstamp-1))) + + ;; + ;; Substitute cell-2 attributes into cell-1 location. + ;; + ;; Set kcell properties. + (kcell-view:set-cell kcell-2) + ;; If idstamp labels are on, then must exchange labels in view. + (when (eq (kview:label-type kview) 'id) + (klabel:set idstamp-2))))) (defun kotl-mode:kill-contents (arg) "Kill contents of cell from point to cell end. @@ -2541,9 +2557,10 @@ the current cell." (defun kotl-mode:transpose-cells (arg) "Exchange current and previous visible cells, leaving point after both. If no previous cell, exchange current with next cell. -With prefix ARG, take current tree and move it past ARG visible cells. With prefix ARG = 0, interchange the cell that contains point with the cell -that contains mark." +that contains mark. +With any other non-nil prefix ARG, take the current tree and move it past +ARG visible cells." (interactive "*p") (let ((label-sep-len (kview:label-separator-length kview))) (cond @@ -2558,7 +2575,7 @@ that contains mark." (let ((label-1 (kcell-view:label)) (prev (kcell-view:previous t label-sep-len)) label-2) - (or prev (kcell-view:next t label-sep-len)) + (unless prev (kcell-view:next t label-sep-len)) (setq label-2 (kcell-view:label)) (kotl-mode:exchange-cells label-1 label-2) (kcell-view:next t label-sep-len) diff --git a/man/hyperbole.html b/man/hyperbole.html index e23e3d00b4..3b485e569a 100644 --- a/man/hyperbole.html +++ b/man/hyperbole.html @@ -1,7 +1,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <!-- This manual is for GNU Hyperbole -(Edition 8.0.0pre, Published November, 2021). +(Edition 8.0.0pre, Published December, 2021). Copyright (C) 1989-2021 Free Software Foundation, Inc. @@ -358,7 +358,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P> <PRE> Edition 8.0.0pre -Printed November 7, 2021. +Printed December 26, 2021. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -1066,16 +1066,17 @@ or if some emails you a button (you can do that too). </p> <p>Hyperbole is something to be experienced and interacted with, not understood from reading alone. It installs normally as a single Emacs package with no -dependencies outside of standard Emacs libraries. Most of Hyperbole is a -single global minor mode that you can activate and deactivate at will. And -it can be uninstalled quickly as well if need be, so there is no risk to -giving it a spin. -</p> -<p>Once you have it installed and activated <kbd>{C-u M-x hyperbole-mode <span class="key">RET</span>}</kbd>, -try the interactive demo with <kbd>{C-h h d d}</kbd>. In fact, if you -have Hyperbole loaded, you can press <kbd>{M-<span class="key">RET</span>}</kbd> inside any of the -brace delimited series of keys you see in this document and it will -execute them on-the-fly (easy keyboard-macro style buttons in any text). +dependencies outside of standard Emacs libraries, see <a href="#Installation">Installation</a>. Most +of Hyperbole is a single global minor mode that you can activate and +deactivate at will. And it can be uninstalled quickly as well if need be, so +there is no risk to giving it a spin. +</p> +<p>Once you have it installed and activated (use <kbd>{C-u M-x +hyperbole-mode <span class="key">RET</span>}</kbd>), try the interactive demo with <kbd>{C-h h d d}</kbd>. +In fact, if you have Hyperbole loaded, you can press <kbd>{M-<span class="key">RET</span>}</kbd> +inside any of the brace delimited series of keys you see in this document and +Hyperbole will execute them on-the-fly (easy keyboard-macro style buttons in +any text). </p> <p>Hyperbole can dramatically increase your productivity and greatly reduce the number of keyboard/mouse keys you’ll need to work efficiently. @@ -1268,14 +1269,35 @@ Next: <a href="#Buttons" accesskey="n" rel="next">Buttons</a>, Previous: <a href <span id="index-hmouse_002dmiddle_002dflag"></span> <span id="index-Action-Key-1"></span> <span id="index-Assist-Key-1"></span> -<p>Hyperbole offers two special <em>Smart Keys</em>, the Action Key and the -Assist Key, that perform an extensive array of context-sensitive -operations across emacs usage. In many popular modes, they allow you -to perform common, sometimes complex operations without having to use a -different key for each operation. Just press a Smart Key and the -right thing happens. This chapter explains typical uses of the Smart -Keys. See <a href="#Smart-Key-Reference">Smart Key Reference</a>, for complete descriptions of their -behavior in all contexts. +<p>When active, Hyperbole offers two special <em>Smart Keys</em>, the Action Key +and the Assist Key, that perform an extensive array of context-sensitive +operations across emacs usage. In many Emacs modes, they allow you to +perform common, sometimes complex operations without having to use a +different key for each operation. Just press a Smart Key and the right thing +happens. This chapter explains typical uses of the Smart Keys. See <a href="#Smart-Key-Reference">Smart Key Reference</a>, for complete descriptions of their behavior in all contexts. +</p> +<span id="index-file_002c-_002eemacs"></span> +<span id="index-hyperbole_002dmode"></span> +<span id="index-minor-mode_002c-hyperbole"></span> +<span id="index-change-key-bindings"></span> +<span id="index-toggle-key-bindings"></span> +<span id="index-key-bindings_002c-toggle"></span> +<span id="index-disable-Hyperbole"></span> +<span id="index-C_002dh-h"></span> +<span id="index-X"></span> +<span id="index-q"></span> +<p>Use <kbd>{C-h h}</kbd> to activate Hyperbole (enable <code>hyperbole-mode</code> and +display its keyboard-driven minibuffer menu). Use <kbd>{q}</kbd> to quit from the +minibuffer menu while leaving Hyperbole enabled and thus the Smart Keys +active. Use<kbd>{X}</kbd> to quit from the minibuffer menu and disable Hyperbole +keys. +</p> +<p>If you prefer a different key to activate Hyperbole, you can bind it as part +of any setting of <code>hyperbole-init-hook</code> within your personal +<samp>~/.emacs</samp> file. For example, <code>(add-hook +'hyperbole-init-hook (lambda () (global-set-key "\C-ch" +'hyperbole--enable-mode) (global-set-key "\C-hh" 'view-hello-file)))</code>; then +restart Emacs. </p> <table class="menu" border="0" cellspacing="0"> <tr><td align="left" valign="top">• <a href="#Smart-Key-Bindings" accesskey="1">Smart Key Bindings</a></td><td> </td><td align="left" valign="top"> @@ -1303,20 +1325,24 @@ Next: <a href="#Smart-Key-Operations" accesskey="n" rel="next">Smart Key Operati <span id="index-C_002du-M_002dRET"></span> <span id="index-M_002dRET"></span> -<p>From the keyboard, <kbd>{M-<span class="key">RET</span>}</kbd> is the Action Key and <kbd>{C-u -M-<span class="key">RET</span>}</kbd> is the Assist Key. These keys allow context-sensitive -operation from any keyboard. +<p>With <code>hyperbole-mode</code> enabled, <kbd>{M-<span class="key">RET</span>}</kbd> is the Action Key +and <kbd>{C-u M-<span class="key">RET</span>}</kbd> is the Assist Key. These keys allow +context-sensitive operation from any keyboard. </p> - <span id="index-shift_002dmiddle-mouse-key"></span> <span id="index-shift_002dleft-mouse-key"></span> <span id="index-shift_002dright-mouse-key"></span> <span id="index-middle-mouse-key-1"></span> <span id="index-hmouse_002dmiddle_002dflag-1"></span> -<p>From the mouse, the <em>Action Key</em> is bound to your shift-middle -mouse key (or shift-left on a 2-button mouse). The <em>Assist Key</em> -is bound to your shift-right mouse key, assuming Hyperbole is run -under an external window system. +<p>Mouse configuration of the Smart Keys is automatic for GNU Emacs under +Mac OS X, the X Window System and MS Windows, assuming your emacs program +has been built with support for any of these window systems. +</p> +<p>The <em>Action Mouse Key</em> is bound to your shift-middle mouse key (or +shift-left on a 2-button mouse). The <em>Assist Mouse Key</em> is bound to your +shift-right mouse key, assuming Hyperbole is run under an external window +system. These keys support <em>Drag Actions</em>, see <a href="#Smart-Mouse-Keys">Smart Mouse Keys</a>, as +well as the standard Smart Key presses. </p> <span id="index-hmouse_002dadd_002dunshifted_002dsmart_002dkeys"></span> <span id="index-unshifted-mouse-bindings"></span> @@ -1338,36 +1364,19 @@ personal <samp>~/.emacs</samp> file, add: <code>(add-hook 'hyperbole-init-hook <span id="index-action_002dmouse_002dkey"></span> <span id="index-assist_002dmouse_002dkey"></span> <span id="index-hkey_002deither"></span> -<p>If you prefer other key assignments, simply bind the commands +<p>If you prefer other Smart Key bindings, simply bind the commands <code>action-key</code> and <code>assist-key</code> to keyboard keys. -Hyperbole binds <kbd>{M-<span class="key">RET</span>}</kbd> to the command <code>hkey-either</code>. -It allows for a single key binding for both commands; a prefix -argument, such as <kbd>{C-u}</kbd>, then invokes <code>assist-key</code>. +Hyperbole binds <kbd>{M-<span class="key">RET</span>}</kbd> to the command <code>hkey-either</code>; +this provides a single key binding for both Smart Key commands; a prefix +argument, such as <kbd>{C-u}</kbd>, then invokes <code>assist-key</code> actions. </p> -<p>You may also bind <code>action-mouse-key</code> and <code>assist-mouse-key</code> -to other mouse keys, though you won’t be able to execute mouse drag -actions with such key bindings. +<p>You may also bind <code>action-mouse-key</code> and <code>assist-mouse-key</code> to +other mouse keys, though you won’t be able to execute mouse drag actions with +such key bindings. See <a href="#Smart-Mouse-Key-Drags">Smart Mouse Key Drags</a> and see <a href="#Keyboard-Drags">Keyboard Drags</a>. </p> -<p>Mouse configuration of the Smart Keys is automatic for GNU Emacs under -Mac OS X, the X Window System and MS Windows assuming your emacs program -has been built with support for any of these window systems. -</p> -<span id="index-file_002c-_002eemacs"></span> -<span id="index-hyperbole_002dtoggle_002dbindings"></span> -<span id="index-change-key-bindings"></span> -<span id="index-toggle-key-bindings"></span> -<span id="index-key-bindings_002c-toggle"></span> -<span id="index-disable-Hyperbole"></span> -<span id="index-C_002dc-h"></span> -<p>If you ever need to temporarily disable the Hyperbole keyboard and mouse -bindings, use the <code>hyperbole-toggle-bindings</code> command. It switches -between the Hyperbole key bindings and those set prior to loading Hyperbole -and then back again if invoked once more. There is no default key binding -for this command; use <kbd>{M-x hyperbole-toggle-bindings -<span class="key">RET</span>}</kbd>. Alternatively, you may select a key and bind it as part of any -setting of <code>hyperbole-init-hook</code> within your personal <samp>~/.emacs</samp> -file. For example, <code>(add-hook 'hyperbole-init-hook (lambda () -(global-set-key "\C-ch" 'hyperbole-toggle-bindings)))</code>. +<p>To permanently change any of these key bindings, use: +<code>(add-hook 'hyperbole-init-hook (lambda () (hkey-set-key <KEY> '<CMD>)</code>, +for example, <code>(hkey-set-key "\M-'" 'hkey-either)</code>. </p> <hr> @@ -3843,7 +3852,7 @@ button in the buffer will be renamed. Ebut/Rename. Hyperbole does not bind this command to a key by default. <kbd>{C-h w hui:ebut-rename <span class="key">RET</span>}</kbd> will show what if any key is bound within your Emacs. Bind it within your <samp>~/.emacs</samp> file with: -<code>(global-set-key "\C-cr" 'hui:ebut-rename)</code>, for example. +<code>(hkey-set-key "\C-cr" 'hui:ebut-rename)</code>, for example. </p> <hr> @@ -4128,7 +4137,7 @@ mouse. When used with the keyboard, they provide command access similar to key bindings. In fact, any menu item can be bound to a global key sequence. See <a href="#Binding-Minibuffer-Menu-Items">Binding Minibuffer Menu Items</a>. </p> -<span id="index-C_002dh-h"></span> +<span id="index-C_002dh-h-1"></span> <span id="index-minibuffer-menu"></span> <span id="index-file_002c-hyperbole_002eel-2"></span> <span id="index-invoking-Hyperbole"></span> @@ -4162,7 +4171,7 @@ item, including the action that it performs. "/" at the end of an ite indicates that it brings up a submenu. </p> <span id="index-C_002dt"></span> -<span id="index-q"></span> +<span id="index-q-1"></span> <span id="index-C_002dg"></span> <span id="index-menu_002c-top_002dlevel"></span> <span id="index-top_002dlevel-menu"></span> @@ -4845,7 +4854,7 @@ sizes by which to zoom. <span id="index-Q"></span> </dd> <dt><kbd>{Q}</kbd></dt> -<dd><span id="index-q-1"></span> +<dd><span id="index-q-2"></span> </dd> <dt><kbd>{q}</kbd></dt> <dd><p>Press <kbd>{Q}</kbd> to globally quit HyControl mode and restore normal key bindings. @@ -7225,11 +7234,11 @@ button is activated and does one of four things with LINK-EXPR: </li><li> invokes a function or action type of one argument, the button text sans the function name, to display it. </li></ol> -<p>For example, if you use Python and have a ‘<samp>PYTHONPATH</samp>’ environment +<p>For example, if you use Python and have a ‘<samp>PYTHONLIBPATH</samp>’ environment variable, then pressing <kbd>{C-x C-e}</kbd> <code>eval-last-sexp</code> after this expression: </p> -<p><code>(defal pylib "${PYTHONPATH}/%s")</code> +<p><code>(defal pylib "${PYTHONLIBPATH}/%s")</code> </p> <p>defines a new action button link type called ’pylib’ whose buttons take the form of: @@ -7913,16 +7922,15 @@ implicit button type. See also <b>system encapsulation</b>. <span id="index-InfoDock"></span> </dd> <dt><b>InfoDock</b></dt> -<dd><p>InfoDock was an integrated productivity toolset for software engineers +<dd><p>InfoDock is an older integrated productivity toolset for software engineers and knowledge workers built atop XEmacs; it is no longer maintained or -updated. An older version from 1999 may be found at -infodock.sf.net. +updated, though many of its packages can be used with GNU Emacs. An older +version from 1999 may be found at infodock.sf.net. </p> -<p>InfoDock has much of the power of GNU Emacs, but with an -easier to use and more comprehensive menu-based user interface. Most -objections people raise to using emacs have already been addressed in -InfoDock. InfoDock was meant for people who wanted a complete, -pre-customized environment in one package. +<p>InfoDock has much of the power of GNU Emacs, but with an easier to use and +more comprehensive menu-based user interface. Most objections people raise +to using emacs have already been addressed in InfoDock. InfoDock is meant +for people who prefer a complete, pre-customized environment in one package. </p> </dd> <dt><b>Instance Number</b></dt> @@ -8085,7 +8093,7 @@ Smart Key capabilities. See <a href="#Smart-Keys">Smart Keys</a>, for complete </p> </dd> <dt><b>Smart Menus</b></dt> -<dd><p>Smart Menus are an older in-buffer menu system that worked on dumb +<dd><p>Smart Menus are an older in-buffer menu system that work on dumb terminals and pre-dated Emacs’ own dumb terminal menu support. They are included with InfoDock (which is no longer maintained) and are not available separately. They are not a part of Hyperbole and are not @@ -8139,10 +8147,9 @@ display location and so forth. </p> </dd> <dt><b>View Spec</b></dt> -<dd><p>A terse (and to the uninitiated, cryptic) string that specifies a -particular view of a koutline or a link referent. If a view spec is -active for a buffer, the view spec appears within the modeline like so, -<|view spec>. +<dd><p>A terse string that specifies a particular view of a koutline or a link +referent. If a view spec is active for a buffer, the view spec appears +within the modeline like so, <|view spec>. See <a href="#View-Specs">View Specs</a> </p> </dd> <dt><b>Window</b></dt> @@ -8885,7 +8892,13 @@ menubar menu as shown here: <img src="im/menu-key-bindings.png" alt="Change Key Bindings"> <div class="float-caption"><p><strong>Image C.1: </strong>Hyperbole Key Bindings Menu</p></div></div><br> -<p>Below are descriptions of Hyperbole’s default keyboard key bindings: +<span id="index-hyperbole_002dmode_002dmap"></span> +<span id="index-key-bindings"></span> +<span id="index-minor-mode_002c-keymap"></span> +<p>Below are descriptions of Hyperbole’s default keyboard key bindings. +All except <kbd>{C-h h}</kbd> (the global key used to enable Hyperbole and +display its minibuffer menu) are bound within Hyperbole’s minor mode +keymap, <code>hyperbole-mode-map</code>. </p> <dl compact="compact"> <dd><span id="index-key-binding_002c-M_002dRET"></span> @@ -8949,11 +8962,12 @@ may be used to quickly create an explicit link button in the selected window tha links to any other window chosen via the Ace Window prompt. </p> <span id="index-key-binding_002c-C_002dh-h"></span> -<span id="index-C_002dh-h-1"></span> +<span id="index-C_002dh-h-2"></span> </dd> <dt><kbd>{C-h h}</kbd></dt> <dd><p>Hyperbole Mini Menu: Invoke the Hyperbole minibuffer menu, giving -access to many Hyperbole commands. +access to many Hyperbole commands. This is bound globally as a means +of enabling Hyperbole minor mode. </p> <span id="index-key-binding_002c-C_002dh-A"></span> <span id="index-key-binding_002c-C_002du-C_002dh-A"></span> @@ -8995,42 +9009,21 @@ to ‘<samp>t</samp>’ (true) by default in <samp>hyperbole.el</samp>. means all Hyperbole key bindings will be initialized when Hyperbole is loaded. If you want to disable these bindings permanently, simply add <code>(setq hkey-init nil)</code> to your <samp>~/.emacs</samp> file prior to the -point at which you load Hyperbole and restart Emacs. Then you will -have to choose the Hyperbole commands that you want to use and bind -those to keys. +point at which you load Hyperbole; then restart Emacs. Henceforth, you will +have to choose the Hyperbole commands that you want to use and bind those to +keys. </p> <span id="index-file_002c-_002eemacs-4"></span> -<span id="index-hyperbole_002dtoggle_002dbindings-1"></span> -<span id="index-change-key-bindings-1"></span> -<span id="index-toggle-key-bindings-1"></span> -<span id="index-key-bindings_002c-toggle-1"></span> -<span id="index-disable-Hyperbole-1"></span> -<span id="index-C_002dc-h-1"></span> -<p>If you ever have a need to temporarily disable the Hyperbole keyboard and -mouse bindings, use the <code>hyperbole-toggle-bindings</code> command. It -switches between the Hyperbole key bindings and those set prior to loading -Hyperbole and then back again if invoked once more. There is no default -key binding for this command; use <kbd>{M-x hyperbole-toggle-bindings -<span class="key">RET</span>}</kbd>. Alternatively, you may select a key and bind it as part of any -setting of <code>hyperbole-init-hook</code> within your personal <samp>~/.emacs</samp> -file. For example, <code>(add-hook 'hyperbole-init-hook (lambda () -(global-set-key "\C-ch" 'hyperbole-toggle-bindings)))</code>. -</p> -<span id="index-file_002c-_002eemacs-5"></span> -<span id="index-hyperbole_002dmode"></span> +<span id="index-hyperbole_002dmode-1"></span> <span id="index-mouse-key-toggle"></span> <span id="index-Smart-Mouse-Key-toggle"></span> -<span id="index-C_002dc-t"></span> -<p>If you ever want to disable Hyperbole key and mouse bindings, simply toggle -Hyperbole minor mode off with the <code>hyperbole-mode</code> command. -It switches between Hyperbole mouse key and mouse bindings and those set -prior to loading Hyperbole and then back again if invoked once more. -There is no default key binding for this command; use <kbd>{M-x -hyperbole-mode <span class="key">RET</span>}</kbd>. Alternatively, you may select a -key and bind it as part of any setting of <code>hyperbole-init-hook</code> -within your personal <samp>~/.emacs</samp> file. For example, <code>(add-hook -'hyperbole-init-hook (lambda () (global-set-key "\C-ct" -'hyperbole-mode)))</code>. +<p>If you ever want to temporarily disable Hyperbole key and mouse bindings, +simply toggle Hyperbole minor mode off with the <code>hyperbole-mode</code> +command. There is no default key binding for this command; use <kbd>{M-x +hyperbole-mode <span class="key">RET</span>}</kbd>. Alternatively, you may select a key and bind it +as part of any setting of <code>hyperbole-init-hook</code> within your +personal <samp>~/.emacs</samp> file. For example, <code>(add-hook +'hyperbole-init-hook (lambda () (global-set-key "\C-ct" 'hyperbole-mode)))</code>. </p> <hr> <span id="Koutliner-Keys"></span><div class="header"> @@ -12084,6 +12077,8 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <a class="summary-letter" href="#Key-Index_ky_letter-W"><b>W</b></a> +<a class="summary-letter" href="#Key-Index_ky_letter-X"><b>X</b></a> + <a class="summary-letter" href="#Key-Index_ky_letter-Z"><b>Z</b></a> </td></tr></table> @@ -12175,21 +12170,19 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dt"><code>C-c C-t</code></a>:</td><td> </td><td valign="top"><a href="#Hiding-and-Showing">Hiding and Showing</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002du"><code>C-c C-u</code></a>:</td><td> </td><td valign="top"><a href="#Moving-Around">Moving Around</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dy"><code>C-c C-y</code></a>:</td><td> </td><td valign="top"><a href="#Buttons-in-Mail">Buttons in Mail</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-C_002dc-h"><code>C-c h</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-C_002dc-h-1"><code>C-c h</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-m"><code>C-c m</code></a>:</td><td> </td><td valign="top"><a href="#Relocating-and-Copying">Relocating and Copying</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-M_002dc"><code>C-c M-c</code></a>:</td><td> </td><td valign="top"><a href="#Relocating-and-Copying">Relocating and Copying</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-RET"><code>C-c <span class="key">RET</span></code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Thing-Selection">Smart Key Thing Selection</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-RET-1"><code>C-c <span class="key">RET</span></code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-C_002dc-t"><code>C-c t</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-_005c"><code>C-c \</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-_005c-1"><code>C-c \</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dc-_005e"><code>C-c ^</code></a>:</td><td> </td><td valign="top"><a href="#Moving-Around">Moving Around</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dg"><code>C-g</code></a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dh-A"><code>C-h A</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Operations">Smart Key Operations</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dh-A-1"><code>C-h A</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-C_002dh-h"><code>C-h h</code></a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-C_002dh-h-1"><code>C-h h</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-C_002dh-h"><code>C-h h</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-C_002dh-h-1"><code>C-h h</code></a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-C_002dh-h-2"><code>C-h h</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-a"><code>C-h h c a</code></a>:</td><td> </td><td valign="top"><a href="#Customization">Customization</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-d"><code>C-h h c d</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Debugging">Smart Key Debugging</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-r"><code>C-h h c r</code></a>:</td><td> </td><td valign="top"><a href="#Internal-Viewers">Internal Viewers</a></td></tr> @@ -12330,9 +12323,10 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <tr><td></td><td valign="top"><a href="#index-p-1"><code>p</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Key-Index_ky_letter-Q">Q</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-q"><code>q</code></a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-q"><code>q</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-q-1"><code>q</code></a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Q"><code>Q</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-q-1"><code>q</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-q-2"><code>q</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Key-Index_ky_letter-R">R</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-r"><code>r</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> @@ -12438,6 +12432,9 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <tr><td></td><td valign="top"><a href="#index-w"><code>w</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td></td><td valign="top"><a href="#index-W"><code>W</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> +<tr><th id="Key-Index_ky_letter-X">X</th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-X"><code>X</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> <tr><th id="Key-Index_ky_letter-Z">Z</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-Z"><code>Z</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td></td><td valign="top"><a href="#index-z"><code>z</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> @@ -12512,6 +12509,8 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <a class="summary-letter" href="#Key-Index_ky_letter-W"><b>W</b></a> +<a class="summary-letter" href="#Key-Index_ky_letter-X"><b>X</b></a> + <a class="summary-letter" href="#Key-Index_ky_letter-Z"><b>Z</b></a> </td></tr></table> @@ -12664,12 +12663,11 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td></td><td valign="top"><a href="#index-eval_002dlast_002dsexp"><code>eval-last-sexp</code></a>:</td><td> </td><td valign="top"><a href="#Creating-Types">Creating Types</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Function_fn_letter-F">F</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs">file, .emacs</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs">file, .emacs</a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-1">file, .emacs</a>:</td><td> </td><td valign="top"><a href="#Renaming">Renaming</a></td></tr> <tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-2">file, .emacs</a>:</td><td> </td><td valign="top"><a href="#Buttons-in-Mail">Buttons in Mail</a></td></tr> <tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-3">file, .emacs</a>:</td><td> </td><td valign="top"><a href="#Autonumbering">Autonumbering</a></td></tr> <tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-4">file, .emacs</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-5">file, .emacs</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-file_002c-_002ehypb">file, .hypb</a>:</td><td> </td><td valign="top"><a href="#Explicit-Buttons">Explicit Buttons</a></td></tr> <tr><td></td><td valign="top"><a href="#index-file_002c-_002ekotl-suffix">file, .kotl suffix</a>:</td><td> </td><td valign="top"><a href="#Creating-Outlines">Creating Outlines</a></td></tr> <tr><td></td><td valign="top"><a href="#index-file_002c-DEMO-1">file, DEMO</a>:</td><td> </td><td valign="top"><a href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr> @@ -12801,12 +12799,11 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td></td><td valign="top"><a href="#index-hyperbole"><code>hyperbole</code></a>:</td><td> </td><td valign="top"><a href="#Invocation">Invocation</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperbole-1"><code>hyperbole</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Default-Context">Smart Key - Default Context</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperbole_002dinit_002dhook">hyperbole-init-hook</a>:</td><td> </td><td valign="top"><a href="#Hook-Variables">Hook Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-hyperbole_002dmode"><code>hyperbole-mode</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-hyperbole_002dmode-1"><code>hyperbole-mode</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-hyperbole_002dmode_002dmap">hyperbole-mode-map</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperbole_002dpopup_002dmenu"><code>hyperbole-popup-menu</code></a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperbole_002dpopup_002dmenu-1"><code>hyperbole-popup-menu</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Default-Context">Smart Key - Default Context</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperbole_002dset_002dkey"><code>hyperbole-set-key</code></a>:</td><td> </td><td valign="top"><a href="#Binding-Minibuffer-Menu-Items">Binding Minibuffer Menu Items</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-hyperbole_002dtoggle_002dbindings"><code>hyperbole-toggle-bindings</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-hyperbole_002dtoggle_002dbindings-1"><code>hyperbole-toggle-bindings</code></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperbole_002dweb_002dsearch_002dalist">hyperbole-web-search-alist</a>:</td><td> </td><td valign="top"><a href="#Web-Search-Engines">Web Search Engines</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperbole_002dweb_002dsearch_002dbrowser_002dfunction">hyperbole-web-search-browser-function</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dadd"><code>hyrolo-add</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr> @@ -13349,8 +13346,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-cell_002c-top_002dlevel-1">cell, top-level</a>:</td><td> </td><td valign="top"><a href="#Idstamps">Idstamps</a></td></tr> <tr><td></td><td valign="top"><a href="#index-cell_002c-transposing">cell, transposing</a>:</td><td> </td><td valign="top"><a href="#Transposing">Transposing</a></td></tr> <tr><td></td><td valign="top"><a href="#index-cell_002c-yanking-contents">cell, yanking contents</a>:</td><td> </td><td valign="top"><a href="#Adding-and-Killing">Adding and Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-change-key-bindings">change key bindings</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-change-key-bindings-1">change key bindings</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-change-key-bindings">change key bindings</a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-change_002dlog_002dmode">change-log-mode</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Lisp-Source-Code">Smart Key - Lisp Source Code</a></td></tr> <tr><td></td><td valign="top"><a href="#index-changing-the-view-spec">changing the view spec</a>:</td><td> </td><td valign="top"><a href="#View-Specs">View Specs</a></td></tr> <tr><td></td><td valign="top"><a href="#index-click_002c-buffer-menu">click, buffer menu</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Buffer-Menus">Smart Key - Buffer Menus</a></td></tr> @@ -13436,8 +13432,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-dired-item-drag">dired item drag</a>:</td><td> </td><td valign="top"><a href="#Displaying-File-and-Buffer-Items">Displaying File and Buffer Items</a></td></tr> <tr><td></td><td valign="top"><a href="#index-dired_002c-images">dired, images</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Image-Thumbnails">Smart Key - Image Thumbnails</a></td></tr> <tr><td></td><td valign="top"><a href="#index-dired_002dsidebar_002dmode">dired-sidebar-mode</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Dired-Sidebar-Mode">Smart Key - Dired Sidebar Mode</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-disable-Hyperbole">disable Hyperbole</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-disable-Hyperbole-1">disable Hyperbole</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-disable-Hyperbole">disable Hyperbole</a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-disable-hyperbole-key-bindings">disable hyperbole key bindings</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-disable-org_002dmode-support">disable org-mode support</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> <tr><td></td><td valign="top"><a href="#index-display">display</a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> @@ -13645,6 +13640,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-Hyperbole_002c-obtaining-1">Hyperbole, obtaining</a>:</td><td> </td><td valign="top"><a href="#Stable-Package-Installation">Stable Package Installation</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Hyperbole_002c-starting">Hyperbole, starting</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Hyperbole_002c-system-encapsulation">Hyperbole, system encapsulation</a>:</td><td> </td><td valign="top"><a href="#Encapsulating-Systems">Encapsulating Systems</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-hyperbole_002dmode">hyperbole-mode</a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperlink">hyperlink</a>:</td><td> </td><td valign="top"><a href="#Links">Links</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyperlink-anchor">hyperlink anchor</a>:</td><td> </td><td valign="top"><a href="#Koutliner">Koutliner</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hypertext">hypertext</a>:</td><td> </td><td valign="top"><a href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr> @@ -13746,8 +13742,8 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-key-binding_002c-M_002dRET">key binding, M-<tt class="key">RET</tt></a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-key-binding_002c-menu">key binding, menu</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-key-binding_002c-smart-keys">key binding, smart keys</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-key-bindings_002c-toggle">key bindings, toggle</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-key-bindings_002c-toggle-1">key bindings, toggle</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-key-bindings">key bindings</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-key-bindings_002c-toggle">key bindings, toggle</a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-key-sequence">key sequence</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> <tr><td></td><td valign="top"><a href="#index-keyboard-drags">keyboard drags</a>:</td><td> </td><td valign="top"><a href="#Keyboard-Drags">Keyboard Drags</a></td></tr> <tr><td></td><td valign="top"><a href="#index-keyboard_002c-jump-to-window">keyboard, jump to window</a>:</td><td> </td><td valign="top"><a href="#Keyboard-Drags">Keyboard Drags</a></td></tr> @@ -13931,6 +13927,8 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-minibuffer_002c-buffer-menu">minibuffer, buffer menu</a>:</td><td> </td><td valign="top"><a href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr> <tr><td></td><td valign="top"><a href="#index-minibuffer_002c-default-actions">minibuffer, default actions</a>:</td><td> </td><td valign="top"><a href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr> <tr><td></td><td valign="top"><a href="#index-minibuffer_002c-jump-menu">minibuffer, jump menu</a>:</td><td> </td><td valign="top"><a href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-minor-mode_002c-hyperbole">minor mode, hyperbole</a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-minor-mode_002c-keymap">minor mode, keymap</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-modeline-click">modeline click</a>:</td><td> </td><td valign="top"><a href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr> <tr><td></td><td valign="top"><a href="#index-modeline-click-and-drag">modeline click and drag</a>:</td><td> </td><td valign="top"><a href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline Clicks</a></td></tr> <tr><td></td><td valign="top"><a href="#index-modeline-drag">modeline drag</a>:</td><td> </td><td valign="top"><a href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr> @@ -14202,8 +14200,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-toc-implicit-button-type">toc implicit button type</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> <tr><td></td><td valign="top"><a href="#index-todotxt_002dmode">todotxt-mode</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Todotxt-Mode">Smart Key - Todotxt Mode</a></td></tr> <tr><td></td><td valign="top"><a href="#index-toggle-HyControl-mode">toggle HyControl mode</a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-toggle-key-bindings">toggle key bindings</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-toggle-key-bindings-1">toggle key bindings</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-toggle-key-bindings">toggle key bindings</a>:</td><td> </td><td valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-toggling-blank-lines">toggling blank lines</a>:</td><td> </td><td valign="top"><a href="#View-Specs">View Specs</a></td></tr> <tr><td></td><td valign="top"><a href="#index-top_002dlevel-cell">top-level cell</a>:</td><td> </td><td valign="top"><a href="#Creating-Outlines">Creating Outlines</a></td></tr> <tr><td></td><td valign="top"><a href="#index-top_002dlevel-cell-1">top-level cell</a>:</td><td> </td><td valign="top"><a href="#Idstamps">Idstamps</a></td></tr> diff --git a/man/hyperbole.info b/man/hyperbole.info index 7037977f9b..28d58d389c 100644 Binary files a/man/hyperbole.info and b/man/hyperbole.info differ diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf index f9c9f04ec2..a6b3ec0c99 100644 Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ diff --git a/man/hyperbole.texi b/man/hyperbole.texi index b2e0dac0ee..2a3ecccf4e 100644 --- a/man/hyperbole.texi +++ b/man/hyperbole.texi @@ -155,7 +155,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P> <PRE> Edition 8.0.0pre -Printed November 7, 2021. +Printed December 26, 2021. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -197,7 +197,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @example Edition 8.0.0pre -November 7, 2021 +December 26, 2021 Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -702,16 +702,17 @@ or if some emails you a button (you can do that too). Hyperbole is something to be experienced and interacted with, not understood from reading alone. It installs normally as a single Emacs package with no -dependencies outside of standard Emacs libraries. Most of Hyperbole is a -single global minor mode that you can activate and deactivate at will. And -it can be uninstalled quickly as well if need be, so there is no risk to -giving it a spin. - -Once you have it installed and activated @bkbd{C-u M-x hyperbole-mode @key{RET}}, -try the interactive demo with @bkbd{C-h h d d}. In fact, if you -have Hyperbole loaded, you can press @bkbd{M-@key{RET}} inside any of the -brace delimited series of keys you see in this document and it will -execute them on-the-fly (easy keyboard-macro style buttons in any text). +dependencies outside of standard Emacs libraries, @pxref{Installation}. Most +of Hyperbole is a single global minor mode that you can activate and +deactivate at will. And it can be uninstalled quickly as well if need be, so +there is no risk to giving it a spin. + +Once you have it installed and activated (use @bkbd{C-u M-x +hyperbole-mode @key{RET}}), try the interactive demo with @bkbd{C-h h d d}. +In fact, if you have Hyperbole loaded, you can press @bkbd{M-@key{RET}} +inside any of the brace delimited series of keys you see in this document and +Hyperbole will execute them on-the-fly (easy keyboard-macro style buttons in +any text). Hyperbole can dramatically increase your productivity and greatly reduce the number of keyboard/mouse keys you'll need to work efficiently. @@ -896,14 +897,36 @@ Hyperbole, <bug-hyperbole@@gnu.org>. For more details, @vindex hmouse-middle-flag @kindex Action Key @kindex Assist Key -Hyperbole offers two special @dfn{Smart Keys}, the Action Key and the -Assist Key, that perform an extensive array of context-sensitive -operations across emacs usage. In many popular modes, they allow you -to perform common, sometimes complex operations without having to use a -different key for each operation. Just press a Smart Key and the -right thing happens. This chapter explains typical uses of the Smart -Keys. @xref{Smart Key Reference}, for complete descriptions of their -behavior in all contexts. +When active, Hyperbole offers two special @dfn{Smart Keys}, the Action Key +and the Assist Key, that perform an extensive array of context-sensitive +operations across emacs usage. In many Emacs modes, they allow you to +perform common, sometimes complex operations without having to use a +different key for each operation. Just press a Smart Key and the right thing +happens. This chapter explains typical uses of the Smart Keys. @xref{Smart +Key Reference}, for complete descriptions of their behavior in all contexts. + +@vindex file, .emacs +@cindex hyperbole-mode +@cindex minor mode, hyperbole +@cindex change key bindings +@cindex toggle key bindings +@cindex key bindings, toggle +@cindex disable Hyperbole +@kindex C-h h +@kindex X +@kindex q +Use @bkbd{C-h h} to activate Hyperbole (enable @code{hyperbole-mode} and +display its keyboard-driven minibuffer menu). Use @bkbd{q} to quit from the +minibuffer menu while leaving Hyperbole enabled and thus the Smart Keys +active. Use@bkbd{X} to quit from the minibuffer menu and disable Hyperbole +keys. + +If you prefer a different key to activate Hyperbole, you can bind it as part +of any setting of @code{hyperbole-init-hook} within your personal +@file{~/.emacs} file. For example, @code{(add-hook +'hyperbole-init-hook (lambda () (global-set-key "\C-ch" +'hyperbole--enable-mode) (global-set-key "\C-hh" 'view-hello-file)))}; then +restart Emacs. @menu * Smart Key Bindings:: @@ -920,27 +943,24 @@ behavior in all contexts. @kindex C-u M-@key{RET} @kindex M-@key{RET} -From the keyboard, @bkbd{M-@key{RET}} is the Action Key and @bkbd{C-u -M-@key{RET}} is the Assist Key. These keys allow context-sensitive -operation from any keyboard. - -@c Removed the following in Hyperbole 6.00 since it was not consistent -@c across all read-only modes and the standard bindings are easy -@c enough to use. -@c -@c In many read-only modes like Dired (the directory editor and file -@c manager) and Rmail (the mail reader), @{@key{RET}@} also functions as -@c the Action Key and @bkbd{C-u @key{RET}} functions as the Assist Key. +With @code{hyperbole-mode} enabled, @bkbd{M-@key{RET}} is the Action Key +and @bkbd{C-u M-@key{RET}} is the Assist Key. These keys allow +context-sensitive operation from any keyboard. @kindex shift-middle mouse key @kindex shift-left mouse key @kindex shift-right mouse key @kindex middle mouse key @vindex hmouse-middle-flag -From the mouse, the @dfn{Action Key} is bound to your shift-middle -mouse key (or shift-left on a 2-button mouse). The @dfn{Assist Key} -is bound to your shift-right mouse key, assuming Hyperbole is run -under an external window system. +Mouse configuration of the Smart Keys is automatic for GNU Emacs under +Mac OS X, the X Window System and MS Windows, assuming your emacs program +has been built with support for any of these window systems. + +The @dfn{Action Mouse Key} is bound to your shift-middle mouse key (or +shift-left on a 2-button mouse). The @dfn{Assist Mouse Key} is bound to your +shift-right mouse key, assuming Hyperbole is run under an external window +system. These keys support @dfn{Drag Actions}, @pxref{Smart Mouse Keys}, as +well as the standard Smart Key presses. @findex hmouse-add-unshifted-smart-keys @cindex unshifted mouse bindings @@ -962,36 +982,19 @@ personal @file{~/.emacs} file, add: @code{(add-hook 'hyperbole-init-hook @findex action-mouse-key @findex assist-mouse-key @findex hkey-either -If you prefer other key assignments, simply bind the commands +If you prefer other Smart Key bindings, simply bind the commands @code{action-key} and @code{assist-key} to keyboard keys. -Hyperbole binds @bkbd{M-@key{RET}} to the command @code{hkey-either}. -It allows for a single key binding for both commands; a prefix -argument, such as @bkbd{C-u}, then invokes @code{assist-key}. +Hyperbole binds @bkbd{M-@key{RET}} to the command @code{hkey-either}; +this provides a single key binding for both Smart Key commands; a prefix +argument, such as @bkbd{C-u}, then invokes @code{assist-key} actions. -You may also bind @code{action-mouse-key} and @code{assist-mouse-key} -to other mouse keys, though you won't be able to execute mouse drag -actions with such key bindings. +You may also bind @code{action-mouse-key} and @code{assist-mouse-key} to +other mouse keys, though you won't be able to execute mouse drag actions with +such key bindings. @xref{Smart Mouse Key Drags} and @pxref{Keyboard Drags}. -Mouse configuration of the Smart Keys is automatic for GNU Emacs under -Mac OS X, the X Window System and MS Windows assuming your emacs program -has been built with support for any of these window systems. - -@vindex file, .emacs -@findex hyperbole-toggle-bindings -@cindex change key bindings -@cindex toggle key bindings -@cindex key bindings, toggle -@cindex disable Hyperbole -@kindex C-c h -If you ever need to temporarily disable the Hyperbole keyboard and mouse -bindings, use the @code{hyperbole-toggle-bindings} command. It switches -between the Hyperbole key bindings and those set prior to loading Hyperbole -and then back again if invoked once more. There is no default key binding -for this command; use @bkbd{M-x hyperbole-toggle-bindings -@key{RET}}. Alternatively, you may select a key and bind it as part of any -setting of @code{hyperbole-init-hook} within your personal @file{~/.emacs} -file. For example, @code{(add-hook 'hyperbole-init-hook (lambda () -(global-set-key "\C-ch" 'hyperbole-toggle-bindings)))}. +To permanently change any of these key bindings, use: +@code{(add-hook 'hyperbole-init-hook (lambda () (hkey-set-key <KEY> '<CMD>)}, +for example, @code{(hkey-set-key "\M-'" 'hkey-either)}. @c @cindex Paste Key @c @cindex mouse paste @@ -3162,7 +3165,7 @@ The rename command may be invoked from the Hyperbole menu via Ebut/Rename. Hyperbole does not bind this command to a key by default. @bkbd{C-h w hui:ebut-rename @key{RET}} will show what if any key is bound within your Emacs. Bind it within your @file{~/.emacs} file with: -@code{(global-set-key "\C-cr" 'hui:ebut-rename)}, for example. +@code{(hkey-set-key "\C-cr" 'hui:ebut-rename)}, for example. @node Deletion, Modification, Renaming, Utilizing Explicit Buttons @@ -6120,11 +6123,11 @@ button is activated and does one of four things with LINK-EXPR: @item invokes a function or action type of one argument, the button text sans the function name, to display it. @end enumerate -For example, if you use Python and have a @samp{PYTHONPATH} environment +For example, if you use Python and have a @samp{PYTHONLIBPATH} environment variable, then pressing @bkbd{C-x C-e} @code{eval-last-sexp} after this expression: -@code{(defal pylib "$@{PYTHONPATH@}/%s")} +@code{(defal pylib "$@{PYTHONLIBPATH@}/%s")} @noindent defines a new action button link type called ’pylib’ whose buttons @@ -6743,16 +6746,15 @@ implicit button type. See also @b{system encapsulation}. @cindex InfoDock @item InfoDock -InfoDock was an integrated productivity toolset for software engineers +InfoDock is an older integrated productivity toolset for software engineers and knowledge workers built atop XEmacs; it is no longer maintained or -updated. An older version from 1999 may be found at -infodock.sf.net. +updated, though many of its packages can be used with GNU Emacs. An older +version from 1999 may be found at infodock.sf.net. -InfoDock has much of the power of GNU Emacs, but with an -easier to use and more comprehensive menu-based user interface. Most -objections people raise to using emacs have already been addressed in -InfoDock. InfoDock was meant for people who wanted a complete, -pre-customized environment in one package. +InfoDock has much of the power of GNU Emacs, but with an easier to use and +more comprehensive menu-based user interface. Most objections people raise +to using emacs have already been addressed in InfoDock. InfoDock is meant +for people who prefer a complete, pre-customized environment in one package. @item Instance Number A colon prefaced number appended to the label of a newly created button @@ -6889,7 +6891,7 @@ The @bkbd{C-h h d s} Doc/SmartKeys menu item displays a full summary of Smart Key capabilities. @xref{Smart Keys}, for complete details. @item Smart Menus -Smart Menus are an older in-buffer menu system that worked on dumb +Smart Menus are an older in-buffer menu system that work on dumb terminals and pre-dated Emacs' own dumb terminal menu support. They are included with InfoDock (which is no longer maintained) and are not available separately. They are not a part of Hyperbole and are not @@ -6934,10 +6936,9 @@ information displayed, its format, modes used to operate on it, its display location and so forth. @item View Spec -A terse (and to the uninitiated, cryptic) string that specifies a -particular view of a koutline or a link referent. If a view spec is -active for a buffer, the view spec appears within the modeline like so, -<|view spec>. +A terse string that specifies a particular view of a koutline or a link +referent. If a view spec is active for a buffer, the view spec appears +within the modeline like so, <|view spec>. @xref{View Specs} @item Window An Emacs window displays a single Emacs buffer within a single frame. @@ -7612,8 +7613,14 @@ menubar menu as shown here: @end float @sp 1 +@vindex hyperbole-mode-map +@cindex key bindings +@cindex minor mode, keymap @noindent -Below are descriptions of Hyperbole's default keyboard key bindings: +Below are descriptions of Hyperbole's default keyboard key bindings. +All except @bkbd{C-h h} (the global key used to enable Hyperbole and +display its minibuffer menu) are bound within Hyperbole's minor mode +keymap, @code{hyperbole-mode-map}. @table @asis @cindex key binding, M-@key{RET} @@ -7667,7 +7674,8 @@ links to any other window chosen via the Ace Window prompt. @cindex key binding, C-h h @kitem C-h h Hyperbole Mini Menu: Invoke the Hyperbole minibuffer menu, giving -access to many Hyperbole commands. +access to many Hyperbole commands. This is bound globally as a means +of enabling Hyperbole minor mode. @cindex key binding, C-h A @cindex key binding, C-u C-h A @@ -7701,42 +7709,21 @@ to @samp{t} (true) by default in @file{hyperbole.el}. This setting means all Hyperbole key bindings will be initialized when Hyperbole is loaded. If you want to disable these bindings permanently, simply add @code{(setq hkey-init nil)} to your @file{~/.emacs} file prior to the -point at which you load Hyperbole and restart Emacs. Then you will -have to choose the Hyperbole commands that you want to use and bind -those to keys. - -@vindex file, .emacs -@findex hyperbole-toggle-bindings -@cindex change key bindings -@cindex toggle key bindings -@cindex key bindings, toggle -@cindex disable Hyperbole -@kindex C-c h -If you ever have a need to temporarily disable the Hyperbole keyboard and -mouse bindings, use the @code{hyperbole-toggle-bindings} command. It -switches between the Hyperbole key bindings and those set prior to loading -Hyperbole and then back again if invoked once more. There is no default -key binding for this command; use @bkbd{M-x hyperbole-toggle-bindings -@key{RET}}. Alternatively, you may select a key and bind it as part of any -setting of @code{hyperbole-init-hook} within your personal @file{~/.emacs} -file. For example, @code{(add-hook 'hyperbole-init-hook (lambda () -(global-set-key "\C-ch" 'hyperbole-toggle-bindings)))}. +point at which you load Hyperbole; then restart Emacs. Henceforth, you will +have to choose the Hyperbole commands that you want to use and bind those to +keys. @vindex file, .emacs @findex hyperbole-mode @cindex mouse key toggle @cindex Smart Mouse Key toggle -@kindex C-c t -If you ever want to disable Hyperbole key and mouse bindings, simply toggle -Hyperbole minor mode off with the @code{hyperbole-mode} command. -It switches between Hyperbole mouse key and mouse bindings and those set -prior to loading Hyperbole and then back again if invoked once more. -There is no default key binding for this command; use @bkbd{M-x -hyperbole-mode @key{RET}}. Alternatively, you may select a -key and bind it as part of any setting of @code{hyperbole-init-hook} -within your personal @file{~/.emacs} file. For example, @code{(add-hook -'hyperbole-init-hook (lambda () (global-set-key "\C-ct" -'hyperbole-mode)))}. +If you ever want to temporarily disable Hyperbole key and mouse bindings, +simply toggle Hyperbole minor mode off with the @code{hyperbole-mode} +command. There is no default key binding for this command; use @bkbd{M-x +hyperbole-mode @key{RET}}. Alternatively, you may select a key and bind it +as part of any setting of @code{hyperbole-init-hook} within your +personal @file{~/.emacs} file. For example, @code{(add-hook +'hyperbole-init-hook (lambda () (global-set-key "\C-ct" 'hyperbole-mode)))}. @node Koutliner Keys, Smart Key Reference, Hyperbole Key Bindings, Top @appendix Koutliner Keys diff --git a/man/version.texi b/man/version.texi index 58f9b6f324..4d773102a7 100644 --- a/man/version.texi +++ b/man/version.texi @@ -1,4 +1,4 @@ -@set UPDATED November, 2021 -@set UPDATED-MONTH November 2021 +@set UPDATED December, 2021 +@set UPDATED-MONTH December 2021 @set EDITION 8.0.0pre @set VERSION 8.0.0pre