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

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

[elpa] externals/hyperbole bcbb612de9 4/5: Fix all issues causing any te


From: ELPA Syncer
Subject: [elpa] externals/hyperbole bcbb612de9 4/5: Fix all issues causing any test cases to fail.
Date: Sun, 18 Jun 2023 03:58:39 -0400 (EDT)

branch: externals/hyperbole
commit bcbb612de9b353320f9ef0cc6aa21252ce1c5046
Author: Bob Weiner <rsw@gnu.org>
Commit: Bob Weiner <rsw@gnu.org>

    Fix all issues causing any test cases to fail.
    
    Rewrite 'hbut-tests-ibut-insert-links' to support ibtypes and better
    actype checks with less code.
---
 ChangeLog               |   72 ++-
 HY-NEWS                 |   16 +-
 TAGS                    | 1266 ++++++++++++++++++++++++-----------------------
 hargs.el                |   20 +-
 hbut.el                 |  229 +++++----
 hibtypes.el             |    9 +-
 hpath.el                |   81 +--
 hui-mouse.el            |    5 +-
 hui-window.el           |   65 +--
 hui.el                  |    8 +-
 kotl/klink.el           |   32 +-
 test/hbut-tests.el      |  161 +++---
 test/hibtypes-tests.el  |    9 +-
 test/hui-tests.el       |   26 +-
 test/hy-test-helpers.el |    5 +-
 15 files changed, 1079 insertions(+), 925 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ee705cebb2..133edffc7d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,14 +1,82 @@
+2023-06-17  Bob Weiner  <rsw@gnu.org>
+
+* hui.el (hui:ibut-link-directly): Document new inter-window Assist Mouse
+    Key handling.
+
+* hui-window.el (hmouse-alist-add-window-handlers): Separate checks of
+    dragging items to modeline from dragging within a window when not
+    on a modeline with a release on a modeline.  This clarifies the
+    context when {C-h A} is used.
+
+* kotl/klink.el (klink:act): Improve doc; update link node label only
+    if point is within a koutline.
+
+* hpath.el (hpath:delimited-possible-path): Skip if at end of line since
+    paths cannot span lines and therefore cannot be within one.
+
+* hibtypes.el (rfc): Set lbl-start and lbl-end attributes.
+
+* hbut.el (ibut:set-name-and-label-key-p): Improve doc and return 't when
+    just lbl-start is found for named, non-delimited ibuts.
+          (ibut:label-p): Ensure match does not contain delimiters, as it
+    may have run past the beginning of another button.
+          (ibut:label-set): Improve doc.
+         (ibut:operate): Improve instance handling.
+         (ibut:insert-text): Fully handle klinks, add 'man' actype support,
+    and handle error when actype is nil.
+          (ibut:program): Remove condition-case around whole function so that
+    errors can be seen with tracebacks.
+
+* hargs.el (hargs:delimited): Update to handle regexps with match to bol that
+    does not move point forward; move forward a char each iteration
+
+* test/hui-tests.el (hui-gibut-create-link-to-file-line,
+                     hui-gibut-create-link-to-file-line-and-column): Improve
+    readability and add check of 'name attribute.
+  test/hy-test-helpers.el (hy-test-helpers-verify-hattr-at-p): Add support
+    for 'name attribute.
+  test/hibtypes-tests.el (ibtypes::annot-bib-test): Fix.
+  test/hbut-tests.el: Fix some free variable scoping issues; remove unused
+    local variables
+  (hbut-tests-actypes-list): Separate out ibutton test data
+    and add data to test ibtype is correct.
+                     (hbut-tests-ibut-insert-text-temp-buffer): Rename to
+    'hbut-tests-ibut-insert-links'; rewrite to simplify and make more reusable.
+                     (hbut-tests-ibut-insert-text-temp-file): Deleted this and
+    merged into 'hbut-tests-ibut-insert-links'.
+
+* kotl/klink.el (klink:act): Improve doc.  Fix to not try to update link label
+    if 'link-to-kotl' fails to display a koutline.
+
+* hbut.el (ibut:insert-text): Add clear error when no matching actype is found.
+    Update klink handling.
+
+2023-06-13  Bob Weiner  <rsw@gnu.org>
+
+* hbut.el (ibut:operate): Update to handle more scenarios from the doc table.
+
+* hbdata.el (hbdata:ibut-instance): Replace with 'hbdata:ibut-instance-next'.
+            (hbdata:ibut-instance-last): Improve doc.
+
 2023-06-11  Bob Weiner  <rsw@gnu.org>
 
 * man/hyperbole.texi (Smart Mouse Drags between Windows): Update appendix doc
     to latest behavior.
 
 * hbut.el (ibut:operate): Drop 'name' arg and get it from 'hbut:current attrs.
+    Improve name handling and buffer insertion.  Use 
'ibut:set-name-and-label-key-p'
+    to set 'lbl-key.
+          (ibut:set-name-and-label-key-p): Set 'lbl-start attribute.
+          (ibut:insert-text): With kbd-key actypes, allow for whitespace 
inside of
+    braces.
           (ibut:program):
-  hui.el (hui:ibut-create, hui:ibut-link-create): Change calls to 
'ibut:operate'.
+  hui.el (hui:ibut-create, hui:ibut-link-create): Change calls to 
'ibut:operate'
+    and improve moving to button text.
 
 * test/hbut-tests.el (hbut-tests-ibut-insert-annot-bib): Allow for 0 or more
     whitespace at end of buffer.
+                     (hbut-tests-ibut-insert-kbd-key): Independently test
+    without and without a name.
 
 * hbdata.el (hbdata:instance-next): Improve doc.
             (hbdata:ibut-instance): Fix inverted logic when orig-name-key
@@ -32,7 +100,7 @@
 
 * kotl/klink.el (klink:act): Document.
                 (klink): Remove 'ibut:set-label' as replaced with global
-    invocation of 'ibut:set-name-and-label-key-p'.
+    invocation of 'ibut:set-name-and-label-key-p' in 'ibut:create' call.
 
 * hbdata.el (hbdata:ibut-instance-last): Remove unused 2nd and 3rd params.
 
diff --git a/HY-NEWS b/HY-NEWS
index ed9079761c..ea5eae9949 100644
--- a/HY-NEWS
+++ b/HY-NEWS
@@ -397,7 +397,7 @@
   *** {C-c /}: The Hyperbole {C-c /} web search binding defers to the org-mode
       binding, `org-show-todo-tree', when in Org mode, but uses the improved
       Hyperbole command version, `hsys-org-todo-occur', which allows filtering
-      to specific todo states.
+      to spec"ific todo states.
 
 
 ** SMART (ACTION AND ASSIST) KEYS  (See "(hyperbole)Smart Keys").
@@ -405,7 +405,7 @@
   *** Drag Button Referents to Specific Windows: Just as you previously could
       drag Dired or Buffer Menu items to display in a specific window, you can
       now do the same with Hyperbole Buttons.  Action or Assist Key drag from
-      on a Hyperbole button and release in another window where you want the
+      a Hyperbole button and release in another window where you want the
       button's referent (or the result of its action) displayed.  If you
       release the Smart Key outside of an Emacs window, the referent is
       displayed in a new frame.  See "(hyperbole)Displaying Items".
@@ -449,16 +449,16 @@
 
 ** TEST CASES  (See "${hyperb:dir}/test").
 
-  *** Hyperbole Automated Testing: Automated test cases increased to almost 
300.
-      Simply run 'make test-all' or 'make test' 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 to see the source of the failure.
+  *** Hyperbole Automated Testing: Over 300 automated test cases.  Simply run
+      'make test-all' or 'make test' 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 to see the source of the failure.
       Full testing is supported under POSIX systems only.  See "Makefile" and
       "test/MANIFEST".
 
   *** The Hyperbole team's CI/CD process automatically runs all test cases
-      against Emacs major versions 27, 28 and 29 whenever a code change is
-      checked in against git.
+      against Emacs major versions 27, 28 and 29 and the current master branch
+      tip whenever a Hyperbole code change is checked in against git.
 
   *** QA: Many quality improvements across Hyperbole and integration with
       Emacs updates with backward compatibility from Emacs 27 through Emacs 29
diff --git a/TAGS b/TAGS
index 13067f5074..0d7271b47e 100644
--- a/TAGS
+++ b/TAGS
@@ -79,18 +79,18 @@ hactypes.el,1275
 (defact link-to-Info-index-item 469,18495
 (defact link-to-Info-node 484,19252
 (defact link-to-ibut 499,19978
-(defact link-to-kcell 548,22065
-(defact link-to-mail 568,22766
-(defact link-to-org-id 592,23933
-(defact link-to-org-id-marker 601,24246
-(defact link-to-regexp-match 611,24624
-(defact link-to-rfc 638,25695
-(defact link-to-string-match 645,25963
-(defact link-to-texinfo-node 654,26416
-(defact link-to-web-search 679,27469
-(defact man-show 687,27850
-(defact rfc-toc 695,28160
-(defact text-toc 722,29327
+(defact link-to-kcell 548,22103
+(defact link-to-mail 568,22804
+(defact link-to-org-id 592,23971
+(defact link-to-org-id-marker 601,24284
+(defact link-to-regexp-match 611,24662
+(defact link-to-rfc 638,25733
+(defact link-to-string-match 645,26001
+(defact link-to-texinfo-node 654,26454
+(defact link-to-web-search 679,27507
+(defact man-show 687,27888
+(defact rfc-toc 695,28198
+(defact text-toc 722,29365
 
 hargs.el,963
 (defvar hargs:defaults 41,1440
@@ -99,52 +99,52 @@ hargs.el,963
 (defun hargs:action-get 56,2031
 (defun hargs:buffer-substring 68,2569
 (defun hargs:delimited 78,3122
-(defun hargs:get 190,7777
-(defmacro hargs:make-iform-vector 227,9350
-(defun hargs:prompt 248,10263
-(defun hargs:select-event-window 257,10578
-(defun hargs:set-string-to-complete 267,11019
-(defun hargs:unset-string-to-complete 275,11375
-(defun hargs:sexpression-p 279,11510
-(defun hargs:actype-get 307,12693
-(defun hargs:at-p 314,12998
-(defun hargs:completion 434,17632
-(defun hargs:iform-read 506,20096
-(defun hargs:read 581,23038
-(defun hargs:read-buffer-name 622,24668
-(defun hargs:read-match 627,24855
-(defun hargs:select-p 660,26219
-(defvar hargs:reading-symbol 699,27753
-(defconst hargs:iform-vector702,27828
-(defconst hargs:iform-extensions-vector808,31348
-(defvar hargs:string-to-complete 867,33686
-
-hbdata.el,874
-(defun hbdata:action 75,3130
-(defun hbdata:actype 79,3246
-(defun hbdata:args 93,3779
-(defun hbdata:categ 97,3880
-(defun hbdata:creator 101,3968
-(defun hbdata:create-time 105,4085
-(defun hbdata:key 109,4204
-(defun hbdata:loc-p 113,4299
-(defun hbdata:modifier 118,4493
-(defun hbdata:mod-time 123,4666
-(defun hbdata:referent 128,4836
-(defun hbdata:search 132,4927
-(defun hbdata:delete-entry 159,5998
-(defun hbdata:delete-entry-at-point 190,7144
-(defun hbdata:ebut-build 193,7244
-(defun hbdata:ebut-instance-last 267,10523
-(defun hbdata:get-entry 278,10925
-(defun hbdata:ibut-instance 287,11310
-(defun hbdata:ibut-instance-last 317,12465
-(defun hbdata:instance-next 328,12927
-(defun hbdata:to-entry 340,13302
-(defun hbdata:apply-entry 363,14264
-(defun hbdata:to-entry-buf 430,16450
-(defun hbdata:to-hbdata-buffer 477,18280
-(defun hbdata:write 501,19304
+(defun hargs:get 200,8096
+(defmacro hargs:make-iform-vector 237,9669
+(defun hargs:prompt 258,10582
+(defun hargs:select-event-window 267,10897
+(defun hargs:set-string-to-complete 277,11338
+(defun hargs:unset-string-to-complete 285,11694
+(defun hargs:sexpression-p 289,11829
+(defun hargs:actype-get 317,13012
+(defun hargs:at-p 324,13317
+(defun hargs:completion 444,17951
+(defun hargs:iform-read 516,20415
+(defun hargs:read 591,23357
+(defun hargs:read-buffer-name 632,24987
+(defun hargs:read-match 637,25174
+(defun hargs:select-p 670,26538
+(defvar hargs:reading-symbol 709,28072
+(defconst hargs:iform-vector712,28147
+(defconst hargs:iform-extensions-vector818,31667
+(defvar hargs:string-to-complete 877,34005
+
+hbdata.el,879
+(defun hbdata:action 75,3128
+(defun hbdata:actype 79,3244
+(defun hbdata:args 93,3777
+(defun hbdata:categ 97,3878
+(defun hbdata:creator 101,3966
+(defun hbdata:create-time 105,4083
+(defun hbdata:key 109,4202
+(defun hbdata:loc-p 113,4297
+(defun hbdata:modifier 118,4491
+(defun hbdata:mod-time 123,4664
+(defun hbdata:referent 128,4834
+(defun hbdata:search 132,4925
+(defun hbdata:delete-entry 159,5996
+(defun hbdata:delete-entry-at-point 190,7142
+(defun hbdata:ebut-build 193,7242
+(defun hbdata:ebut-instance-last 267,10521
+(defun hbdata:get-entry 278,10914
+(defun hbdata:ibut-instance-next 287,11299
+(defun hbdata:ibut-instance-last 302,11843
+(defun hbdata:instance-next 318,12460
+(defun hbdata:to-entry 336,13064
+(defun hbdata:apply-entry 359,14026
+(defun hbdata:to-entry-buf 426,16212
+(defun hbdata:to-hbdata-buffer 473,18042
+(defun hbdata:write 497,19066
 
 hbmap.el,259
 (defvar hbmap:filename 22,642
@@ -156,152 +156,154 @@ hbmap.el,259
 (defvar hbmap:dir-user112,4112
 (defvar hbmap:dir-filename120,4405
 
-hbut.el,5547
-(defvar   ebut:hattr-save 43,1422
-(defun    ebut:act 47,1539
-(defun    ebut:alist 58,1941
-(defun    ebut:at-p 64,2162
-(defun    ebut:create 71,2469
-(defun    ebut:delete 93,3470
-(defun    ebut:edit 106,3938
-(defun    ebut:get 119,4469
-(defun    ebut:is-p 188,6992
-(defun    ebut:key 193,7180
-(defun    ebut:key-of-label-p 200,7418
-(defalias 'ebut:to-key-src ebut:to-key-src205,7624
-(defalias 'ebut:key-src-set-buffer ebut:key-src-set-buffer206,7678
-(defalias 'ebut:key-src-fmt ebut:key-src-fmt207,7740
-(defalias 'ebut:key-to-label ebut:key-to-label208,7795
-(defun    ebut:label-p 210,7852
-(defalias 'ebut:label-regexp ebut:label-regexp273,10425
-(defalias 'ebut:label-to-key ebut:label-to-key275,10476
-(defun    ebut:list 277,10527
-(defalias 'map-ebut map-ebut299,11369
-(defun    ebut:map 301,11402
-(defun    ebut:next-occurrence 311,11917
-(defun    ebut:operate 326,12596
-(defun    ebut:program 435,16794
-(defun    ebut:search 466,18245
-(defun    ebut:to 545,20909
-(defun    ebut:delimit 579,22261
-(defun    ebut:match-regexp 606,23329
-(defconst ebut:label-start 617,23769
-(defconst ebut:label-end 619,23870
-(defconst hbut:instance-sep 621,23969
-(defun    gbut:act 628,24309
-(defun    gbut:delete 643,24924
-(defun    gbut:ebut-program 648,25147
-(defun    gbut:file 668,26038
-(defun    gbut:get 672,26196
-(defun    gbut:help 684,26610
-(defun    gbut:label-list 695,27032
-(defun    gbut:label-p 699,27151
-(defun    gbut:to 714,27966
-(defun    gbut:key-list 732,28623
-(defun    gbut:ebut-key-list 736,28749
-(defun    gbut:ibut-key-list 750,29210
-(defun    hattr:attributes 763,29719
-(defun    hattr:clear 773,30024
-(defun    hattr:copy 784,30400
-(defun hattr:emacs-button-attributes 795,30790
-(defun hattr:emacs-button-is-p 808,31280
-(defun    hattr:get 815,31566
-(defun    hattr:list 819,31700
-(defun    hattr:memq 827,31977
-(defun    hattr:report 839,32408
-(defun    hattr:save 867,33434
-(defun    hattr:set 885,34286
-(defalias 'hattr:summarize hattr:summarize889,34465
-(defvar   hattr:filename891,34509
-(defconst hbut:max-len 901,34942
-(defsubst hbut:max-len 908,35183
-(defun    hbut:act 912,35333
-(defun    hbut:action 975,38036
-(defun    hbut:at-p 985,38344
-(defun    hbut:comment 998,38744
-(defvar   hbut:fill-prefix-regexps1031,39971
-(defun    hbut:fill-prefix-remove 1055,40819
-(defun    hbut:delete 1065,41211
-(defun    hbut:funcall 1080,41844
-(defun    hbut:get 1107,42976
-(defun    hbut:get-key-src 1118,43504
-(defun    hbut:is-p 1176,45791
-(defun    hbut:key 1181,45950
-(defun    hbut:to-key-src 1188,46170
-(defun    hbut:key-src-fmt 1195,46489
-(defun    hbut:key-src-set-buffer 1211,47139
-(defun    hbut:key-to-label 1233,47838
-(defun    hbut:label 1254,48522
-(defun    hbut:label-list 1270,49136
-(defun    hbut:label-p 1274,49290
-(defun    hbut:label-regexp 1287,50065
-(defun    hbut:label-to-key 1321,51292
-(defun    hbut:map 1334,51882
-(defvar   hbut:syntax-table 1390,54069
-(defun    hbut:modify-syntax 1396,54339
-(defun    hbut:outside-comment-p 1411,54966
-(defun    hbut:rename 1419,55326
-(defun    hbut:report 1430,55732
-(defun    hbut:source 1489,57666
-(defalias 'hbut:summarize hbut:summarize1504,58239
-(defun    hbut:to 1506,58280
-(defvar   hbut:current 1513,58608
-(defconst hbut:source-prefix 1516,58713
-(defun    hbut:key-list 1523,59044
-(defun    hbut:ebut-key-list 1527,59209
-(defun    hbut:ibut-key-list 1542,59734
-(defun    ibut:act 1556,60277
-(defun    ibut:alist 1567,60683
-(defun    ibut:at-p 1573,60912
-(defun    ibut:at-type-p 1592,61759
-(defun  ibut:set-name-and-label-key-p 1608,62483
-(cl-defun ibut:create 1672,64803
-(def-edebug-spec cl-defun1841,70541
-(def-edebug-spec lambda-key-list1846,70688
-(defun    ibut:delete 1852,70860
-(defun    ibut:delimit 1879,71866
-(defun    ibut:edit 1906,72935
-(defun    ibut:get 1918,73428
-(defun    ibut:is-p 1940,74245
-(defun    ibut:label-map 1948,74538
-(defun    ibut:label-key-match 1963,75327
-(defun    ibut:label-p 1973,75707
-(defun    ibut:label-regexp 2009,77388
-(defun    ibut:label-set 2015,77679
-(defun    ibut:label-sort-keys 2037,78710
-(defun    ibut:list 2056,79340
-(defun    ibut:key 2078,80191
-(defalias 'ibut:to-key-src ibut:to-key-src2085,80429
-(defalias 'ibut:key-to-label ibut:key-to-label2086,80476
-(defalias 'ibut:label-to-key ibut:label-to-key2087,80525
-(defalias 'map-ibut map-ibut2088,80574
-(defun    ibut:map 2090,80615
-(defun    ibut:next-occurrence 2101,81108
-(defun    ibut:operate 2116,81853
-(defun    ibut:insert-text 2244,86635
-(defun    ibut:previous-occurrence 2294,88866
-(defun    ibut:program 2309,89597
-(defun    ibut:rename 2339,90971
-(defalias 'ibut:summarize ibut:summarize2359,91906
-(defun    ibut:to 2361,91947
-(defun    ibut:at-to-name-p 2411,93674
-(defun    ibut:to-name 2435,94472
-(defun    ibut:to-text 2469,95811
-(defconst ibut:label-start 2520,97895
-(defconst ibut:label-end 2522,97996
-(defvar   ibut:label-separator 2525,98096
-(defvar   ibut:label-separator-regexp 2533,98413
-(defmacro defib 2540,98752
-(def-edebug-spec defib2577,100437
-(def-edebug-spec lambda-list2582,100577
-(defalias 'ibtype:create ibtype:create2587,100695
-(defun ibtype:activate-link 2589,100730
-(defmacro defil 2601,101179
-(defmacro defal 2698,105517
-(defalias 'ibtype:create-action-link-type 
ibtype:create-action-link-type2754,107686
-(defalias 'ibtype:create-regexp-link-type 
ibtype:create-regexp-link-type2755,107737
-(defun    ibtype:def-symbol 2757,107789
-(defun    ibtype:delete 2767,108146
+hbut.el,5695
+(defconst hbut:max-len 32,987
+(defsubst hbut:max-len 39,1228
+(defvar   ebut:hattr-save 54,1813
+(defun    ebut:act 58,1930
+(defun    ebut:alist 69,2332
+(defun    ebut:at-p 75,2553
+(defun    ebut:create 82,2860
+(defun    ebut:delete 104,3861
+(defun    ebut:edit 117,4329
+(defun    ebut:get 130,4860
+(defun    ebut:is-p 199,7383
+(defun    ebut:key 204,7571
+(defun    ebut:key-of-label-p 211,7809
+(defalias 'ebut:to-key-src ebut:to-key-src216,8015
+(defalias 'ebut:key-src-set-buffer ebut:key-src-set-buffer217,8069
+(defalias 'ebut:key-src-fmt ebut:key-src-fmt218,8131
+(defalias 'ebut:key-to-label ebut:key-to-label219,8186
+(defun    ebut:label-p 221,8243
+(defalias 'ebut:label-regexp ebut:label-regexp284,10816
+(defalias 'ebut:label-instances-regexp ebut:label-instances-regexp285,10876
+(defalias 'ebut:label-to-key ebut:label-to-key287,10947
+(defun    ebut:list 289,10998
+(defalias 'map-ebut map-ebut311,11840
+(defun    ebut:map 313,11873
+(defun    ebut:next-occurrence 323,12364
+(defun    ebut:operate 338,13043
+(defun    ebut:program 447,17241
+(defun    ebut:search 478,18692
+(defun    ebut:to 557,21356
+(defun    ebut:delimit 591,22708
+(defun    ebut:match-regexp 618,23776
+(defconst ebut:label-start 629,24216
+(defconst ebut:label-end 631,24317
+(defconst hbut:instance-sep 633,24416
+(defun    gbut:act 640,24756
+(defun    gbut:delete 655,25371
+(defun    gbut:ebut-program 660,25594
+(defun    gbut:file 680,26485
+(defun    gbut:get 684,26643
+(defun    gbut:help 696,27057
+(defun    gbut:label-list 707,27479
+(defun    gbut:label-p 711,27598
+(defun    gbut:to 726,28413
+(defun    gbut:key-list 744,29070
+(defun    gbut:ebut-key-list 748,29196
+(defun    gbut:ibut-key-list 762,29657
+(defun    hattr:attributes 775,30166
+(defun    hattr:clear 785,30471
+(defun    hattr:copy 796,30847
+(defun hattr:emacs-button-attributes 807,31237
+(defun hattr:emacs-button-is-p 820,31727
+(defun    hattr:get 827,32013
+(defun    hattr:list 831,32147
+(defun    hattr:memq 839,32424
+(defun    hattr:report 851,32855
+(defun    hattr:save 879,33881
+(defun    hattr:set 897,34733
+(defalias 'hattr:summarize hattr:summarize901,34912
+(defvar   hattr:filename903,34956
+(defun    hbut:act 913,35389
+(defun    hbut:action 976,38092
+(defun    hbut:at-p 986,38400
+(defun    hbut:comment 999,38800
+(defvar   hbut:fill-prefix-regexps1032,40027
+(defun    hbut:fill-prefix-remove 1056,40875
+(defun    hbut:delete 1066,41267
+(defun    hbut:funcall 1081,41900
+(defun    hbut:get 1108,43032
+(defun    hbut:get-key-src 1119,43560
+(defun    hbut:is-p 1177,45847
+(defun    hbut:key 1182,46006
+(defun    hbut:to-key-src 1189,46226
+(defun    hbut:key-src-fmt 1196,46545
+(defun    hbut:key-src-set-buffer 1212,47195
+(defun    hbut:key-to-label 1234,47894
+(defun    hbut:label 1255,48578
+(defun    hbut:label-list 1262,48824
+(defun    hbut:label-p 1266,48978
+(defun    hbut:label-regexp 1279,49753
+(defun    hbut:label-instances-regexp 1309,50782
+(defun    hbut:label-to-key 1344,52021
+(defun    hbut:map 1357,52611
+(defvar   hbut:syntax-table 1414,54812
+(defun    hbut:modify-syntax 1420,55082
+(defun    hbut:outside-comment-p 1435,55709
+(defun    hbut:rename 1443,56069
+(defun    hbut:report 1454,56475
+(defun    hbut:source 1513,58409
+(defalias 'hbut:summarize hbut:summarize1528,58982
+(defun    hbut:to 1530,59023
+(defvar   hbut:current 1537,59351
+(defconst hbut:source-prefix 1540,59456
+(defun    hbut:key-list 1547,59787
+(defun    hbut:ebut-key-list 1551,59952
+(defun    hbut:ibut-key-list 1566,60477
+(defun    ibut:act 1580,61020
+(defun    ibut:alist 1591,61426
+(defun    ibut:at-p 1597,61655
+(defun    ibut:at-type-p 1616,62502
+(defun  ibut:set-name-and-label-key-p 1632,63225
+(cl-defun ibut:create 1709,66043
+(def-edebug-spec cl-defun1890,72271
+(def-edebug-spec lambda-key-list1895,72418
+(defun    ibut:delete 1901,72590
+(defun    ibut:delimit 1928,73596
+(defun    ibut:get 1955,74664
+(defun    ibut:is-p 1977,75481
+(defun    ibut:label-map 1985,75774
+(defun    ibut:label-key-match 1997,76363
+(defun    ibut:label-p 2007,76756
+(defun    ibut:label-regexp 2052,78784
+(defun    ibut:label-instances-regexp 2058,79075
+(defun    ibut:label-set 2064,79403
+(defun    ibut:label-sort-keys 2088,80494
+(defun    ibut:list 2107,81124
+(defun    ibut:key 2129,81975
+(defalias 'ibut:to-key-src ibut:to-key-src2136,82213
+(defalias 'ibut:key-to-label ibut:key-to-label2137,82260
+(defalias 'ibut:label-to-key ibut:label-to-key2138,82309
+(defalias 'map-ibut map-ibut2139,82358
+(defun    ibut:map 2141,82399
+(defun    ibut:next-occurrence 2153,82892
+(defun    ibut:operate 2168,83637
+(defun    ibut:insert-text 2344,90749
+(defun    ibut:previous-occurrence 2414,93587
+(defun    ibut:program 2429,94318
+(defun    ibut:rename 2457,95672
+(defalias 'ibut:summarize ibut:summarize2477,96607
+(defun    ibut:to 2479,96648
+(defun    ibut:at-to-name-p 2529,98375
+(defun    ibut:to-name 2553,99173
+(defun    ibut:to-text 2587,100512
+(defconst ibut:label-start 2638,102596
+(defconst ibut:label-end 2640,102697
+(defvar   ibut:label-separator 2643,102797
+(defvar   ibut:label-separator-regexp 2651,103114
+(defmacro defib 2658,103453
+(def-edebug-spec defib2695,105138
+(def-edebug-spec lambda-list2700,105278
+(defalias 'ibtype:create ibtype:create2705,105396
+(defun ibtype:activate-link 2707,105431
+(defmacro defil 2719,105880
+(defmacro defal 2816,110218
+(defalias 'ibtype:create-action-link-type 
ibtype:create-action-link-type2872,112387
+(defalias 'ibtype:create-regexp-link-type 
ibtype:create-regexp-link-type2873,112438
+(defun    ibtype:def-symbol 2875,112490
+(defun    ibtype:delete 2885,112847
 
 hgnus.el,110
 (defun Gnus-init 54,1683
@@ -414,47 +416,47 @@ hibtypes.el,1664
 (defib mail-address 323,14699
 (defib org-link-outside-org-mode 363,16585
 (defib annot-bib 382,17479
-(defun markdown-follow-link-p 404,18525
-(defun markdown-follow-inline-link-p 425,19190
-(defib markdown-internal-link 452,20474
-(defib rfc-toc 482,22018
-(defib id-cflow 507,23088
-(defib ctags 554,25142
-(defib etags 580,26544
-(defib cscope 617,28449
-(defib text-toc 644,29601
-(defib dir-summary 676,31183
-(defib rfc 712,32753
-(defib man-apropos 744,34165
-(defun hlink 769,35224
-(defun parse-label-and-file 789,36211
-(defconst elink:start 811,37116
-(defconst elink:end 813,37221
-(defib elink 816,37319
-(defconst glink:start 826,37720
-(defconst glink:end 828,37823
-(defib glink 831,37919
-(defconst ilink:start 840,38209
-(defconst ilink:end 842,38314
-(defib ilink 845,38412
-(defib pathname-line-and-column 860,39068
-(defib ipython-stack-frame 888,40661
-(defib ripgrep-msg 930,42823
-(defib grep-msg 976,44964
-(defun hib-python-traceback 1044,48812
-(defib debugger-source 1055,49424
-(defib elisp-compiler-msg 1141,53465
-(defib patch-msg 1243,58536
-(defib texinfo-ref 1270,59740
-(defib gnus-push-button 1355,64268
-(defib Info-node 1367,64810
-(defib hyp-address 1400,66499
-(defib hyp-source 1419,67513
-(defconst action:start 1446,68632
-(defconst action:end 1449,68741
-(defib action 1458,69091
-(defun action:help 1557,73575
-(defib completion 1584,74667
+(defun markdown-follow-link-p 403,18478
+(defun markdown-follow-inline-link-p 424,19143
+(defib markdown-internal-link 451,20427
+(defib rfc-toc 481,21971
+(defib id-cflow 506,23041
+(defib ctags 553,25095
+(defib etags 579,26497
+(defib cscope 616,28402
+(defib text-toc 643,29554
+(defib dir-summary 675,31136
+(defib rfc 711,32706
+(defib man-apropos 745,34160
+(defun hlink 773,35416
+(defun parse-label-and-file 793,36403
+(defconst elink:start 815,37308
+(defconst elink:end 817,37413
+(defib elink 820,37511
+(defconst glink:start 830,37912
+(defconst glink:end 832,38015
+(defib glink 835,38111
+(defconst ilink:start 844,38401
+(defconst ilink:end 846,38506
+(defib ilink 849,38604
+(defib pathname-line-and-column 864,39260
+(defib ipython-stack-frame 892,40853
+(defib ripgrep-msg 934,43015
+(defib grep-msg 980,45156
+(defun hib-python-traceback 1048,49004
+(defib debugger-source 1059,49616
+(defib elisp-compiler-msg 1145,53657
+(defib patch-msg 1247,58728
+(defib texinfo-ref 1274,59932
+(defib gnus-push-button 1359,64460
+(defib Info-node 1371,65002
+(defib hyp-address 1404,66691
+(defib hyp-source 1423,67705
+(defconst action:start 1450,68824
+(defconst action:end 1453,68933
+(defib action 1462,69283
+(defun action:help 1560,73659
+(defib completion 1587,74751
 
 hinit.el,145
 (defvar   hyperb:user-email 22,623
@@ -714,57 +716,57 @@ hmouse-tag.el,3201
 (defun smart-c-at-tag-p 363,15674
 (defun smart-cc-mode-initialize 378,16260
 (defun smart-emacs-lisp-mode-p 383,16430
-(defun smart-fortran 396,17145
-(defconst smart-fortran-keywords417,18024
-(defun smart-fortran-at-tag-p 437,19200
-(defun smart-java 451,19722
-(defun smart-java-tag 476,20894
-(defun smart-java-oo-browser 487,21334
-(defconst smart-java-keywords507,22232
-(defun smart-java-at-tag-p 518,22799
-(defun smart-javascript 534,23423
-(defconst smart-javascript-keywords555,24316
-(defun smart-javascript-at-tag-p 564,24744
-(defconst smart-lisp-identifier-first-char-regexp 585,25625
-(defconst smart-lisp-identifier-chars 589,25769
-(defconst smart-lisp-identifier 595,26028
-(defun smart-lisp 599,26192
-(defun smart-lisp-find-tag 654,28414
-(defun smart-lisp-at-definition-p 702,30499
-(defun smart-lisp-at-load-expression-p 715,31104
-(defun smart-lisp-at-change-log-tag-p 721,31347
-(defun smart-lisp-htype-tag 731,31805
-(defun smart-lisp-at-tag-p 754,32647
-(defun smart-lisp-at-non-htype-tag-p 762,32989
-(defun smart-lisp-mode-p 793,34432
-(defun smart-objc 799,34609
-(defun smart-objc-tag 828,35904
-(defun smart-objc-oo-browser 852,36783
-(defconst smart-objc-keywords873,37676
-(defun smart-objc-at-tag-p 878,37866
-(defun smart-jedi-find-file 893,38538
-(defun smart-python-jedi-to-definition-p 900,38838
-(defun smart-python 925,40037
-(defun smart-python-tag 950,41075
-(defun smart-python-oo-browser 961,41519
-(defconst smart-python-keywords977,42220
-(defun smart-python-at-tag-p 985,42584
-(defun smart-ancestor-tag-files 1016,43771
-(defun smart-asm-include-file 1035,44457
-(defun smart-c-include-file 1079,45998
-(defun smart-flash-tag 1124,47467
-(defun smart-lisp-at-known-identifier-p 1135,47884
-(defun smart-lisp-bound-symbol-def 1160,48859
-(defun smart-tags-find-p 1169,49266
-(defun smart-java-cross-reference 1180,49699
-(defun smart-java-library-path 1268,53577
-(defun smart-java-packages 1285,54238
-(defun smart-library-symbol 1356,56949
-(defun smart-tags-display 1371,57508
-(defun smart-tags-file-path 1405,59049
-(defun smart-tags-org-src-block-p 1428,59900
-(defun smart-tags-file-list 1433,60088
-(defun smart-tags-noselect-function 1470,61812
+(defun smart-fortran 396,17151
+(defconst smart-fortran-keywords417,18030
+(defun smart-fortran-at-tag-p 437,19206
+(defun smart-java 451,19728
+(defun smart-java-tag 476,20900
+(defun smart-java-oo-browser 487,21340
+(defconst smart-java-keywords507,22238
+(defun smart-java-at-tag-p 518,22805
+(defun smart-javascript 534,23429
+(defconst smart-javascript-keywords555,24322
+(defun smart-javascript-at-tag-p 564,24750
+(defconst smart-lisp-identifier-first-char-regexp 585,25631
+(defconst smart-lisp-identifier-chars 589,25775
+(defconst smart-lisp-identifier 595,26034
+(defun smart-lisp 599,26198
+(defun smart-lisp-find-tag 654,28420
+(defun smart-lisp-at-definition-p 703,30543
+(defun smart-lisp-at-load-expression-p 716,31146
+(defun smart-lisp-at-change-log-tag-p 722,31389
+(defun smart-lisp-htype-tag 733,31862
+(defun smart-lisp-at-tag-p 756,32704
+(defun smart-lisp-at-non-htype-tag-p 764,33046
+(defun smart-lisp-mode-p 795,34489
+(defun smart-objc 801,34666
+(defun smart-objc-tag 830,35961
+(defun smart-objc-oo-browser 854,36840
+(defconst smart-objc-keywords875,37733
+(defun smart-objc-at-tag-p 880,37923
+(defun smart-jedi-find-file 895,38595
+(defun smart-python-jedi-to-definition-p 902,38895
+(defun smart-python 927,40094
+(defun smart-python-tag 952,41132
+(defun smart-python-oo-browser 963,41576
+(defconst smart-python-keywords979,42277
+(defun smart-python-at-tag-p 987,42641
+(defun smart-ancestor-tag-files 1018,43828
+(defun smart-asm-include-file 1037,44514
+(defun smart-c-include-file 1081,46055
+(defun smart-flash-tag 1126,47524
+(defun smart-lisp-at-known-identifier-p 1137,47941
+(defun smart-lisp-bound-symbol-def 1165,49021
+(defun smart-tags-find-p 1175,49472
+(defun smart-java-cross-reference 1186,49905
+(defun smart-java-library-path 1274,53783
+(defun smart-java-packages 1291,54444
+(defun smart-library-symbol 1362,57155
+(defun smart-tags-display 1377,57714
+(defun smart-tags-file-path 1411,59255
+(defun smart-tags-org-src-block-p 1434,60106
+(defun smart-tags-file-list 1439,60294
+(defun smart-tags-noselect-function 1476,62018
 
 hpath.el,5601
 (defcustom hpath:auto-completing-read-modes 42,1401
@@ -839,63 +841,63 @@ hpath.el,5601
 (defun hpath:is-path-variable-p 1064,47440
 (defun hpath:choose-from-path-variable 1071,47740
 (defun hpath:delimited-possible-path 1088,48628
-(defun hpath:display-buffer 1140,50957
-(defun hpath:display-buffer-other-frame 1156,51693
-(defun hpath:display-buffer-function 1177,52488
-(defun hpath:display-path-function 1182,52744
-(defun hpath:resolve 1187,52995
-(defun hpath:expand 1209,54009
-(defun hpath:prepend-shell-directory 1238,55481
-(defvar hpath:compressed-suffix-regexp 1272,57279
-(defun hpath:expand-with-variable 1275,57435
-(defun hpath:file-line-and-column 1313,59154
-(defun hpath:find-noselect 1331,60031
-(defun hpath:find 1340,60380
-(defun hpath:to-markup-anchor 1505,67365
-(defun hpath:find-executable 1569,70104
-(defun hpath:find-line 1584,70608
-(defun hpath:find-other-frame 1604,71378
-(defun hpath:find-other-window 1619,71856
-(defun hpath:get-external-display-alist 1629,72351
-(defun hpath:is-p 1648,73340
-(defun hpath:push-tag-mark 1749,78153
-(defun hpath:relative-arguments 1763,78665
-(defun hpath:relative-to 1773,79095
-(defun hpath:rfc 1805,80383
-(defun hpath:start-end 1810,80556
-(defun hpath:return-one-value 1839,81760
-(defun hpath:substitute-value 1877,83441
-(defun hpath:substitute-var 1921,85096
-(defun hpath:symlink-referent 1959,86562
-(defun hpath:symlink-expand 1974,87157
-(defun hpath:to-line 2009,88796
-(defun hpath:trim 2018,89083
-(defun hpath:normalize 2027,89421
-(defun hpath:validate 2035,89807
-(defun hpath:find-file-urls-p 2058,90714
-(defun hpath:handle-urls 2064,90973
-(defalias 
'hyperb:substitute-in-file-namehyperb:substitute-in-file-name2081,91715
-(defun substitute-in-file-name 2084,91806
-(defun hpath:enable-find-file-urls 2097,92448
-(defun hpath:disable-find-file-urls 2128,93578
-(defun hpath:find-file-urls-mode 2157,94613
-(defun hpath:url-at-p 2169,95100
-(defun hpath:url-p 2180,95591
-(defun hpath:www-at-p 2191,95986
-(defun hpath:www-p 2207,96683
-(defun hpath:command-string 2215,97006
-(defun hpath:display-where-function 2224,97413
-(defun hpath:remote-available-p 2234,97883
-(defun hpath:remote-default-user 2253,98730
-(defun hpath:delete-trailer 2267,99186
-(defun hpath:exists-p 2275,99470
-(defun hpath:find-file-mailcap 2306,100467
-(defun hpath:find-program 2322,100983
-(defun hpath:match 2343,101854
-(defun hpath:get-single-string-variable-value 2357,102454
-(defun hpath:substitute-dir 2387,103548
-(defun hpath:substitute-match-value 2453,106631
-(defun hpath:substitute-var-name 2515,108847
+(defun hpath:display-buffer 1141,51004
+(defun hpath:display-buffer-other-frame 1157,51740
+(defun hpath:display-buffer-function 1178,52535
+(defun hpath:display-path-function 1183,52791
+(defun hpath:resolve 1188,53042
+(defun hpath:expand 1210,54056
+(defun hpath:prepend-shell-directory 1239,55528
+(defvar hpath:compressed-suffix-regexp 1273,57326
+(defun hpath:expand-with-variable 1276,57482
+(defun hpath:file-line-and-column 1314,59201
+(defun hpath:find-noselect 1332,60078
+(defun hpath:find 1341,60427
+(defun hpath:to-markup-anchor 1506,67412
+(defun hpath:find-executable 1570,70151
+(defun hpath:find-line 1585,70655
+(defun hpath:find-other-frame 1605,71425
+(defun hpath:find-other-window 1620,71903
+(defun hpath:get-external-display-alist 1630,72398
+(defun hpath:is-p 1649,73387
+(defun hpath:push-tag-mark 1750,78200
+(defun hpath:relative-arguments 1764,78712
+(defun hpath:relative-to 1774,79142
+(defun hpath:rfc 1806,80430
+(defun hpath:start-end 1811,80603
+(defun hpath:return-one-value 1840,81807
+(defun hpath:substitute-value 1878,83488
+(defun hpath:substitute-var 1922,85143
+(defun hpath:symlink-referent 1960,86609
+(defun hpath:symlink-expand 1975,87204
+(defun hpath:to-line 2010,88843
+(defun hpath:trim 2019,89130
+(defun hpath:normalize 2028,89468
+(defun hpath:validate 2036,89854
+(defun hpath:find-file-urls-p 2059,90761
+(defun hpath:handle-urls 2065,91020
+(defalias 
'hyperb:substitute-in-file-namehyperb:substitute-in-file-name2082,91762
+(defun substitute-in-file-name 2085,91853
+(defun hpath:enable-find-file-urls 2098,92495
+(defun hpath:disable-find-file-urls 2129,93625
+(defun hpath:find-file-urls-mode 2158,94660
+(defun hpath:url-at-p 2170,95147
+(defun hpath:url-p 2181,95638
+(defun hpath:www-at-p 2192,96033
+(defun hpath:www-p 2208,96730
+(defun hpath:command-string 2216,97053
+(defun hpath:display-where-function 2225,97460
+(defun hpath:remote-available-p 2235,97930
+(defun hpath:remote-default-user 2254,98777
+(defun hpath:delete-trailer 2268,99233
+(defun hpath:exists-p 2276,99517
+(defun hpath:find-file-mailcap 2307,100514
+(defun hpath:find-program 2323,101030
+(defun hpath:match 2344,101901
+(defun hpath:get-single-string-variable-value 2358,102501
+(defun hpath:substitute-dir 2388,103595
+(defun hpath:substitute-match-value 2454,106678
+(defun hpath:substitute-var-name 2516,108894
 
 hrmail.el,723
 (defun Rmail-init 47,1512
@@ -1273,75 +1275,75 @@ hui-mouse.el,3113
 (defcustom assist-key-eol-function 120,4604
 (defvar hkey-value 194,7730
 (defvar hkey-alist197,7827
-(defvar hmouse-alist 528,21008
-(defun first-line-p 559,22241
-(defun last-line-p 563,22373
-(defun smart-completion-help 567,22503
-(defun smart-buffer-menu-no-marks 576,22901
-(defun smart-buffer-menu 589,23373
-(defun smart-buffer-menu-assist 618,24443
-(defun smart-ibuffer-menu-no-marks 646,25537
-(defun smart-ibuffer-menu 659,26012
-(defun smart-ibuffer-menu-assist 686,27023
-(defun smart-custom 716,28196
-(defun smart-custom-assist 737,29041
-(defun smart-calendar 765,30091
-(defun smart-calendar-assist 786,30914
-(defun smart-company-to-definition 815,32117
-(defun smart-company-help 823,32436
-(defun smart-dired-pathname-up-to-point 836,32932
-(defun smart-dired 853,33498
-(defun smart-dired-assist 898,35422
-(defun smart-gnus-group 931,36701
-(defun smart-gnus-group-assist 953,37620
-(defun smart-gnus-summary 975,38598
-(defun smart-gnus-summary-assist 1005,39855
-(defun smart-gnus-article 1027,40801
-(defun smart-gnus-article-assist 1050,41805
-(defun smart-helm-at-header 1078,43025
-(defun smart-helm-get-current-action 1087,43366
-(defun smart-helm-line-has-action 1097,43847
-(defun smart-helm-alive-p 1115,44638
-(defun smart-helm-resume-helm 1123,44944
-(defun smart-helm-at 1132,45279
-(defun smart-helm-to-minibuffer 1164,46396
-(defun smart-helm(1169,46555
-(defun smart-helm-assist(1220,48804
-(defun smart-hmail 1284,51595
-(defun smart-hmail-assist 1317,52805
-(defun smart-hyrolo 1355,54227
-(defalias 'smart-hyrolo-assist smart-hyrolo-assist1365,54570
-(defun smart-image-dired-thumbnail 1371,54805
-(defun smart-image-dired-thumbnail-assist 1376,55035
-(defun smart-imenu-display-item-where 1386,55491
-(defun smart-imenu-item-at-p 1392,55799
-(defun smart-imenu-item-p 1410,56781
-(defun smart-magit-display-file 1456,58866
-(defun smart-magit 1465,59278
-(defun smart-magit-assist 1490,60262
-(defun smart-magit-tab 1521,61572
-(defun smart-apropos 1557,63083
-(defun smart-apropos-assist 1577,63797
-(defun smart-man-display 1597,64574
-(defun smart-man-entry-ref 1601,64714
-(defun smart-man-c-routine-ref 1643,66236
-(defun smart-man-file-ref 1664,67095
-(defun smart-org 1688,67878
-(defvar smart-outline-cut 1845,73592
-(defun smart-outline-level 1857,74023
-(defun smart-outline 1866,74277
-(defun smart-outline-assist 1905,75664
-(defun smart-outline-to-entry-end 1941,77107
-(defun smart-outline-subtree-hidden-p 1951,77462
-(defun smart-outline-char-invisible-p 1957,77717
-(defun smart-todotxt 1973,78397
-(defun smart-todotxt-assist 1983,78676
-(defun smart-eobp 1994,78972
-(defun smart-eolp 2004,79336
-(defun smart-push-button 2017,79923
-(defun smart-push-button-help 2029,80541
-(defun smart-tar 2047,81290
-(defun smart-tar-assist 2072,82104
+(defvar hmouse-alist 533,21225
+(defun first-line-p 564,22458
+(defun last-line-p 568,22590
+(defun smart-completion-help 572,22720
+(defun smart-buffer-menu-no-marks 581,23118
+(defun smart-buffer-menu 594,23590
+(defun smart-buffer-menu-assist 623,24660
+(defun smart-ibuffer-menu-no-marks 651,25754
+(defun smart-ibuffer-menu 664,26229
+(defun smart-ibuffer-menu-assist 691,27240
+(defun smart-custom 721,28413
+(defun smart-custom-assist 742,29258
+(defun smart-calendar 770,30308
+(defun smart-calendar-assist 791,31131
+(defun smart-company-to-definition 820,32334
+(defun smart-company-help 828,32653
+(defun smart-dired-pathname-up-to-point 841,33149
+(defun smart-dired 858,33715
+(defun smart-dired-assist 903,35639
+(defun smart-gnus-group 936,36918
+(defun smart-gnus-group-assist 958,37837
+(defun smart-gnus-summary 980,38815
+(defun smart-gnus-summary-assist 1010,40072
+(defun smart-gnus-article 1032,41018
+(defun smart-gnus-article-assist 1055,42022
+(defun smart-helm-at-header 1083,43242
+(defun smart-helm-get-current-action 1092,43583
+(defun smart-helm-line-has-action 1102,44064
+(defun smart-helm-alive-p 1120,44855
+(defun smart-helm-resume-helm 1128,45161
+(defun smart-helm-at 1137,45496
+(defun smart-helm-to-minibuffer 1169,46613
+(defun smart-helm(1174,46772
+(defun smart-helm-assist(1225,49021
+(defun smart-hmail 1289,51812
+(defun smart-hmail-assist 1322,53022
+(defun smart-hyrolo 1360,54444
+(defalias 'smart-hyrolo-assist smart-hyrolo-assist1370,54787
+(defun smart-image-dired-thumbnail 1376,55022
+(defun smart-image-dired-thumbnail-assist 1381,55252
+(defun smart-imenu-display-item-where 1391,55708
+(defun smart-imenu-item-at-p 1397,56016
+(defun smart-imenu-item-p 1411,56769
+(defun smart-magit-display-file 1457,58854
+(defun smart-magit 1466,59266
+(defun smart-magit-assist 1491,60250
+(defun smart-magit-tab 1522,61560
+(defun smart-apropos 1558,63071
+(defun smart-apropos-assist 1578,63785
+(defun smart-man-display 1598,64562
+(defun smart-man-entry-ref 1602,64702
+(defun smart-man-c-routine-ref 1644,66224
+(defun smart-man-file-ref 1665,67083
+(defun smart-org 1689,67866
+(defvar smart-outline-cut 1846,73580
+(defun smart-outline-level 1858,74011
+(defun smart-outline 1867,74265
+(defun smart-outline-assist 1906,75652
+(defun smart-outline-to-entry-end 1942,77095
+(defun smart-outline-subtree-hidden-p 1952,77450
+(defun smart-outline-char-invisible-p 1958,77705
+(defun smart-todotxt 1974,78385
+(defun smart-todotxt-assist 1984,78664
+(defun smart-eobp 1995,78960
+(defun smart-eolp 2005,79324
+(defun smart-push-button 2018,79911
+(defun smart-push-button-help 2030,80529
+(defun smart-tar 2048,81278
+(defun smart-tar-assist 2073,82092
 
 hui-select.el,2783
 (defcustom hui-select-brace-modes121,5691
@@ -1524,37 +1526,37 @@ hui.el,2327
 (defun hui:hbut-report 853,34071
 (defalias 'hui:hbut-summarize hui:hbut-summarize864,34423
 (defun hui:ibut-act 866,34473
-(defun hui:ibut-create 881,35039
+(defun hui:ibut-create 881,35044
 (defun hui:ibut-edit 914,36421
 (defun hui:ibut-label-create 984,39098
 (defun hui:ibut-rename 1022,40973
-(defun hui:link 1056,42130
-(defun hui:ebut-link-directly 1060,42290
-(defun hui:ibut-link-directly 1131,45125
-(defun hui:action 1211,48339
-(defun hui:actype 1264,50072
-(defun hui:buf-writable-err 1283,51065
-(defvar hui:ignore-buffers-regexp 1303,51928
-(defun hui:ebut-delete-op 1306,52098
-(defun hui:ebut-message 1337,53351
-(defun hui:ebut-unmark 1348,53755
-(defun hui:file-find 1408,56218
-(defun hui:hbut-operate 1415,56488
-(defun hui:hbut-term-highlight 1440,57601
-(defun hui:hbut-term-unhighlight 1454,58003
-(defun hui:help-ebut-highlight 1463,58289
-(defun hui:htype-delete 1469,58537
-(defun hui:htype-help 1480,58944
-(defun hui:htype-help-current-window 1531,60712
-(defun hui:ibut-delete-op 1538,61077
-(defun hui:ibut-message 1562,62180
-(defun hui:key-dir 1573,62584
-(defun hui:key-src 1582,62932
-(defun hui:ebut-link-create 1591,63303
-(defun hui:ibut-link-create 1614,64502
-(defun hui:link-possible-types 1637,65699
-(defun hui:list-remove-text-properties 1770,71067
-(defvar hui:ebut-label-prev 1780,71457
+(defun hui:link 1056,42128
+(defun hui:ebut-link-directly 1060,42288
+(defun hui:ibut-link-directly 1131,45123
+(defun hui:action 1211,48337
+(defun hui:actype 1264,50070
+(defun hui:buf-writable-err 1283,51063
+(defvar hui:ignore-buffers-regexp 1303,51926
+(defun hui:ebut-delete-op 1306,52096
+(defun hui:ebut-message 1337,53349
+(defun hui:ebut-unmark 1348,53753
+(defun hui:file-find 1408,56216
+(defun hui:hbut-operate 1415,56486
+(defun hui:hbut-term-highlight 1440,57599
+(defun hui:hbut-term-unhighlight 1454,58001
+(defun hui:help-ebut-highlight 1463,58287
+(defun hui:htype-delete 1469,58535
+(defun hui:htype-help 1480,58942
+(defun hui:htype-help-current-window 1531,60710
+(defun hui:ibut-delete-op 1538,61075
+(defun hui:ibut-message 1562,62178
+(defun hui:key-dir 1573,62582
+(defun hui:key-src 1582,62930
+(defun hui:ebut-link-create 1591,63301
+(defun hui:ibut-link-create 1614,64500
+(defun hui:link-possible-types 1637,65692
+(defun hui:list-remove-text-properties 1770,71060
+(defvar hui:ebut-label-prev 1780,71450
 
 hvar.el,272
 (defvar var::append-list 34,1095
@@ -1727,123 +1729,123 @@ hyrolo-menu.el,191
 (defun hyrolo-popup-menu 110,4770
 
 hyrolo.el,4868
-(defgroup hyperbole-rolo 69,2526
-(defcustom hyrolo-date-format 73,2641
-(defvar hyrolo-display-format-function80,2891
-(defcustom hyrolo-email-format 86,3133
-(defvar hyrolo-entry-name-regexp 93,3421
-(defcustom hyrolo-file-suffix-regexp 96,3585
-(defcustom hyrolo-find-file-function 101,3766
-(defcustom hyrolo-find-file-noselect-function 107,4010
-(defcustom hyrolo-google-contacts-flag 112,4196
-(defvar hyrolo-next-match-function 119,4463
-(defun hyrolo-google-contacts-p 147,5733
-(defun hyrolo-initialize-file-list 161,6279
-(define-obsolete-variable-alias 'rolo-file-list rolo-file-list180,7091
-(defcustom hyrolo-file-list 181,7166
-(defcustom hyrolo-highlight-face 194,7635
-(defcustom hyrolo-kill-buffers-after-use 200,7807
-(defcustom hyrolo-save-buffers-after-use 206,8008
-(defvar hyrolo-yank-reformat-function 215,8324
-(defun hyrolo-add 225,8762
-(defun hyrolo-display-matches 356,13861
-(defun hyrolo-edit 388,15163
-(defun hyrolo-edit-entry 434,17081
-(defun hyrolo-fgrep 456,18059
-(defun hyrolo-find-file 494,19997
-(defun hyrolo-find-file-noselect 518,20946
-(defun hyrolo-forward-visible-line 527,21346
-(defun hyrolo-grep 537,21676
-(defun hyrolo-grep-or-fgrep 615,25327
-(defun hyrolo-hide-subtree 621,25604
-(defun hyrolo-isearch 635,26069
-(defun hyrolo-isearch-regexp 651,26781
-(defun hyrolo-verify 661,27171
-(defun hyrolo-kill 674,27731
-(defun hyrolo-locate 727,29715
-(defun hyrolo-mail-to 732,29892
-(defun hyrolo-next-match 745,30360
-(defun hyrolo-overview 763,31103
-(defun hyrolo-previous-match 779,31754
-(defun hyrolo-prompt 792,32335
-(defun hyrolo-quit 796,32479
-(defun hyrolo-rename 804,32741
-(defun hyrolo-set-display-buffer 831,33860
-(defun hyrolo-sort 838,34072
-(defun hyrolo-sort-level 880,35701
-(defun hyrolo-sort-lines 903,36883
-(defun hyrolo-toggle-datestamps 920,37607
-(defun hyrolo-toggle-narrow-to-entry 935,38336
-(defun hyrolo-top-level 949,38815
-(defun hyrolo-widen 958,39074
-(defun hyrolo-word 964,39260
-(defun hyrolo-yank 990,40580
-(defun hyrolo-bbdb-fgrep 1012,41421
-(defun hyrolo-bbdb-grep 1019,41677
-(defun hyrolo-bbdb-grep-file 1047,42826
-(defun hyrolo-bbdb-entry-format 1062,43655
-(defun hyrolo-google-contacts-fgrep 1071,43994
-(defun hyrolo-google-contacts-grep 1078,44284
-(defun hyrolo-google-contacts-grep-file 1103,45279
-(defun hyrolo-google-contacts-insert-data 1116,46076
-(defun hyrolo-google-contacts-insert-generic-list 1211,51865
-(defun hyrolo-retrieve-google-contacts 1226,52466
-(defun hyrolo-helm-org-rifle 1250,53539
-(defun hyrolo-helm-org-rifle-directory 1273,54503
-(defun hyrolo-helm-org-rifle-directories 1292,55283
-(defun hyrolo-org 1302,55785
-(defun hyrolo-org-roam 1316,56415
-(defun hyrolo-back-to-visible-point 1339,57405
-(defun hyrolo-backward-same-level 1347,57767
-(defun hyrolo-consult-grep 1354,58035
-(defun hyrolo-fgrep-directories 1390,59631
-(defun hyrolo-fgrep-file 1394,59842
-(defun hyrolo-forward-same-level 1408,60554
-(defun hyrolo-grep-directories 1415,60818
-(defun hyrolo-next-regexp-match 1419,61019
-(defun hyrolo-grep-file 1426,61280
-(defun hyrolo-map-level 1526,65182
-(defun hyrolo-map-single-subtree 1563,66960
-(defun hyrolo-mode 1592,67995
-(defun hyrolo-next-visible-heading 1615,68795
-(defun hyrolo-previous-visible-heading 1623,69093
-(defun hyrolo-to 1631,69395
-(defun hyrolo-to-entry-beginning 1683,71503
-(defun hyrolo-to-entry-end 1698,72081
-(defun hyrolo-up-heading 1723,72903
-(defun hyrolo-add-match 1734,73393
-(defun hyrolo-buffer-exists-p 1746,73937
-(defun hyrolo-current-date 1754,74219
-(defun hyrolo-display-to-entry-end 1758,74373
-(defun hyrolo-format-name 1767,74657
-(defun hyrolo-get-consult-version 1774,74971
-(defun hyrolo-highlight-matches 1785,75439
-(defun hyrolo-isearch-for-regexp 1796,75842
-(defun hyrolo-kill-buffer 1807,76334
-(defun hyrolo-name-and-email 1814,76656
-(defun hyrolo-name-at 1849,77851
-(defun hyrolo-save-buffer 1862,78335
-(defun hyrolo-set-date 1870,78720
-(defun hyrolo-min-matched-level 1889,79439
-(defun hyrolo-search-directories 1897,79737
-(defun hyrolo-show-levels 1904,80094
-(defun hyrolo-shrink-window 1941,81498
-(defun hyrolo-to-buffer 1954,81943
-(defun hyrolo-move-backward 1958,82075
-(defun hyrolo-move-forward 1970,82519
-(defun hyrolo-mode-outline-level 1985,82977
-(define-obsolete-variable-alias 'rolo-display-buffer 
rolo-display-buffer2006,83851
-(defvar hyrolo-display-buffer 2007,83936
-(defvar hyrolo-entry-group-number 2010,84041
-(defvar hyrolo-entry-trailing-space-group-number 2014,84178
-(define-obsolete-variable-alias 'rolo-entry-regexp 
rolo-entry-regexp2017,84304
-(defvar hyrolo-entry-regexp 2018,84385
-(defconst hyrolo-hdr-format2037,85223
-(defconst hyrolo-hdr-regexp 2045,85582
-(defconst hyrolo-match-regexp 2050,85793
-(defvar hyrolo--wconfig 2055,86017
-(defvar hyrolo-mode-syntax-table 2058,86110
-(defvar hyrolo-mode-map 2068,86496
+(defgroup hyperbole-rolo 69,2525
+(defcustom hyrolo-date-format 73,2640
+(defvar hyrolo-display-format-function80,2890
+(defcustom hyrolo-email-format 86,3132
+(defvar hyrolo-entry-name-regexp 93,3420
+(defcustom hyrolo-file-suffix-regexp 96,3584
+(defcustom hyrolo-find-file-function 101,3765
+(defcustom hyrolo-find-file-noselect-function 107,4009
+(defcustom hyrolo-google-contacts-flag 112,4195
+(defvar hyrolo-next-match-function 119,4462
+(defun hyrolo-google-contacts-p 147,5732
+(defun hyrolo-initialize-file-list 161,6278
+(define-obsolete-variable-alias 'rolo-file-list rolo-file-list180,7090
+(defcustom hyrolo-file-list 181,7165
+(defcustom hyrolo-highlight-face 194,7634
+(defcustom hyrolo-kill-buffers-after-use 200,7806
+(defcustom hyrolo-save-buffers-after-use 206,8007
+(defvar hyrolo-yank-reformat-function 215,8323
+(defun hyrolo-add 225,8761
+(defun hyrolo-display-matches 356,13860
+(defun hyrolo-edit 388,15162
+(defun hyrolo-edit-entry 434,17080
+(defun hyrolo-fgrep 456,18058
+(defun hyrolo-find-file 494,19996
+(defun hyrolo-find-file-noselect 518,20945
+(defun hyrolo-forward-visible-line 527,21345
+(defun hyrolo-grep 537,21675
+(defun hyrolo-grep-or-fgrep 615,25326
+(defun hyrolo-hide-subtree 621,25603
+(defun hyrolo-isearch 635,26068
+(defun hyrolo-isearch-regexp 651,26780
+(defun hyrolo-verify 661,27170
+(defun hyrolo-kill 674,27730
+(defun hyrolo-locate 727,29714
+(defun hyrolo-mail-to 732,29891
+(defun hyrolo-next-match 745,30353
+(defun hyrolo-overview 763,31096
+(defun hyrolo-previous-match 779,31747
+(defun hyrolo-prompt 792,32328
+(defun hyrolo-quit 796,32472
+(defun hyrolo-rename 804,32734
+(defun hyrolo-set-display-buffer 831,33853
+(defun hyrolo-sort 838,34065
+(defun hyrolo-sort-level 880,35694
+(defun hyrolo-sort-lines 903,36876
+(defun hyrolo-toggle-datestamps 920,37600
+(defun hyrolo-toggle-narrow-to-entry 935,38329
+(defun hyrolo-top-level 949,38808
+(defun hyrolo-widen 958,39067
+(defun hyrolo-word 964,39253
+(defun hyrolo-yank 990,40573
+(defun hyrolo-bbdb-fgrep 1012,41414
+(defun hyrolo-bbdb-grep 1019,41670
+(defun hyrolo-bbdb-grep-file 1047,42819
+(defun hyrolo-bbdb-entry-format 1062,43648
+(defun hyrolo-google-contacts-fgrep 1071,43987
+(defun hyrolo-google-contacts-grep 1078,44277
+(defun hyrolo-google-contacts-grep-file 1103,45272
+(defun hyrolo-google-contacts-insert-data 1116,46069
+(defun hyrolo-google-contacts-insert-generic-list 1211,51858
+(defun hyrolo-retrieve-google-contacts 1226,52459
+(defun hyrolo-helm-org-rifle 1250,53532
+(defun hyrolo-helm-org-rifle-directory 1273,54496
+(defun hyrolo-helm-org-rifle-directories 1292,55276
+(defun hyrolo-org 1302,55778
+(defun hyrolo-org-roam 1316,56408
+(defun hyrolo-back-to-visible-point 1339,57398
+(defun hyrolo-backward-same-level 1347,57760
+(defun hyrolo-consult-grep 1354,58028
+(defun hyrolo-fgrep-directories 1390,59624
+(defun hyrolo-fgrep-file 1394,59835
+(defun hyrolo-forward-same-level 1408,60547
+(defun hyrolo-grep-directories 1415,60811
+(defun hyrolo-next-regexp-match 1419,61012
+(defun hyrolo-grep-file 1426,61273
+(defun hyrolo-map-level 1526,65175
+(defun hyrolo-map-single-subtree 1563,66953
+(defun hyrolo-mode 1592,67988
+(defun hyrolo-next-visible-heading 1615,68788
+(defun hyrolo-previous-visible-heading 1623,69086
+(defun hyrolo-to 1631,69388
+(defun hyrolo-to-entry-beginning 1683,71496
+(defun hyrolo-to-entry-end 1698,72074
+(defun hyrolo-up-heading 1723,72896
+(defun hyrolo-add-match 1734,73386
+(defun hyrolo-buffer-exists-p 1746,73930
+(defun hyrolo-current-date 1754,74212
+(defun hyrolo-display-to-entry-end 1758,74366
+(defun hyrolo-format-name 1767,74650
+(defun hyrolo-get-consult-version 1774,74964
+(defun hyrolo-highlight-matches 1785,75432
+(defun hyrolo-isearch-for-regexp 1796,75835
+(defun hyrolo-kill-buffer 1807,76327
+(defun hyrolo-name-and-email 1814,76649
+(defun hyrolo-name-at 1849,77844
+(defun hyrolo-save-buffer 1862,78328
+(defun hyrolo-set-date 1870,78713
+(defun hyrolo-min-matched-level 1889,79432
+(defun hyrolo-search-directories 1897,79730
+(defun hyrolo-show-levels 1904,80087
+(defun hyrolo-shrink-window 1941,81491
+(defun hyrolo-to-buffer 1954,81936
+(defun hyrolo-move-backward 1958,82068
+(defun hyrolo-move-forward 1970,82512
+(defun hyrolo-mode-outline-level 1985,82970
+(define-obsolete-variable-alias 'rolo-display-buffer 
rolo-display-buffer2006,83844
+(defvar hyrolo-display-buffer 2007,83929
+(defvar hyrolo-entry-group-number 2010,84034
+(defvar hyrolo-entry-trailing-space-group-number 2014,84171
+(define-obsolete-variable-alias 'rolo-entry-regexp 
rolo-entry-regexp2017,84297
+(defvar hyrolo-entry-regexp 2018,84378
+(defconst hyrolo-hdr-format2037,85216
+(defconst hyrolo-hdr-regexp 2045,85575
+(defconst hyrolo-match-regexp 2050,85786
+(defvar hyrolo--wconfig 2055,86010
+(defvar hyrolo-mode-syntax-table 2058,86103
+(defvar hyrolo-mode-map 2068,86489
 
 hywconfig.el,642
 (define-obsolete-variable-alias 'wconfig-ring-max wconfig-ring-max61,2094
@@ -2086,14 +2088,14 @@ kotl/klink.el,470
 (defun klink:create 105,3832
 (defun klink:at-p 145,5569
 (defun klink:set-yank-handler 210,8442
-(defib klink 225,9035
-(defact link-to-kotl 235,9375
-(defun klink:act 271,10796
-(defun klink:parse 280,11132
-(defun klink:replace-label 311,12242
-(defun klink:update-label 325,12724
-(defun klink:yank-handler 338,13278
-(defvar klink:cell-ref-regexp357,14098
+(defib klink 224,9034
+(defact link-to-kotl 233,9338
+(defun klink:act 269,10759
+(defun klink:parse 283,11296
+(defun klink:replace-label 314,12406
+(defun klink:update-label 328,12888
+(defun klink:yank-handler 340,13434
+(defvar klink:cell-ref-regexp359,14254
 
 kotl/kmenu.el,236
 (defconst kotl-menu-common-body28,853
@@ -2517,29 +2519,29 @@ test/hargs-tests.el,122
 (ert-deftest hargs-get-verify-extension-characters 25,551
 (ert-deftest hargs-get-verify-extension-characters-+K 44,1393
 
-test/hbut-tests.el,1328
+test/hbut-tests.el,1299
 (defun hbut-tests:should-match-tmp-folder 28,602
 (ert-deftest ebut-program-link-to-directory 34,873
 (ert-deftest ebut-program-link-to-directory-2 47,1469
 (ert-deftest ebut-program-shell-cmd 57,1975
 (ert-deftest ebut-delete-removes-ebut-and-returns-button-data 67,2397
 (ert-deftest gbut-program-calls-ebut-program 80,2845
-(ert-deftest gbut-program-link-to-directory 91,3361
-(ert-deftest gbut-program-eval-elisp 107,4172
-(ert-deftest gbut-program-link-to-file 120,4778
-(ert-deftest gbut-program-link-to-file-line 133,5406
-(ert-deftest gbut-program-link-to-file-line-and-column 146,6055
-(ert-deftest hypb:program-create-ebut-in-buffer 159,6742
-(ert-deftest hypb:program-create-ebut-in-buffer-with-same-label 167,7127
-(ert-deftest hypb:program-create-link-to-file-line-and-column-but-in-file 
175,7517
-(ert-deftest 
hypb--ebut-at-p-should-not-insert-hbdata-section-in-non-file-buffers 185,8062
-(ert-deftest hbut-tests-ibut-program-link-to-directory 194,8407
-(ert-deftest hbut-tests-ibut-program-link-to-file 200,8655
-(ert-deftest hbut-tests-ibut-insert-text-link-to-dir 211,9072
-(ert-deftest hbut-tests-ibut-insert-annot-bib 223,9525
-(ert-deftest hbut-tests-ibut-insert-kbd-key 244,10211
-(ert-deftest hbut-tests-ibut-insert-text-temp-buffer 255,10570
-(ert-deftest hbut-tests-ibut-insert-text-temp-file 292,12503
+(ert-deftest gbut-program-link-to-directory 91,3355
+(ert-deftest gbut-program-eval-elisp 107,4160
+(ert-deftest gbut-program-link-to-file 120,4760
+(ert-deftest gbut-program-link-to-file-line 133,5382
+(ert-deftest gbut-program-link-to-file-line-and-column 146,6025
+(ert-deftest hypb:program-create-ebut-in-buffer 159,6706
+(ert-deftest hypb:program-create-ebut-in-buffer-with-same-label 167,7091
+(ert-deftest hypb:program-create-link-to-file-line-and-column-but-in-file 
175,7481
+(ert-deftest 
hypb--ebut-at-p-should-not-insert-hbdata-section-in-non-file-buffers 185,8026
+(ert-deftest hbut-tests-ibut-program-link-to-directory 194,8371
+(ert-deftest hbut-tests-ibut-program-link-to-file 200,8619
+(ert-deftest hbut-tests-ibut-insert-text-link-to-dir 211,9036
+(ert-deftest hbut-tests-ibut-insert-annot-bib 223,9489
+(ert-deftest hbut-tests-ibut-insert-kbd-key 246,10241
+(defconst hbut-tests-actypes-list269,10965
+(ert-deftest hbut-tests-ibut-insert-links 293,12348
 
 test/hib-kbd-tests.el,96
 (ert-deftest kbd-key-hy-about-test 28,705
@@ -2568,14 +2570,14 @@ test/hibtypes-tests.el,1254
 (ert-deftest ibtypes::pathname-dot-slash-in-other-folder-test 151,4588
 (ert-deftest ibtypes::pathname-dot-slash-in-same-folder-test 163,4979
 (ert-deftest ibtypes::pathname-directory-test 174,5414
-(ert-deftest ibtypes::annot-bib-test 193,6079
-(ert-deftest ibtypes::ctags-vgrind-test 217,6776
-(ert-deftest ibtypes::etags-test 231,7326
-(ert-deftest ibtypes::text-toc-test 250,7969
-(ert-deftest ibtypes::dir-summary-test 262,8297
-(ert-deftest ibtypes::rfc-test 281,8777
-(ert-deftest ibtypes::man-apropos-test 291,9038
-(ert-deftest ibtypes::info-node-test 326,9447
+(ert-deftest ibtypes::annot-bib-test 190,5948
+(ert-deftest ibtypes::ctags-vgrind-test 214,6637
+(ert-deftest ibtypes::etags-test 228,7187
+(ert-deftest ibtypes::text-toc-test 247,7830
+(ert-deftest ibtypes::dir-summary-test 259,8158
+(ert-deftest ibtypes::rfc-test 278,8638
+(ert-deftest ibtypes::man-apropos-test 288,8899
+(ert-deftest ibtypes::info-node-test 323,9308
 
 test/hmouse-drv-tests.el,2403
 (ert-deftest hbut-defal 28,674
@@ -2680,7 +2682,7 @@ test/hui-select-tests.el,286
 (ert-deftest hui-select--thing 83,2412
 (ert-deftest hui-select--thing-interactive-prints-type-of-match 113,3624
 
-test/hui-tests.el,2719
+test/hui-tests.el,2720
 (ert-deftest hui-gbut-edit-link-to-file-button 36,921
 (ert-deftest hui-ibut-label-create 87,3124
 (ert-deftest hui-ibut-label-create-fails-if-label-exists 96,3403
@@ -2692,37 +2694,37 @@ test/hui-tests.el,2719
 (ert-deftest hui-ebut-create-exec-shell-cmd 172,6807
 (ert-deftest hui-ebut-create-link-to-info-index-using-completion 184,7367
 (ert-deftest hui-gibut-create-link-to-file 198,8074
-(ert-deftest hui-gibut-create-link-to-file-line 211,8662
-(ert-deftest hui-gibut-create-link-to-file-line-and-column 224,9287
-(ert-deftest hui-gibut-create-info-node 237,9948
-(ert-deftest hui--delimited-selectable-thing--in-cell-return-ref 251,10611
-(ert-deftest hui--delimited-selectable-thing--in-ibut-return-ibut-text 
262,11048
-(ert-deftest hui--delimited-selectable-thing--ibut-label-return-ibut-text 
273,11408
-(ert-deftest hui--delimited-selectable-thing--in-ebut-return-ebut-text 
284,11816
-(ert-deftest hui--delimited-selectable-thing--start-of-paired-delimiter 
295,12227
-(ert-deftest hui--delimited-selectable-thing--in-kcell-link-return-link 
307,12664
-(ert-deftest hui--kill-ring-save--yank-in-same-kotl 330,13482
-(ert-deftest hui--kill-ring-save--yank-in-other-kotl 351,14152
-(ert-deftest hui--kill-ring-save--yank-in-other-file 374,14961
-(ert-deftest hui--kill-ring-save--yank-in-other-file-other-dir 397,15756
-(ert-deftest hui--copy-to-register--yank-in-same-kotl 423,16678
-(ert-deftest hui--copy-to-register--yank-in-other-kotl 446,17472
-(ert-deftest hui--copy-to-register--yank-in-other-file 472,18422
-(ert-deftest hui--copy-to-register--yank-in-other-file-other-dir 497,19342
-(ert-deftest hui--kill-ring-save-in-kotl-mode-copies-region 525,20388
-(ert-deftest hui--kill-ring-save-in-kotl-mode-between-cells-fails 539,20891
-(ert-deftest hui--ibut-create-interactive 552,21366
-(ert-deftest hui--ibut-create-interactive-label-using-region 563,21787
-(ert-deftest hui--ibut-create-interactive-add-comment-char 577,22338
-(ert-deftest hui--ibut-create-interactive-create-label 590,22871
-(ert-deftest hui--ibut-rename-label-at-point 603,23357
-(ert-deftest hui--ibut-rename-label 617,23895
-(ert-deftest hui--ibut-rename-label-not-in-buffer-errors 630,24394
-(ert-deftest hui--ebut-rename 642,24820
-(ert-deftest hui--ebut-rename-only-button-with-that-label 650,25129
-(ert-deftest hui--ebut-rename-nonumbered-label 663,25704
-(ert-deftest hui--ebut-rename-numbered-label 676,26253
-(ert-deftest hui--ebut-rename-all-copies 689,26799
+(ert-deftest hui-gibut-create-link-to-file-line 213,8722
+(ert-deftest hui-gibut-create-link-to-file-line-and-column 229,9448
+(ert-deftest hui-gibut-create-info-node 246,10238
+(ert-deftest hui--delimited-selectable-thing--in-cell-return-ref 261,10949
+(ert-deftest hui--delimited-selectable-thing--in-ibut-return-ibut-text 
272,11386
+(ert-deftest hui--delimited-selectable-thing--ibut-label-return-ibut-text 
283,11746
+(ert-deftest hui--delimited-selectable-thing--in-ebut-return-ebut-text 
294,12154
+(ert-deftest hui--delimited-selectable-thing--start-of-paired-delimiter 
305,12565
+(ert-deftest hui--delimited-selectable-thing--in-kcell-link-return-link 
317,13002
+(ert-deftest hui--kill-ring-save--yank-in-same-kotl 340,13820
+(ert-deftest hui--kill-ring-save--yank-in-other-kotl 361,14490
+(ert-deftest hui--kill-ring-save--yank-in-other-file 384,15299
+(ert-deftest hui--kill-ring-save--yank-in-other-file-other-dir 407,16094
+(ert-deftest hui--copy-to-register--yank-in-same-kotl 433,17016
+(ert-deftest hui--copy-to-register--yank-in-other-kotl 456,17810
+(ert-deftest hui--copy-to-register--yank-in-other-file 482,18760
+(ert-deftest hui--copy-to-register--yank-in-other-file-other-dir 507,19680
+(ert-deftest hui--kill-ring-save-in-kotl-mode-copies-region 535,20726
+(ert-deftest hui--kill-ring-save-in-kotl-mode-between-cells-fails 549,21229
+(ert-deftest hui--ibut-create-interactive 562,21704
+(ert-deftest hui--ibut-create-interactive-label-using-region 573,22125
+(ert-deftest hui--ibut-create-interactive-add-comment-char 587,22676
+(ert-deftest hui--ibut-create-interactive-create-label 600,23209
+(ert-deftest hui--ibut-rename-label-at-point 613,23695
+(ert-deftest hui--ibut-rename-label 627,24233
+(ert-deftest hui--ibut-rename-label-not-in-buffer-errors 640,24732
+(ert-deftest hui--ebut-rename 652,25158
+(ert-deftest hui--ebut-rename-only-button-with-that-label 660,25467
+(ert-deftest hui--ebut-rename-nonumbered-label 673,26042
+(ert-deftest hui--ebut-rename-numbered-label 686,26591
+(ert-deftest hui--ebut-rename-all-copies 699,27137
 
 test/hypb-tests.el,88
 (ert-deftest hypb:installation-type-test 26,562
diff --git a/hargs.el b/hargs.el
index 21bfe0de53..f0178a1225 100644
--- a/hargs.el
+++ b/hargs.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    31-Oct-91 at 23:17:35
-;; Last-Mod:     29-May-23 at 02:22:19 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 13:05:33 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -90,14 +90,17 @@ EXCLUDE-REGEXP is compared against the match string with 
its delimiters
 included; any string that matches this regexp is ignored."
   (let* ((opoint (point))
         ;; This initial limit if the forward search limit for start delimiters
-        (limit (if start-regexp-flag opoint
-                 (+ opoint (1- (length start-delim)))))
+        (limit (if start-regexp-flag
+                   opoint
+                 (min (+ opoint (1- (length start-delim)))
+                      (point-max))))
         (start-search-func (if start-regexp-flag 're-search-forward 
'search-forward))
         (end-search-func   (if end-regexp-flag   're-search-forward 
'search-forward))
         (count 0)
         first
         start
         end
+        start-pos
         end-pos
         start-with-delim
         end-with-delim)
@@ -139,12 +142,19 @@ included; any string that matches this regexp is ignored."
       ;; searches when optional matches within a regexp.
       (save-excursion
        (beginning-of-line)
-       (while (and (setq end-pos (funcall start-search-func start-delim limit 
t))
+       (while (and (<= (point) limit)
+                   (setq start-pos (point)
+                         end-pos (funcall start-search-func start-delim limit 
t))
                    ;; Prevent infinite loop where regexp match does not
                    ;; move end-pos forward, e.g. match to bol.
                    (not (eq start end-pos)))
          (setq start-with-delim (match-beginning 0)
-               start (match-end 0)))))
+               start (match-end 0))
+         (when (eq start-pos end-pos)
+           ;; start-delim contains a match for bol, so move point
+           ;; forward a char to prevent loop exit even though start
+           ;; delim matched.
+           (goto-char (min (1+ (point)) (point-max)))))))
 
     (when start
       (save-excursion
diff --git a/hbut.el b/hbut.el
index 440182606f..51e5184114 100644
--- a/hbut.el
+++ b/hbut.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    18-Sep-91 at 02:57:09
-;; Last-Mod:     12-Jun-23 at 22:56:47 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 20:24:44 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -29,6 +29,17 @@
 
 (declare-function www-url "hsys-www" (url))
 
+(defconst hbut:max-len 200
+  "Maximum length of a Hyperbole button label.
+If 0, there is no limit and searches for button end delimiters can go
+as far as the end of the buffer.
+
+Use the function, (hbut:max-len), to read the proper value.")
+
+(defsubst hbut:max-len ()
+  "Return the value of `hbut:max-len' if non-zero else (point-max)."
+  (if (zerop hbut:max-len) (point-max) hbut:max-len))
+
 (defvar hproperty:but-face)
 (defvar hproperty:ibut-face)
 
@@ -899,17 +910,6 @@ others who use a different value!")
 ;;; hbut class - abstract
 ;;; ========================================================================
 
-(defconst hbut:max-len 200
-  "Maximum length of a Hyperbole button label.
-If 0, there is no limit and searches for button end delimiters can go
-as far as the end of the buffer.
-
-Use the function, (hbut:max-len), to read the proper value.")
-
-(defsubst hbut:max-len ()
-  "Return the value of `hbut:max-len' if non-zero else (point-max)."
-  (if (zerop hbut:max-len) (point-max) hbut:max-len))
-
 (defun    hbut:act (&optional hbut)
   "Perform action for optional explicit or implicit Hyperbole button symbol 
HBUT.
 Default is the symbol hbut:current."
@@ -1630,12 +1630,19 @@ associated arguments from the button."
          (funcall ibut-type-symbol))))))
 
 (defun  ibut:set-name-and-label-key-p (&optional start-delim end-delim)
-  "Set hbut:current name, lbl-key, lbl-start and lbl-end ibut attributes.
+  "Set ibut name, lbl-key, lbl-start/end attributes in 'hbut:current.
 Point may be on the implicit button text or its optional preceding
-name.  Return t if on an implicit button or nil otherwise.
+name.  Return t if on a named or delimited text implicit button;
+return nil otherwise.
+
+Optional START-DELIM and END-DELIM may be given to find the
+button text (not name); without these, try a series of matching
+delimiters (double quotes, angle brackets, braces and square
+brackets).
 
-Optional START-DELIM and END-DELIM may be given to find the button text
-\(not name); without these, try a series of matching delimiters.
+This will not set the 'name attribute unless there is a <[name]>
+prefix.  This will not set the 'lbl-key or the 'lbl-end location
+attribute unless the button text is delimited.
 
 Any implicit button name must contain at least two characters,
 excluding delimiters, not just one."
@@ -1652,28 +1659,30 @@ excluding delimiters, not just one."
          ;; Skip past any optional name and separators
          (when name-end
            (goto-char name-end)
-           (hattr:set 'hbut:current 'lbl-start
-                      (if (looking-at ibut:label-separator-regexp)
-                          (progn
-                            ;; Move past up to 2 possible characters of ibut
-                            ;; delimiters; this prevents recognizing named,
-                            ;; delimited ibuts of a single character since no 
one
-                            ;; should need that.
-                            (goto-char (min (+ 2 (match-end 0)) (point-max)))
-                            (match-end 0))
-                        (prog1 (point)
-                          (goto-char opoint)))))
+           (setq lbl-start (if (looking-at ibut:label-separator-regexp)
+                               (progn
+                                 ;; Move past up to 2 possible characters of 
ibut
+                                 ;; delimiters; this prevents recognizing 
named,
+                                 ;; delimited ibuts of a single character 
since no one
+                                 ;; should need that.
+                                 (goto-char (min (+ 2 (match-end 0)) 
(point-max)))
+                                 (match-end 0))
+                             (prog1 (point)
+                               (goto-char opoint))))
+           (hattr:set 'hbut:current 'lbl-start lbl-start))
 
          (setq lbl-start-end (if (and start-delim end-delim)
                                  (ibut:label-p nil start-delim end-delim t t)
                                (or (ibut:label-p nil "\"" "\"" t t)
                                    (ibut:label-p nil "<" ">" t t)
                                    (ibut:label-p nil "{" "}" t t)
-                                   (ibut:label-p nil "[" "]" t t)))
-               lbl-key (nth 0 lbl-start-end)
-               lbl-start (nth 1 lbl-start-end)
-               lbl-end (nth 2 lbl-start-end))
-         (when lbl-end
+                                   (ibut:label-p nil "[" "]" t t))))
+         (when lbl-start-end
+           (setq lbl-key (nth 0 lbl-start-end)
+                 lbl-start (nth 1 lbl-start-end)
+                 lbl-end (nth 2 lbl-start-end)))
+         (when lbl-start
+           (hattr:set 'hbut:current 'categ 'implicit)
            (hattr:set 'hbut:current 'lbl-key lbl-key)
            (hattr:set 'hbut:current 'lbl-start lbl-start)
            (hattr:set 'hbut:current 'lbl-end lbl-end))
@@ -1690,10 +1699,10 @@ excluding delimiters, not just one."
                    name           (nth 0 name-start-end)
                    name-end       (nth 2 name-start-end))))
 
-         (when (and lbl-end name-end)
+         (when (and lbl-start name-end)
            (hattr:set 'hbut:current 'name name))
 
-         (when lbl-end
+         (when lbl-start
            t))
       (goto-char opoint))))
 
@@ -1917,7 +1926,7 @@ Return symbol for button deleted or nil."
        but-sym))))
 
 (defun    ibut:delimit (start end instance-flag)
-  "Delimit implicit button label spanning region START to END in current 
buffer.
+  "Delimit implicit button name spanning region START to END in current buffer.
 If button is already delimited or delimit fails, return nil, else t.
 Insert INSTANCE-FLAG after END, before ending delimiter."
   (goto-char start)
@@ -2019,17 +2028,26 @@ lines."
   (unless end-delim
     (setq end-delim ibut:label-end))
 
-  (with-syntax-table hbut:syntax-table
-    (if (or (string-prefix-p "<" start-delim)
-           (string-suffix-p ">" end-delim))
-       (ebut:label-p as-label start-delim end-delim
-                     pos-flag two-lines-flag)
-      ;; When delims do not end with <>, then filter out matches
-      ;; that are surrounded by angle brackets, e.g. [str] should
-      ;; not match to occurrences of <[str]>.
-      (hargs:delimited (concat "<?" (regexp-quote start-delim))
-                      (concat (regexp-quote end-delim) ">?")
-                      t t pos-flag "\\`<.*>\\'" (not as-label)))))
+  (let ((lbl)
+       (result (with-syntax-table hbut:syntax-table
+                 (if (or (string-prefix-p "<" start-delim)
+                         (string-suffix-p ">" end-delim))
+                     (ebut:label-p as-label start-delim end-delim
+                                   pos-flag two-lines-flag)
+                   ;; When delims do not end with <>, then filter out matches
+                   ;; that are surrounded by angle brackets, e.g. [str] should
+                   ;; not match to occurrences of <[str]>.
+                   (hargs:delimited (concat "<?" (regexp-quote start-delim))
+                                    (concat (regexp-quote end-delim) ">?")
+                                    t t pos-flag "\\`<.*>\\'" (not 
as-label))))))
+    (when result
+      (setq lbl (if (listp result) (car result) result))
+      ;; Ensure match does not contain delimiters, as it may have run
+      ;; past the beginning of another button.
+      (unless (string-match (concat (regexp-quote start-delim) "\\|"
+                                   (regexp-quote end-delim))
+                           lbl)
+       result))))
 
 (defun    ibut:label-regexp (lbl-key &optional no-delim)
   "Unnormalize ibutton LBL-KEY.
@@ -2048,8 +2066,10 @@ Optional NO-DELIM leaves off delimiters, leading and 
trailing space."
 Get attributes from LABEL and optional START, END positions.
 Return label.  When START and END are given, they specify the
 region in the buffer to flash when this implicit button is
-activated or queried for its attributes.  If LABEL is a list, it
-is assumed to contain all arguments.
+activated or queried for its attributes; this typically should
+be the text of the button without any delimiters.
+
+If LABEL is a list, it is assumed to contain all arguments.
 
 For legacy reasons, the label here is actually the text of the
 implicit button matched contextually and never the optional <[name]>
@@ -2167,7 +2187,7 @@ Summary of operations based on inputs:
 | nil   | nil      | region | create/update: region named ibut               |
 | aname | newname  | nil    | mod: rename aname to newname                   |
 | aname | newname  | region | mod: rename aname to newname (skip region)     |
-| nil   | newname  | nil    | mod: add newname to lbl-key ibut               |
+| nil   | newname  | nil    | mod: add newname to lbl-key ibut at point      |
 | nil   | newname  | region | mod: add newname to lbl-key ibut (skip region) |
 |-------+----------+--------+------------------------------------------------|"
   ;; !! TODO: Code does not yet fully match what is in docstring table
@@ -2208,38 +2228,41 @@ Summary of operations based on inputs:
                    ibut:label-start name ibut:label-end
                    (buffer-name))))
     (cond (modify
-           ;; Rename all occurrences of button - those with same name
-           (let* ((but-key-and-pos (ibut:label-p nil nil nil 'pos))
-                  (at-but (equal (car but-key-and-pos)
-                                 (ibut:label-to-key new-name))))
-             (when at-but
-               (ibut:delimit (nth 1 but-key-and-pos)
-                             (nth 2 but-key-and-pos)
-                             instance-flag))
-             (cond ((ibut:map
-                     (lambda (_lbl start end)
-                       (delete-region start end)
-                       (ibut:delimit
-                        (point)
-                        (progn (insert new-name) (point))
-                        instance-flag))
-                     name-regexp 'include-delims))
-                   (at-but)
-                   ((hypb:error "(ibut:operate): No button matching: %s" 
name)))))
+          (if name
+              ;; Rename all occurrences of button - those with same name
+              (let* ((but-key-and-pos (ibut:label-p nil nil nil 'pos))
+                     (at-but (equal (car but-key-and-pos)
+                                    (ibut:label-to-key new-name))))
+                (when at-but
+                  (ibut:delimit (nth 1 but-key-and-pos)
+                                (nth 2 but-key-and-pos)
+                                instance-flag))
+                (cond ((ibut:map
+                        (lambda (_lbl start end)
+                          (delete-region start end)
+                          (ibut:delimit
+                           (point)
+                           (progn (insert new-name) (point))
+                           instance-flag))
+                        name-regexp 'include-delims))
+                      (at-but)
+                      ((hypb:error "(ibut:operate): No button matching: %s" 
name))))
+            ;; Add new-name to nameless button at point
+            (goto-char (or (hattr:get 'hbut:current 'lbl-start) (point)))
+            (ibut:delimit (point)
+                          (progn (insert new-name) (point))
+                          instance-flag)))
 
          (instance-flag
-          ;; Above flag is 't when only one instance of the name
+          ;; Above flag is 't when there is exactly one existing
+          ;; instance of the button name
           ;;
           ;; Add a new implicit button in the buffer, recording its
-          ;; start and end positions
+          ;; start and end positions; new-name is always nil here
           (let (start end mark prev-point buf-lbl)
-            (cond ((not (and name new-name))
+            (cond ((not (or name region-flag))
                    ;; No name to insert, just insert ibutton text below
                    )
-                  ((and (not name) new-name)
-                   (setq start (point))
-                   (insert new-name)
-                   (setq end (point)))
                   ((and region-flag
                         (if (hyperb:stack-frame
                              '(hui:ebut-create hui:ebut-edit 
hui:ebut-edit-region
@@ -2307,7 +2330,8 @@ Summary of operations based on inputs:
 
     (let ((lbl-key (hattr:get 'hbut:current 'lbl-key)))
       (unless lbl-key
-       (when (or (ibut:set-name-and-label-key-p)
+       (when (or (and (ibut:set-name-and-label-key-p)
+                      (hattr:get 'hbut:current 'lbl-key))
                  (ibut:at-p)) ;; Sets lbl-key for non-delimited ibtypes
          (setq lbl-key (hattr:get 'hbut:current 'lbl-key))))
       (unless (and (stringp lbl-key) (not (string-empty-p lbl-key)))
@@ -2321,8 +2345,11 @@ Summary of operations based on inputs:
   "Space, delimit and insert the activatable text of IBUT."
   (when (not (string-empty-p (or (hattr:get ibut 'name) "")))
     (insert ibut:label-separator))
-  (let* ((actype (actype:elisp-symbol (or (hattr:get ibut 'actype)
-                                         (hattr:get ibut 'categ))))
+  (let* ((orig-actype (or (hattr:get ibut 'actype)
+                         (hattr:get ibut 'categ)))
+        (actype (or (actype:elisp-symbol orig-actype)
+                    (and (symbolp orig-actype) (fboundp orig-actype)
+                         orig-actype)))
         (args   (hattr:get ibut 'args))
         (arg1   (nth 0 args))
         (arg2   (nth 1 args))
@@ -2346,11 +2373,22 @@ Summary of operations based on inputs:
       ('actypes::link-to-ibut (progn (insert "<ilink:" arg1)
                                     (when arg2 (insert ": " arg2))
                                     (insert ">")))
-      ('actypes::link-to-kcell (progn (insert "<@ ") (when arg1 (insert arg1))
-                                     (when arg2 (insert ", " arg2))
-                                     (insert ">")))
+      ('actypes::link-to-kcell
+       (if arg2
+          (progn (insert "<")
+                 (when arg1 (insert arg1))
+                 (insert ", " arg2 ">"))
+        (insert "<@ ")
+        (when arg1 (insert arg1))
+        (insert ">")))
+      ((or 'actypes::link-to-kotl 'klink:act)
+       (when (stringp arg1)
+        (if (string-prefix-p "<" arg1)
+            (insert arg1)
+          (insert "<" arg1 ">"))))
       ('actypes::link-to-org-id (insert (format "\"id:%s\"" arg1)))
       ('actypes::link-to-rfc (insert (format "rfc%d" arg1)))
+      ('man (insert arg1))
       ('actypes::man-show (insert arg1))
       ('actypes::link-to-file-line (insert (format "\"%s:%d\""
                                                   (hpath:substitute-var arg1) 
arg2)))
@@ -2368,6 +2406,7 @@ Summary of operations based on inputs:
                                             (hpath:substitute-var arg1)
                                             (line-number-at-pos (point) t)
                                             (current-column)))))))
+      ('nil (error "(ibut:insert-text): actype must be a Hyperbole actype or 
Lisp function symbol, not '%s'" orig-actype))
       ;; Generic action button type                                            
      
       (_ (insert (format "<%s%s%s>" actype (if args " " "")
                         (if args (hypb:format-args args) "")))))))
@@ -2398,24 +2437,22 @@ the button NAME which is automatically provided as the 
first argument.
 
 For interactive creation, use `hui:ibut-create' instead."
   (save-excursion
-     (let ((but-buf (current-buffer))
-          (actype-sym (actype:action actype)))
+    (let ((but-buf (current-buffer))
+         (actype-sym (actype:action actype)))
       (hui:buf-writable-err but-buf "ibut-create")
+      (hattr:clear 'hbut:current)
+      (hattr:set 'hbut:current 'name name)
+      (hattr:set 'hbut:current 'categ 'implicit)
+      (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
+      (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
+      (if (or (and actype-sym (fboundp actype-sym))
+             (functionp actype))
+         (hattr:set 'hbut:current 'actype actype)
+       (error (format "actype arg must be a bound symbol (not a string): %S" 
actype)))
+      (hattr:set 'hbut:current 'args args)
       (condition-case err
-         (progn
-           (hattr:clear 'hbut:current)
-           (hattr:set 'hbut:current 'name name)
-           (hattr:set 'hbut:current 'categ 'implicit)
-           (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
-           (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
-            (if (or (and actype-sym (fboundp actype-sym))
-                   (functionp actype))
-               (hattr:set 'hbut:current 'actype actype)
-             (error (format "actype arg must be a bound symbol (not a string): 
%S" actype)))
-           (hattr:set 'hbut:current 'args args)
-           (ibut:operate))
-       (error (hattr:clear 'hbut:current)
-              (error "(ibut:program): name: %S actype: %S args: %S - %S" name 
actype args err))))))
+         (ibut:operate)
+       (error "(ibut:program): name: %S actype: %S args: %S - %S" name actype 
args err)))))
 
 (defun    ibut:rename (old-lbl new-lbl)
   "Change an implicit button name in the current buffer from OLD-LBL to 
NEW-LBL.
diff --git a/hibtypes.el b/hibtypes.el
index aba38268c0..3651c32554 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    19-Sep-91 at 20:45:31
-;; Last-Mod:     10-Jun-23 at 20:47:06 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 14:07:11 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -725,7 +725,9 @@ Requires the Emacs builtin Tramp library for ftp file 
retrievals."
                (skip-chars-backward "rRfFcC")
                (looking-at " *\\(rfc[- ]?\\([0-9]+\\)\\)")))
          (progn (setq rfc-num (match-string-no-properties 2))
-                (ibut:label-set (match-string-no-properties 1))
+                (ibut:label-set (match-string-no-properties 1)
+                               (match-beginning 1)
+                               (match-end 1))
                 t)
          ;; Ensure remote file access is available for retrieving a remote
          ;; RFC, if need be.
@@ -753,6 +755,9 @@ Requires the Emacs builtin Tramp library for ftp file 
retrievals."
            (setq topic (concat (match-string-no-properties 3)
                                (match-string-no-properties 4)))
            (ibut:label-set topic (match-beginning 3) (match-end 4))
+          ;; Use 'man' instead of 'actypes::man-show' in next line so
+          ;; can follow cross-references within the same window when
+          ;; Hyperbole is set to display other referents in another window.
            (hact 'man topic)))))
 
 ;;; ========================================================================
diff --git a/hpath.el b/hpath.el
index f47901582c..cdf0e5b996 100644
--- a/hpath.el
+++ b/hpath.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:     1-Nov-91 at 00:44:23
-;; Last-Mod:     28-May-23 at 16:53:34 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 13:03:28 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -1096,45 +1096,46 @@ Absolute pathnames must begin with a `/' or `~'.
 
 With optional INCLUDE-POSITIONS, return a triplet list of (path start-pos
 end-pos) or nil."
-  ;; Prevents MSWindows to Posix path substitution
-  (let ((hyperb:microsoft-os-p t))
-    (or (hargs:delimited "file://" "\\s-" nil t include-positions)
-       ;; Filenames in HTML
-       (hargs:delimited "&quot;" "&quot;" nil nil include-positions "[`'’]")
-       ;; Embedded double quoted filenames
-       (hargs:delimited "\\\"" "\\\"" nil nil include-positions "[`'’]")
-       ;; Double quoted filenames
-       (hargs:delimited "\"" "\"" nil nil include-positions "[`'’]")
-       ;; Filenames in Info docs or Python files
-       (hargs:delimited "[`'‘]" "[`'’]" t t include-positions "\"")
-       ;; Filenames in TexInfo docs
-       (hargs:delimited "@file{" "}" nil nil include-positions)
-       ;; if `non-exist' is nil, look for any existing whitespace
-       ;; delimited filename at point.  If match consists of only
-       ;; punctuation, like . or .., don't treat it as a pathname.
-       ;; In shell modes, it must be tab delimited.
-       (unless non-exist
-         (let* ((space-delimiter (if (derived-mode-p #'shell-mode)
-                                     "\t"
-                                   "[ \t]"))
-                (triplet (hargs:delimited (format 
"^\\|\\(%s\\|[\]\[()<>\;&,@]\\)+"
-                                                  space-delimiter)
-                                          "\\([\]\[()<>\;&,@]\\|:*\\s-\\)+\\|$"
-                                          t t t))
-                (p (car triplet))
-                (punc (char-syntax ?.)))
-           ;; May have matched to a string with an embedded double
-           ;; quote or surrounded by braces; if so, don't consider it a path.
-            ;; Also ignore whitespace delimited root dirs, e.g. " / ".
-           (when (and (stringp p) (not (string-match-p 
"\\`{.*}\\'\\|\"\\|\\`[/\\]+\\'" p))
-                      (delq nil (mapcar (lambda (c) (/= punc (char-syntax c))) 
p)))
-             ;; Prepend proper directory from cd, ls *, recursive ls or dir 
file
-             ;; listings when needed.
-             (setq p (or (hpath:prepend-shell-directory p) p))
-             (setcar triplet p)
-             (if include-positions
-                 triplet
-               p)))))))
+  (unless (eolp)
+    ;; Prevents MSWindows to Posix path substitution
+    (let ((hyperb:microsoft-os-p t))
+      (or (hargs:delimited "file://" "\\s-" nil t include-positions)
+         ;; Filenames in HTML
+         (hargs:delimited "&quot;" "&quot;" nil nil include-positions "[`'’]")
+         ;; Embedded double quoted filenames
+         (hargs:delimited "\\\"" "\\\"" nil nil include-positions "[`'’]")
+         ;; Double quoted filenames
+         (hargs:delimited "\"" "\"" nil nil include-positions "[`'’]")
+         ;; Filenames in Info docs or Python files
+         (hargs:delimited "[`'‘]" "[`'’]" t t include-positions "\"")
+         ;; Filenames in TexInfo docs
+         (hargs:delimited "@file{" "}" nil nil include-positions)
+         ;; if `non-exist' is nil, look for any existing whitespace
+         ;; delimited filename at point.  If match consists of punctuation
+         ;; only, like . or .., don't treat it as a pathname.
+         ;; In shell modes, it must be tab delimited.
+         (unless non-exist
+           (let* ((space-delimiter (if (derived-mode-p #'shell-mode)
+                                       "\t"
+                                     "[ \t]"))
+                  (triplet (hargs:delimited (format 
"^\\|\\(%s\\|[\]\[()<>\;&,@]\\)+"
+                                                    space-delimiter)
+                                            
"\\([\]\[()<>\;&,@]\\|:*\\s-\\)+\\|$"
+                                            t t t))
+                  (p (car triplet))
+                  (punc (char-syntax ?.)))
+             ;; May have matched to a string with an embedded double
+             ;; quote or surrounded by braces; if so, don't consider it a path.
+              ;; Also ignore whitespace delimited root dirs, e.g. " / ".
+             (when (and (stringp p) (not (string-match-p 
"\\`{.*}\\'\\|\"\\|\\`[/\\]+\\'" p))
+                        (delq nil (mapcar (lambda (c) (/= punc (char-syntax 
c))) p)))
+               ;; Prepend proper directory from cd, ls *, recursive ls or dir 
file
+               ;; listings when needed.
+               (setq p (or (hpath:prepend-shell-directory p) p))
+               (setcar triplet p)
+               (if include-positions
+                   triplet
+                 p))))))))
 
 ;;;###autoload
 (defun hpath:display-buffer (buffer &optional display-where)
diff --git a/hui-mouse.el b/hui-mouse.el
index 09f53a6cb7..29e3a1d6b8 100644
--- a/hui-mouse.el
+++ b/hui-mouse.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    04-Feb-89
-;; Last-Mod:     10-Jun-23 at 18:38:57 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 21:14:33 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -536,6 +536,9 @@ When the Action Mouse Key or Assist Mouse Key is pressed, 
the first or second
 form, respectively, associated with the first non-nil predicate is
 evaluated.
 
+The function `hmouse-alist-add-window-handlers' adds the mouse context
+handlers to this variable.
+
 The `hkey-alist' variable is the subset of this alist used by the
 smart keyboard keys.")
 
diff --git a/hui-window.el b/hui-window.el
index 96c7edd7ef..0ef1ad9e98 100644
--- a/hui-window.el
+++ b/hui-window.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    21-Sep-92
-;; Last-Mod:     21-May-23 at 12:09:22 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 21:42:39 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -144,6 +144,7 @@ and release to register a diagonal drag.")
 
 (defvar hmouse-alist)
 (defun hmouse-alist-add-window-handlers ()
+  "Add Smart Mouse Key drag actions to `hmouse-alist'."
   (unless (assoc #'(hmouse-inactive-minibuffer-p) hmouse-alist)
     (setq hmouse-alist
          (append
@@ -162,11 +163,15 @@ and release to register a diagonal drag.")
             ;;   ((and (hmouse-modeline-depress) (hmouse-drag-between-frames)) 
.
             ;;    ((hmouse-clone-window-to-frame) . 
(hmouse-move-window-to-frame)))
             ;;
-            ;; Drag from within a window (not a Modeline) with release on a 
Modeline
-            ((and (not (hmouse-modeline-depress)) (hmouse-modeline-release)
-                  (not (hmouse-modeline-click)))
-             . ((or (hmouse-drag-item-to-display t) (hmouse-buffer-to-window 
t))
-                . (hmouse-swap-buffers)))
+            ;; Drag from an item to display (not a Modeline) with release on a 
Modeline
+            ((and (setq hkey-value (and (not (hmouse-modeline-depress))
+                                        (hmouse-modeline-release)
+                                        (not (hmouse-modeline-click))))
+                  (hmouse-at-item-p action-key-depress-window))
+             . ((hmouse-item-to-window t) . (hmouse-swap-buffers)))
+            ;; Drag from within a window (not a Modeline and not an item) with 
release on a Modeline
+            (hkey-value
+             . ((hmouse-buffer-to-window t) . (hmouse-swap-buffers)))
             ;; Non-vertical Modeline drag between windows
             ((and (hmouse-modeline-depress) (hmouse-drag-between-windows)
                   (not (hmouse-drag-vertically-within-emacs)))
@@ -899,7 +904,7 @@ item, this moves the menu buffer itself to the release 
location."
          (smart-helm-to-minibuffer)))))
 
 (defun action-key-modeline ()
-  "Handles Action Key depresses on a window mode line.
+  "Handle Action Key depresses on a window mode line.
 If the Action Key is:
  (1) clicked on the first blank character of a window's modeline,
      the window's buffer is buried (placed at bottom of buffer list);
@@ -934,7 +939,7 @@ If the Action Key is:
            (t (funcall action-key-modeline-function))))))
 
 (defun assist-key-modeline ()
-  "Handles Assist Key depresses on a window mode line.
+  "Handle Assist Key depresses on a window mode line.
 If the Assist Key is:
  (1) clicked on the first blank character of a window's modeline,
      bottom buffer in buffer list is unburied and placed in window;
@@ -1127,7 +1132,7 @@ release must be."
         (>= (- window-right last-release-x) 0))))
 
 (defun hmouse-resize-window-side ()
-  "Resizes window whose side was depressed on by the last Smart Key.
+  "Resize window whose side was depressed on by the last Smart Key.
 Resize amount depends upon the horizontal difference between press and release
 of the Smart Key."
   (cond ((hyperb:window-system)
@@ -1163,7 +1168,7 @@ of the Smart Key."
                 (select-window owind))))))))
 
 (defun hmouse-swap-buffers ()
-  "Swaps buffers in windows selected with the last Smart Key depress and 
release."
+  "Swap buffers in windows selected with the last Smart Key depress and 
release."
   (let* ((w1 (if assist-flag assist-key-depress-window
               action-key-depress-window))
         (w2 (if assist-flag assist-key-release-window
@@ -1214,17 +1219,17 @@ of the Smart Key."
             (funcall (cdr (assoc (hyperb:window-system)
                                  '(("emacs" . (lambda (args)
                                                 (when (eventp args) (setq args 
(event-start args)))
-                                                  (cond
-                                                   ((posnp args)
-                                                    (let ((w-or-f (posn-window 
args)))
-                                                      (when (framep w-or-f)
-                                                        (setq w-or-f 
(frame-selected-window w-or-f)))
-                                                      (+ (condition-case ()
-                                                             (car 
(posn-col-row args))
-                                                           (error 0))
-                                                         (nth 0 (window-edges 
w-or-f)))))
-                                                   (t (car args)))))
-                                ("next"   .  (lambda (args) (nth 1 args))))))
+                                                (cond
+                                                 ((posnp args)
+                                                  (let ((w-or-f (posn-window 
args)))
+                                                    (when (framep w-or-f)
+                                                      (setq w-or-f 
(frame-selected-window w-or-f)))
+                                                    (+ (condition-case ()
+                                                           (car (posn-col-row 
args))
+                                                         (error 0))
+                                                       (nth 0 (window-edges 
w-or-f)))))
+                                                 (t (car args)))))
+                                   ("next"   .  (lambda (args) (nth 1 
args))))))
                      args))))
     (when (integerp x)
       x)))
@@ -1234,15 +1239,15 @@ of the Smart Key."
   (let ((y (funcall (cdr (assoc (hyperb:window-system)
                                '(("emacs" . (lambda (args)
                                               (when (eventp args) (setq args 
(event-start args)))
-                                                   (cond ((posnp args)
-                                                          (let ((w-or-f 
(posn-window args)))
-                                                            (when (framep 
w-or-f)
-                                                              (setq w-or-f 
(frame-selected-window w-or-f)))
-                                                            (+ (condition-case 
()
-                                                                   (cdr 
(posn-col-row args))
-                                                                 (error 0))
-                                                               (nth 1 
(window-edges w-or-f)))))
-                                                         (t (cdr args)))))
+                                              (cond ((posnp args)
+                                                     (let ((w-or-f 
(posn-window args)))
+                                                       (when (framep w-or-f)
+                                                         (setq w-or-f 
(frame-selected-window w-or-f)))
+                                                       (+ (condition-case ()
+                                                              (cdr 
(posn-col-row args))
+                                                            (error 0))
+                                                          (nth 1 (window-edges 
w-or-f)))))
+                                                    (t (cdr args)))))
                                  ("next"   .  (lambda (args) (nth 2 args))))))
                    args)))
     (when (integerp y)
diff --git a/hui.el b/hui.el
index 2e591c1d41..1e2895648b 100644
--- a/hui.el
+++ b/hui.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    19-Sep-91 at 21:42:03
-;; Last-Mod:     11-Jun-23 at 21:13:08 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 21:37:51 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -1134,7 +1134,11 @@ If ibutton exists at point, replace it with the new link 
button.
 
 With optional DEPRESS-WINDOW and RELEASE-WINDOW, use the points
 from those instead.  See also documentation for
-`hui:link-possible-types'."
+`hui:link-possible-types'.
+
+An Assist Mouse Key drag between windows runs this command.
+Alternatively, to swap buffers between two windows, Assist Mouse Key
+drag from a window to another window's modeline."
   (interactive (hmouse-choose-windows #'hui:link))
   (let ((but-window (or depress-window action-key-depress-window))
        (referent-window (or release-window action-key-release-window 
(selected-window)))
diff --git a/kotl/klink.el b/kotl/klink.el
index 06445fa6e1..a4371afd97 100644
--- a/kotl/klink.el
+++ b/kotl/klink.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    15-Nov-93 at 12:15:16
-;; Last-Mod:     10-Jun-23 at 20:48:59 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 16:50:34 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -267,15 +267,18 @@ See documentation for `kcell:ref-to-id' for valid 
cell-ref formats."
 ;;; ************************************************************************
 
 (defun klink:act (link start-pos)
-  "Jump to klink LINK's referent.
-Update relative part of klink if referent has moved."
+  "Jump to klink LINK's referent at START-POS.
+Update relative part of klink if its referent has moved.
+
+See `actypes::link-to-kotl' for valid LINK formats."
   (let ((obuf (current-buffer)))
     ;; Perform klink's action which is to jump to link referent.
     (prog1 (hact 'link-to-kotl link)
-      (save-excursion
-       ;; Update klink label if need be, which might be in a different buffer
-       ;; than the current one.
-       (klink:update-label link start-pos obuf)))))
+      (when (derived-mode-p #'kotl-mode)
+       (save-excursion
+         ;; Update klink label if need be, which might be in a different buffer
+         ;; than the current one.
+         (klink:update-label link start-pos obuf))))))
 
 (defun klink:parse (reference)
   "Return (file-ref cell-ref) list parsed from REFERENCE string.
@@ -325,14 +328,13 @@ See documentation for `kcell:ref-to-id' for valid 
cell-ref formats."
 (defun klink:update-label (klink start link-buf)
   "Update label of KLINK if its relative cell id has changed.
 Assume point is in klink referent buffer, where the klink points."
-  (if (and (stringp klink)
-          (string-match
-           "[@,]\\s-*\\([*0-9][*.0-9a-zA-Z]*\\)\\s-*=\\s-*0[0-9]*"
-           klink))
-      ;; Then klink has both relative and permanent ids.
-      (let* ((label (match-string 1 klink))
-            (new-label (kcell-view:label)))
-         (if (and new-label (not (equal label new-label)))
+  (and (stringp klink)
+       (string-match "[@,]\\s-*\\([*0-9][*.0-9a-zA-Z]*\\)\\s-*=\\s-*0[0-9]*"
+                    klink)
+       ;; Then klink has both relative and permanent ids.
+       (let* ((label (match-string 1 klink))
+             (new-label (kcell-view:label)))
+        (and new-label (not (equal label new-label))
              (klink:replace-label klink link-buf start new-label)))))
 
 (defun klink:yank-handler (klink)
diff --git a/test/hbut-tests.el b/test/hbut-tests.el
index 56dd53921e..183dcf7ce6 100644
--- a/test/hbut-tests.el
+++ b/test/hbut-tests.el
@@ -3,7 +3,7 @@
 ;; Author:       Mats Lidell <matsl@gnu.org>
 ;;
 ;; Orig-Date:    30-may-21 at 09:33:00
-;; Last-Mod:     11-Jun-23 at 21:39:38 by Bob Weiner
+;; Last-Mod:     17-Jun-23 at 20:45:39 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -79,8 +79,8 @@ Needed since hyperbole expands all links to absolute paths and
 
 (ert-deftest gbut-program-calls-ebut-program ()
   "Programatically create gbut calls ebut:program."
-  (let ((test-file (make-temp-file "test-file")))
-    (setq test-buffer (find-file-noselect test-file))
+  (let* ((test-file (make-temp-file "test-file"))
+        (test-buffer (find-file-noselect test-file)))
     (unwind-protect
         (with-mock
           (mock (hpath:find-noselect (expand-file-name hbmap:filename 
hbmap:dir-user)) => test-buffer)
@@ -90,8 +90,8 @@ Needed since hyperbole expands all links to absolute paths and
 
 (ert-deftest gbut-program-link-to-directory ()
   "Programatically create gbut with link-to-directory."
-  (let ((test-file (make-temp-file "gbut" nil ".txt")))
-    (setq test-buffer (find-file-noselect test-file))
+  (let* ((test-file (make-temp-file "gbut" nil ".txt"))
+        (test-buffer (find-file-noselect test-file)))
     (unwind-protect
        (progn
           (with-mock
@@ -106,8 +106,8 @@ Needed since hyperbole expands all links to absolute paths 
and
 
 (ert-deftest gbut-program-eval-elisp ()
   "Programatically create gbut with eval-elisp."
-  (let ((test-file (make-temp-file "gbut" nil ".txt")))
-    (setq test-buffer (find-file-noselect test-file))
+  (let* ((test-file (make-temp-file "gbut" nil ".txt"))
+        (test-buffer (find-file-noselect test-file)))
     (unwind-protect
        (progn
           (with-mock
@@ -119,8 +119,8 @@ Needed since hyperbole expands all links to absolute paths 
and
 
 (ert-deftest gbut-program-link-to-file ()
   "Programatically create gbut with eval-elisp."
-  (let ((test-file (make-temp-file "gbut" nil ".txt")))
-    (setq test-buffer (find-file-noselect test-file))
+  (let* ((test-file (make-temp-file "gbut" nil ".txt"))
+        (test-buffer (find-file-noselect test-file)))
     (unwind-protect
        (progn
           (with-mock
@@ -132,8 +132,8 @@ Needed since hyperbole expands all links to absolute paths 
and
 
 (ert-deftest gbut-program-link-to-file-line ()
   "Programatically create gbut with eval-elisp."
-  (let ((test-file (make-temp-file "gbut" nil ".txt")))
-    (setq test-buffer (find-file-noselect test-file))
+  (let* ((test-file (make-temp-file "gbut" nil ".txt"))
+        (test-buffer (find-file-noselect test-file)))
     (unwind-protect
        (progn
           (with-mock
@@ -145,8 +145,8 @@ Needed since hyperbole expands all links to absolute paths 
and
 
 (ert-deftest gbut-program-link-to-file-line-and-column ()
   "Programatically create gbut with eval-elisp."
-  (let ((test-file (make-temp-file "gbut" nil ".txt")))
-    (setq test-buffer (find-file-noselect test-file))
+  (let* ((test-file (make-temp-file "gbut" nil ".txt"))
+        (test-buffer (find-file-noselect test-file)))
     (unwind-protect
        (progn
           (with-mock
@@ -223,8 +223,7 @@ Needed since hyperbole expands all links to absolute paths 
and
 (ert-deftest hbut-tests-ibut-insert-annot-bib ()
   "Insert ibut to annot-bib, which must be attached to a file."
   (let ((annot-bib-file (make-temp-file "annot-bib" nil ".txt"))
-       annot-bib-buf
-       but)
+       annot-bib-buf)
     (unwind-protect
         (progn
          ;; Test with name
@@ -247,8 +246,7 @@ Needed since hyperbole expands all links to absolute paths 
and
 (ert-deftest hbut-tests-ibut-insert-kbd-key ()
   "Insert ibut to kbd-key."
   (let ((kbd-key-file (make-temp-file "kbd-key" nil ".txt"))
-       kbd-key-buf
-       but)
+       kbd-key-buf)
     (unwind-protect
         (progn
          ;; Test with name
@@ -268,65 +266,76 @@ Needed since hyperbole expands all links to absolute 
paths and
       (kill-buffer kbd-key-buf)
       (hy-test-helpers:kill-buffer kbd-key-file))))
 
-(ert-deftest hbut-tests-ibut-insert-text-temp-buffer ()
-  "Insert ibut text using an ibut in a temp buffer as source."
-  (dolist (bd
-           ;; Test data is in the format:
-           ;;  (action-type expected-implicit-button-text &rest 
implicit-button-args)
-           '(
-             (actypes::kbd-key "{C-h h}" "C-h h")
-             ; (actypes::annotate-bib "[FSF 12]" nil) ;; Requires a file!?
-             ; (actypes::exec-shell-cmd "!/bin/bash" nil) ;; Not identified as 
an ibut
-             ; (actypes::exec-window-cmd "&/bin/bash" nil) ;; Not identified 
as an ibut
-             (actypes::link-to-gbut "<glink:arg1>" "arg1")
-             (actypes::link-to-ebut "<elink:arg1>" "arg1")
-             (actypes::link-to-ebut "<elink:arg1: arg2>" "arg1" "arg2")
-             (actypes::link-to-ibut "<ilink:arg1>" "arg1")
-             (actypes::link-to-ibut "<ilink:arg1: arg2>" "arg1" "arg2")
-             (actypes::link-to-kcell "<@ 3b=06>" "3b=06")
-
-             ;; Verified manually. Produces nil when run by ert!?
-             ; (actypes::link-to-kcell "<EXAMPLE.kotl, 4=012>" "<nil 
EXAMPLE.kotl, 4=012 13>")
-
-             ; (actypes::link-to-org-id "id:arg1") ;; Can links to org id be 
created using text only?
-             ; (actypes::man-show "rm(1)       - remove")
-             (actypes::link-to-file "\"/etc/passwd\"" "/etc/passwd")
-             (actypes::link-to-file-line "\"/etc/passwd:10\"" "/etc/passwd" 10)
-             (actypes::link-to-rfc "rfc123" 123)))
-    (with-temp-buffer
-      (apply #'ibut:program nil (car bd) (cddr bd))
-      (goto-char 3)
-      (should (string= (cadr bd) (buffer-string))))))
-
-(ert-deftest hbut-tests-ibut-insert-text-temp-file ()
-  "Insert ibut text using an ibut in a temp file as source."
-  (dolist (bd
-           ;; Test data is in the format:
-           ;;  (action-type expected-implicit-button-text &rest 
implicit-button-args)
-           '(
-             (actypes::kbd-key "<[label]> - {C-h h}" "C-h h")
-             ; (actypes::annotate-bib "<[label]> - [FSF 12]" nil) ;; Requires 
a file!?
-             ; (actypes::exec-shell-cmd "<[label]> - !/bin/bash" "!/bin/bash") 
;; Not identified as an ibut
-             ; (actypes::exec-window-cmd "<[label]> - &/bin/bash" 
"&/bin/bash") ;; Not identified as an ibut
-             (actypes::link-to-gbut "<[label]> - <glink:arg1>" "arg1")
-             (actypes::link-to-ebut "<[label]> - <elink:arg1>" "arg1")
-             (actypes::link-to-ebut "<[label]> - <elink:arg1: arg2>" "arg1" 
"arg2")
-             (actypes::link-to-ibut "<[label]> - <ilink:arg1>" "arg1")
-             (actypes::link-to-ibut "<[label]> - <ilink:arg1: arg2>" "arg1" 
"arg2")
-             (actypes::link-to-kcell "<[label]> - <@ 3b=06>" "3b=06")
-
-             ;; Verified manually. Produces nil when run by ert!?
-             ; (actypes::link-to-kcell "<[label]> - <EXAMPLE.kotl, 4=012>" 
"<nil EXAMPLE.kotl, 4=012 13>")
-
-             ; (actypes::link-to-org-id "<[label]> - id:arg1") ;; Can links to 
org id be created using text only?
-             ; (actypes::man-show "<[label]> - rm(1)   - remove")
-             (actypes::link-to-file "<[label]> - \"/etc/passwd\"" 
"/etc/passwd")
-             (actypes::link-to-file-line "<[label]> - \"/etc/passwd:10\"" 
"/etc/passwd" 10)
-             (actypes::link-to-rfc "<[label]> - rfc123" 123)))
-    (with-temp-file "hypb.txt"
-      (apply #'ibut:program "label" (car bd) (cddr bd))
-      (goto-char 3)
-      (should (string= (cadr bd) (buffer-string))))))
+(defconst hbut-tests-actypes-list
+  '(
+    ;; Would have to create a file with a valid Org ID in it to test this:
+    ;; (actypes::link-to-org-id "id:arg1")
+    ;;
+    ;; Use the DEMO file to test this, as it requires a file
+    ;; (actypes::annotate-bib "[FSF 12]" nil)
+    ;;
+    (ibtypes::klink actypes::link-to-kotl "<~/EXAMPLE.kotl, 3b=06>" 
"<~/EXAMPLE.kotl, 3b=06>")
+    (ibtypes::man-apropos man "rm(1) - remove" "rm(1) - remove")
+    (ibtypes::pathname actypes::exec-shell-cmd "\"!/bin/bash\"" "/bin/bash")
+    (ibtypes::pathname actypes::exec-window-cmd "\"&/bin/bash\"" "/bin/bash")
+    (ibtypes::kbd-key actypes::kbd-key "{C-h h}" "C-h h")
+    (ibtypes::glink actypes::link-to-gbut "<glink:arg1>" "arg1")
+    (ibtypes::elink actypes::link-to-ebut "<elink:arg1>" "arg1")
+    (ibtypes::elink actypes::link-to-ebut "<elink:arg1: arg2>" "arg1" "arg2")
+    (ibtypes::ilink actypes::link-to-ibut "<ilink:arg1>" "arg1")
+    (ibtypes::ilink actypes::link-to-ibut "<ilink:arg1: arg2>" "arg1" "arg2")
+    (ibtypes::pathname actypes::link-to-file "\"/etc/passwd\"" "/etc/passwd")
+    (ibtypes::pathname-line-and-column actypes::link-to-file-line 
"\"/etc/passwd:10\"" "/etc/passwd" 10)
+    (ibtypes::rfc actypes::link-to-rfc "rfc123" 123))
+  "hbut actypes test list is in the format:
+     (implicit-button-type action-type expected-implicit-button-text &rest 
implicit-button-args)")
+
+(ert-deftest hbut-tests-ibut-insert-links ()
+  "Test that `ibut:program' correctly inserts many types of link ibuttons."
+
+  ;; Needed for actypes::link-to-kotl test below
+  (save-window-excursion
+    (kotl-mode:example)
+    (bury-buffer))
+
+  (let ((name)
+       (body '(let ((expected-ibut-string))
+                (apply #'ibut:program name (nth 1 bd) (cdddr bd))
+                (goto-char 3)
+                (setq expected-ibut-string (nth 2 bd))
+                (when name
+                  (setq expected-ibut-string (format "<[%s]> - %s" name 
expected-ibut-string)))
+                (should (string-equal expected-ibut-string (buffer-string)))
+                (should (ibut:at-p))
+                (let ((ibtype (hattr:get 'hbut:current 'categ))
+                      (actype (hattr:get 'hbut:current 'actype))
+                      (expected-ibtype (nth 0 bd))
+                      (expected-actype (nth 1 bd))
+                      (args (hattr:get 'hbut:current 'args))
+                      (hrule:action #'actype:identity))
+                  ;; Certain actypes call hact with a different actype within
+                  ;; their bodies; this captures the final actype executed,
+                  ;; which is the one we compare against.
+                  (when (memq actype '(actypes::link-to-file klink:act))
+                    (save-excursion
+                      (apply #'actype:act actype args)
+                      (setq actype (hattr:get 'hbut:current 'actype))))
+                  ;; These shoulds show the value of these variables when you
+                  ;; use the {l} command on failure, allowing quick debugging.
+                  (should expected-ibtype)
+                  (should expected-actype)
+                  (should actype)
+                  (should (or args t))
+                  (should (eq ibtype expected-ibtype)
+                          (should (or (eq actype expected-actype)
+                                      (eq (actype:elisp-symbol actype) 
expected-actype))))))))
+
+    `(dolist (bd ,hbut-tests-actypes-list)
+       (with-temp-buffer ,@body))
+
+    (setq name "name")
+    `(dolist (bd ,hbut-tests-actypes-list)
+       (with-temp-file "hypb.txt" ,@body))))
 
 ;; This file can't be byte-compiled without the `el-mock' package (because of
 ;; the use of the `with-mock' macro), which is not a dependency of Hyperbole.
diff --git a/test/hibtypes-tests.el b/test/hibtypes-tests.el
index 8ff0b0b9c6..ea453da2f4 100644
--- a/test/hibtypes-tests.el
+++ b/test/hibtypes-tests.el
@@ -186,18 +186,15 @@
                 (buffer-live-p visited-buf))
        (kill-buffer visited-buf)))))
 
-;; !! Todo: XEmacs has a library to jump to a function definition in the 
current buffer.
-;; What is the equivalent GNU Emacs one?
-
 ;; ibtypes::annot-bib
 (ert-deftest ibtypes::annot-bib-test ()
   (unwind-protect
       (progn
         (hypb:display-file-with-logo "DEMO")
-        (re-search-forward "\\[FSF 19\\]")
+        (re-search-forward "\\[FSF 19\\]" nil t 2)
         (backward-char 1)
-        (ibtypes::annot-bib)
-        (should (looking-at "\\[FSF 19\\] Free Software Foundation"))
+       (should (ibut:at-p))
+        (should (looking-at "\\] Free Software Foundation"))
         (forward-line -2)
         (should (looking-at "\\* References")))
     (kill-buffer "DEMO")))
diff --git a/test/hui-tests.el b/test/hui-tests.el
index 50d9599794..262279eb0f 100644
--- a/test/hui-tests.el
+++ b/test/hui-tests.el
@@ -205,33 +205,42 @@ Ensure modifying the button but keeping the label does 
not create a double label
             (mock (hpath:find-noselect (gbut:file)) => test-buffer)
             (hui:gibut-create "global" test-file))
          (with-current-buffer test-buffer
-            (hy-test-helpers-verify-hattr-at-p :actype 'actypes::link-to-file 
:args (list test-file) :loc test-file :lbl-key "global")))
+            (hy-test-helpers-verify-hattr-at-p :actype 'actypes::link-to-file 
:args (list test-file) :loc test-file
+                                              :lbl-key (ibut:label-to-key 
test-file)
+                                              :name "global")))
       (delete-file test-file))))
 
 (ert-deftest hui-gibut-create-link-to-file-line ()
   "Programatically create implicit button link to file and line."
-  (let ((test-file (make-temp-file "gbut" nil ".txt")))
+  (let* ((test-file (make-temp-file "gbut" nil ".txt"))
+        (file-and-line-num (concat test-file ":10")))
     (setq test-buffer (find-file-noselect test-file))
     (unwind-protect
        (progn
           (with-mock
             (mock (hpath:find-noselect (gbut:file)) => test-buffer)
-            (hui:gibut-create "global" (concat test-file ":10")))
+            (hui:gibut-create "global" file-and-line-num))
          (with-current-buffer test-buffer
-            (hy-test-helpers-verify-hattr-at-p :actype 
'actypes::link-to-file-line :args (list test-file 10) :loc test-file :lbl-key 
"global")))
+            (hy-test-helpers-verify-hattr-at-p :actype 
'actypes::link-to-file-line :args (list test-file 10) :loc test-file
+                                              :lbl-key (ibut:label-to-key 
test-file)
+                                              :name "global")))
       (delete-file test-file))))
 
 (ert-deftest hui-gibut-create-link-to-file-line-and-column ()
   "Programatically create implicit button link to file, line and column."
-  (let ((test-file (make-temp-file "gbut" nil ".txt")))
+  (let* ((test-file (make-temp-file "gbut" nil ".txt"))
+        (file-and-line-num-col-num (concat test-file ":10:20")))
     (setq test-buffer (find-file-noselect test-file))
     (unwind-protect
        (progn
           (with-mock
             (mock (hpath:find-noselect (gbut:file)) => test-buffer)
-            (hui:gibut-create "global" (concat test-file ":10:20")))
+            (hui:gibut-create "global" file-and-line-num-col-num))
          (with-current-buffer test-buffer
-            (hy-test-helpers-verify-hattr-at-p :actype 
'actypes::link-to-file-line-and-column :args (list test-file 10 20) :loc 
test-file :lbl-key "global")))
+            (hy-test-helpers-verify-hattr-at-p :actype 
'actypes::link-to-file-line-and-column
+                                              :args (list test-file 10 20) 
:loc test-file
+                                              :lbl-key (ibut:label-to-key 
test-file)
+                                              :name "global")))
       (delete-file test-file))))
 
 (ert-deftest hui-gibut-create-info-node ()
@@ -245,7 +254,8 @@ Ensure modifying the button but keeping the label does not 
create a double label
             (mock (hpath:find-noselect (gbut:file)) => test-buffer)
             (hui:gibut-create "global" (concat "\"" info-node "\"")))
          (with-current-buffer test-buffer
-            (hy-test-helpers-verify-hattr-at-p :actype 
'actypes::link-to-Info-node :args (list info-node) :loc test-file :lbl-key 
"global")))
+            (hy-test-helpers-verify-hattr-at-p :actype 
'actypes::link-to-Info-node :args (list info-node) :loc test-file
+                                              :lbl-key (ibut:label-to-key 
info-node) :name "global")))
       (delete-file test-file))))
 
 (ert-deftest hui--delimited-selectable-thing--in-cell-return-ref ()
diff --git a/test/hy-test-helpers.el b/test/hy-test-helpers.el
index f0a5a9beff..dbcfd2f795 100644
--- a/test/hy-test-helpers.el
+++ b/test/hy-test-helpers.el
@@ -59,14 +59,15 @@
   (when (get-buffer buffer)
     (kill-buffer buffer)))
 
-(cl-defun hy-test-helpers-verify-hattr-at-p (&key actype args loc lbl-key)
+(cl-defun hy-test-helpers-verify-hattr-at-p (&key actype args loc lbl-key name)
   "Verify the attribute of hbut at point.
 Checks ACTYPE, ARGS, LOC and LBL-KEY."
   (let ((hbut-at-p (hbut:at-p)))
     (should (eq (hattr:get hbut-at-p 'actype) actype))
     (should (equal (hattr:get hbut-at-p 'args) args))
     (should (equal (hattr:get hbut-at-p 'loc) loc))
-    (should (equal (hattr:get hbut-at-p 'lbl-key) lbl-key))))
+    (should (equal (hattr:get hbut-at-p 'lbl-key) lbl-key))
+    (should (equal (hattr:get hbut-at-p 'name) name))))
 
 (provide 'hy-test-helpers)
 ;;; hy-test-helpers.el ends here



reply via email to

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