branch: externals/hyperbole commit 7f6fa36712b41a50f525bab10e2410269855a1ad Author: Bob Weiner <r...@gnu.org> Commit: Bob Weiner <r...@gnu.org>
Add hyrolo-find-file command to edit any hyrolo-file-list file Also fix expansion of relative symlink paths to include the dir of the link itself. --- ChangeLog | 16 +++++++ HY-NEWS | 134 +++++++++++++++++++++++++++++++---------------------- hbdata.el | 3 +- hpath.el | 15 ++++-- hui-mini.el | 1 + hypb-ert.el | 4 +- hyrolo-menu.el | 9 ++-- hyrolo.el | 29 ++++++++++-- kotl/kexport.el | 8 ++-- man/hyperbole.html | 26 +++++++---- man/hyperbole.info | Bin 554216 -> 554573 bytes man/hyperbole.pdf | Bin 1308789 -> 1309014 bytes man/hyperbole.texi | 23 +++++---- test/hbut-tests.el | 4 +- 14 files changed, 176 insertions(+), 96 deletions(-) diff --git a/ChangeLog b/ChangeLog index ab053be..dccc360 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2021-10-17 Bob Weiner <r...@gnu.org> + +* hpath.el (hpath:symlink-referent): Fix handling of relative symlinks, adding + on current directory as prefix. This fixes a bug with /tmp on Macs which + is a symbolic link to 'private/tmp' and was not expanded properly. + +* HY-NEWS: Re-order 8.0.0 entries to emphasize more important features first. + +* hyrolo.el (hyrolo-find-file-function): Add this customizable variable. + (hyrolo-find-file): Use above variable to edit either the first or with + prefix arg, any selected hyrolo-file-list file. + hui-mini.el (hui:menus): Add Rolo/File entry for above command. + hyrolo-menu.el (infodock-hyrolo-menu): Replace 'Edit-Rolo' with 'Edit-HyRolo-File'. + HY-NEWS (HYROLO): + man/hyperbole.texi (HyRolo Menu): Add hyrolo-find-file manual doc. + 2021-09-26 Robert Weiner <b...@bka-imac.lan> * hbut.el (ebut:operate): Rewrote to handle label modification properly and thereby diff --git a/HY-NEWS b/HY-NEWS index a218f25..66ac216 100644 --- a/HY-NEWS +++ b/HY-NEWS @@ -7,58 +7,53 @@ HYPERBOLE SYSTEM - - Hyperbole is now a global minor mode that can be toggled with - {M-x hyperbole-mode RET}, meaning all of its key bindings can - easily be enabled or disabled whenever desired. Your init file - needs to have (hyperbole-mode 1) in it instead of - (require 'hyperbole) or Hyperbole will not be enabled upon startup. + - Hyperbole is now a global minor mode that can be toggled with {M-x + hyperbole-mode RET}, meaning all of its key bindings can easily be + enabled or disabled whenever desired. Your init file needs to have + (hyperbole-mode 1) in it instead of (require 'hyperbole) or Hyperbole + will not be enabled upon startup. In the modeline where minor modes are shown, "Hypb" now appears whenever Hyperbole is active. - PROGRAMMING - - - Simple Action Link Button Type Creation: `defal' is a new, - easy-to-use construct that generates new action button types from - a type name and a single simple format expression, allowing - non-programmers to create their own implicit action button link - types that execute key series, display URLs, display the contents - of pathnames or invoke functions. See "(hyperbole)Action Button - Link Types" or the "DEMO#Defining New Action Button Types" - section. - - - Easy Implicit Link Button Type Creation: `defil' is a new, - construct for those familiar with regular expressions but not - much Emacs Lisp. This macro creates more flexible implicit - button types than `defal' where the delimiters and text - substitution can be specified with regular expressions. Actions - are limited to executing key series, displaying URLs, displaying - the contents of pathnames or invoking functions. See - "(hyperbole)Implicit Button Link Types". - - Elisp programmers should use the existing `defib' macro for full - flexibility in implicit button type creation. See "hibytpes.el" - for examples and "(hyperbole)Programmatic Implicit Button Types" - for documentation. + ORG MODE - - Edebuggable Hyperbole Types: `defib' and `defact' type definitions - are now interactively debuggable via edebug-defun {C-M-x}. + - M-RET: Reworked M-RET interface so can control how much or little of + Hyperbole works in Org mode when Hyperbole minor mode is enabled. - - kbd-key:is-p: Added this new predicate to test whether point is within - a brace-delimited key series. + - hsys-org-enable-smart-keys: New customization to replace + 'inhibit-hsys-org'. This applies only in Org major/minor modes when + hyperbole-mode is active. t means enable Smart Key support + everywhere. The symbol, buttons, is the default; it means the Smart + Keys are active only when point is within a Hyperbole button. A nil + value means no Smart Key support so {M-RET} behaves just as it does + normally in Org mode. This table summarizes the operation: - - ebut:program: Programmatically create an explicit Hyperbole button at - point from LABEL, ACTYPE (action type), and optional actype ARGS. + |--------------+-------------------+------------------+----------+------------------| + | Set To | Smart Key Context | Hyperbole Button | Org Link | Fallback Command | + |--------------+-------------------+------------------+----------+------------------| + | buttons | Ignore | Activate | Activate | org-meta-return | + | nil | Ignore | Ignore | Ignore | org-meta-return | + | t | Activate | Activate | Activate | None | + |--------------+-------------------+------------------+----------+------------------| HYROLO - - After performing a HyRolo search with point in the match buffer, - if you want different results, you can quickly do a new regular - expression HyRolo search with {r} or a string/logical search with - {C-u r}. + - Faster searching within HyRolo match buffer: After performing a HyRolo + search with point in the match buffer, if you want different results, + you can quickly do a new regular expression HyRolo search with {r} or + a string/logical search with {C-u r}. + + - hyrolo-find-file: New command that selects and edits a file in + `hyrolo-file-list', defaulting to the first listed file when not given + a prefix arg. Available in the minibuffer menu as Rolo/File and the + pulldown menu as Rolo/Find-HyRolo-File. KOUTLINER + - Export Koutlines to Collapsible Web Pages: The {M-x kexport:html RET} + command now produces web-based expandable/collapsible outlines. + - Org Table Support: Org table editing now automatically works in the Koutliner via Org table minor mode. Use {M-x orgtbl-mode RET} to toggle this on and off. See "(Org)Tables" for details. @@ -125,25 +120,39 @@ - Todotxt Mode Support: Smart key support for the todotxt mode https://github.com/rpdillon/todotxt.el. - ORG MODE + PROGRAMMING - - M-RET: Reworked M-RET interface so can control how much or little of - Hyperbole works in Org mode when Hyperbole minor mode is enabled. + - Simple Action Link Button Type Creation: `defal' is a new, + easy-to-use construct that generates new action button types from + a type name and a single simple format expression, allowing + non-programmers to create their own implicit action button link + types that execute key series, display URLs, display the contents + of pathnames or invoke functions. See "(hyperbole)Action Button + Link Types" or the "DEMO#Defining New Action Button Types" + section. - - hsys-org-enable-smart-keys: New customization to replace 'inhibit-hsys-org'. - This applies only in Org major/minor modes when hyperbole-mode is active. - t means enable Smart Key support everywhere. The symbol, buttons, is the - default; it means the Smart Keys are active only when point is within a - Hyperbole button. A nil value means no Smart Key support so {M-RET} behaves - just as it does normally in Org mode. This table summarizes the operation: + - Easy Implicit Link Button Type Creation: `defil' is a new, + construct for those familiar with regular expressions but not + much Emacs Lisp. This macro creates more flexible implicit + button types than `defal' where the delimiters and text + substitution can be specified with regular expressions. Actions + are limited to executing key series, displaying URLs, displaying + the contents of pathnames or invoking functions. See + "(hyperbole)Implicit Button Link Types". - |--------------+-------------------+------------------+----------+------------------| - | Set To | Smart Key Context | Hyperbole Button | Org Link | Fallback Command | - |--------------+-------------------+------------------+----------+------------------| - | buttons | Ignore | Activate | Activate | org-meta-return | - | nil | Ignore | Ignore | Ignore | org-meta-return | - | t | Activate | Activate | Activate | None | - |--------------+-------------------+------------------+----------+------------------| + Elisp programmers should use the existing `defib' macro for full + flexibility in implicit button type creation. See "hibytpes.el" + for examples and "(hyperbole)Programmatic Implicit Button Types" + for documentation. + + - Edebuggable Hyperbole Types: `defib' and `defact' type definitions + are now interactively debuggable via edebug-defun {C-M-x}. + + - kbd-key:is-p: Added this new predicate to test whether point is within + a brace-delimited key series. + + - ebut:program: Programmatically create an explicit Hyperbole button at + point from LABEL, ACTYPE (action type), and optional actype ARGS. ACE WINDOW PACKAGE INTEGRATION - fast window and buffer switching @@ -158,7 +167,7 @@ TEST CASES - - Hyperbole Automated Testing: Hyperbole now includes over 130 test cases + - Hyperbole Automated Testing: Hyperbole now includes over 170 test cases in the test/ subdirectory. Simply run 'make test' or 'make test-all' from the command-line when in the Hyperbole source directory and you should see all tests pass. If any fail, you can press the Action Key @@ -166,6 +175,19 @@ - Defal implicit buttons hypb-ert-sym and hypb-ert-sel: For running hyperbole ert test from hyperbole source files. + Defines an implicit button for running an ert test + + Example: + Run the test hbut-defal-url + <hypb-ert-sym hbut-defal-url> + + Run the tests specified by the test selector hbut-defal + <hypb-ert-sel hbut-defal> + + Run all tests + <hypb-ert-sel t> + + =========================================================================== * V7.1.3 diff --git a/hbdata.el b/hbdata.el index 01e81af..aa7a857 100644 --- a/hbdata.el +++ b/hbdata.el @@ -319,8 +319,7 @@ Return value of evaluation when a matching entry is found or nil." (save-excursion (unwind-protect (progn - (if (not (bufferp key-src)) - nil + (when (bufferp key-src) (set-buffer key-src) (cond ((hmail:editor-p) (setq end-func (lambda () diff --git a/hpath.el b/hpath.el index 834c445..5dd3175 100644 --- a/hpath.el +++ b/hpath.el @@ -1590,10 +1590,17 @@ After any match, the resulting path will contain a varible reference like ${vari (defun hpath:symlink-referent (linkname) "Return expanded file or directory referent of LINKNAME. LINKNAME should not end with a directory delimiter. -Returns nil if LINKNAME is not a string. -Returns LINKNAME unchanged if it is not a symbolic link but is a pathname." - (if (stringp linkname) - (or (file-symlink-p linkname) linkname))) +Return nil if LINKNAME is not a string. +Return LINKNAME unchanged if it is not a symbolic link but is a pathname." + (when (stringp linkname) + (let ((referent (file-symlink-p linkname))) + (cond ((null referent) + linkname) + ((file-name-absolute-p referent) + referent) + (t (expand-file-name referent + (directory-file-name (file-name-directory + (directory-file-name (expand-file-name linkname)))))))))) (defun hpath:symlink-expand (referent dirname) "Return expanded file or directory REFERENT relative to DIRNAME." diff --git a/hui-mini.el b/hui-mini.el index 0bb5ab1..a350902 100644 --- a/hui-mini.el +++ b/hui-mini.el @@ -771,6 +771,7 @@ constructs. If not given, the top level Hyperbole menu is used." ("Display" hyrolo-display-matches "Display last found rolo matches again.") ("Edit" hyrolo-edit "Edit an existing rolo entry.") + ("File" hyrolo-find-file "Edit an existing rolo file.") ("Info" (id-info "(hyperbole)HyRolo") "Displays manual section on Hyperbole rolo.") ("Kill" hyrolo-kill "Kill an existing rolo entry.") diff --git a/hypb-ert.el b/hypb-ert.el index 4800858..1397bcf 100644 --- a/hypb-ert.el +++ b/hypb-ert.el @@ -17,10 +17,10 @@ ;; Run the test hbut-defal-url ;; <hypb-ert-sym hbut-defal-url> ;; -;; Run the tests specified by the test selector hbut-defal +;; Run the tests that start with the string, "hbut-defal" ;; <hypb-ert-sel hbut-defal> ;; -;; Run all tests +;; Run all Hyperbole tests ;; <hypb-ert-sel t> ;;; Code: diff --git a/hyrolo-menu.el b/hyrolo-menu.el index 069e14d..f392210 100644 --- a/hyrolo-menu.el +++ b/hyrolo-menu.el @@ -34,11 +34,10 @@ ["Delete-Entry" (id-tool-invoke 'hyrolo-kill) t] ["Display-Prior-Matches" (id-tool-invoke 'hyrolo-display-matches) t] ["Edit-Entry" (id-tool-invoke 'hyrolo-edit) t] - ["Edit-Rolo" (id-tool-invoke - '(lambda () - (require 'hyrolo) - (find-file (car hyrolo-file-list)) - (setq buffer-read-only nil))) + ["Find-HyRolo-File" (id-tool-invoke + (lambda () + (require 'hyrolo) + (hyrolo-find-file))) t] ["Insert-Entry-at-Point" (id-tool-invoke 'hyrolo-yank) t] ["Mail-to-Address" (id-tool-invoke 'hyrolo-mail-to) t] diff --git a/hyrolo.el b/hyrolo.el index b9e46c1..9a079a7 100644 --- a/hyrolo.el +++ b/hyrolo.el @@ -63,6 +63,12 @@ It must contain a %s indicating where to put the entry name and a second :type 'string :group 'hyperbole-rolo) +(defcustom hyrolo-find-file-function #'find-file + "*Function to interactively display a `hyrolo-file-list' file for editing. +Use the `hyrolo-edit' function instead to edit a new or existing entry." + :type 'function + :group 'hyperbole-rolo) + (defcustom hyrolo-google-contacts-flag t "*Non-nil means search Google Contacts on each hyrolo query. The google-contact package must be loaded and a gpg encryption @@ -186,7 +192,7 @@ entry which begins with the parent string." (error "(hyrolo-add): Invalid name: `%s'" name)) (when (and (called-interactively-p 'interactive) file) (setq file (completing-read "File to add to: " - (mapcar 'list hyrolo-file-list)))) + (mapcar #'list hyrolo-file-list)))) (unless file (setq file (car hyrolo-file-list))) (cond ((and file (or (not (stringp file)) (string-equal file ""))) @@ -322,7 +328,7 @@ parent entry which begins with the parent string." (if (= (length hyrolo-file-list) 1) (setq file (car hyrolo-file-list)) (setq file (completing-read "Entry's File: " - (mapcar 'list hyrolo-file-list))))) + (mapcar #'list hyrolo-file-list))))) (let ((found-point) (file-list (if file (list file) hyrolo-file-list))) (or file (setq file (car file-list))) (if (null name) @@ -397,6 +403,21 @@ the logical expression matching." total-matches)) ;;;###autoload +(defun hyrolo-find-file (&optional file) + "Select and edit a file in `hyrolo-file-list', defaulting to the first listed file when not given a prefix arg." + (interactive "P") + (when (or (called-interactively-p 'interactive) + (null file)) + (if (or (= (length hyrolo-file-list) 1) + (not current-prefix-arg)) + (setq file (car hyrolo-file-list)) + (setq file (completing-read "Edit HyRolo file: " + (mapcar #'list hyrolo-file-list))))) + (when (stringp file) + (funcall hyrolo-find-file-function file) + (setq buffer-read-only nil))) + +;;;###autoload (defun hyrolo-grep (regexp &optional max-matches hyrolo-file-or-bufs count-only no-display) "Display rolo entries matching REGEXP. To a maximum of prefix arg MAX-MATCHES, in buffer(s) from optional HYROLO-FILE-OR-BUFS or @@ -500,7 +521,7 @@ Return t if entry is killed, nil otherwise." (error "(hyrolo-kill): Invalid name: `%s'" name)) (if (and (called-interactively-p 'interactive) current-prefix-arg) (setq file (completing-read "Entry's File: " - (mapcar 'list hyrolo-file-list)))) + (mapcar #'list hyrolo-file-list)))) (let ((file-list (if file (list file) hyrolo-file-list)) (killed)) (or file (setq file (car file-list))) @@ -663,7 +684,7 @@ Return list of number of groupings at each entry level." hyrolo-file-list))) buffer-file-name (car hyrolo-file-list))))) - (mapcar 'list hyrolo-file-list))) + (mapcar #'list hyrolo-file-list))) (if (string-equal file "") default file)))) (if (or (not hyrolo-file) (equal hyrolo-file "")) (setq hyrolo-file (car hyrolo-file-list))) diff --git a/kotl/kexport.el b/kotl/kexport.el index 9cd444d..350ec80 100644 --- a/kotl/kexport.el +++ b/kotl/kexport.el @@ -488,10 +488,10 @@ hard newlines are not used. Also converts Urls and Klinks into Html hyperlinks. label separator)) (princ "</td>\n<td>\n") (setq contents (kcell-view:contents)) - (if (string-match "\\`\\([-_$%#@~^&*=+|/A-Za-z0-9 ]+\\):.*\\S-" - contents) - (princ (format "<a id=\"%s\"></a>" - (substring contents 0 (match-end 1))))) + (when (string-match "\\`\\([-_$%#@~^&*=+|/A-Za-z0-9 ]+\\):.*\\S-" + contents) + (princ (format "<a id=\"%s\"></a>" + (substring contents 0 (match-end 1))))) (setq contents (kexport:html-markup contents)) (if soft-newlines-flag (princ contents) diff --git a/man/hyperbole.html b/man/hyperbole.html index 862cf41..52c75f3 100644 --- a/man/hyperbole.html +++ b/man/hyperbole.html @@ -853,7 +853,7 @@ Next: <a href="#Smart-Keys" accesskey="n" rel="next">Smart Keys</a>, Previous: < <span id="Introduction-1"></span><h2 class="chapter">1 Introduction</h2> <p>This edition of the GNU Hyperbole Manual is for use with any version -8.0.0pre or greater of GNU Hyperbole. Hyperbole runs atop GNU Emacs 24.3 +8.0.0pre or greater of GNU Hyperbole. Hyperbole runs atop GNU Emacs 27.1 or higher. It will trigger an error if your Emacs is older. </p> <p>This chapter summarizes the structure of the rest of the manual, @@ -6226,6 +6226,7 @@ the menu or read the following sections explaining commands. <span id="index-hyrolo_002dadd"></span> <span id="index-hyrolo_002ddisplay_002dmatches"></span> <span id="index-hyrolo_002dedit"></span> +<span id="index-hyrolo_002dfind_002dfile"></span> <span id="index-hyrolo_002dkill"></span> <span id="index-hyrolo_002dmail_002dto"></span> <span id="index-hyrolo_002dsort"></span> @@ -6239,7 +6240,8 @@ the menu or read the following sections explaining commands. Add hyrolo-add Adds a hyrolo entry Display hyrolo-display-matches Displays last matches again Edit hyrolo-edit Edits an existing hyrolo entry -Info Displays a hyrolo manual entry +File hyrolo-find-file Edits a <code>hyrolo-file-list</code> file +Info id-info Displays a hyrolo manual entry Kill hyrolo-kill Deletes a hyrolo entry Mail hyrolo-mail Mails to an address at point Order hyrolo-sort Sorts all hyrolo levels @@ -6255,14 +6257,19 @@ Yank hyrolo-yank Inserts the first matching ===================================================================== </pre></div> -<p>A prefix argument used with any of the find commands listed above -limits the search to a maximum number of matches given by the argument. -The search is terminated whenever that number of matches is found. +<p>The ’File’ menu item displays and edits the first file listed in +<code>hyrolo-file-list</code> unless given a prefix argument, in which case +it prompts with completion for the file to edit. </p> -<p>For any of the above commands that prompt for a name such as Edit or -Add (not the Find commands), you may use the form parent/child to -locate a child entry below a specific parent. Hence, for a HyRolo which -looks like so: +<p>A prefix argument used with any of the above menu items with ’Find’ in +their names limits the search to a maximum number of matches given by +the argument. The search is terminated whenever that number of +matches is found. +</p> +<p>For any of the above commands that prompt for a HyRolo name, such as +Edit or Add (not the Find commands), you may use the form parent/child +to locate a child entry below a specific parent. Hence, for a HyRolo +which looks like so: </p> <div class="example"> <pre class="example">* Company @@ -12815,6 +12822,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td></td><td valign="top"><a href="#index-hyrolo_002dentry_002dregexp">hyrolo-entry-regexp</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Settings">HyRolo Settings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dfgrep"><code>hyrolo-fgrep</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dfile_002dlist">hyrolo-file-list</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Settings">HyRolo Settings</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-hyrolo_002dfind_002dfile"><code>hyrolo-find-file</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dgoogle_002dcontacts_002dfgrep"><code>hyrolo-google-contacts-fgrep</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Settings">HyRolo Settings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dgoogle_002dcontacts_002dflag">hyrolo-google-contacts-flag</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Settings">HyRolo Settings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dgoogle_002dcontacts_002dgrep"><code>hyrolo-google-contacts-grep</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Settings">HyRolo Settings</a></td></tr> diff --git a/man/hyperbole.info b/man/hyperbole.info index b9a2760..9384015 100644 Binary files a/man/hyperbole.info and b/man/hyperbole.info differ diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf index 78d5ff4..a93a1ce 100644 Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ diff --git a/man/hyperbole.texi b/man/hyperbole.texi index c82648b..2acefd3 100644 --- a/man/hyperbole.texi +++ b/man/hyperbole.texi @@ -5258,6 +5258,7 @@ The minibuffer Rolo/ menu offers the following commands: @findex hyrolo-add @findex hyrolo-display-matches @findex hyrolo-edit +@findex hyrolo-find-file @findex hyrolo-kill @findex hyrolo-mail-to @findex hyrolo-sort @@ -5272,7 +5273,8 @@ Menu Item Command Description Add hyrolo-add Adds a hyrolo entry Display hyrolo-display-matches Displays last matches again Edit hyrolo-edit Edits an existing hyrolo entry -Info Displays a hyrolo manual entry +File hyrolo-find-file Edits a @code{hyrolo-file-list} file +Info id-info Displays a hyrolo manual entry Kill hyrolo-kill Deletes a hyrolo entry Mail hyrolo-mail Mails to an address at point Order hyrolo-sort Sorts all hyrolo levels @@ -5289,14 +5291,19 @@ Yank hyrolo-yank Inserts the first matching @end group @end example -A prefix argument used with any of the find commands listed above -limits the search to a maximum number of matches given by the argument. -The search is terminated whenever that number of matches is found. +The 'File' menu item displays and edits the first file listed in +@code{hyrolo-file-list} unless given a prefix argument, in which case +it prompts with completion for the file to edit. -For any of the above commands that prompt for a name such as Edit or -Add (not the Find commands), you may use the form parent/child to -locate a child entry below a specific parent. Hence, for a HyRolo which -looks like so: +A prefix argument used with any of the above menu items with 'Find' in +their names limits the search to a maximum number of matches given by +the argument. The search is terminated whenever that number of +matches is found. + +For any of the above commands that prompt for a HyRolo name, such as +Edit or Add (not the Find commands), you may use the form parent/child +to locate a child entry below a specific parent. Hence, for a HyRolo +which looks like so: @example @group diff --git a/test/hbut-tests.el b/test/hbut-tests.el index a107332..575a40b 100644 --- a/test/hbut-tests.el +++ b/test/hbut-tests.el @@ -24,7 +24,7 @@ "Check that TMP match either a list of a single element of \"/tmp\" or \"private/tmp\". Needed since hyperbole expands all links to absolute paths and /tmp can be a symbolic link." - (should (member tmp '(("/tmp") ("./tmp") ("private/tmp"))))) + (should (member tmp '(("/tmp") ("./tmp") ("/private/tmp"))))) (ert-deftest ebut-program-link-to-directory () "Programatically create ebut with link-to-directory." @@ -63,7 +63,7 @@ Needed since hyperbole expands all links to absolute paths and (delete-file file)))) (ert-deftest ebut-delete-removes-ebut-and-returns-button-data () - "Remove a ebut." + "Remove an ebut." (let ((file (make-temp-file "hypb_" nil ".txt"))) (unwind-protect (progn