branch: scratch/hyperbole-lexbind commit 64c35636d5d3e52718bc8bee3cc51afe40de868f Author: Bob Weiner <r...@gnu.org> Commit: Bob Weiner <r...@gnu.org>
Expanded Org mode doc; introduce 'key series' term in Glossary --- Changes | 15 ++++++- DEMO | 57 +++++++++++++++--------- hib-kbd.el | 116 +++++++++++++++++++++++++------------------------ hsys-org.el | 21 ++++++++- man/hyperbole.html | 125 ++++++++++++++++++++++++++++++++++------------------- man/hyperbole.info | Bin 512812 -> 514595 bytes man/hyperbole.pdf | Bin 1270678 -> 1272688 bytes man/hyperbole.texi | 101 ++++++++++++++++++++++++++++--------------- 8 files changed, 275 insertions(+), 160 deletions(-) diff --git a/Changes b/Changes index fcf7199..863a46a 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,15 @@ +2019-07-28 Bob Weiner <r...@gnu.org> + +* DEMO, man/hyperbole.texi (Implicit Button Type Summaries): Updated to expanded + Org mode support. + +* hib-kbd.el: + man/hyperbole.texi (Implicit Button Type Summaries, Glossary): Changed hib-kbd + key-sequence to key-series to indicate can be multiple key sequences. Added + def. to Glossary. + (kbd-key:doc): Changed to call hkey-help rather than trigger + an error when key-series is not a single bound key sequence. + 2019-07-23 Bob Weiner <r...@gnu.org> * man/hyperbole.texi (Referent Display): Rewrote and added details on how the 4 types @@ -107,7 +119,8 @@ 2019-07-08 Bob Weiner <r...@gnu.org> -* hbut.el (ibut:label-separator-regexp, hbut:outside-comment-p): Added. +* hbut.el (ibut:label-separator-regexp, hbut:outside-comment-p): Added doc +for expanded Org mode reference handling. 2019-07-01 Bob Weiner <r...@gnu.org> diff --git a/DEMO b/DEMO index b113171..0c0feb2 100644 --- a/DEMO +++ b/DEMO @@ -254,7 +254,7 @@ the argument is used to adjust one dimension of the frame. The {@} command splits a frame into a grid of up to 9 rows by 9 columns of windows, showing a different buffer in each window, if available. First let's expand our frame to full screen with the {.1 %} command and then show -a 2 x 3 grid. We can do multiple commands in one key sequence. Press the +a 2 x 3 grid. We can do multiple commands in one 'key series'. Press the action key here: {.1 % .23 @}. You can even write something like this to do the whole thing in one sequence. @@ -263,7 +263,7 @@ window with {C-x 1}. Now we can execute a single sequence from any buffer that creates our 2x3 window grid: {C-h h s f .1 % .23 @ q}. Pretty amazing, right? You can separate each command by any number of spaces or even jam them all together: {C-hhsf.1%.23@q}. Use SPC (separated by spaces) to -include a space as part of the key sequence. +include a space as part of the key series. A zero argument to the {@} command is special. It means you want to display buffers with a particular major mode first, e.g. c-mode. You will be @@ -350,7 +350,7 @@ Action Key click on {C-x4r work RET} to search for all entries from Work Industries; then type {q} to quit from the HyRolo search results buffer. {C-x4r manager RET} finds all managers plus their staff across companies. {C-x4r Dunn,\ J RET} finds just that staffer. Notice that you must quote the -space with a backslash when including it in a key sequence search string or +space with a backslash when including it in a key series search string or else the space will be removed; when just typing the same string interactively, don't add the backslash. @@ -374,9 +374,9 @@ not one Match entries without the arg ===================================================================== So for example, {C-x4r (or smith dunn) RET} finds both the Smith and Dunn -entries. (Note that you do not need to backslash quote spaces within +entries. (Note that you do not need to quote spaces with backslashes within parentheses, square brackets, angle brackets or double quotes when used in -key sequences). To find any Managers and their staffers at HiHo Industries, +key series). To find any Managers and their staffers at HiHo Industries, use: {C-x4r (and manager hiho) RET}. To find managers anywhere but at HiHo: {C-x4r (and manager (not hiho)) RET}. Finally, this will find all people who are not managers at HiHo: {C-x4r (not (and manager hiho)) RET}. @@ -434,17 +434,19 @@ label it by using {C-h h i l}. Now let's explore some implicit button types. -** Key Sequence Buttons +** Key Series Buttons -Any Emacs key sequence (or multiple sequences) delimited by curly braces is -an implicit button. Press the Action Key with {C-u C-p} for example and the -point should move four lines upward. An Assist Key press on the key sequence -displays the documentation for its command binding, i.e. what it does. Key -sequences together with the arguments their commands prompt for, may also be -given, e.g. {M-x apropos RET hyperbole RET}. Click with the Action Mouse Key -in the braces to try it out. +Any series of Emacs key sequences (or 'key series') delimited by curly +braces is an implicit button. Press the Action Key within {C-u C-p C-n C-e} +for example and the point should move three lines upward and to the end of +line. An Assist Key press on the key series either displays the documentation +for its command binding (if a single key sequence) or displays help for the +implicit button, i.e. what it does. Key series together with the +arguments their commands prompt for, may also be given, e.g. {M-x apropos +RET hyperbole RET}. Click with the Action Mouse Key within the first line +of this button to try it out. -Hyperbole minibuffer menu items may also be activated as key sequences. For +Hyperbole minibuffer menu items may also be activated as key series. For example, {C-h h d i} displays the online browsable Info version of the Hyperbole Manual. Press your Action Key between the braces to see it. Once in the Info browser, use {s} to search for any topic throughout the manual. @@ -456,14 +458,27 @@ demonstrations and tours with this and other implicit button types. ** Org Mode -For users of Emacs Org mode, Hyperbole does a few things. First, the -Action Key will follow and execute links in Org mode files. Second, when -point is on an outline heading in Org mode, the Action Key cycles the view -of the subtree at point and the Assist Key cycles the view of all headings -in the buffer. The Assist Key will also display help when pressed on an Org -mode link. +For users of Emacs Org mode, Hyperbole does quite a few things. -In any other context besides the end of a line, the Action Key will invoke +First, the Action Key follows internal links in Org mode files. When +pressed on a link referent/target, the link definition is displayed, +allowing two-way navigation between definitions and targets. + +Second, the Action Key follows Org mode external links. The Assist Key +displays help when pressed on an Org mode link. + +Third, within a radio target definition, the Action Key jumps to the first +occurrence of an associated radio target. + +Fourth, when point is on an outline heading in Org mode, the Action Key +cycles the view of the subtree at point and the Assist Key cycles the view +of all headings in the buffer. + +Fifth, with point on the first line of a code block definition, the Action +Key executes the code block via the Org mode standard binding of {C-c C-c}, +(org-ctrl-c-ctrl-c). + +In any other context besides the end of a line, the Action Key invokes the Org mode standard binding of {M-RET}, (org-meta-return). ** Implicit Path Links diff --git a/hib-kbd.el b/hib-kbd.el index 8888668..bc4ab9f 100644 --- a/hib-kbd.el +++ b/hib-kbd.el @@ -11,15 +11,16 @@ ;; ;;; Commentary: ;; -;; A press of the Action Key on a key sequence executes its -;; command binding or Hyperbole minibuffer menu binding. +;; A press of the Action Key on any sequence of keys delimited by braces +;; executes its command binding or Hyperbole minibuffer menu binding. ;; -;; A press of the Assist Key on a key sequence displays the -;; documentation for it. +;; A press of the Assist Key on any sequence of keys delimited by braces +;; displays the documentation for it. ;; -;; Key sequences should be in human readable string form with spaces -;; between each key and the whole sequence delimited by braces, -;; e.g. {C-x o}. Forms such as {\C-b}, {\^b}, and {^b} will not be +;; Sequences of keys should be in human readable string form with spaces +;; between each key, may contain any number of individual key sequences +;; and the whole thing should be delimited by braces, e.g. {M-x apropos +;; RET hyperbole RET}. Forms such as {\C-b}, {\^b}, and {^b} will not be ;; recognized. ;;; Code: @@ -32,10 +33,10 @@ ;;; ************************************************************************ ;;; Public implicit button types ;;; ************************************************************************ - -(defact kbd-key (key-sequence) + +(defact kbd-key (key-series) "Executes a normalized key sequence without curly braces, {}. -KEY-SEQUENCE must be a string of one of the following: +KEY-SERIES must be a string of one of the following: a Hyperbole minibuffer menu item key sequence, a HyControl key sequence, a M-x extended command, @@ -43,7 +44,7 @@ KEY-SEQUENCE must be a string of one of the following: Returns t if the sequence appears to be valid, else nil." (interactive "kKey sequence to execute (no {}): ") - (kbd-key:act key-sequence)) + (kbd-key:act key-series)) (defib kbd-key () "Executes a key sequence found around point, delimited by curly braces, {}, if any. @@ -66,37 +67,37 @@ Any key sequence must be a string of one of the following: ;; standard ASCII characters. (hbut:label-p t "‘" "’" t))) ;; This excludes delimiters - (key-sequence (car seq-and-pos)) + (key-series (car seq-and-pos)) (start (cadr seq-and-pos)) binding) ;; Match only when start delimiter is preceded by whitespace or ;; is the 1st buffer character, so do not match to things like ${variable}. (when (memq (char-before start) '(nil ?\ ?\t ?\n ?\j ?\f)) - (when (and (stringp key-sequence) - (not (eq key-sequence ""))) - (setq key-sequence (kbd-key:normalize key-sequence) - binding (key-binding key-sequence))) - (and (stringp key-sequence) + (when (and (stringp key-series) + (not (eq key-series ""))) + (setq key-series (kbd-key:normalize key-series) + binding (key-binding key-series))) + (and (stringp key-series) (or (and binding (not (integerp binding))) - (kbd-key:special-sequence-p key-sequence)) + (kbd-key:special-sequence-p key-series)) (ibut:label-set seq-and-pos) - (hact 'kbd-key key-sequence)))))) + (hact 'kbd-key key-series)))))) ;;; ************************************************************************ ;;; Public functions ;;; ************************************************************************ -(defun kbd-key:act (key-sequence) - "Executes the command binding for normalized KEY-SEQUENCE. -Returns t if KEY-SEQUENCE has a binding, else nil." +(defun kbd-key:act (key-series) + "Executes the command binding for normalized KEY-SERIES. +Returns t if KEY-SERIES has a binding, else nil." (interactive "kKeyboard key to execute (no {}): ") - (setq current-prefix-arg nil) ;; Execution of the key-sequence may set it. - (let ((binding (key-binding key-sequence))) + (setq current-prefix-arg nil) ;; Execution of the key-series may set it. + (let ((binding (key-binding key-series))) (cond ((null binding) ;; If this is a special key seqence, execute it by adding ;; its keys to the stream of unread command events. - (when (kbd-key:special-sequence-p key-sequence) - (setq unread-command-events (nconc unread-command-events (mapcar 'identity key-sequence))) + (when (kbd-key:special-sequence-p key-series) + (setq unread-command-events (nconc unread-command-events (mapcar 'identity key-series))) t)) ((memq binding '(action-key action-mouse-key hkey-either)) (beep) @@ -104,11 +105,11 @@ Returns t if KEY-SEQUENCE has a binding, else nil." t) (t (call-interactively binding) t)))) -(defun kbd-key:doc (key-sequence &optional full) - "Shows first line of doc for binding of keyboard KEY-SEQUENCE in minibuffer. +(defun kbd-key:doc (key-series &optional full) + "Shows first line of doc for binding of keyboard KEY-SERIES in minibuffer. With optional prefix arg FULL, displays full documentation for command." (interactive "kKey sequence: \nP") - (let* ((keys (kbd-key:normalize key-sequence)) + (let* ((keys (kbd-key:normalize key-series)) (cmd (let ((cmd (key-binding keys))) (if (not (integerp cmd)) cmd))) (doc (and cmd (documentation cmd))) @@ -118,7 +119,7 @@ With optional prefix arg FULL, displays full documentation for command." (or full (setq end-line (string-match "[\n]" doc) doc (substitute-command-keys (substring doc 0 end-line)))) - (setq doc (format "No documentation for {%s} %s" key-sequence (or cmd "")))) + (setq doc (format "No documentation for {%s} %s" key-series (or cmd "")))) (if (and cmd doc) (if full (describe-function cmd) @@ -127,18 +128,19 @@ With optional prefix arg FULL, displays full documentation for command." (if full (hui:menu-help doc) (message doc))) - (t (error "(kbd-key:doc): No binding found for keys {%s}" key-sequence))))) + (t (hkey-help))))) + (defun kbd-key:help (but) "Display documentation for binding of keyboard key given by BUT's label." (let ((kbd-key (hbut:key-to-label (hattr:get but 'lbl-key)))) (if kbd-key (kbd-key:doc kbd-key t)))) -(defun kbd-key:normalize (key-sequence) - "Returns KEY-SEQUENCE string (without surrounding {}) normalized into a form that can be parsed by commands." +(defun kbd-key:normalize (key-series) + "Returns KEY-SERIES string (without surrounding {}) normalized into a form that can be parsed by commands." (interactive "kKeyboard key sequence to normalize (no {}): ") - (if (stringp key-sequence) - (let ((norm-key-seq (copy-sequence key-sequence)) + (if (stringp key-series) + (let ((norm-key-seq (copy-sequence key-series)) (case-fold-search nil) (case-replace t) (substring) @@ -188,36 +190,36 @@ With optional prefix arg FULL, displays full documentation for command." (lambda (str) (concat "" (substring str (match-beginning 1) (1+ (match-beginning 1)))))))) - (error "(kbd-key:normalize): requires a string argument, not `%s'" key-sequence))) + (error "(kbd-key:normalize): requires a string argument, not `%s'" key-series))) ;;; ************************************************************************ ;;; Private functions ;;; ************************************************************************ -(defun kbd-key:extended-command-p (key-sequence) - "Returns non-nil if the string KEY-SEQUENCE is a normalized extended command invocation, i.e. M-x command." - (and (stringp key-sequence) (string-match kbd-key:extended-command-prefix key-sequence))) +(defun kbd-key:extended-command-p (key-series) + "Returns non-nil if the string KEY-SERIES is a normalized extended command invocation, i.e. M-x command." + (and (stringp key-series) (string-match kbd-key:extended-command-prefix key-series))) -(defun kbd-key:hyperbole-hycontrol-key-p (key-sequence) - "Returns t if normalized, non-nil KEY-SEQUENCE is given when in a HyControl mode, else nil. +(defun kbd-key:hyperbole-hycontrol-key-p (key-series) + "Returns t if normalized, non-nil KEY-SERIES is given when in a HyControl mode, else nil. Allows for multiple key sequences strung together." - (and key-sequence + (and key-series (featurep 'hycontrol) (or hycontrol-windows-mode hycontrol-frames-mode) ;; If wanted to limit to single key bindings and provide tighter checking: - ;; (string-match "[-.0-9]*\\(.*\\)" key-sequence) - ;; (key-binding (match-string 1 key-sequence)) + ;; (string-match "[-.0-9]*\\(.*\\)" key-series) + ;; (key-binding (match-string 1 key-series)) t)) -(defun kbd-key:hyperbole-mini-menu-key-p (key-sequence) - "Returns t if normalized KEY-SEQUENCE appears to invoke a Hyperbole menu item or sequence of keys, else nil." - (when key-sequence +(defun kbd-key:hyperbole-mini-menu-key-p (key-series) + "Returns t if normalized KEY-SERIES appears to invoke a Hyperbole menu item or sequence of keys, else nil." + (when key-series (let ((mini-menu-key (kbd-key:normalize (key-description (car (where-is-internal 'hyperbole)))))) - (if (string-match (regexp-quote mini-menu-key) key-sequence) t)))) + (if (string-match (regexp-quote mini-menu-key) key-series) t)))) -(defun kbd-key:key-and-arguments (key-sequence) - "Returns t if normalized KEY-SEQUENCE appears to be a bound key sequence possibly with following interactive arguments, else nil." - (let ((prefix-binding (and (stringp key-sequence) (key-binding (substring key-sequence 0 1))))) +(defun kbd-key:key-and-arguments (key-series) + "Returns t if normalized KEY-SERIES appears to be a bound key sequence possibly with following interactive arguments, else nil." + (let ((prefix-binding (and (stringp key-series) (key-binding (substring key-series 0 1))))) ;; Just ensure that 1st character is bound to something that is ;; not a self-insert-command or a number. (and prefix-binding @@ -244,16 +246,16 @@ Allows for multiple key sequences strung together." start end)) string)) -(defun kbd-key:special-sequence-p (key-sequence) - "Returns non-nil if normalized KEY-SEQUENCE string is one of the following: +(defun kbd-key:special-sequence-p (key-series) + "Returns non-nil if normalized KEY-SERIES string is one of the following: a Hyperbole minibuffer menu item key sequence, a HyControl key sequence, a M-x extended command, or a valid key sequence together with its interactive arguments." - (or (kbd-key:hyperbole-mini-menu-key-p key-sequence) - (kbd-key:hyperbole-hycontrol-key-p key-sequence) - (kbd-key:extended-command-p key-sequence) - (kbd-key:key-and-arguments key-sequence))) + (or (kbd-key:hyperbole-mini-menu-key-p key-series) + (kbd-key:hyperbole-hycontrol-key-p key-series) + (kbd-key:extended-command-p key-series) + (kbd-key:key-and-arguments key-series))) ;;; ************************************************************************ ;;; Private variables diff --git a/hsys-org.el b/hsys-org.el index 9581e46..7c916e1 100644 --- a/hsys-org.el +++ b/hsys-org.el @@ -56,7 +56,26 @@ ;;; ************************************************************************ (defib org-mode () - "Follows any Org mode link at point or cycles through views of the outline subtree at point." + "Follows Org mode references, cycles outline visibility and executes code blocks. + +First, this follows internal links in Org mode files. When pressed on a +link referent/target, the link definition is displayed, allowing two-way +navigation between definitions and targets. + +Second, this follows Org mode external links. + +Third, within a radio target definition, this jumps to the first +occurrence of an associated radio target. + +Fourth, when point is on an outline heading in Org mode, this +cycles the view of the subtree at point. + +Fifth, with point on the first line of a code block definition, this +executes the code block via the Org mode standard binding of {C-c C-c}, +(org-ctrl-c-ctrl-c). + +In any other context besides the end of a line, the Action Key invokes the +Org mode standard binding of {M-RET}, (org-meta-return)." (when (funcall hsys-org-mode-function) (let (start-end) (cond ((setq start-end (hsys-org-internal-link-target-at-p)) diff --git a/man/hyperbole.html b/man/hyperbole.html index 0fb35b5..f96c183 100644 --- a/man/hyperbole.html +++ b/man/hyperbole.html @@ -348,7 +348,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P> <PRE> Edition 7.0.3a -Printed July 21, 2019. +Printed July 28, 2019. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -972,7 +972,7 @@ archives, and the World-Wide Web (WWW). added to documents with a simple drag between windows, no markup language needed. Implicit buttons are patterns automatically recognized within existing text that perform actions, e.g. bug#24568 displays the bug status -information for that bug number, without the need for any additional +information for that Emacs bug number, without the need for any additional markup. Global buttons are buttons that are activated by name from anywhere within Emacs. See <a href="#Buttons">Buttons</a>. @@ -997,7 +997,8 @@ fast, flexible file and text finding commands. A powerful, hierarchical contact manager, see <a href="#HyRolo">HyRolo</a>, which anyone can use, is also included. It is easy to learn since it introduces only a few new mechanisms and has a menu interface, which may be operated from the keyboard or the -mouse; +mouse; it may also be used to look up any record-based information and +Hyperbole buttons may be embedded in any records; </p> </dd> <dt><em>Screen Control</em></dt> @@ -1006,14 +1007,15 @@ Emacs, see <a href="#HyControl">HyControl</a>. With just a few keystrokes, you increasing a window’s height by 5 lines to moving a frame by 220 pixels or immediately moving it to a screen corner. Text in each window or frame may be enlarged or shrunk (zoomed) for easy viewing, plus many -other features; +other features; this allows Hyperbole to quickly control the way +information is presented on-screen; </p> </dd> <dt><em>Hypertextual Outliner</em></dt> <dd><p>an advanced outliner, see <a href="#Koutliner">Koutliner</a>, with multi-level autonumbering and permanent identifiers attached to each outline node for use as hypertext link anchors, per node properties and flexible -view specifications that can be embedded within links or used +view specifications that can be included in links or used interactively; </p> </dd> @@ -1067,7 +1069,7 @@ links to external information sources. See <a href="#Koutliner">Koutliner</a>. <p>Some of Hyperbole’s most significant features are: </p> <ul> -<li> Buttons may link to information or may execute procedures, such as +<li> Buttons may link to information or may execute functions, such as starting or communicating with external programs; </li><li> A simple mouse drag from a button source location to its link @@ -2557,8 +2559,7 @@ Messages are recognized in any buffer. <a name="index-ilink"></a> </dd> <dt><code>link-to-ibut <ilink></code></dt> -<dd><p>At point, activates a link to an implicit button. -The implicit buttonâs action is executed in the context of the current buffer. +<dd><p>At point, activates a link to an implicit button within the current buffer. Recognizes the format â<ilink:â <button label> â>â, e.g. <ilink: my sequence of keys>. </p> <a name="index-ibtypes-link_002dto_002dgbut"></a> @@ -2577,8 +2578,7 @@ Recognizes the format â<glink:â <button label> â>â <a name="index-elink"></a> </dd> <dt><code>link-to-ebut <elink></code></dt> -<dd><p>At point, activates a link to an explicit button. -The explicit buttonâs action is executed in the context of the current buffer. +<dd><p>At point, activates a link to an explicit button within the current buffer. Recognizes the format â<elink:â <button label> â>â, e.g. <elink: project-list>. </p> <a name="index-ibtypes-klink"></a> @@ -2616,11 +2616,13 @@ retrievals. </p> <a name="index-ibtypes-kbd_002dkey"></a> <a name="index-key-sequence"></a> +<a name="index-sequence-of-keys"></a> </dd> <dt><code>kbd-key</code></dt> -<dd><p>Executes a key sequence found around point, delimited by curly braces, {}, if any. -Key sequences should be in human readable form, e.g. <kbd>{C-x C-b}</kbd>. Formats such -as {^x^b} will not be recognized. +<dd><p>Executes a key series (series of key sequences) found around point, +delimited by curly braces, {}, if any. Key series should be in +human readable form, e.g. <kbd>{C-x C-b}</kbd>. Formats such as {^x^b} +will not be recognized. </p> <p>Any key sequence must be a string of one of the following: </p><ul> @@ -2961,21 +2963,38 @@ for a valid match. See the function documentation for <code>hpath:find</code> for special file display options. </p> <a name="index-ibtypes-org_002dmode"></a> -<a name="index-browse_002durl_002dbrowser_002dfunction-1"></a> <a name="index-org_002dmode"></a> <a name="index-Org-mode"></a> +<a name="index-radio-target"></a> +<a name="index-code-block"></a> +<a name="index-C_002dc-C_002dc"></a> +<a name="index-M_002dRET-1"></a> +<a name="index-org_002dctrl_002dc_002dctrl_002dc"></a> +<a name="index-org_002dmeta_002dreturn"></a> </dd> <dt><code>org-mode</code></dt> -<dd><p>The Action Key follows any Org mode link at point or cycles through -views of the outline subtree at point. In any other context besides -the end of a line, the Action Key will invoke the Org mode standard -binding of <kbd>{M-<span class="key">RET</span>}</kbd>, (org-meta-return). The Assist Key on -an Org mode heading cycles through views of the whole buffer outline -and on an Org mode link, displays standard Hyperbole help. +<dd><p>For users of Emacs Org mode, Hyperbole does quite a few things. +</p> +<p>First, the Action Key follows internal links in Org mode files. When +pressed on a link referent/target, the link definition is displayed, +allowing two-way navigation between definitions and targets. +</p> +<p>Second, the Action Key follows Org mode external links. The Assist +Key displays help when pressed on an Org mode link. </p> -<p>The variable, <code>browse-url-browser-function</code>, customizes the url -browser that is used for urls. Valid values of this variable -include <code>browse-url-default-browser</code> and <code>browse-url-generic</code>. +<p>Third, within a radio target definition, the Action Key jumps to the +first occurrence of an associated radio target. +</p> +<p>Fourth, when point is on an outline heading in Org mode, the Action Key +cycles the view of the subtree at point and the Assist Key cycles the +view of all headings in the buffer. +</p> +<p>Fifth, with point on the first line of a code block definition, the +Action Key executes the code block via the Org mode standard binding +of <kbd>{C-c C-c}</kbd>, <code>org-ctrl-c-ctrl-c</code>. +</p> +<p>In any other context besides the end of a line, the Action Key invokes +the Org mode standard binding of <kbd>{M-RET}</kbd>, <code>org-meta-return</code>. </p> <a name="index-ibtypes-doc_002did"></a> <a name="index-online-library"></a> @@ -3303,15 +3322,18 @@ at point. <a name="index-URL-1"></a> <a name="index-World_002dwide-Web-1"></a> <a name="index-WWW-1"></a> -<a name="index-browse_002durl_002dbrowser_002dfunction-2"></a> +<a name="index-browse_002durl_002dbrowser_002dfunction-1"></a> </dd> <dt><code>www-url</code></dt> <dd><p>Follows a link given by a URL. The variable, <code>browse-url-browser-function</code>, customizes the url browser -that is used. See its documentation string for details. +that is used. Valid values of this variable include +<code>browse-url-default-browser</code> and <code>browse-url-generic</code>. +See its documentation string for details. </p></dd> </dl> + <a name="index-action-1"></a> <a name="index-hui_003aebut_002dprompt_002dfor_002daction"></a> <p>Action types create a convenient way of specifying button behavior @@ -5067,7 +5089,7 @@ level to insertion at the child level. <dt><kbd>{C-u C-c c}</kbd></dt> <dd><p>Copy <tree> to follow as the first child of <cell>. </p> -<a name="index-C_002dc-C_002dc"></a> +<a name="index-C_002dc-C_002dc-1"></a> </dd> <dt><kbd>{C-c C-c}</kbd></dt> <dd><p>Copy <tree> to be the predecessor of <cell>. @@ -7491,6 +7513,16 @@ any number of buttons with the same base label within a single buffer. <p>Jedi is a Emacs package for Python completion, definition and documentation lookup. </p> </dd> +<dt><b>Key Sequence</b></dt> +<dd><p>A single sequence of keys that can invoke an Emacs command. +</p> +</dd> +<dt><b>Key Series</b></dt> +<dd><p>A series of one or more Emacs key sequences delimited by braces that +Hyperbole processes when activated as an implicit button, as if the +keys were typed in by the user. +</p> +</dd> <dt><b>Koutline</b></dt> <dd><p>A hierarchically ordered grouping of cells which may be stored as a file and viewed and edited as an outline. @@ -8011,8 +8043,8 @@ available with InfoDock. <a name="index-menu_002c-Cust_002fReferents"></a> <a name="index-C_002dh-h-c-r"></a> <p>Links to standard files, those which don’t match any special referent -category handled by any described earlier, are displayed in an Emacs -window specified by the <code>hpath:display-where</code> setting. It may be changed with the +category described earlier, are displayed in an Emacs window specified +by the <code>hpath:display-where</code> setting. It may be changed with the Cust/Referents <kbd>{C-h h c r}</kbd> menu. </p> <p>Available options are: @@ -8087,7 +8119,7 @@ entry. Alternatively, the viewer-program may be a Lisp function that takes a single filename argument. </p> <p>The association lists used by this function are stored in variables -vfor each available window system: <code>hpath:external-display-alist-macos</code>, +for each available window system: <code>hpath:external-display-alist-macos</code>, <code>hpath:external-display-alist-mswindows</code>, and <code>hpath:external-display-alist-x</code>. Examine and modify these values to suit your needs. @@ -8113,16 +8145,15 @@ compared against the values in <code>hpath:variables</code>. The first match found, if any, is selected and its associated variable name is substituted into the link pathname, in place of its literal value. When a link button is activated, potentially at a different site, -Hyperbole replaces each variable within the link pathname with the -first matching value from this list to recreate the literal pathname. +Hyperbole replaces each variable in the link pathname with the first +matching value from this list to recreate the literal pathname. Environment variables are also replaced whenever link paths are resolved. </p> <p>This permits sharing of links over wide areas, where the variable values differ between link creator and link activator. The entire process is wholly transparent to the user; it is explained here simply to help -you in deciding whether or not to modify the value of -<code>hpath:variables</code>. +you in deciding whether or not to modify the value of <code>hpath:variables</code>. </p> <hr> <a name="Web-Search-Engines"></a> @@ -8321,7 +8352,7 @@ shown here: </p> <dl compact="compact"> <dd><a name="index-key-binding_002c-M_002dRET"></a> -<a name="index-M_002dRET-1"></a> +<a name="index-M_002dRET-2"></a> </dd> <dt><kbd>{M-<span class="key">RET</span>}</kbd></dt> <dd><p>Action Key: Invoke the Action Key in the present context. @@ -10126,10 +10157,10 @@ Next: <a href="#Smart-Key-_002d-C-Source-Code" accesskey="n" rel="next">Smart Ke <div class="format"> <pre class="format">This works only for identifiers defined within the same source file in -which they are referenced. It requires either Emacs’ imenu or XEmacs’ -func-menu library and it requires that an index of identifiers has -been built for the current buffer. Other handlers handle identifier -references and definitions across multiple files. +which they are referenced. It requires either Emacs’ imenu library +and it requires that an index of identifiers has been built for the +current buffer. Other handlers handle identifier references and +definitions across multiple files. When pressed on an identifier name after an identifier index has been generated: ACTION KEY @@ -10768,7 +10799,7 @@ Next: <a href="#Smart-Key-_002d-HyRolo-Match-Buffers" accesskey="n" rel="next">S <a name="index-click_002c-world_002dwide-web"></a> <a name="index-W3"></a> <a name="index-URL-2"></a> -<a name="index-browse_002durl_002dbrowser_002dfunction-3"></a> +<a name="index-browse_002durl_002dbrowser_002dfunction-2"></a> <a name="index-World_002dwide-Web-2"></a> <a name="index-WWW-2"></a> <a name="index-C_002dh-h-c-u-1"></a> @@ -11554,7 +11585,8 @@ 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"><code>C-c 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-C_002da"><code>C-c C-a</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_002db"><code>C-c C-b</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_002dc"><code>C-c C-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-C_002dc"><code>C-c C-c</code></a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dc-1"><code>C-c C-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-C_002dd"><code>C-c C-d</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_002df"><code>C-c C-f</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_002dh"><code>C-c C-h</code></a>:</td><td> </td><td valign="top"><a href="#Hiding-and-Showing">Hiding and Showing</a></td></tr> @@ -11704,7 +11736,8 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <tr><td></td><td valign="top"><a href="#index-M_002do-r-_003cwindow_002did_003e"><code>M-o r <window-id></code></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-M_002do-t-_003cwindow_002did_003e"><code>M-o t <window-id></code></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-M_002dRET"><code>M-<span class="key">RET</span></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-M_002dRET-1"><code>M-<span class="key">RET</span></code></a>:</td><td> </td><td valign="top"><a href="#Global-Key-Bindings">Global Key Bindings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-M_002dRET-1"><code>M-RET</code></a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-M_002dRET-2"><code>M-<span class="key">RET</span></code></a>:</td><td> </td><td valign="top"><a href="#Global-Key-Bindings">Global Key Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-M_002dx-kotl_002dmode_003ashow_002dsubtree"><code>M-x kotl-mode:show-subtree</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-middle-mouse-key-1"><code>middle mouse key</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr> <tr><td colspan="4"> <hr></td></tr> @@ -12018,9 +12051,8 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td colspan="4"> <hr></td></tr> <tr><th><a name="Function_fn_letter-B">B</a></th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-browse_002durl_002dbrowser_002dfunction">browse-url-browser-function</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-browse_002durl_002dbrowser_002dfunction-1">browse-url-browser-function</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-browse_002durl_002dbrowser_002dfunction-2">browse-url-browser-function</a>:</td><td> </td><td valign="top"><a href="#Action-Types">Action Types</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-browse_002durl_002dbrowser_002dfunction-3">browse-url-browser-function</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW URLs</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-browse_002durl_002dbrowser_002dfunction-1">browse-url-browser-function</a>:</td><td> </td><td valign="top"><a href="#Action-Types">Action Types</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-browse_002durl_002dbrowser_002dfunction-2">browse-url-browser-function</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW URLs</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th><a name="Function_fn_letter-C">C</a></th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-c_002b_002b_002dcpp_002dinclude_002dpath">c++-cpp-include-path</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-C_002b_002b-Source-Code">Smart Key - C++ Source Code</a></td></tr> @@ -12425,6 +12457,8 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><th><a name="Function_fn_letter-O">O</a></th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-objc_002dcpp_002dinclude_002dpath">objc-cpp-include-path</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Objective_002dC-Source-Code">Smart Key - Objective-C Source Code</a></td></tr> <tr><td></td><td valign="top"><a href="#index-objc_002dinclude_002dpath">objc-include-path</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Objective_002dC-Source-Code">Smart Key - Objective-C Source Code</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-org_002dctrl_002dc_002dctrl_002dc"><code>org-ctrl-c-ctrl-c</code></a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-org_002dmeta_002dreturn"><code>org-meta-return</code></a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th><a name="Function_fn_letter-R">R</a></th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-run_002dhooks"><code>run-hooks</code></a>:</td><td> </td><td valign="top"><a href="#Glossary">Glossary</a></td></tr> @@ -12745,6 +12779,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-clone-window">clone window</a>:</td><td> </td><td valign="top"><a href="#Cloning-Windows">Cloning Windows</a></td></tr> <tr><td></td><td valign="top"><a href="#index-clone-window-1">clone window</a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td></td><td valign="top"><a href="#index-clone-window-2">clone window</a>:</td><td> </td><td valign="top"><a href="#Smart-Mouse-Drags-outside-a-Window">Smart Mouse Drags outside a Window</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-code-block">code block</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> <tr><td></td><td valign="top"><a href="#index-code-block-selection">code block selection</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-collaboration">collaboration</a>:</td><td> </td><td valign="top"><a href="#Koutliner-History">Koutliner History</a></td></tr> <tr><td></td><td valign="top"><a href="#index-collapse-lines">collapse lines</a>:</td><td> </td><td valign="top"><a href="#View-Specs">View Specs</a></td></tr> @@ -13403,6 +13438,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-quit-HyControl">quit HyControl</a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th><a name="Concept-Index_cp_letter-R">R</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-radio-target">radio target</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> <tr><td></td><td valign="top"><a href="#index-raise-frame">raise frame</a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td></td><td valign="top"><a href="#index-rdb_002dmode">rdb-mode</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-RDB-Mode">Smart Key - RDB Mode</a></td></tr> <tr><td></td><td valign="top"><a href="#index-rebalance-windows">rebalance windows</a>:</td><td> </td><td valign="top"><a href="#Creating-and-Deleting-Windows">Creating and Deleting Windows</a></td></tr> @@ -13470,6 +13506,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-searching_002c-rolo">searching, rolo</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Searching">HyRolo Searching</a></td></tr> <tr><td></td><td valign="top"><a href="#index-selection">selection</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-selection_002c-menu-items">selection, menu items</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-sequence-of-keys">sequence of keys</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type Summaries</a></td></tr> <tr><td></td><td valign="top"><a href="#index-set">set</a>:</td><td> </td><td valign="top"><a href="#Thing-Selection">Thing Selection</a></td></tr> <tr><td></td><td valign="top"><a href="#index-set-1">set</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Delimited-Things">Smart Key - Delimited Things</a></td></tr> <tr><td></td><td valign="top"><a href="#index-setting-the-view-spec">setting the view spec</a>:</td><td> </td><td valign="top"><a href="#View-Specs">View Specs</a></td></tr> diff --git a/man/hyperbole.info b/man/hyperbole.info index 78fe934..160274a 100644 Binary files a/man/hyperbole.info and b/man/hyperbole.info differ diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf index 8b3ec58..7d42404 100644 Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ diff --git a/man/hyperbole.texi b/man/hyperbole.texi index 1f59b75..af9a46e 100644 --- a/man/hyperbole.texi +++ b/man/hyperbole.texi @@ -155,7 +155,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P> <PRE> Edition 7.0.3a -Printed July 21, 2019. +Printed July 28, 2019. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -197,7 +197,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @example Edition 7.0.3a -July 21, 2019 +July 28, 2019 Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -623,7 +623,7 @@ Hyperbole hyperlink and other kinds of buttons (explicit buttons) may be added to documents with a simple drag between windows, no markup language needed. Implicit buttons are patterns automatically recognized within existing text that perform actions, e.g. bug#24568 displays the bug status -information for that bug number, without the need for any additional +information for that Emacs bug number, without the need for any additional markup. Global buttons are buttons that are activated by name from anywhere within Emacs. @xref{Buttons}. @@ -647,7 +647,8 @@ fast, flexible file and text finding commands. A powerful, hierarchical contact manager, @pxref{HyRolo}, which anyone can use, is also included. It is easy to learn since it introduces only a few new mechanisms and has a menu interface, which may be operated from the keyboard or the -mouse; +mouse; it may also be used to look up any record-based information and +Hyperbole buttons may be embedded in any records; @item Screen Control the fastest, easiest-to-use window and frame control available for GNU @@ -655,13 +656,14 @@ Emacs, @pxref{HyControl}. With just a few keystrokes, you can shift from increasing a window's height by 5 lines to moving a frame by 220 pixels or immediately moving it to a screen corner. Text in each window or frame may be enlarged or shrunk (zoomed) for easy viewing, plus many -other features; +other features; this allows Hyperbole to quickly control the way +information is presented on-screen; @item Hypertextual Outliner an advanced outliner, @pxref{Koutliner}, with multi-level autonumbering and permanent identifiers attached to each outline node for use as hypertext link anchors, per node properties and flexible -view specifications that can be embedded within links or used +view specifications that can be included in links or used interactively; @item Programming Library @@ -716,7 +718,7 @@ Some of Hyperbole's most significant features are: @itemize @bullet @item -Buttons may link to information or may execute procedures, such as +Buttons may link to information or may execute functions, such as starting or communicating with external programs; @item @@ -1964,8 +1966,7 @@ Messages are recognized in any buffer. @cindex link to implicit button @cindex ilink @item link-to-ibut <ilink> -At point, activates a link to an implicit button. -The implicit button’s action is executed in the context of the current buffer. +At point, activates a link to an implicit button within the current buffer. Recognizes the format ’<ilink:’ <button label> ’>’, e.g. <ilink: my sequence of keys>. @findex ibtypes link-to-gbut @@ -1982,8 +1983,7 @@ Recognizes the format ’<glink:’ <button label> ’>’, e.g. <glink: open to @cindex link to explicit button @cindex elink @item link-to-ebut <elink> -At point, activates a link to an explicit button. -The explicit button’s action is executed in the context of the current buffer. +At point, activates a link to an explicit button within the current buffer. Recognizes the format ’<elink:’ <button label> ’>’, e.g. <elink: project-list>. @findex ibtypes klink @@ -2018,10 +2018,12 @@ retrievals. @findex ibtypes kbd-key @cindex key sequence +@cindex sequence of keys @item kbd-key -Executes a key sequence found around point, delimited by curly braces, @{@}, if any. -Key sequences should be in human readable form, e.g.@: @bkbd{C-x C-b}. Formats such -as @{^x^b@} will not be recognized. +Executes a key series (series of key sequences) found around point, +delimited by curly braces, @{@}, if any. Key series should be in +human readable form, e.g.@: @bkbd{C-x C-b}. Formats such as @{^x^b@} +will not be recognized. Any key sequence must be a string of one of the following: @itemize @bullet @@ -2340,20 +2342,37 @@ for a valid match. See the function documentation for @code{hpath:find} for special file display options. @findex ibtypes org-mode -@vindex browse-url-browser-function @cindex org-mode @cindex Org mode +@cindex radio target +@cindex code block +@kindex C-c C-c +@kindex M-RET +@findex org-ctrl-c-ctrl-c +@findex org-meta-return @item org-mode -The Action Key follows any Org mode link at point or cycles through -views of the outline subtree at point. In any other context besides -the end of a line, the Action Key will invoke the Org mode standard -binding of @bkbd{M-@key{RET}}, (org-meta-return). The Assist Key on -an Org mode heading cycles through views of the whole buffer outline -and on an Org mode link, displays standard Hyperbole help. +For users of Emacs Org mode, Hyperbole does quite a few things. + +First, the Action Key follows internal links in Org mode files. When +pressed on a link referent/target, the link definition is displayed, +allowing two-way navigation between definitions and targets. + +Second, the Action Key follows Org mode external links. The Assist +Key displays help when pressed on an Org mode link. + +Third, within a radio target definition, the Action Key jumps to the +first occurrence of an associated radio target. + +Fourth, when point is on an outline heading in Org mode, the Action Key +cycles the view of the subtree at point and the Assist Key cycles the +view of all headings in the buffer. -The variable, @code{browse-url-browser-function}, customizes the url -browser that is used for urls. Valid values of this variable -include @code{browse-url-default-browser} and @code{browse-url-generic}. +Fifth, with point on the first line of a code block definition, the +Action Key executes the code block via the Org mode standard binding +of @bkbd{C-c C-c}, @code{org-ctrl-c-ctrl-c}. + +In any other context besides the end of a line, the Action Key invokes +the Org mode standard binding of @bkbd{M-RET}, @code{org-meta-return}. @findex ibtypes doc-id @cindex online library @@ -2641,9 +2660,12 @@ at point. @item www-url Follows a link given by a URL. The variable, @code{browse-url-browser-function}, customizes the url browser -that is used. See its documentation string for details. +that is used. Valid values of this variable include +@code{browse-url-default-browser} and @code{browse-url-generic}. +See its documentation string for details. @end table + @cindex action @vindex hui:ebut-prompt-for-action Action types create a convenient way of specifying button behavior @@ -6207,6 +6229,14 @@ See also @url{https://tkf.github.io/emacs-jedi/latest/}. Jedi is a Emacs package for Python completion, definition and documentation lookup. +@item Key Sequence +A single sequence of keys that can invoke an Emacs command. + +@item Key Series +A series of one or more Emacs key sequences delimited by braces that +Hyperbole processes when activated as an implicit button, as if the +keys were typed in by the user. + @item Koutline A hierarchically ordered grouping of cells which may be stored as a file and viewed and edited as an outline. @@ -6654,8 +6684,8 @@ available with InfoDock. @cindex menu, Cust/Referents @kindex C-h h c r Links to standard files, those which don't match any special referent -category handled by any described earlier, are displayed in an Emacs -window specified by the @code{hpath:display-where} setting. It may be changed with the +category described earlier, are displayed in an Emacs window specified +by the @code{hpath:display-where} setting. It may be changed with the Cust/Referents @bkbd{C-h h c r} menu. @noindent @@ -6722,7 +6752,7 @@ entry. Alternatively, the viewer-program may be a Lisp function that takes a single filename argument. The association lists used by this function are stored in variables -vfor each available window system: @code{hpath:external-display-alist-macos}, +for each available window system: @code{hpath:external-display-alist-macos}, @code{hpath:external-display-alist-mswindows}, and @code{hpath:external-display-alist-x}. Examine and modify these values to suit your needs. @@ -6749,16 +6779,15 @@ compared against the values in @code{hpath:variables}. The first match found, if any, is selected and its associated variable name is substituted into the link pathname, in place of its literal value. When a link button is activated, potentially at a different site, -Hyperbole replaces each variable within the link pathname with the -first matching value from this list to recreate the literal pathname. +Hyperbole replaces each variable in the link pathname with the first +matching value from this list to recreate the literal pathname. Environment variables are also replaced whenever link paths are resolved. This permits sharing of links over wide areas, where the variable values differ between link creator and link activator. The entire process is wholly transparent to the user; it is explained here simply to help -you in deciding whether or not to modify the value of -@code{hpath:variables}. +you in deciding whether or not to modify the value of @code{hpath:variables}. @node Web Search Engines, Using URLs with Find-File, Link Variable Substitution, Customization @subsection Web Search Engines @@ -8480,10 +8509,10 @@ When pressed within a Python source code file (without the OO-Browser): @format @group This works only for identifiers defined within the same source file in -which they are referenced. It requires either Emacs' imenu or XEmacs' -func-menu library and it requires that an index of identifiers has -been built for the current buffer. Other handlers handle identifier -references and definitions across multiple files. +which they are referenced. It requires either Emacs' imenu library +and it requires that an index of identifiers has been built for the +current buffer. Other handlers handle identifier references and +definitions across multiple files. @noindent When pressed on an identifier name after an identifier index has been generated: