emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] scratch/hyperbole-lexbind f38ee21 14/20: 7.0.3a changes for creat


From: Stefan Monnier
Subject: [elpa] scratch/hyperbole-lexbind f38ee21 14/20: 7.0.3a changes for creating and modifying ibut labels, small fixes
Date: Wed, 14 Aug 2019 04:30:23 -0400 (EDT)

branch: scratch/hyperbole-lexbind
commit f38ee212a45d09457d899f958d8585ac568810c7
Author: Bob Weiner <address@hidden>
Commit: Bob Weiner <address@hidden>

    7.0.3a changes for creating and modifying ibut labels, small fixes
---
 .gitignore         |   4 +-
 Changes            |  22 ++++++-
 Makefile           |  11 ++--
 README.md          |   2 +-
 hargs.el           |   1 +
 hbdata.el          |  13 ++--
 hbut.el            | 176 ++++++++++++++++++++++++++++++++++-------------------
 hibtypes.el        |   3 +-
 hui-em-but.el      |   2 +-
 hui-mini.el        |   2 +-
 hui.el             | 153 ++++++++++++++++++++++++++++++++++++----------
 hversion.el        |   2 +-
 hyperbole-pkg.el   |   8 +++
 hyperbole.el       |   4 +-
 man/hyperbole.html | 129 ++++++++++++++++++++++++---------------
 man/hyperbole.info | Bin 494112 -> 495374 bytes
 man/hyperbole.pdf  | Bin 1265402 -> 1266697 bytes
 man/hyperbole.texi |  22 +++----
 18 files changed, 375 insertions(+), 179 deletions(-)

diff --git a/.gitignore b/.gitignore
index 751c293..b3beacf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,7 @@
 # Files that Git should ignore in the GNU Hyperbole source directory.
 
-*-autoloads.el
-*-pkg.el
+# *-autoloads.el
+# *-pkg.el
 
 # Copyright (C) 2016  Free Software Foundation, Inc.
 # See the "HY-COPY" file for license information.
diff --git a/Changes b/Changes
index 1712e2d..4d6b36f 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,23 @@
+2019-07-18  Bob Weiner  <address@hidden>
+
+* hbut.el (ibut:label-separator): Added.
+
+2019-07-17  Bob Weiner  <address@hidden>
+
+* hbut.el (ibut:alist, ibut:list, ibut:map): Added.
+          (ebut:map): Moved body to hbut:map and called from ebut:map and 
ibut:map.
+    Removed start-delim and end-delim arguments in ebut:map.
+
+* hargs.el (hargs:at-p): Added support for reading ibutton labels.
+
+2019-07-16  Bob Weiner  <address@hidden>
+
+* hui.el (hui:ibut-label-create, hui:ibut-label-modify, hui:ibut-message): 
Added.
+
+2019-07-15  Bob Weiner  <address@hidden>
+
+* hibtypes.el (debugger-source): Handled Python tracebacks properly.
+
 2019-07-14  Bob Weiner  <address@hidden>
 
 * hibtypes.el (link-to-ebut, link-to-gbut, link-to-ibut):
@@ -51,7 +71,7 @@
 
 2019-07-08  Bob Weiner  <address@hidden>
 
-* hbut.el (ibut:label-separator, hbut:outside-comment-p): Added.
+* hbut.el (ibut:label-separator-regexp, hbut:outside-comment-p): Added.
 
 2019-07-01  Bob Weiner  <address@hidden>
 
diff --git a/Makefile b/Makefile
index 656eb2b..8250fc4 100644
--- a/Makefile
+++ b/Makefile
@@ -57,7 +57,7 @@
 HYPB_VERSION = 7.0.3
 
 # Emacs executable used to byte-compile .el files into .elc's.
-# Possibilities include: emacs, infodock, xemacs, etc.
+# Possibilities include: emacs, infodock, etc.
 EMACS = \emacs
 
 # Site-specific Emacs Lisp libraries to load before byte-compiling any files
@@ -132,8 +132,7 @@ ELISP_TO_COMPILE = $(pkg_dir)/elc-${USER}
 # Libraries that must be pre-loaded before trying to byte-compile anything.
 PRELOADS = $(SITE_PRELOADS) -l ./hload-path.el -l ./hversion.el -l 
./hyperbole.el 
 
-# Compile in batch mode. Under Emacs and XEmacs, load
-# site-lisp/site-start.el, which may set load-path.
+# Compile in batch mode.  Load site-lisp/site-start.el, which may set 
load-path.
 BATCHFLAGS = -batch -Q
 
 # Directories other than the current directory in which to find files.
@@ -141,7 +140,7 @@ BATCHFLAGS = -batch -Q
 # explicitly to those files which need it.
 VPATH = kotl man
 
-EL_SRC = hui-em-but.el hui-xe-but.el
+EL_SRC = hui-em-but.el
 
 EL_COMPILE = hact.el hactypes.el hargs.el hbdata.el hbmap.el hbut.el \
             hgnus.el hhist.el hib-debbugs.el hib-doc-id.el hib-kbd.el \
@@ -156,7 +155,7 @@ EL_COMPILE = hact.el hactypes.el hargs.el hbdata.el 
hbmap.el hbut.el \
 EL_KOTL = kotl/kexport.el kotl/kfile.el kotl/kfill.el kotl/kimport.el 
kotl/klabel.el \
          kotl/klink.el kotl/kmenu.el kotl/knode.el kotl/kotl-mode.el \
           kotl/kcell.el kotl/kproperty.el kotl/kprop-em.el \
-         kotl/kprop-xe.el kotl/kview.el kotl/kvspec.el
+         kotl/kview.el kotl/kvspec.el
 
 ELC_COMPILE =  hactypes.elc hibtypes.elc hib-debbugs.elc hib-doc-id.elc 
hib-kbd.elc \
             hib-social.elc hact.elc \
@@ -171,7 +170,7 @@ ELC_COMPILE =  hactypes.elc hibtypes.elc hib-debbugs.elc 
hib-doc-id.elc hib-kbd.
 ELC_KOTL = kotl/kexport.elc kotl/kfile.elc kotl/kfill.elc kotl/kimport.elc 
kotl/klabel.elc \
           kotl/klink.elc kotl/kmenu.elc kotl/knode.elc kotl/kotl-mode.elc \
            kotl/kcell.elc kotl/kproperty.elc \
-          kotl/kprop-xe.elc kotl/kview.el kotl/kvspec.elc
+           kotl/kview.el kotl/kvspec.elc
 
 HYPERBOLE_FILES = dir hyperbole-pkg.el info html $(EL_SRC) $(EL_COMPILE) 
$(EL_KOTL) \
        $(ELC_COMPILE) Changes COPYING Makefile HY-ABOUT HY-ANNOUNCE HY-NEWS \
diff --git a/README.md b/README.md
index 37ea631..bd3ec2d 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# GNU Hyperbole 7.0.3 - The Everyday Hypertextual Information Manager
+# GNU Hyperbole 7.0.3a - The Everyday Hypertextual Information Manager
 
 [Say thanks if you like Hyperbole.(https://saythanks.io/to/rswgnu)]
 
diff --git a/hargs.el b/hargs.el
index e5ea221..5abccfb 100644
--- a/hargs.el
+++ b/hargs.el
@@ -320,6 +320,7 @@ Handles all of the interactive argument types that 
`hargs:iform-read' does."
                    (t 0)))))
        ((hargs:completion t))
        ((eq hargs:reading-p 'ebut) (ebut:label-p 'as-label))
+       ((eq hargs:reading-p 'ibut) (ibut:label-p 'as-label))
        ((eq hargs:reading-p 'gbut)
         (when (eq (current-buffer) (get-file-buffer gbut:file))
           (hbut:label-p 'as-label)))
diff --git a/hbdata.el b/hbdata.el
index f1c2390..022c37c 100644
--- a/hbdata.el
+++ b/hbdata.el
@@ -115,8 +115,7 @@ Nil is returned when button has not beened modified."
   (let ((case-fold-search t) (src-matches) (src) (matches) (end))
     (goto-char (point-min))
     (while (re-search-forward "^\^L\n\"\\([^\"]+\\)\"" nil t)
-      (setq src (buffer-substring (match-beginning 1)
-                                 (match-end 1))
+      (setq src (match-string 1)
            matches nil)
       (save-excursion
        (setq end (if (re-search-forward "^\^L" nil t)
@@ -125,10 +124,7 @@ Nil is returned when button has not beened modified."
              (concat "^(\"\\(" (if partial "[^\"]*")
                      (regexp-quote (ebut:label-to-key label))
                      (if partial "[^\"]*") "\\)\"") nil t)
-       (setq matches (cons
-                      (buffer-substring (match-beginning 1)
-                                        (match-end 1))
-                      matches)))
+       (setq matches (cons (match-string 1) matches)))
       (if matches
          (setq src-matches (cons (cons src matches) src-matches)))
       (goto-char end))
@@ -220,7 +216,7 @@ class 'hbdata' to operate on the entry."
 
 (defun hbdata:instance-next (lbl-key)
   "Returns string for button instance number following LBL-KEY's.
-nil if LBL-KEY is nil."
+Nil if LBL-KEY is nil."
   (and lbl-key
        (if (string-match
            (concat (regexp-quote ebut:instance-sep) "[0-9]+$") lbl-key)
@@ -237,8 +233,7 @@ Takes arguments LBL-KEY, KEY-SRC and optional DIRECTORY."
   (hbdata:apply-entry
    (lambda () 
      (if (looking-at "[0-9]+")
-        (string-to-number (buffer-substring (match-beginning 0)
-                                            (match-end 0)))
+        (string-to-number (match-string 0))
        1))
    lbl-key key-src directory nil 'instance))
 
diff --git a/hbut.el b/hbut.el
index c927647..10aad71 100644
--- a/hbut.el
+++ b/hbut.el
@@ -45,9 +45,9 @@ Nil disables saving.")
       (error "(ebut:act): No explicit button labeled: %s" label))))
 
 (defun    ebut:alist (&optional file)
-  "Returns alist with each element a list containing an explicit button label.
-For use as a completion table.  Gets labels from optional FILE or current
-buffer."
+  "Returns alist of ebuts in FILE or the current buffer.
+Each element is a list of just an explicit button label.  For use
+as a completion table."
   (mapcar 'list (ebut:list file)))
 
 (defun    ebut:at-p (&optional start-delim end-delim)
@@ -325,7 +325,7 @@ whitespace sequence with `_'."
     (hypb:replace-match-string "[ \t\n\r]+" label "_" t)))
 
 (defun    ebut:list (&optional file loc-p)
-  "Returns list of button labels from given FILE or current buffer.
+  "Returns list of button labels from in FILE or the current buffer.
 Removes duplicate labels if optional LOC-P is omitted.  With LOC-P, returns
 list of elements (label start end) where start and end are the buffer
 positions at which the button delimiter begins and ends."
@@ -342,53 +342,18 @@ positions at which the button delimiter begins and ends."
                            (lambda (lbl start end)
                              ;; Normalize label spacing
                              (ebut:key-to-label (ebut:label-to-key lbl)))))))
-      (if loc-p buts (if buts (apply #'set:create buts))))))
+      (if loc-p buts (when buts (apply #'set:create buts))))))
 
 (defalias 'map-ebut 'ebut:map)
-(defun    ebut:map (but-func &optional start-delim end-delim
-                            regexp-match include-delims)
-  "Applies BUT-FUNC to buttons delimited by optional START-DELIM and END-DELIM.
-START-DELIM defaults to ebut:start; END-DELIM defaults to ebut:end.
+(defun    ebut:map (but-func &optional regexp-match include-delims)
+  "Applies BUT-FUNC to the explicit buttons in the visible part of the current 
buffer.
 If REGEXP-MATCH is non-nil, only buttons which match this argument are
 considered.
 
-Maps over portion of buffer visible under any current restriction.
 BUT-FUNC must take precisely three arguments: the button label, the
 start position of the delimited button label and its end position (positions
-include delimiters when INCLUDE-DELIMS is non-nil).
-If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
-expression which matches an entire button string."
-  (or start-delim (setq start-delim ebut:start))
-  (or end-delim (setq end-delim ebut:end))
-  (let* ((regexp (symbolp end-delim))
-        (end-sym (or regexp (substring end-delim -1)))
-        (rtn)
-        (ignore)
-        start end but lbl)
-    (save-excursion
-      (goto-char (point-min))
-      (setq include-delims (if include-delims 0 1))
-      (while (re-search-forward
-             (if regexp start-delim
-               (concat (regexp-quote start-delim)
-                       "\\([^" end-sym "\"][^" end-sym "]*\\)"
-                       (regexp-quote end-delim)))
-             nil t)
-       (setq start (match-beginning include-delims)
-             end (match-end include-delims)
-             but (match-string 0)
-             lbl (match-string 1)
-             ;; If within a programming language buffer, ignore matches 
outside comments.
-             ignore (hbut:outside-comment-p))
-       (save-excursion
-         (goto-char start)
-         ;; Ignore matches with quoted delimiters.
-         (or ignore (setq ignore (memq (preceding-char) '(?\\ ?\{)))))
-       (cond (ignore (setq ignore nil))
-             ((or (not regexp-match)
-                  (string-match regexp-match but))
-              (setq rtn (cons (funcall but-func lbl start end) rtn))))))
-    (nreverse rtn)))
+include delimiters when INCLUDE-DELIMS is non-nil)."
+  (hbut:map but-func ebut:start ebut:end regexp-match include-delims))
 
 (defun    ebut:modify (&optional lbl-key but-sym)
   "Modifies existing Hyperbole button from optional LBL-KEY and BUT-SYM.
@@ -423,9 +388,9 @@ move to the first occurrence of the button."
   "Operates on and modifies properties of a new or existing Hyperbole button 
given by CURR-LABEL.
 When NEW-LABEL is non-nil, this is substituted for CURR-LABEL and the
 associated button is modified.  Otherwise, a new button is created.
-Returns instance string appended to label to form unique label, nil if
-label is already unique.  Signals an error when no such button is found
-in the current buffer."
+Returns instance string appended to label to form a per-buffer unique
+label; nil if label is already unique.  Signals an error when no such
+button is found in the current buffer."
   (let* ((lbl-key (ebut:label-to-key curr-label))
         (lbl-regexp (ebut:label-regexp lbl-key))
         (modify new-label)
@@ -443,10 +408,10 @@ in the current buffer."
              (let* ((but-key-and-pos (ebut:label-p nil nil nil 'pos))
                     (at-but (equal (car but-key-and-pos)
                                    (ebut:label-to-key new-label))))
-               (if at-but
-                   (ebut:delimit (nth 1 but-key-and-pos)
-                                 (nth 2 but-key-and-pos)
-                                 instance-flag))
+               (when at-but
+                 (ebut:delimit (nth 1 but-key-and-pos)
+                               (nth 2 but-key-and-pos)
+                               instance-flag))
                (cond ((ebut:map
                        (lambda (lbl start end)
                          (delete-region start end)
@@ -454,7 +419,7 @@ in the current buffer."
                           (point)
                           (progn (insert new-label) (point))
                           instance-flag))
-                       nil nil lbl-regexp 'include-delims))
+                       lbl-regexp 'include-delims))
                      (at-but)
                      ((hypb:error "(ebut:operate): No button matching: %s" 
curr-label))))
            ;; Add a new button.
@@ -465,7 +430,7 @@ in the current buffer."
                                buf-lbl (buffer-substring start end))
                          (equal buf-lbl curr-label))
                     nil)
-                   ((progn (if start (goto-char start))
+                   ((progn (when start (goto-char start))
                            (looking-at (regexp-quote curr-label)))
                     (setq start (point)
                           end (match-end 0)))
@@ -485,15 +450,15 @@ in the current buffer."
                         (re-search-backward regexp nil t)))
                   (goto-char (+ (match-beginning 0) (length ebut:start))))))
          ;; instance-flag might be 't which we don't want to return.
-         (if (stringp instance-flag) instance-flag))
+         (when (stringp instance-flag) instance-flag))
       (hypb:error
        "(ebut:operate): Operation failed.  Check button attribute permissions: 
%s"
        hattr:filename))))
 
 (defun    ebut:search (string out-buf &optional match-part)
   "Writes explicit button lines matching STRING to OUT-BUF.
-Uses Hyperbole space into which user has written buttons for the search.
-By default, only matches for whole button labels are found, optional MATCH-PART
+Searches across all files into which the user has previously saved explicit 
buttons.
+By default, only matches for whole button labels are found; optional MATCH-PART
 enables partial matches."
   (let*  ((buffers (mapcar (lambda (dir)
                             (expand-file-name hattr:filename dir))
@@ -585,7 +550,7 @@ Inserts INSTANCE-STR after END, before ending delimiter."
     (insert ebut:start)
     (goto-char end)
     (insert instance-str ebut:end)
-    ;; Insert any comment before the start marker.
+    ;; Insert any comment delimiter before the start marker.
     (set-marker-insertion-type start t)
     (hbut:comment start end)
     (if (fboundp 'hproperty:but-add)
@@ -968,7 +933,50 @@ label; these default to `ebut:start' and `ebut:end'."
 
 (defalias 'hbut:label-to-key 'ebut:label-to-key)
 
-(defalias 'hbut:map 'ebut:map)
+(defun    hbut:map (but-func &optional start-delim end-delim
+                            regexp-match include-delims)
+  "Applies BUT-FUNC to a set of Hyperbole buttons in the visible part of the 
current buffer.
+The set of buttons are those whose labels are delimited by optional 
START-DELIM and
+END-DELIM and that match any optional REGEXP-MATCH.
+
+START-DELIM defaults to ebut:start; END-DELIM defaults to ebut:end.
+If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
+expression which matches an entire button string.
+
+BUT-FUNC must take precisely three arguments: the button label, the
+start position of the delimited button label and its end position (positions
+include delimiters when INCLUDE-DELIMS is non-nil)."
+  (or start-delim (setq start-delim ebut:start))
+  (or end-delim (setq end-delim ebut:end))
+  (let* ((regexp (symbolp end-delim))
+        (end-sym (or regexp (substring end-delim -1)))
+        (rtn)
+        (ignore)
+        start end but lbl)
+    (save-excursion
+      (goto-char (point-min))
+      (setq include-delims (if include-delims 0 1))
+      (while (re-search-forward
+             (if regexp start-delim
+               (concat (regexp-quote start-delim)
+                       "\\([^" end-sym "\"][^" end-sym "]*\\)"
+                       (regexp-quote end-delim)))
+             nil t)
+       (setq start (match-beginning include-delims)
+             end (match-end include-delims)
+             but (match-string 0)
+             lbl (match-string 1)
+             ;; If within a programming language buffer, ignore matches 
outside comments.
+             ignore (hbut:outside-comment-p))
+       (save-excursion
+         (goto-char start)
+         ;; Ignore matches with quoted delimiters.
+         (or ignore (setq ignore (memq (preceding-char) '(?\\ ?\{)))))
+       (cond (ignore (setq ignore nil))
+             ((or (not regexp-match)
+                  (string-match regexp-match but))
+              (setq rtn (cons (funcall but-func lbl start end) rtn))))))
+    (nreverse rtn)))
 
 (defun    hbut:outside-comment-p ()
   "Returns t if within a programming language buffer and prior regexp match is 
outside a comment, else nil."
@@ -1105,6 +1113,12 @@ source file for the buttons in the menu, if any.")
 ;;; ibut class - Implicit Hyperbole Buttons
 ;;; ========================================================================
 
+(defun    ibut:alist (&optional file)
+  "Returns alist of labeled ibuts in FILE or the current buffer.
+Each element is a list of just an implicit button label.  For use
+as a completion table."
+  (mapcar 'list (ibut:list file)))
+
 (defun    ibut:at-p (&optional key-only)
   "Returns symbol for implicit button at point, else nil.
 Point may be on the implicit button or its optional preceding label.
@@ -1120,7 +1134,7 @@ excluding delimiters, not just one."
          ;; Skip past any optional label and separators
          (when label-key-start-end
            (goto-char (nth 2 label-key-start-end)) 
-           (when (looking-at ibut:label-separator)
+           (when (looking-at ibut:label-separator-regexp)
              ;; Move past up to 2 possible characters of ibut
              ;; delimiters; this prevents recognizing labeled,
              ;; delimited ibuts of a single character but no one
@@ -1184,8 +1198,7 @@ associated arguments from the button."
   "Returns implicit Hyperbole button symbol given by LBL-KEY and BUFFER.
 KEY-SRC is given when retrieving global buttons and is the full source 
pathname.
 
-Retrieves button data, converts into a button object and returns a symbol
-which references the button.
+Returns a symbol which references the button.
 
 All arguments are optional.  When none are given, returns a
 symbol for the button or button label that point is within or
@@ -1276,9 +1289,41 @@ is assumed to contain all arguments."
        (t (error "(ibut:label-set): Invalid label arg: `%s'" label)))
   label)
 
+(defun    ibut:list (&optional file loc-p)
+  "Returns list of labels of labeled ibuts in FILE or the current buffer.
+Removes duplicate labels if optional LOC-P is omitted.  With LOC-P, returns
+list of elements (label start end) where start and end are the buffer
+positions at which the button label delimiter begins and ends."
+  (interactive)
+  (setq file (if file (and (file-exists-p file) (find-file-noselect file))
+              (current-buffer)))
+  (when file
+    (set-buffer file)
+    (let ((buts (ibut:map (if loc-p
+                             (lambda (lbl start end)
+                               ;; Normalize label spacing
+                               (list (ibut:key-to-label (ibut:label-to-key 
lbl))
+                                     start end))
+                           (lambda (lbl start end)
+                             ;; Normalize label spacing
+                             (ibut:key-to-label (ibut:label-to-key lbl)))))))
+      (if loc-p buts (when buts (apply #'set:create buts))))))
+
 (defalias 'ibut:key-src      'hbut:key-src)
 (defalias 'ibut:key-to-label 'hbut:key-to-label)
 (defalias 'ibut:label-to-key 'hbut:label-to-key)
+(defalias 'map-ibut 'ibut:map)
+(defun    ibut:map (but-func &optional start-delim end-delim
+                            regexp-match include-delims)
+  "Applies BUT-FUNC to the labeled implicit buttons in the visible part of the 
current buffer.
+If REGEXP-MATCH is non-nil, only buttons which match this argument are
+considered.
+
+BUT-FUNC must take precisely three arguments: the button label, the
+start position of the delimited button label and its end position (positions
+include delimiters when INCLUDE-DELIMS is non-nil)."
+  (hbut:map but-func ibut:label-start ibut:label-end regexp-match 
include-delims))
+
 (defun    ibut:next-occurrence (lbl-key &optional buffer)
   "Moves point to next occurrence of a labeled implicit button with LBL-KEY in 
optional BUFFER.
 BUFFER defaults to current buffer.  It may be a buffer name.
@@ -1297,7 +1342,9 @@ move to the first occurrence of the button."
 (defalias 'ibut:summarize 'hbut:report)
 
 (defun ibut:to (lbl-key)
-  "Find an implicit button in the current buffer with LBL-KEY (a label or 
lable key), leave point inside it or its label and return the button symbol for 
it, else nil."
+  "Finds an implicit button with LBL-KEY (a label or label key) within the 
visible portion of the current buffer.
+Leaves point inside the button text or its optional label, if it has one.
+Returns the button symbol for it, else nil."
   ;; Handle a label given rather than a label key
   (if (string-match-p "\\s-" lbl-key)
       (setq lbl-key (ibut:label-to-key lbl-key)))
@@ -1324,7 +1371,10 @@ move to the first occurrence of the button."
   "String matching the start of a Hyperbole implicit button label.")
 (defconst ibut:label-end   "]>"
   "String matching the end of a Hyperbole implicit button label.")
-(defvar   ibut:label-separator "\\s-*[-:=]*\\s-+"
+(defvar   ibut:label-separator " "
+  "Regular expression that separates an implicit button label from its 
implicit button text.")
+
+(defvar   ibut:label-separator-regexp "\\s-*[-:=]*\\s-+"
   "Regular expression that separates an implicit button label from its 
implicit button text.")
 
 ;;; ========================================================================
diff --git a/hibtypes.el b/hibtypes.el
index c3eefad..bbba40a 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -837,7 +837,8 @@ This works with JavaScript and Python tracebacks, gdb, dbx, 
and xdb.  Such lines
     (beginning-of-line)
     (cond
      ;; Python pdb or traceback, pytype error
-     ((looking-at "\\(^\\|.+ \\)File \"\\([^\"\n\r]+\\)\", line \\([0-9]+\\)")
+     ((or (looking-at "\\(^\\|.+ \\)File \"\\([^\"\n\r]+\\)\", line 
\\([0-9]+\\)")
+         (looking-at ">?\\(\\s-+\\)\\([^\"()\n\r]+\\)(\\([0-9]+\\))\\S-"))
       (let* ((file (match-string-no-properties 2))
             (line-num (match-string-no-properties 3))
             (but-label (concat file ":" line-num)))
diff --git a/hui-em-but.el b/hui-em-but.el
index c3cd6aa..9292230 100644
--- a/hui-em-but.el
+++ b/hui-em-but.el
@@ -125,7 +125,7 @@ expression which matches an entire button string.
 If REGEXP-MATCH is non-nil, only buttons matching this argument are
 highlighted."
   (when hproperty:but-highlight-flag
-    (ebut:map (lambda (lbl start end)
+    (hbut:map (lambda (lbl start end)
                (hproperty:but-add start end hproperty:but-face))
              start-delim end-delim regexp-match 'include-delims)))
 
diff --git a/hui-mini.el b/hui-mini.el
index c52d64b..6520154 100644
--- a/hui-mini.el
+++ b/hui-mini.el
@@ -345,7 +345,7 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
 ;;; ************************************************************************
 
 ;; Hyperbole menu mode is suitable only for specially formatted data.
-(put 'hui:menu-mode 'mode-class 'special) ;FIXME: Never used as a major mode!?
+(put 'hui:menu-mode 'mode-class 'special)
 
 (defvar hui:menu-mode-map nil
   "Keymap containing Hyperbole minibuffer menu commands.")
diff --git a/hui.el b/hui.el
index 325f287..3537a52 100644
--- a/hui.el
+++ b/hui.el
@@ -79,10 +79,10 @@ label."
            (hui:hbut-label-default start end (not (called-interactively-p 
'interactive)))
            lbl (hui:hbut-label default-lbl "ebut-create"))
       (if (not (equal lbl default-lbl)) (setq default-lbl nil))
-      
+
       (setq but-buf (if default-lbl (current-buffer) (hui:ebut-buf)))
       (hui:buf-writable-err but-buf "ebut-create")
-      
+
       (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
       (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
       (setq actype (hui:actype))
@@ -118,7 +118,7 @@ Signals an error if point is not within a button."
            (hui:ebut-delete-op interactive but-key key-src)
          (message ""))
       (hui:ebut-delete-op interactive but-key key-src))))
-      
+
 (defun hui:ebut-edit ()
   "Creates or modifies an explicit Hyperbole button when conditions are met.
 A region must have been delimited with the action-key and point must now be
@@ -153,13 +153,13 @@ Signals an error when no such button is found in the 
current buffer."
        (but-buf (current-buffer))
        actype but new-lbl)
     (save-excursion
-      (or (called-interactively-p 'interactive)
-         (hui:buf-writable-err but-buf "ebut-modify"))
-      
-      (or (setq but (ebut:get lbl-key but-buf))
-         (progn (pop-to-buffer but-buf)
-                (hypb:error "(ebut-modify): Invalid button, no data for '%s'." 
lbl)))
-      
+      (unless (called-interactively-p 'interactive)
+       (hui:buf-writable-err but-buf "ebut-modify"))
+
+      (unless (setq but (ebut:get lbl-key but-buf))
+       (pop-to-buffer but-buf)
+       (hypb:error "(ebut-modify): Invalid button, no data for '%s'." lbl))
+
       (setq new-lbl
            (hargs:read
             "Change button label to: "
@@ -169,7 +169,7 @@ Signals an error when no such button is found in the 
current buffer."
             (format "(ebut-modify): Enter a string of at most %s chars."
                     ebut:max-len)
             'string))
-      
+
       (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
       (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
       (setq actype (hui:actype (hattr:get but 'actype)))
@@ -318,12 +318,12 @@ Signals an error when no such button is found."
     (save-excursion
       (or (called-interactively-p 'interactive)
          (hui:buf-writable-err but-buf "gbut-modify"))
-      
+
       (or (setq but (ebut:get lbl-key but-buf))
          (progn (pop-to-buffer but-buf)
                 (hypb:error
                  "(gbut-modify): Invalid button, no data for '%s'." lbl)))
-      
+
       (setq new-lbl
            (hargs:read
             "Change global button label to: "
@@ -333,7 +333,7 @@ Signals an error when no such button is found."
             (format "(gbut-modify): Enter a string of at most %s chars."
                     ebut:max-len)
             'string))
-      
+
       (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
       (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
       (setq actype (hui:actype (hattr:get but 'actype)))
@@ -381,28 +381,28 @@ BUT defaults to the button whose label point is within."
                (ebut:get (ebut:label-to-key
                           (hargs:read-match "Help for button: "
                                             (ebut:alist) nil t nil 'ebut)))))
-  (or but
-      (hypb:error "(hbut-help):  Move point to a valid Hyperbole button."))
-  (if (not (hbut:is-p but))
-      (cond (but (hypb:error "(hbut-help): Invalid button."))
-           (t   (hypb:error
-                 "(hbut-help): Not on an implicit button and no buffer 
explicit buttons."))))
+  (unless but
+    (hypb:error "(hbut-help):  Move point to a valid Hyperbole button."))
+  (unless (hbut:is-p but)
+    (cond (but (hypb:error "(hbut-help): Invalid button."))
+         (t   (hypb:error
+               "(hbut-help): Not on an implicit button and no buffer explicit 
buttons."))))
   (let ((type-help-func (intern-soft
                         (concat 
                          (htype:names 'ibtypes (hattr:get but 'categ))
                          ":help"))))
-    (or (equal (hypb:indirect-function 'hui:but-flash)
-              (lambda nil))
-       ;; Only flash button if point is on it.
-       (let ((lbl-key (hattr:get but 'lbl-key)))
-         (and lbl-key
-              (or (equal lbl-key (ebut:label-p))
-                  (equal lbl-key (ibut:label-p)))
-              (hui:but-flash))))
+    (unless (equal (hypb:indirect-function 'hui:but-flash)
+                  (lambda nil))
+      ;; Only flash button if point is on it.
+      (let ((lbl-key (hattr:get but 'lbl-key)))
+       (and lbl-key
+            (or (equal lbl-key (ebut:label-p))
+                (equal lbl-key (ibut:label-p)))
+            (hui:but-flash))))
     (if (functionp type-help-func)
        (funcall type-help-func but)
       (let ((total (hbut:report but)))
-       (if total (hui:help-ebut-highlight))))))
+       (when total (hui:help-ebut-highlight))))))
 
 (defun hui:hbut-label (default-label func-name)
   "Reads button label from user using DEFAULT-LABEL and caller's FUNC-NAME."
@@ -436,12 +436,89 @@ See 'hbut:report'."
   (if (and arg (symbolp arg))
       (hui:hbut-help arg)
     (let ((total (hbut:report arg)))
-      (if total
-         (progn (hui:help-ebut-highlight)
-                (message "%d button%s." total (if (/= total 1) "s" "")))))))
+      (when total
+       (hui:help-ebut-highlight)
+       (message "%d button%s." total (if (/= total 1) "s" ""))))))
 
 (defalias 'hui:hbut-summarize 'hui:hbut-report)
 
+(defun hui:ibut-label-create ()
+  "Creates an implicit button label preceding the implicit button at point, if 
any.
+Adds the label and delimiters around it plus any necessary label instance 
number."
+  (interactive)
+  (hui:buf-writable-err (current-buffer) "ibut-label-create")
+  (let* ((ibut (ibut:at-p))
+        (ibut-start (when ibut (hattr:get 'hbut:current 'lbl-start)))
+        ;; non-nil when point is within an existing ibut label
+        (label-key-start-end (when ibut (ibut:label-p nil nil nil t t)))
+        lbl actype)
+    (cond (label-key-start-end
+          (error "(hui:ibut-label-create): ibutton at point already has a 
label; try hui:ibut-label-modify"))
+         ;; !! Still need to handle when button has a label but point but is 
not on it.
+         (ibut
+          (save-excursion
+            (if ibut-start
+                (goto-char ibut-start)
+              ;; !! search backward somehow since within ibut text to find 
ibut text and delim start
+              )
+            (skip-chars-backward "][:=<>a-zA-Z0-9#@!$%^&* -")
+            (skip-chars-forward " ")
+            (when (looking-at (concat (regexp-quote ibut:label-start) 
"\\s-*[:=a-zA-Z0-9#@!$%^&* -]+" (regexp-quote ibut:label-end)))
+              (error "(hui:ibut-label-create): ibutton at point already has a 
label; try hui:ibut-label-modify")))
+          (save-excursion
+            (if ibut-start
+                (goto-char ibut-start)
+              ;; !! search backward somehow since within ibut text
+              )
+            (setq lbl (hui:hbut-label nil "ibut-label-create")) ; prompts for 
label
+            ;; !! Handle adding instance to label
+            (insert ibut:label-start lbl ibut:label-end ibut:label-separator))
+          (when (called-interactively-p 'interactive)
+            (hui:ibut-message nil)))
+         (t (error "(hui:ibut-label-create): Move point within the text of an 
implicit button to add a label")))))
+
+(defun hui:ibut-label-modify (lbl-key)
+  "Modifies a label preceding a Hyperbole implicit button given by LBL-KEY.
+Signals an error when no such button is found in the current buffer."
+  (interactive (list (save-excursion
+                      (hui:buf-writable-err (current-buffer) 
"ibut-label-modify")
+                      (or (ibut:label-p)
+                          (ibut:label-to-key
+                           (hargs:read-match "Labeled implicit button to 
modify: "
+                                             (ibut:alist) nil t nil 'ibut))))))
+  (let ((lbl (ibut:key-to-label lbl-key))
+       (but-buf (current-buffer))
+       actype but new-lbl)
+    (unless (called-interactively-p 'interactive)
+      (hui:buf-writable-err but-buf "ibut-label-modify"))
+
+    (unless (setq but (ibut:get lbl-key but-buf))
+      (hypb:error "(ibut-label-modify): Invalid button: '%s'." lbl))
+
+    (setq new-lbl
+         (hargs:read
+          "Change implicit button label to: "
+          (lambda (lbl)
+            (and (not (string= lbl "")) (<= (length lbl) ebut:max-len)))
+          lbl
+          (format "(ibut-modify): Enter a string of at most %s chars."
+                  ebut:max-len)
+          'string))
+
+    ;; !! Handle adding instance to label
+    ;; !! Add in equivalent of ebut:operate since ibut selected may be
+    ;; !! different than the one at point.
+    (save-excursion
+      (
+      (ibut:to lbl)
+      (zap-to-char
+      (insert new-lbl))))
+    (goto-char (+ (point) (length ibut:label-start)))
+
+    (when (and (called-interactively-p 'interactive)
+              (hbut:at-p))
+      (hui:ibut-message t))))
+
 (defun hui:link-directly ()
   "Creates a Hyperbole link button at depress point, linked to release point.
 See also documentation for `hui:link-possible-types'."
@@ -815,6 +892,18 @@ Optional NO-SORT means display in decreasing priority 
order (natural order)."
         '(("\\`*Help" . ((lambda (buf _alist) (switch-to-buffer buf)))))))
     (hui:htype-help htype-sym no-sort)))
 
+(defun hui:ibut-message (but-modify-flag)
+  (let ((actype (symbol-name (hattr:get 'hbut:current 'actype)))
+       (args (hattr:get 'hbut:current 'args)))
+    (if (string-match "\\`actypes::" actype)
+       (setq actype (intern (substring actype (match-end 0)))))
+    (message "%s%s%s %s %S"
+            ibut:label-start
+            (hbut:key-to-label (hattr:get 'hbut:current 'lbl-key))
+            ibut:label-end
+            (if but-modify-flag "now executes" "executes")
+            (cons actype args))))
+
 (defun hui:key-dir (but-buf)
   "Returns button key src directory based on BUT-BUF, a buffer."
   (if (bufferp but-buf)
diff --git a/hversion.el b/hversion.el
index 91f8f9f..f2bc122 100644
--- a/hversion.el
+++ b/hversion.el
@@ -23,7 +23,7 @@
 ;;; Public variables
 ;;; ************************************************************************
 
-(defconst hyperb:version "7.0.3" "GNU Hyperbole revision number.")
+(defconst hyperb:version "7.0.3a" "GNU Hyperbole revision number.")
 
 ;;;###autoload
 (defvar hyperb:microsoft-os-p
diff --git a/hyperbole-pkg.el b/hyperbole-pkg.el
new file mode 100644
index 0000000..572b39e
--- /dev/null
+++ b/hyperbole-pkg.el
@@ -0,0 +1,8 @@
+;; -*- no-byte-compile: t -*-
+(define-package "hyperbole" "7.0.3a" "GNU Hyperbole: The Everyday Hypertextual 
Information Manager"
+  '((emacs "24.4"))
+  :url "http://www.gnu.org/software/hyperbole";
+  :keywords '("comm" "convenience" "files" "frames" "hypermedia" "languages"
+             "mail" "matching" "mouse" "multimedia" "outlines" "tools" "wp"))
+
+(setq byte-compile-warnings '(not interactive-only find-tag free-vars 
unresolved))
diff --git a/hyperbole.el b/hyperbole.el
index 3a6cda2..39a0d05 100644
--- a/hyperbole.el
+++ b/hyperbole.el
@@ -6,7 +6,7 @@
 ;; Maintainer:       Bob Weiner <address@hidden> and Mats Lidell 
<address@hidden>
 ;; Created:          06-Oct-92 at 11:52:51
 ;; Released:         21-Jan-19
-;; Version:          7.0.3
+;; Version:          7.0.3a
 ;; Keywords:         comm, convenience, files, frames, hypermedia, languages, 
mail, matching, mouse, multimedia, outlines, tools, wp
 ;; Package:          hyperbole
 ;; Package-Requires: ((emacs "24.4"))
@@ -516,7 +516,7 @@ With optional ARG, override them iff ARG is positive."
 ;;   "Creates implicit button TYPE (unquoted sym) with PARAMS, described by 
DOC."
 ;;   nil 'macro)
 
-;; (autoload 'ebut:map          "hyperbole"      "Map over Hyperbole buffer 
buttons." nil)
+;; (autoload 'ebut:map          "hyperbole"      "Map over the Hyperbole 
explicit buttons in a buffer." nil)
 ;; (autoload 'hbut:key-src      "hyperbole"      "Called by {e} command in 
rolo match buffer.")
 ;; (autoload 'hui:ebut-rename   "hyperbole"      "Rename a Hyperbole button."  
   t)
 ;; (autoload 'hyperbole         "hyperbole"      "Hyperbole info manager 
menus."  t)
diff --git a/man/hyperbole.html b/man/hyperbole.html
index 6aa4874..77cb0d8 100644
--- a/man/hyperbole.html
+++ b/man/hyperbole.html
@@ -3361,7 +3361,9 @@ upon the referent context in which the Action Key is 
released.
 <div class="example">
 <pre class="example">Referent Context         Link Type
 ----------------------------------------------------
+Global Button            link-to-gbut
 Explicit Button          link-to-ebut
+Implicit Button          link-to-ibut
 Info Index Item          link-to-Info-index-item
 Info Node                link-to-Info-node
 Mail Reader Message      link-to-mail
@@ -7813,59 +7815,28 @@ Next: <a href="#Internal-Viewers" accesskey="n" 
rel="next">Internal Viewers</a>,
 <a name="index-referent-display"></a>
 <a name="index-link-display"></a>
 <a name="index-display-where"></a>
+<a name="index-display-outside-Emacs"></a>
 <a name="index-where-to-display"></a>
+<a name="index-image-display"></a>
+<a name="index-internal-display"></a>
+<a name="index-external-display"></a>
 <p>Hyperbole lets you control where link referents are displayed and even
 what Emacs function or external program is used to display them.
-There are three categories of referents, each with its own display
-setting:
-</p><div class="example">
+There are four categories of referents, each with its own display
+setting, listed in decreasing order of priority.
+</p>
+<div class="example">
 <pre class="example">Referent Category             Variable Setting
 ========================================================================
-Internal Standard Display     hpath:display-where
+Internal Image Display        hpath:native-image-suffixes
 Internal Custom Display       hpath:internal-display-alist
 External Display              hpath:external-display-alist
+Internal Standard Display     hpath:display-where
 
 </pre></div>
 
-<a name="index-menu_002c-Cust_002fReferents"></a>
-<a name="index-C_002dh-h-c-r"></a>
-<p>Regular file links are displayed in an Emacs window specified by the
-<code>hpath:display-where</code> setting which may be changed with the 
Cust/Referents
-<kbd>{C-h h c r}</kbd> menu.
-</p>
-<p>Available options are:
-</p>
-<dl compact="compact">
-<dt><em>&bull; Any-Frame</em></dt>
-<dd><p>Display in the selected window of another existing frame
-</p></dd>
-<dt><em>&bull; Current-Win</em></dt>
-<dd><p>Display in the selected (current) window
-</p></dd>
-<dt><em>&bull; Diff-Frame-One-Win</em></dt>
-<dd><p>Display in the selected window of another existing frame, deleting its 
other windows
-</p></dd>
-<dt><em>&bull; New-Frame</em></dt>
-<dd><p>Display in a new single window frame
-</p></dd>
-<dt><em>&bull; Other-Win</em></dt>
-<dd><p>Display in another, possibly new window of the selected frame (this is
-the default)
-</p></dd>
-<dt><em>&bull; Single-Win</em></dt>
-<dd><p>Display in  a window of the selected frame and delete its other windows
-</p></dd>
-</dl>
-
-<p>Alternatively, you can use the Hyperbole menubar menu as shown here:
-</p>
-<div class="float"><a name="image_003aMenu_002dDisplay_002dReferents"></a>
-
-<img src="im/menu-display-referents.png" alt="Display Referents Menu">
-<div class="float-caption"><p><strong>Image B.2: </strong>Display Referents 
Menu</p></div></div><br>
-
-<p>Continue reading the next sections for information on custom Internal
-and External Viewers for link referencts.
+<p>Continue reading the next sections for information on how referents
+are displayed internally and externally.
 </p>
 <hr>
 <a name="Internal-Viewers"></a>
@@ -7880,6 +7851,13 @@ Next: <a href="#External-Viewers" accesskey="n" 
rel="next">External Viewers</a>,
 <a name="index-display-function"></a>
 <a name="index-internal-viewer"></a>
 <a name="index-link_002c-display-function"></a>
+
+<a name="index-internal-image-display"></a>
+<a name="index-hpath_003anative_002dimage_002dsuffixes"></a>
+<a name="index-internal-custom-display"></a>
+<a name="index-hpath_003ainternal_002ddisplay_002dalist-1"></a>
+<a name="index-internal-standard-display"></a>
+<a name="index-hpath_003adisplay_002dwhere-1"></a>
 <p>When given a file name, Hyperbole will by default display the file for
 editing within an Emacs buffer.  The <code>hpath:internal-display-alist</code>
 variable can be used to specify file name patterns, such as matching
@@ -7908,6 +7886,44 @@ available with InfoDock.
 </p></dd>
 </dl>
 
+<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&rsquo;t match any special referent
+category, 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:
+</p>
+<dl compact="compact">
+<dt><em>&bull; Any-Frame</em></dt>
+<dd><p>Display in the selected window of another existing frame
+</p></dd>
+<dt><em>&bull; Current-Win</em></dt>
+<dd><p>Display in the selected (current) window
+</p></dd>
+<dt><em>&bull; Diff-Frame-One-Win</em></dt>
+<dd><p>Display in the selected window of another existing frame, deleting its 
other windows
+</p></dd>
+<dt><em>&bull; New-Frame</em></dt>
+<dd><p>Display in a new single window frame
+</p></dd>
+<dt><em>&bull; Other-Win</em></dt>
+<dd><p>Display in another, possibly new window of the selected frame (this is
+the default)
+</p></dd>
+<dt><em>&bull; Single-Win</em></dt>
+<dd><p>Display in  a window of the selected frame and delete its other windows
+</p></dd>
+</dl>
+
+<p>Alternatively, you can use the Hyperbole menubar menu as shown here:
+</p>
+<div class="float"><a name="image_003aMenu_002dDisplay_002dReferents"></a>
+
+<img src="im/menu-display-referents.png" alt="Display Referents Menu">
+<div class="float-caption"><p><strong>Image B.2: </strong>Display Referents 
Menu</p></div></div><br>
+
 <p>See <a href="#External-Viewers">External Viewers</a>, for instructions on 
associating file names with
 external, window-system specific viewers.
 </p>
@@ -7927,6 +7943,9 @@ Next: <a href="#Link-Variable-Substitution" accesskey="n" 
rel="next">Link Variab
 <a name="index-external-program"></a>
 <a name="index-external-viewer"></a>
 <a name="index-link_002c-viewer-program"></a>
+
+<a name="index-external-display-1"></a>
+<a name="index-hpath_003aexternal_002ddisplay_002dalist"></a>
 <p>If you will be using Hyperbole under a window system,
 the <code>hpath:get-external-display-alist</code> function
 in <samp>hpath.el</samp> supports hyperlinks that open files using external, 
non-Emacs
@@ -8099,9 +8118,11 @@ through invisible/hidden text, making the text 
temporarily visible
 until point moves past that hidden part.  When a search match is
 selected, the surrounding text remains visible.
 </p>
-<p>This command toggles that setting (turns it off if a prefix
-argument less than or equal to 0 is given) and makes searches look at
-only visible text.
+<p>You can temporarily disable searching of hidden text by typing <kbd>{M-s 
i}</kbd>
+while in an incremental search.  This key sequence toggles that
+setting and makes searches look at only visible text (or the reverse
+when invoked again).  The setting lasts only through the current
+interactive search.
 </p>
 <hr>
 <a name="Button-Colors"></a>
@@ -11442,7 +11463,7 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-1"><code>C-h 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key 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>&nbsp;</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>&nbsp;</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>&nbsp;</td><td valign="top"><a 
href="#Referent-Display">Referent Display</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>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-u"><code>C-h h c 
u</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-u-1"><code>C-h h c 
u</code></a>:</td><td>&nbsp;</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-C_002dh-h-c-w"><code>C-h h c 
w</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Web-Search-Engines">Web Search Engines</a></td></tr>
@@ -12000,6 +12021,8 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-hmouse_002dy_002ddrag_002dsensitivity">hmouse-y-drag-sensitivity</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Mouse-Drags-within-a-Window">Smart Mouse Drags 
within a Window</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aat_002dp"><code>hpath:at-p</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003adisplay_002dwhere">hpath:display-where</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Referent-Display">Referent Display</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003adisplay_002dwhere-1">hpath:display-where</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Internal-Viewers">Internal Viewers</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003aexternal_002ddisplay_002dalist">hpath:external-display-alist</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#External-Viewers">External Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aexternal_002ddisplay_002dalist_002dmacos">hpath:external-display-alist-macos</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#External-Viewers">External Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aexternal_002ddisplay_002dalist_002dmswindows">hpath:external-display-alist-mswindows</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#External-Viewers">External Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aexternal_002ddisplay_002dalist_002dx">hpath:external-display-alist-x</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#External-Viewers">External Viewers</a></td></tr>
@@ -12007,6 +12030,8 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003afind_002dfile_002durls_002dmode"><code>hpath:find-file-urls-mode</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Using-URLs-with-Find_002dFile">Using URLs with 
Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aget_002dexternal_002ddisplay_002dalist"><code>hpath:get-external-display-alist</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#External-Viewers">External Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003ainternal_002ddisplay_002dalist">hpath:internal-display-alist</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Internal-Viewers">Internal Viewers</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003ainternal_002ddisplay_002dalist-1">hpath:internal-display-alist</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Internal-Viewers">Internal Viewers</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003anative_002dimage_002dsuffixes">hpath:native-image-suffixes</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Internal-Viewers">Internal Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003asuffixes">hpath:suffixes</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003avariables">hpath:variables</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Link-Variable-Substitution">Link Variable 
Substitution</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hproperty_003abut_002dcreate"><code>hproperty:but-create</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Button-Colors">Button Colors</a></td></tr>
@@ -12663,6 +12688,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-disable-local-key-override">disable local key 
override</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-display">display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-display-function">display 
function</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-display-outside-Emacs">display 
outside Emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Referent-Display">Referent Display</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-display-where">display 
where</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Referent-Display">Referent Display</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-DisplayHere-mode">DisplayHere 
mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Dired-Mode">Smart Key - Dired Mode</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-distributed-collaboration">distributed 
collaboration</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner-History">Koutliner History</a></td></tr>
@@ -12733,6 +12759,8 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-explicit-button_002c-creation">explicit button, 
creation</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Programmatic-Button-Creation">Programmatic Button Creation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-exporting">exporting</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Exporting">Exporting</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-exporting-an-outline">exporting 
an outline</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-external-display">external 
display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Referent-Display">Referent Display</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-external-display-1">external 
display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#External-Viewers">External Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-external-klink">external 
klink</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-external-program">external 
program</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#External-Viewers">External Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-external-viewer">external 
viewer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#External-Viewers">External Viewers</a></td></tr>
@@ -12880,6 +12908,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-idstamp-0">idstamp 
0</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-idstamp-attribute">idstamp 
attribute</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Cell-Attributes">Cell Attributes</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-idstamp-counter">idstamp 
counter</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-image-display">image 
display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Referent-Display">Referent Display</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-images">images</a>:</td><td>&nbsp;</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-implicit-button">implicit 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons">Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-implicit-button-1">implicit 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
@@ -12905,7 +12934,11 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-interactive-cmd-char_002c-_002bX">interactive cmd char, 
+X</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Type-Creation">Action Type Creation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-interactive-computing">interactive 
computing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-interactive-form">interactive 
form</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Type-Creation">Action Type Creation</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-internal-custom-display">internal custom 
display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-internal-display">internal 
display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Referent-Display">Referent Display</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-internal-image-display">internal 
image display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-internal-klink">internal 
klink</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-internal-standard-display">internal standard 
display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-internal-viewer">internal 
viewer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Internet-RFC">Internet 
RFC</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Internet-RFC-1">Internet 
RFC</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
@@ -13057,7 +13090,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Button_002dFile">menu, 
Button-File</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Cust">menu, 
Cust</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Cust-1">menu, 
Cust</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Customization">Customization</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-menu_002c-Cust_002fReferents">menu, 
Cust/Referents</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Referent-Display">Referent Display</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-menu_002c-Cust_002fReferents">menu, 
Cust/Referents</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Cust_002fURL_002dDisplay">menu, 
Cust/URL-Display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Cust_002fURL_002dDisplay-1">menu, 
Cust/URL-Display</a>:</td><td>&nbsp;</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-menu_002c-Cust_002fWeb_002dSearch">menu, 
Cust/Web-Search</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Web-Search-Engines">Web Search Engines</a></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index ed1205e..98f4fb9 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index 549179c..a6fdfee 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index f57abee..6e2bb92 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -6501,10 +6501,10 @@ be of interest to users.
 @cindex image display
 @cindex internal display
 @cindex external display
-Hyperbole lets you control where link referents are displayed and even
-what Emacs function or external program is used to display them.
-There are four categories of referents, each with its own display
-setting, listed in decreasing order of priority.
+Hyperbole lets you control where link referents are displayed.  It also
+permits setting a specific Emacs function or external program
+to display them.  There are four categories of referents, each with
+its own display setting, listed in decreasing order of priority.
 
 @example
 Referent Category             Variable Setting
@@ -6541,12 +6541,12 @@ suffixes, which will invoke a special Emacs Lisp 
function to display
 any matching files within Emacs.  This can be used to format raw data
 files for convenient display.
 
-For those who want to change this variable, @code{hpath:internal-display-alist}
-is defined in @file{hpath.el}.  Its value is an association list whose
-elements are (<file-name-regular-expression> . <function-of-one-arg>)
-pairs.  Any path whose name matches a <file-name-regular-expression>
-will be displayed by calling the associated <function-of-one-arg> with
-the file name as the argument.
+This variable, @code{hpath:internal-display-alist} is defined in
+@file{hpath.el}.  Its value is an association list whose elements are
+(<file-name-regular-expression> . <function-of-one-arg>) pairs.  Any
+path whose name matches a <file-name-regular-expression> will be
+displayed by calling the associated <function-of-one-arg> with the
+file name as the argument.
 
 By default, this variable handles the following types of files:
 @table @emph
@@ -6769,7 +6769,7 @@ through invisible/hidden text, making the text 
temporarily visible
 until point moves past that hidden part.  When a search match is
 selected, the surrounding text remains visible.
 
-You can temporarily disable searching of hidden text by typing {M-s i}
+You can temporarily disable searching of hidden text by typing @bkbd{M-s i}
 while in an incremental search.  This key sequence toggles that
 setting and makes searches look at only visible text (or the reverse
 when invoked again).  The setting lasts only through the current



reply via email to

[Prev in Thread] Current Thread [Next in Thread]