branch: scratch/hyperbole-lexbind commit f38ee212a45d09457d899f958d8585ac568810c7 Author: Bob Weiner <r...@gnu.org> Commit: Bob Weiner <r...@gnu.org>
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 <r...@gnu.org> + +* hbut.el (ibut:label-separator): Added. + +2019-07-17 Bob Weiner <r...@gnu.org> + +* 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 <r...@gnu.org> + +* hui.el (hui:ibut-label-create, hui:ibut-label-modify, hui:ibut-message): Added. + +2019-07-15 Bob Weiner <r...@gnu.org> + +* hibtypes.el (debugger-source): Handled Python tracebacks properly. + 2019-07-14 Bob Weiner <r...@gnu.org> * hibtypes.el (link-to-ebut, link-to-gbut, link-to-ibut): @@ -51,7 +71,7 @@ 2019-07-08 Bob Weiner <r...@gnu.org> -* 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 <r...@gnu.org> 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 <r...@gnu.org> and Mats Lidell <ma...@gnu.org> ;; 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>• Any-Frame</em></dt> -<dd><p>Display in the selected window of another existing frame -</p></dd> -<dt><em>• Current-Win</em></dt> -<dd><p>Display in the selected (current) window -</p></dd> -<dt><em>• 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>• New-Frame</em></dt> -<dd><p>Display in a new single window frame -</p></dd> -<dt><em>• Other-Win</em></dt> -<dd><p>Display in another, possibly new window of the selected frame (this is -the default) -</p></dd> -<dt><em>• 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’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>• Any-Frame</em></dt> +<dd><p>Display in the selected window of another existing frame +</p></dd> +<dt><em>• Current-Win</em></dt> +<dd><p>Display in the selected (current) window +</p></dd> +<dt><em>• 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>• New-Frame</em></dt> +<dd><p>Display in a new single window frame +</p></dd> +<dt><em>• Other-Win</em></dt> +<dd><p>Display in another, possibly new window of the selected frame (this is +the default) +</p></dd> +<dt><em>• 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> </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> </td><td valign="top"><a href="#Customization">Customization</a></td></tr> <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-d"><code>C-h h c d</code></a>:</td><td> </td><td valign="top"><a href="#Smart-Key-Debugging">Smart Key Debugging</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-r"><code>C-h h c r</code></a>:</td><td> </td><td valign="top"><a href="#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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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