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

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

[elpa] externals/hyperbole f7f3265d50: Fixes for direct link creation, p


From: ELPA Syncer
Subject: [elpa] externals/hyperbole f7f3265d50: Fixes for direct link creation, path handling and org-id buttons (#382)
Date: Sat, 2 Sep 2023 18:57:58 -0400 (EDT)

branch: externals/hyperbole
commit f7f3265d50a79af93c387e921122adb359c358fc
Author: Robert Weiner <rsw@gnu.org>
Commit: GitHub <noreply@github.com>

    Fixes for direct link creation, path handling and org-id buttons (#382)
---
 ChangeLog     |  27 +++
 TAGS          | 648 +++++++++++++++++++++++++++++-----------------------------
 hargs.el      |   7 +-
 hbut.el       |  57 +++---
 hibtypes.el   |  19 +-
 hmouse-tag.el |   4 +-
 hpath.el      |  76 +++----
 hui.el        | 242 ++++++++++++----------
 8 files changed, 575 insertions(+), 505 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9a1b4bf18e..faf42dda3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,32 @@
+2023-08-29  Bob Weiner  <rsw@gnu.org>
+
+* hbut.el (ibut:operate): Fix to ensure point is within button after
+    name deletion or new button insertion.
+
+* hui.el (hui:ibut-link-directly, hui:ebut-link-directly,
+         hui:gbut-link-directly): Start by clearing 'hbut:current
+    attributes.
+
 2023-08-28  Bob Weiner  <rsw@gnu.org>
 
+* hargs.el (hargs:delimited): Fix to add full length (rather than -1)
+    chars of opening delimiter to search forward limit so match to
+    opening delimiters when point is immediately before.
+
+* hbut.el (ibut:create): Fix to move point within ibut text only if
+    found a matching ibut at point.  If point is in front of the text
+    delimiter and no name, don't move point.
+
+* hpath.el (hpath:at-p): Fix to not send a string with "::" in it to
+    'file-readable-p' which will trigger a no read method found error
+    otherwise.  Also, return nil if path is an empty string.
+
+* hibtypes.el (org-id): Tighten match to just Org ID characters and restore
+    buffer mode to prior mode when necessary after 'org-id-find' switches
+    it to Org mode.
+
+* hui.el (hui:ibut-link-create): Fix to handle name attributes properly.
+
 * hargs.el (hargs:iform-read): Reset global 'hargs:defaults' to nil when not to
     prevent errant values in any future calls.
 
diff --git a/TAGS b/TAGS
index 0a0a77dc21..208602f43e 100644
--- a/TAGS
+++ b/TAGS
@@ -100,26 +100,26 @@ hargs.el,997
 (defun hargs:action-get 72,2719
 (defun hargs:buffer-substring 84,3257
 (defun hargs:delimited 94,3810
-(defun hargs:get 216,8784
-(defmacro hargs:make-iform-vector 253,10357
-(defun hargs:match-p 281,11516
-(defun hargs:prompt 292,12051
-(defun hargs:select-event-window 301,12366
-(defun hargs:set-string-to-complete 311,12807
-(defun hargs:unset-string-to-complete 318,13144
-(defun hargs:sexpression-p 322,13279
-(defun hargs:actype-get 350,14462
-(defun hargs:at-p 357,14767
-(defun hargs:completion 542,22029
-(defun hargs:iform-read 616,24574
-(defun hargs:read 691,27413
-(defun hargs:read-buffer-name 733,29044
-(defun hargs:read-match 738,29231
-(defun hargs:select-p 772,30629
-(defvar hargs:reading-symbol 865,34041
-(defconst hargs:iform-vector868,34116
-(defconst hargs:iform-extensions-vector974,37633
-(defvar hargs:string-to-complete 1020,39400
+(defun hargs:get 217,8828
+(defmacro hargs:make-iform-vector 254,10401
+(defun hargs:match-p 282,11560
+(defun hargs:prompt 293,12095
+(defun hargs:select-event-window 302,12410
+(defun hargs:set-string-to-complete 312,12851
+(defun hargs:unset-string-to-complete 319,13188
+(defun hargs:sexpression-p 323,13323
+(defun hargs:actype-get 351,14506
+(defun hargs:at-p 358,14811
+(defun hargs:completion 543,22073
+(defun hargs:iform-read 617,24618
+(defun hargs:read 692,27457
+(defun hargs:read-buffer-name 734,29088
+(defun hargs:read-match 739,29275
+(defun hargs:select-p 773,30673
+(defvar hargs:reading-symbol 866,34085
+(defconst hargs:iform-vector869,34160
+(defconst hargs:iform-extensions-vector975,37677
+(defvar hargs:string-to-complete 1021,39444
 
 hbdata.el,879
 (defun hbdata:action 77,3183
@@ -159,155 +159,155 @@ hbmap.el,259
 (defvar hbmap:dir-filename120,4405
 
 hbut.el,5801
-(defconst hbut:max-len 33,1059
-(defsubst hbut:max-len 40,1300
-(defvar   ebut:hattr-save 55,1885
-(defun    ebut:act 59,2002
-(defun    ebut:alist 70,2404
-(defun    ebut:at-p 76,2625
-(defun    ebut:create 83,2932
-(defun    ebut:delete 105,3933
-(defun    ebut:edit 118,4401
-(defun    ebut:get 131,4932
-(defun    ebut:is-p 200,7455
-(defun    ebut:key 205,7643
-(defun    ebut:key-of-label-p 212,7881
-(defalias 'ebut:to-key-src ebut:to-key-src217,8087
-(defalias 'ebut:key-src-set-buffer ebut:key-src-set-buffer218,8141
-(defalias 'ebut:key-src-fmt ebut:key-src-fmt219,8203
-(defalias 'ebut:key-to-label ebut:key-to-label220,8258
-(defun    ebut:label-p 224,8340
-(defalias 'ebut:label-regexp ebut:label-regexp287,10913
-(defalias 'ebut:label-instances-regexp ebut:label-instances-regexp288,10973
-(defalias 'ebut:label-to-key ebut:label-to-key290,11044
-(defun    ebut:list 292,11095
-(defalias 'map-ebut map-ebut314,11937
-(defun    ebut:map 316,11970
-(defun    ebut:next-occurrence 326,12461
-(defun    ebut:operate 341,13140
-(defun    ebut:program 450,17338
-(defun    ebut:search 481,18771
-(defun    ebut:to 560,21423
-(defun    ebut:delimit 596,22796
-(defun    ebut:match-regexp 623,23864
-(defconst ebut:label-start 634,24304
-(defconst ebut:label-end 636,24405
-(defconst hbut:instance-sep 638,24504
-(defun    gbut:act 645,24844
-(defun    gbut:delete 660,25459
-(defun    gbut:ebut-program 665,25682
-(defun    gbut:file 685,26573
-(defun    gbut:get 689,26731
-(defun    gbut:help 701,27145
-(defun    gbut:label-list 712,27568
-(defun    gbut:label-p 716,27687
-(defun    gbut:to 731,28502
-(defun    gbut:key-list 749,29159
-(defun    gbut:ebut-key-list 753,29285
-(defun    gbut:ibut-key-list 767,29746
-(defun    hattr:attributes 780,30255
-(defun    hattr:clear 790,30560
-(defun    hattr:copy 801,30936
-(defun    hattr:emacs-button-attributes 812,31326
-(defun    hattr:emacs-button-is-p 825,31819
-(defun    hattr:get 832,32108
-(defun    hattr:list 836,32242
-(defun    hattr:memq 844,32519
-(defun    hattr:report 856,32950
-(defun    hattr:save 884,33976
-(defun    hattr:set 902,34828
-(defalias 'hattr:summarize hattr:summarize906,35007
-(defvar   hattr:filename908,35051
-(defun    hbut:act 918,35484
-(defun    hbut:action 980,38181
-(defun    hbut:at-p 991,38517
-(defun    hbut:comment 1004,38917
-(defvar   hbut:fill-prefix-regexps1037,40144
-(defun    hbut:fill-prefix-remove 1061,40992
-(defun    hbut:delete 1071,41384
-(defun    hbut:funcall 1086,42017
-(defun    hbut:get 1116,43239
-(defun    hbut:get-key-src 1127,43767
-(defun    hbut:is-p 1185,46054
-(defun    hbut:key 1190,46213
-(defun    hbut:to-key-src 1197,46433
-(defun    hbut:key-src-fmt 1204,46752
-(defun    hbut:key-src-set-buffer 1220,47402
-(defun    hbut:key-to-label 1242,48101
-(defun    hbut:label 1263,48785
-(defun    hbut:label-list 1270,49031
-(defun    hbut:label-p 1274,49185
-(defun    hbut:label-regexp 1287,49960
-(defun    hbut:label-instances-regexp 1317,50989
-(defun    hbut:label-to-key 1352,52228
-(defun    hbut:map 1365,52818
-(defvar   hbut:syntax-table 1423,55019
-(defun    hbut:modify-syntax 1429,55289
-(defun    hbut:outside-comment-p 1444,55916
-(defun    hbut:rename 1452,56276
-(defun    hbut:report 1463,56682
-(defun    hbut:source 1522,58616
-(defalias 'hbut:summarize hbut:summarize1537,59189
-(defun    hbut:to 1539,59231
-(defvar   hbut:current 1546,59559
-(defconst hbut:source-prefix 1549,59664
-(defun    hbut:key-list 1556,59995
-(defun    hbut:ebut-key-list 1560,60160
-(defun    hbut:ibut-key-list 1575,60685
-(defun    ibut:act 1589,61228
-(defun    ibut:alist 1600,61634
-(defun    ibut:at-p 1606,61863
-(defun    ibut:at-type-p 1625,62680
-(defun    ibut:set-name-and-label-key-p 1639,63290
-(cl-defun ibut:create 1733,66804
-(def-edebug-spec cl-defun1919,73243
-(def-edebug-spec lambda-key-list1924,73390
-(defun    ibut:delete 1933,73613
-(defun    ibut:delete-occurrence 1965,74785
-(defun    ibut:delimit 1974,75112
-(defun    ibut:get 2004,76304
-(defun    ibut:is-p 2026,77121
-(defun    ibut:label-map 2034,77414
-(defun    ibut:label-key-match 2046,78003
-(defun    ibut:label-p 2056,78396
-(defun    ibut:label-regexp 2101,80401
-(defun    ibut:label-instances-regexp 2107,80692
-(defun    ibut:label-set 2113,81020
-(defun    ibut:label-sort-keys 2137,82111
-(defun    ibut:list 2156,82741
-(defun    ibut:key 2178,83592
-(defalias 'ibut:to-key-src ibut:to-key-src2185,83835
-(defalias 'ibut:key-to-label ibut:key-to-label2186,83883
-(defalias 'ibut:label-to-key ibut:label-to-key2187,83933
-(defalias 'map-ibut map-ibut2188,83983
-(defun    ibut:map 2190,84025
-(defun    ibut:next-occurrence 2202,84516
-(defun    ibut:operate 2217,85261
-(defun ibut:org-at-read-only-p 2420,94654
-(defun    ibut:insert-text 2439,95198
-(defun    ibut:previous-occurrence 2520,98521
-(defun    ibut:program 2535,99252
-(defun    ibut:rename 2579,101355
-(defalias 'ibut:summarize ibut:summarize2601,102374
-(defun    ibut:to 2603,102416
-(defun    ibut:at-to-name-p 2651,104217
-(defun    ibut:to-name 2675,105015
-(defun    ibut:to-text 2708,106327
-(defconst ibut:label-start 2759,108380
-(defconst ibut:label-end 2761,108481
-(defvar   ibut:label-separator 2764,108581
-(defvar   ibut:label-separator-regexp 2772,108898
-(defmacro defib 2779,109238
-(def-edebug-spec defib2814,110875
-(def-edebug-spec lambda-list2819,111015
-(defalias 'ibtype:create ibtype:create2824,111133
-(defun    ibtype:activate-link 2826,111168
-(defmacro defil 2838,111620
-(defmacro defal 2935,115958
-(defalias 'ibtype:create-action-link-type 
ibtype:create-action-link-type2991,118127
-(defalias 'ibtype:create-regexp-link-type 
ibtype:create-regexp-link-type2992,118178
-(defun    ibtype:def-symbol 2994,118230
-(defun    ibtype:delete 3004,118587
+(defconst hbut:max-len 33,1060
+(defsubst hbut:max-len 40,1301
+(defvar   ebut:hattr-save 55,1886
+(defun    ebut:act 59,2003
+(defun    ebut:alist 70,2405
+(defun    ebut:at-p 76,2626
+(defun    ebut:create 83,2933
+(defun    ebut:delete 105,3934
+(defun    ebut:edit 118,4402
+(defun    ebut:get 131,4933
+(defun    ebut:is-p 200,7456
+(defun    ebut:key 205,7644
+(defun    ebut:key-of-label-p 212,7882
+(defalias 'ebut:to-key-src ebut:to-key-src217,8088
+(defalias 'ebut:key-src-set-buffer ebut:key-src-set-buffer218,8142
+(defalias 'ebut:key-src-fmt ebut:key-src-fmt219,8204
+(defalias 'ebut:key-to-label ebut:key-to-label220,8259
+(defun    ebut:label-p 224,8341
+(defalias 'ebut:label-regexp ebut:label-regexp287,10914
+(defalias 'ebut:label-instances-regexp ebut:label-instances-regexp288,10974
+(defalias 'ebut:label-to-key ebut:label-to-key290,11045
+(defun    ebut:list 292,11096
+(defalias 'map-ebut map-ebut314,11938
+(defun    ebut:map 316,11971
+(defun    ebut:next-occurrence 326,12462
+(defun    ebut:operate 341,13141
+(defun    ebut:program 450,17339
+(defun    ebut:search 481,18772
+(defun    ebut:to 560,21424
+(defun    ebut:delimit 596,22797
+(defun    ebut:match-regexp 623,23865
+(defconst ebut:label-start 634,24305
+(defconst ebut:label-end 636,24406
+(defconst hbut:instance-sep 638,24505
+(defun    gbut:act 645,24845
+(defun    gbut:delete 660,25460
+(defun    gbut:ebut-program 665,25683
+(defun    gbut:file 685,26574
+(defun    gbut:get 689,26732
+(defun    gbut:help 701,27146
+(defun    gbut:label-list 712,27569
+(defun    gbut:label-p 716,27688
+(defun    gbut:to 731,28503
+(defun    gbut:key-list 749,29160
+(defun    gbut:ebut-key-list 753,29286
+(defun    gbut:ibut-key-list 767,29747
+(defun    hattr:attributes 780,30256
+(defun    hattr:clear 790,30561
+(defun    hattr:copy 801,30937
+(defun    hattr:emacs-button-attributes 812,31327
+(defun    hattr:emacs-button-is-p 825,31820
+(defun    hattr:get 832,32109
+(defun    hattr:list 836,32243
+(defun    hattr:memq 844,32520
+(defun    hattr:report 856,32951
+(defun    hattr:save 884,33977
+(defun    hattr:set 902,34829
+(defalias 'hattr:summarize hattr:summarize906,35008
+(defvar   hattr:filename908,35052
+(defun    hbut:act 918,35485
+(defun    hbut:action 980,38182
+(defun    hbut:at-p 991,38518
+(defun    hbut:comment 1004,38918
+(defvar   hbut:fill-prefix-regexps1037,40145
+(defun    hbut:fill-prefix-remove 1061,40993
+(defun    hbut:delete 1071,41385
+(defun    hbut:funcall 1086,42018
+(defun    hbut:get 1116,43240
+(defun    hbut:get-key-src 1127,43768
+(defun    hbut:is-p 1185,46055
+(defun    hbut:key 1190,46214
+(defun    hbut:to-key-src 1197,46434
+(defun    hbut:key-src-fmt 1204,46753
+(defun    hbut:key-src-set-buffer 1220,47403
+(defun    hbut:key-to-label 1242,48102
+(defun    hbut:label 1263,48786
+(defun    hbut:label-list 1270,49032
+(defun    hbut:label-p 1274,49186
+(defun    hbut:label-regexp 1287,49961
+(defun    hbut:label-instances-regexp 1317,50990
+(defun    hbut:label-to-key 1352,52229
+(defun    hbut:map 1365,52819
+(defvar   hbut:syntax-table 1423,55020
+(defun    hbut:modify-syntax 1429,55290
+(defun    hbut:outside-comment-p 1444,55917
+(defun    hbut:rename 1452,56277
+(defun    hbut:report 1463,56683
+(defun    hbut:source 1522,58617
+(defalias 'hbut:summarize hbut:summarize1537,59190
+(defun    hbut:to 1539,59232
+(defvar   hbut:current 1546,59560
+(defconst hbut:source-prefix 1549,59665
+(defun    hbut:key-list 1556,59996
+(defun    hbut:ebut-key-list 1560,60161
+(defun    hbut:ibut-key-list 1575,60686
+(defun    ibut:act 1589,61229
+(defun    ibut:alist 1600,61635
+(defun    ibut:at-p 1606,61864
+(defun    ibut:at-type-p 1625,62681
+(defun    ibut:set-name-and-label-key-p 1639,63291
+(cl-defun ibut:create 1733,66805
+(def-edebug-spec cl-defun1918,73147
+(def-edebug-spec lambda-key-list1923,73294
+(defun    ibut:delete 1932,73517
+(defun    ibut:delete-occurrence 1964,74689
+(defun    ibut:delimit 1973,75016
+(defun    ibut:get 2003,76208
+(defun    ibut:is-p 2025,77025
+(defun    ibut:label-map 2033,77318
+(defun    ibut:label-key-match 2045,77907
+(defun    ibut:label-p 2056,78336
+(defun    ibut:label-regexp 2101,80341
+(defun    ibut:label-instances-regexp 2107,80632
+(defun    ibut:label-set 2113,80960
+(defun    ibut:label-sort-keys 2137,82051
+(defun    ibut:list 2156,82681
+(defun    ibut:key 2178,83532
+(defalias 'ibut:to-key-src ibut:to-key-src2185,83775
+(defalias 'ibut:key-to-label ibut:key-to-label2186,83823
+(defalias 'ibut:label-to-key ibut:label-to-key2187,83873
+(defalias 'map-ibut map-ibut2188,83923
+(defun    ibut:map 2190,83965
+(defun    ibut:next-occurrence 2202,84456
+(defun    ibut:operate 2217,85201
+(defun ibut:org-at-read-only-p 2424,94729
+(defun    ibut:insert-text 2443,95273
+(defun    ibut:previous-occurrence 2527,98694
+(defun    ibut:program 2542,99425
+(defun    ibut:rename 2586,101528
+(defalias 'ibut:summarize ibut:summarize2608,102547
+(defun    ibut:to 2610,102589
+(defun    ibut:at-to-name-p 2658,104390
+(defun    ibut:to-name 2682,105188
+(defun    ibut:to-text 2715,106500
+(defconst ibut:label-start 2766,108553
+(defconst ibut:label-end 2768,108654
+(defvar   ibut:label-separator 2771,108754
+(defvar   ibut:label-separator-regexp 2779,109071
+(defmacro defib 2786,109411
+(def-edebug-spec defib2821,111048
+(def-edebug-spec lambda-list2826,111188
+(defalias 'ibtype:create ibtype:create2831,111306
+(defun    ibtype:activate-link 2833,111341
+(defmacro defil 2845,111793
+(defmacro defal 2942,116131
+(defalias 'ibtype:create-action-link-type 
ibtype:create-action-link-type2998,118300
+(defalias 'ibtype:create-regexp-link-type 
ibtype:create-regexp-link-type2999,118351
+(defun    ibtype:def-symbol 3001,118403
+(defun    ibtype:delete 3011,118760
 
 hgnus.el,110
 (defun Gnus-init 54,1683
@@ -412,53 +412,53 @@ hib-social.el,1373
 hibtypes.el,1548
 (defib python-tb-previous-line 76,2614
 (defib org-id 104,3810
-(defun org-id:help 128,4880
-(defib pathname 153,5906
-(defun mail-address-at-p 273,11891
-(defib mail-address 284,12381
-(defib org-link-outside-org-mode 324,14288
-(defib annot-bib 345,15311
-(defun markdown-follow-link-p 372,16466
-(defun markdown-follow-inline-link-p 393,17131
-(defib markdown-internal-link 420,18415
-(defib rfc-toc 450,19959
-(defib id-cflow 475,21029
-(defib ctags 522,23083
-(defib etags 548,24485
-(defib cscope 585,26390
-(defib text-toc 612,27542
-(defib dir-summary 644,29124
-(defib rfc 680,30694
-(defib man-apropos 714,32148
-(defun hlink 742,33404
-(defun hlink:parse-label-and-file 762,34397
-(defconst elink:start 784,35314
-(defconst elink:end 786,35419
-(defib elink 789,35517
-(defconst glink:start 799,35918
-(defconst glink:end 801,36021
-(defib glink 804,36117
-(defconst ilink:start 813,36407
-(defconst ilink:end 815,36512
-(defib ilink 818,36610
-(defib pathname-line-and-column 833,37266
-(defib ipython-stack-frame 861,38859
-(defib ripgrep-msg 903,41021
-(defib grep-msg 949,43162
-(defun hib-python-traceback 1017,47011
-(defib debugger-source 1028,47623
-(defib elisp-compiler-msg 1114,51664
-(defib patch-msg 1216,56735
-(defib texinfo-ref 1243,57939
-(defib gnus-push-button 1328,62537
-(defib Info-node 1340,63079
-(defib hyp-address 1373,64768
-(defib hyp-source 1392,65782
-(defconst action:start 1419,66901
-(defconst action:end 1422,67010
-(defib action 1431,67360
-(defun action:help 1526,71596
-(defib completion 1553,72688
+(defun org-id:help 137,5252
+(defib pathname 162,6278
+(defun mail-address-at-p 282,12263
+(defib mail-address 293,12753
+(defib org-link-outside-org-mode 333,14660
+(defib annot-bib 354,15683
+(defun markdown-follow-link-p 381,16838
+(defun markdown-follow-inline-link-p 402,17503
+(defib markdown-internal-link 429,18787
+(defib rfc-toc 459,20331
+(defib id-cflow 484,21401
+(defib ctags 531,23455
+(defib etags 557,24857
+(defib cscope 594,26762
+(defib text-toc 621,27914
+(defib dir-summary 653,29496
+(defib rfc 689,31066
+(defib man-apropos 723,32520
+(defun hlink 751,33776
+(defun hlink:parse-label-and-file 771,34769
+(defconst elink:start 793,35686
+(defconst elink:end 795,35791
+(defib elink 798,35889
+(defconst glink:start 808,36290
+(defconst glink:end 810,36393
+(defib glink 813,36489
+(defconst ilink:start 822,36779
+(defconst ilink:end 824,36884
+(defib ilink 827,36982
+(defib pathname-line-and-column 842,37638
+(defib ipython-stack-frame 870,39231
+(defib ripgrep-msg 912,41393
+(defib grep-msg 958,43534
+(defun hib-python-traceback 1026,47383
+(defib debugger-source 1037,47995
+(defib elisp-compiler-msg 1123,52036
+(defib patch-msg 1225,57107
+(defib texinfo-ref 1252,58311
+(defib gnus-push-button 1337,62909
+(defib Info-node 1349,63451
+(defib hyp-address 1382,65140
+(defib hyp-source 1401,66154
+(defconst action:start 1428,67273
+(defconst action:end 1431,67382
+(defib action 1440,67732
+(defun action:help 1535,71968
+(defib completion 1562,73060
 
 hinit.el,145
 (defvar   hyperb:user-email 22,623
@@ -768,10 +768,10 @@ hmouse-tag.el,3201
 (defun smart-java-packages 1291,54458
 (defun smart-library-symbol 1362,57169
 (defun smart-tags-display 1377,57728
-(defun smart-tags-file-path 1411,59211
-(defun smart-tags-org-src-block-p 1434,60062
-(defun smart-tags-file-list 1439,60250
-(defun smart-tags-noselect-function 1476,61974
+(defun smart-tags-file-path 1411,59210
+(defun smart-tags-org-src-block-p 1434,60061
+(defun smart-tags-file-list 1439,60249
+(defun smart-tags-noselect-function 1476,61973
 
 hpath.el,5601
 (defcustom hpath:auto-completing-read-modes 42,1401
@@ -842,67 +842,67 @@ hpath.el,5601
 (defun hpath:remote-at-p 780,35235
 (defun hpath:remote-p 848,38029
 (defun hpath:at-p 919,40591
-(defun hpath:call 970,43041
-(defun hpath:is-path-variable-p 1065,47520
-(defun hpath:choose-from-path-variable 1072,47820
-(defun hpath:delimited-possible-path 1089,48708
-(defun hpath:display-buffer 1142,51084
-(defun hpath:display-buffer-other-frame 1158,51820
-(defun hpath:display-buffer-function 1179,52615
-(defun hpath:display-path-function 1184,52871
-(defun hpath:resolve 1189,53122
-(defun hpath:expand 1211,54136
-(defun hpath:prepend-shell-directory 1240,55608
-(defvar hpath:compressed-suffix-regexp 1274,57406
-(defun hpath:expand-with-variable 1277,57562
-(defun hpath:file-line-and-column 1315,59281
-(defun hpath:find-noselect 1333,60158
-(defun hpath:find 1342,60507
-(defun hpath:to-markup-anchor 1507,67492
-(defun hpath:find-executable 1572,70307
-(defun hpath:find-line 1587,70811
-(defun hpath:find-other-frame 1607,71581
-(defun hpath:find-other-window 1622,72059
-(defun hpath:get-external-display-alist 1632,72554
-(defun hpath:is-p 1651,73543
-(defun hpath:push-tag-mark 1753,78383
-(defun hpath:relative-arguments 1767,78895
-(defun hpath:relative-to 1777,79325
-(defun hpath:rfc 1809,80613
-(defun hpath:start-end 1814,80786
-(defun hpath:return-one-value 1843,81990
-(defun hpath:substitute-value 1881,83671
-(defun hpath:substitute-var 1925,85326
-(defun hpath:symlink-referent 1963,86792
-(defun hpath:symlink-expand 1978,87387
-(defun hpath:to-line 2013,89026
-(defun hpath:trim 2022,89313
-(defun hpath:normalize 2031,89651
-(defun hpath:validate 2039,90037
-(defun hpath:find-file-urls-p 2062,90944
-(defun hpath:handle-urls 2068,91203
-(defalias 
'hyperb:substitute-in-file-namehyperb:substitute-in-file-name2085,91945
-(defun substitute-in-file-name 2088,92036
-(defun hpath:enable-find-file-urls 2101,92678
-(defun hpath:disable-find-file-urls 2132,93808
-(defun hpath:find-file-urls-mode 2161,94843
-(defun hpath:url-at-p 2173,95330
-(defun hpath:url-p 2184,95821
-(defun hpath:www-at-p 2195,96216
-(defun hpath:www-p 2211,96913
-(defun hpath:command-string 2219,97236
-(defun hpath:display-where-function 2228,97643
-(defun hpath:remote-available-p 2238,98113
-(defun hpath:remote-default-user 2257,98960
-(defun hpath:delete-trailer 2271,99416
-(defun hpath:exists-p 2279,99700
-(defun hpath:find-file-mailcap 2310,100697
-(defun hpath:find-program 2326,101213
-(defun hpath:match 2347,102084
-(defun hpath:get-single-string-variable-value 2361,102684
-(defun hpath:substitute-dir 2391,103778
-(defun hpath:substitute-match-value 2457,106861
-(defun hpath:substitute-var-name 2519,109077
+(defun hpath:call 974,43196
+(defun hpath:is-path-variable-p 1069,47675
+(defun hpath:choose-from-path-variable 1076,47975
+(defun hpath:delimited-possible-path 1093,48863
+(defun hpath:display-buffer 1146,51239
+(defun hpath:display-buffer-other-frame 1162,51975
+(defun hpath:display-buffer-function 1183,52770
+(defun hpath:display-path-function 1188,53026
+(defun hpath:resolve 1193,53277
+(defun hpath:expand 1215,54291
+(defun hpath:prepend-shell-directory 1244,55763
+(defvar hpath:compressed-suffix-regexp 1278,57561
+(defun hpath:expand-with-variable 1281,57717
+(defun hpath:file-line-and-column 1319,59436
+(defun hpath:find-noselect 1337,60313
+(defun hpath:find 1346,60662
+(defun hpath:to-markup-anchor 1511,67647
+(defun hpath:find-executable 1576,70462
+(defun hpath:find-line 1591,70966
+(defun hpath:find-other-frame 1611,71736
+(defun hpath:find-other-window 1626,72214
+(defun hpath:get-external-display-alist 1636,72709
+(defun hpath:is-p 1655,73698
+(defun hpath:push-tag-mark 1757,78538
+(defun hpath:relative-arguments 1771,79050
+(defun hpath:relative-to 1781,79480
+(defun hpath:rfc 1813,80768
+(defun hpath:start-end 1818,80941
+(defun hpath:return-one-value 1847,82145
+(defun hpath:substitute-value 1885,83826
+(defun hpath:substitute-var 1929,85481
+(defun hpath:symlink-referent 1967,86947
+(defun hpath:symlink-expand 1982,87542
+(defun hpath:to-line 2017,89181
+(defun hpath:trim 2026,89468
+(defun hpath:normalize 2035,89806
+(defun hpath:validate 2043,90192
+(defun hpath:find-file-urls-p 2066,91099
+(defun hpath:handle-urls 2072,91358
+(defalias 
'hyperb:substitute-in-file-namehyperb:substitute-in-file-name2089,92100
+(defun substitute-in-file-name 2092,92191
+(defun hpath:enable-find-file-urls 2105,92833
+(defun hpath:disable-find-file-urls 2136,93963
+(defun hpath:find-file-urls-mode 2165,94998
+(defun hpath:url-at-p 2177,95485
+(defun hpath:url-p 2188,95976
+(defun hpath:www-at-p 2199,96371
+(defun hpath:www-p 2215,97068
+(defun hpath:command-string 2223,97391
+(defun hpath:display-where-function 2232,97798
+(defun hpath:remote-available-p 2242,98268
+(defun hpath:remote-default-user 2261,99115
+(defun hpath:delete-trailer 2275,99571
+(defun hpath:exists-p 2283,99855
+(defun hpath:find-file-mailcap 2314,100852
+(defun hpath:find-program 2330,101368
+(defun hpath:match 2351,102239
+(defun hpath:get-single-string-variable-value 2365,102839
+(defun hpath:substitute-dir 2395,103933
+(defun hpath:substitute-match-value 2461,107016
+(defun hpath:substitute-var-name 2523,109232
 
 hrmail.el,723
 (defun Rmail-init 47,1512
@@ -1520,49 +1520,49 @@ hui.el,2341
 (defun hui:gbut-delete 556,22313
 (defun hui:gbut-edit 571,22975
 (defun hui:gbut-link-directly 661,26470
-(defun hui:gbut-rename 692,27717
-(defun hui:gibut-create 704,28183
-(defun hui:hbut-act 732,29237
-(defun hui:hbut-buf 740,29608
-(defun hui:hbut-current-act 765,30370
-(defun hui:hbut-delete 775,30745
-(defun hui:hbut-help 817,32590
-(defun hui:hbut-label 858,34076
-(defun hui:hbut-label-default 870,34603
-(defun hui:hbut-rename 885,35338
-(defun hui:hbut-report 895,35694
-(defalias 'hui:hbut-summarize hui:hbut-summarize906,36046
-(defun hui:ibut-act 908,36096
-(defun hui:ibut-create 923,36659
-(defun hui:ibut-edit 970,38784
-(defun hui:ibut-label-create 1040,41461
-(defun hui:ibut-rename 1078,43336
-(defun hui:ebut-link-directly 1112,44491
-(defun hui:ibut-link-directly 1205,48047
-(defun hui:action 1311,52290
-(defun hui:actype 1362,54002
-(defun hui:buf-writable-err 1381,54995
-(defvar hui:ignore-buffers-regexp 1401,55858
-(defun hui:ebut-delete-op 1404,56028
-(defun hui:ebut-message 1435,57281
-(defun hui:ebut-unmark 1446,57685
-(defun hui:file-find 1506,60148
-(defun hui:hbut-operate 1513,60418
-(defun hui:hbut-term-highlight 1556,62443
-(defun hui:hbut-term-unhighlight 1570,62845
-(defun hui:help-ebut-highlight 1579,63131
-(defun hui:htype-delete 1585,63379
-(defun hui:htype-help 1596,63786
-(defun hui:htype-help-current-window 1647,65554
-(defun hui:ibut-delete-op 1654,65919
-(defun hui:ibut-message 1680,67070
-(defun hui:key-dir 1691,67474
-(defun hui:key-src 1700,67822
-(defun hui:ebut-link-create 1709,68193
-(defun hui:ibut-link-create 1732,69392
-(defun hui:link-possible-types 1759,70756
-(defun hui:list-remove-text-properties 1891,76018
-(defvar hui:ebut-label-prev 1901,76408
+(defun hui:gbut-rename 694,27748
+(defun hui:gibut-create 706,28214
+(defun hui:hbut-act 734,29268
+(defun hui:hbut-buf 742,29639
+(defun hui:hbut-current-act 767,30401
+(defun hui:hbut-delete 777,30776
+(defun hui:hbut-help 819,32621
+(defun hui:hbut-label 860,34107
+(defun hui:hbut-label-default 872,34634
+(defun hui:hbut-rename 887,35369
+(defun hui:hbut-report 897,35725
+(defalias 'hui:hbut-summarize hui:hbut-summarize908,36077
+(defun hui:ibut-act 910,36127
+(defun hui:ibut-create 925,36690
+(defun hui:ibut-edit 972,38815
+(defun hui:ibut-label-create 1042,41492
+(defun hui:ibut-rename 1080,43367
+(defun hui:ebut-link-directly 1114,44522
+(defun hui:ibut-link-directly 1210,48171
+(defun hui:action 1319,52507
+(defun hui:actype 1370,54219
+(defun hui:buf-writable-err 1389,55212
+(defvar hui:ignore-buffers-regexp 1409,56075
+(defun hui:ebut-delete-op 1412,56245
+(defun hui:ebut-message 1443,57498
+(defun hui:ebut-unmark 1454,57902
+(defun hui:file-find 1514,60365
+(defun hui:hbut-operate 1521,60635
+(defun hui:hbut-term-highlight 1564,62660
+(defun hui:hbut-term-unhighlight 1578,63062
+(defun hui:help-ebut-highlight 1587,63348
+(defun hui:htype-delete 1593,63596
+(defun hui:htype-help 1604,64003
+(defun hui:htype-help-current-window 1655,65771
+(defun hui:ibut-delete-op 1662,66136
+(defun hui:ibut-message 1688,67287
+(defun hui:key-dir 1699,67691
+(defun hui:key-src 1708,68039
+(defun hui:ebut-link-create 1717,68410
+(defun hui:ibut-link-create 1740,69609
+(defun hui:link-possible-types 1777,71236
+(defun hui:list-remove-text-properties 1913,76752
+(defvar hui:ebut-label-prev 1923,77142
 
 hvar.el,272
 (defvar var::append-list 34,1095
diff --git a/hargs.el b/hargs.el
index eac839e1aa..2a5cfc4c08 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:      9-Aug-23 at 00:16:24 by Bob Weiner
+;; Last-Mod:     28-Aug-23 at 17:59:39 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -105,10 +105,11 @@ of (string-matched start-pos end-pos).  Optional
 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
+        ;; This initial limit is the forward search limit for start delimiters
         (limit (if start-regexp-flag
                    opoint
-                 (min (+ opoint (1- (length start-delim)))
+                 ;; (min (+ opoint (1- (length start-delim)))
+                 (min (+ opoint (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))
diff --git a/hbut.el b/hbut.el
index 0aa9609d85..7267fe2714 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:     28-Aug-23 at 12:47:30 by Bob Weiner
+;; Last-Mod:     29-Aug-23 at 01:38:44 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -22,7 +22,7 @@
 (eval-and-compile (mapc #'require '(cl-lib elisp-mode help-mode hversion
                                    hmoccur hbmap htz hbdata hact
                                    hui-select view)))
-(require 'hmouse-drv) ;For `hui--ignore-action-key-depress-prev-point'.
+(require 'hmouse-drv) ; For `hui--ignore-action-key-depress-prev-point'.
 
 ;;; ************************************************************************
 ;;; Public declarations
@@ -1769,7 +1769,6 @@ If a new button is created, store its attributes in the 
symbol,
     (unwind-protect
        (progn
          (unless but-sym
-           ;; (hattr:clear 'hbut:current) ;; Commented out since was causing 
ibut:at-p to fail.
            ;; Set attributes of button at point, if any
            (setq name-and-lbl-key-flag (ibut:set-name-and-label-key-p))
 
@@ -1784,14 +1783,14 @@ If a new button is created, store its attributes in the 
symbol,
                  (progn (when (or but-sym-flag name-and-lbl-key-flag)
                           (setq text-start (or (hattr:get 'hbut:current 
'lbl-start)
                                                (point))
-                                text-end (hattr:get 'hbut:current 'lbl-end)))
-                        (unless (and text-start
-                                     (<= text-start (point))
-                                     text-end
-                                     (>= text-end (point)))
-                          ;; Move to text of ibut before trying to activate it
-                          ;; (may be on name)
-                          (goto-char (+ (or text-start (point)) 2)))
+                                text-end (hattr:get 'hbut:current 'lbl-end))
+                          (unless (and text-start
+                                       (<= text-start (point))
+                                       text-end
+                                       (>= text-end (point)))
+                            ;; Move to text of ibut before trying to activate 
it
+                            ;; (may be on name)
+                            (goto-char (+ (or text-start (point)) 2))))
                         (setq ibtype-point (point))
                         (while (and (not is-type) types)
                           (setq itype (car types))
@@ -2048,10 +2047,11 @@ non-nil)."
 There may be multiple results if there are numbered instances
 with the same label.  Names are returned in the order they are
 first encountered."
-  (apply #'set:create
-        (ibut:map
-         (lambda (lbl _start _end) (ibut:label-to-key lbl))
-         (ibut:label-instances-regexp name-key))))
+  (when (stringp name-key)
+    (apply #'set:create
+          (ibut:map
+           (lambda (lbl _start _end) (ibut:label-to-key lbl))
+           (ibut:label-instances-regexp name-key)))))
 
 (defun    ibut:label-p (&optional as-label start-delim end-delim pos-flag 
two-lines-flag)
   "Return key for the implicit button name that point is within, else nil.
@@ -2338,7 +2338,10 @@ Summary of operations based on inputs (name arg comes 
from \\='hbut:current attr
                        (delete-region (goto-char (hattr:get 'hbut:current 
'name-start))
                                       (hattr:get 'hbut:current 'name-end))
                        (when (looking-at ibut:label-separator-regexp)
-                         (delete-region (match-beginning 0) (match-end 
0))))))))
+                         (delete-region (match-beginning 0) (match-end 0))))
+                     ;; Skip past any likely opening delim preceding button 
text.
+                     (skip-chars-forward "\"<{[|")
+                     (setq start (point))))))
            (t
             ;; Above flag is 't when we are creating the first instance
             ;; of the button name
@@ -2381,10 +2384,11 @@ Summary of operations based on inputs (name arg comes 
from \\='hbut:current attr
          (ibut:insert-text 'hbut:current)))
 
       (goto-char (or start (max (- (point) 2) (point-min))))
-      ;; Skip past any inserted comment char
-      (skip-syntax-forward "-<")
-      ;; Skip past any name or label opening delim chars
-      (skip-chars-forward "\"<{[| \t\n\r"))
+      (when start
+       ;; Skip past any inserted comment char
+       (skip-syntax-forward "-<")
+       ;; Skip past any name or label opening delim chars
+       (skip-chars-forward "\"<{[| \t\n\r")))
 
     ;; Set all in-memory hbut attributes for any button at point
     (ibut:at-p)
@@ -2438,10 +2442,11 @@ Summary of operations based on inputs (name arg comes 
from \\='hbut:current attr
 
 (defun    ibut:insert-text (ibut)
   "Space, delimit and insert the text part of IBUT."
-  (cond ((looking-at ibut:label-separator-regexp)
-        (goto-char (match-end 0)))
-       ((not (or (string-empty-p (or (hattr:get ibut 'name) ""))))
-        (insert ibut:label-separator)))
+  (when (hattr:get ibut 'name)
+    (cond ((looking-at ibut:label-separator-regexp)
+          (goto-char (match-end 0)))
+         ((not (or (string-empty-p (or (hattr:get ibut 'name) ""))))
+          (insert ibut:label-separator))))
   (let* ((orig-actype (or (hattr:get ibut 'actype)
                          (hattr:get ibut 'categ)))
         (actype (or (actype:elisp-symbol orig-actype)
@@ -2515,7 +2520,9 @@ Summary of operations based on inputs (name arg comes 
from \\='hbut:current attr
       ('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:def-symbol actype) (if args " " "")
-                        (if args (hypb:format-args args) "")))))))
+                        (if args (hypb:format-args args) "")))))
+    (unless (looking-at "\\s-\\|\\'")
+      (insert " "))))
 
 (defun    ibut:previous-occurrence (lbl-key &optional buffer)
   "Move point to previous occurrence of an implicit button with LBL-KEY.
diff --git a/hibtypes.el b/hibtypes.el
index 61eae1e2fa..fabf1aeb49 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:     28-Aug-23 at 02:17:49 by Bob Weiner
+;; Last-Mod:     28-Aug-23 at 16:02:32 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -112,7 +112,7 @@ If the referenced location is found, return non-nil."
           (end   (when bounds (cdr bounds)))
           m)
       ;; Ignore ID definitions or when not on a possible ID
-      (when id
+      (when (and id (string-match "\\`[:alnum:][-[:alnum:]:.@]+\\'" id))
        (when (and start end)
          (ibut:label-set id start end))
        (if (and (not assist-flag)
@@ -120,9 +120,18 @@ If the referenced location is found, return non-nil."
                                 (re-search-forward ":\\(CUSTOM_\\)?ID:[ \t]+"
                                                    (line-end-position) t)))
            (hact 'message "On ID definition; use {C-u M-RET} to copy a link to 
an ID.")
-         (when (let ((inhibit-message t)) ;; Inhibit org-id-find status msgs
-                 (setq m (or (and (featurep 'org-roam) (org-roam-id-find id 
'marker))
-                             (org-id-find id 'marker))))
+         (when (let ((inhibit-message t) ;; Inhibit org-id-find status msgs
+                     (obuf (current-buffer))
+                     (omode major-mode))
+                 (prog1 (setq m (or (and (featurep 'org-roam)
+                                         (org-roam-id-find id 'marker))
+                                    (org-id-find id 'marker)))
+                   ;; org-find-id sets current buffer mode to Org
+                   ;; mode even if ID is not found; switch it back
+                   ;; when necessary.
+                   (when (and (eq obuf (current-buffer))
+                              (not (eq omode major-mode)))
+                     (funcall omode))))
            (hact 'link-to-org-id-marker m)))))))
 
 (defun org-id:help (_hbut)
diff --git a/hmouse-tag.el b/hmouse-tag.el
index 746bf09cbe..e2c6f91b1a 100644
--- a/hmouse-tag.el
+++ b/hmouse-tag.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    24-Aug-91
-;; Last-Mod:     28-Aug-23 at 00:23:22 by Bob Weiner
+;; Last-Mod:     28-Aug-23 at 16:19:42 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -1375,7 +1375,7 @@ See the \"${hyperb:dir}/smart-clib-sym\" script for more 
information."
       found)))
 
 (defun smart-tags-display (tag next &optional list-of-tags-tables)
-  (when  next (setq tag nil))
+  (when next (setq tag nil))
   (let* ((tags-table-list (or list-of-tags-tables
                              (and (boundp 'tags-table-list)
                                   (not (smart-tags-org-src-block-p))
diff --git a/hpath.el b/hpath.el
index ae953051be..a0e2255f52 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:     27-Aug-23 at 18:36:02 by Bob Weiner
+;; Last-Mod:     28-Aug-23 at 16:48:31 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -928,44 +928,48 @@ optional NON-EXIST, nonexistent local paths are allowed.
 Absolute pathnames must begin with a `/' or `~'."
   (let ((path (hpath:delimited-possible-path non-exist))
        subpath)
+    (when path
+      (setq path (string-trim path)))
     (when (and path (not non-exist) (string-match hpath:prefix-regexp path)
               (not (string-equal (match-string 0 path) path)))
       (setq non-exist t))
-    (cond ((and path (file-readable-p path))
-          path)
-         ((and path
-               ;; Don't allow more than one set of grouping chars
-               (not (string-match-p "\)\\s-*\(\\|\\]\\s-*\\[\\|\}\\s-*\{" 
path))
-               ;; With point inside a path variable, return the path that 
point is on or to the right of.
-               (setq subpath (or (and (setq subpath (hargs:delimited 
"[:\"\']\\|^\\s-*" "[:\"\']\\|\\s-*$" t t nil "[\t\n\r\f]\\|[;:] \\| [;:]"))
-                                      (not (string-match-p "[:;\t\n\r\f]" 
subpath))
-                                      subpath)
-                                 (and (setq subpath (hargs:delimited 
"[;\"\']\\|^\\s-*" "[;\"\']\\|\\s-*$"  t t nil "[\t\n\r\f]\\|[;:] \\| [;:]"))
-                                      (not (string-match-p 
"[;\t\n\r\f]\\|:[^:]*:" subpath))
-                                      subpath)))
-               ;; Handle anchored or action prefix char paths in the
-               ;; following clause; otherwise, might just be looking
-               ;; at part of the path
-               (and subpath (not (or (string-match-p "#" subpath)
-                                     (string-match-p hpath:prefix-regexp 
subpath))))
-               (setq subpath
-                     (if subpath
-                         (cond ((and (string-match "\\`\\s-*\\([^; \t]+\\)" 
subpath)
-                                     (executable-find (match-string 1 
subpath)))
-                                ;; Could be a shell command from a semicolon 
separated
-                                ;; list; ignore if so
-                                nil)
-                               (t (expand-file-name subpath)))
-                       ;; Only default to current path if know are within a 
PATH value
-                       (when (string-match-p hpath:path-variable-value-regexp 
path)
-                         ".")))
-               (hpath:is-p subpath type non-exist))
-          subpath)
-         ((hpath:is-p path type non-exist))
-         ;; Local file URLs
-         ;; ((hpath:is-p (hargs:delimited "file://" "[ \t\n\r\"\'\}]" nil t)))
-         ((hpath:remote-at-p))
-         ((hpath:www-at-p) nil))))
+    (unless (and path (or (string-empty-p path)
+                         (string-match "::" path)))
+      (cond ((and path (file-readable-p path))
+            path)
+           ((and path
+                 ;; Don't allow more than one set of grouping chars
+                 (not (string-match-p "\)\\s-*\(\\|\\]\\s-*\\[\\|\}\\s-*\{" 
path))
+                 ;; With point inside a path variable, return the path that 
point is on or to the right of.
+                 (setq subpath (or (and (setq subpath (hargs:delimited 
"[:\"\']\\|^\\s-*" "[:\"\']\\|\\s-*$" t t nil "[\t\n\r\f]\\|[;:] \\| [;:]"))
+                                        (not (string-match-p "[:;\t\n\r\f]" 
subpath))
+                                        subpath)
+                                   (and (setq subpath (hargs:delimited 
"[;\"\']\\|^\\s-*" "[;\"\']\\|\\s-*$"  t t nil "[\t\n\r\f]\\|[;:] \\| [;:]"))
+                                        (not (string-match-p 
"[;\t\n\r\f]\\|:[^:]*:" subpath))
+                                        subpath)))
+                 ;; Handle anchored or action prefix char paths in the
+                 ;; following clause; otherwise, might just be looking
+                 ;; at part of the path
+                 (and subpath (not (or (string-match-p "#" subpath)
+                                       (string-match-p hpath:prefix-regexp 
subpath))))
+                 (setq subpath
+                       (if subpath
+                           (cond ((and (string-match "\\`\\s-*\\([^; \t]+\\)" 
subpath)
+                                       (executable-find (match-string 1 
subpath)))
+                                  ;; Could be a shell command from a semicolon 
separated
+                                  ;; list; ignore if so
+                                  nil)
+                                 (t (expand-file-name subpath)))
+                         ;; Only default to current path if know are within a 
PATH value
+                         (when (string-match-p 
hpath:path-variable-value-regexp path)
+                           ".")))
+                 (hpath:is-p subpath type non-exist))
+            subpath)
+           ((hpath:is-p path type non-exist))
+           ;; Local file URLs
+           ;; ((hpath:is-p (hargs:delimited "file://" "[ \t\n\r\"\'\}]" nil 
t)))
+           ((hpath:remote-at-p))
+           ((hpath:www-at-p) nil)))))
 
 (defun hpath:call (func path &optional non-exist)
   "Call FUNC with a PATH and optional NON-EXIST flag.
diff --git a/hui.el b/hui.el
index 9ae1cc34be..6092f9434e 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:     28-Aug-23 at 12:49:04 by Bob Weiner
+;; Last-Mod:     29-Aug-23 at 01:11:29 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -666,6 +666,8 @@ button.  With optional prefix ARG non-nil, insert a named
 implicit button.  See also documentation for
 `hui:link-possible-types'."
   (interactive "P")
+
+  (hattr:clear 'hbut:current)
   (save-window-excursion
     (when (or (= (count-windows) 1)
              (= (hypb:count-visible-windows) 1))
@@ -1125,6 +1127,7 @@ from those instead.  See also documentation for
                 (assist-key-clear-variables)
                 (hmouse-choose-link-and-referent-windows)))
 
+  (hattr:clear 'hbut:current)
   (unless (called-interactively-p 'any)
     ;; Clear smart key variables so this does not improperly reference
     ;; values left over from a prior drag or click.
@@ -1136,6 +1139,11 @@ from those instead.  See also documentation for
            (list depress-window release-window)
          (hmouse-choose-link-and-referent-windows))
 
+      (select-window referent-window)
+      ;; This sets hbut:current to link-to button attributes.
+      (setq link-types (hui:link-possible-types)
+           num-types (length link-types))
+
       (select-window link-but-window)
       ;; It is rarely possible that a *Warnings* buffer popup might have
       ;; displaced the button src buffer in the depress window, so switch
@@ -1162,9 +1170,6 @@ from those instead.  See also documentation for
                         "ebut-link-directly"
                         "Create button named: ")
                lbl-key (hbut:label-to-key but-lbl))))
-      (select-window referent-window)
-      (setq link-types (hui:link-possible-types)
-           num-types (length link-types))
 
       ;; num-types is the number of possible link types to choose among
       (cond ((= num-types 0)
@@ -1226,6 +1231,7 @@ drag from a window to another window's modeline."
                 (append (hmouse-choose-link-and-referent-windows)
                         current-prefix-arg)))
 
+  (hattr:clear 'hbut:current)
   (unless (called-interactively-p 'any)
     ;; Clear smart key variables so this does not improperly reference
     ;; values left over from a prior drag or click.
@@ -1238,6 +1244,11 @@ drag from a window to another window's modeline."
            (list depress-window release-window)
          (hmouse-choose-link-and-referent-windows))
 
+      (select-window referent-window)
+      ;; This sets hbut:current to link-to button attributes.
+      (setq link-types (hui:link-possible-types)
+           num-types (length link-types))
+
       (select-window link-but-window)
       ;; It is rarely possible that a *Warnings* buffer popup might have
       ;; displaced the button src buffer in the depress window, so switch
@@ -1264,9 +1275,6 @@ drag from a window to another window's modeline."
                        "ibut-link-directly"
                        "Name for implicit button: ")
              name-key (hbut:label-to-key but-name)))
-      (select-window referent-window)
-      (setq link-types (hui:link-possible-types)
-           num-types (length link-types))
 
       ;; num-types is the number of possible link types to choose among
       (cond ((= num-types 0)
@@ -1740,9 +1748,7 @@ which to create button.  BUT-DIR is the directory of 
BUT-LOC.
 TYPE-AND-ARGS is the action type for the button followed by any
 arguments it requires.  Any text properties are removed from
 string arguments."
-  ;; Don't set 'name attribute here since this may be a rename where
-  ;; we need to use the existing name attribute before renaming to
-  ;; label version of `name-key'.
+  
   (hattr:set 'hbut:current 'categ 'implicit)
   (hattr:set 'hbut:current 'loc but-loc)
   (hattr:set 'hbut:current 'dir but-dir)
@@ -1754,7 +1760,19 @@ string arguments."
   (unless (and but-loc (or (equal (buffer-name) but-loc)
                           (eq (current-buffer) but-loc)))
     (hbut:key-src-set-buffer but-loc))
-  (ibut:operate (ibut:key-to-label name-key) edit-flag))
+  (if edit-flag
+      (if name-key
+         (ibut:operate (ibut:key-to-label name-key) t)
+       (ibut:operate nil t))
+    (if name-key
+       (if (hattr:get 'hbut:current 'name)
+           ;; Don't set 'name attribute here since is a rename where
+           ;; we need to use the existing name attribute before renaming to
+           ;; label version of `name-key'.
+           (ibut:operate (ibut:key-to-label name-key))
+         (hattr:set 'hbut:current 'name (ibut:key-to-label name-key))
+         (ibut:operate))
+      (ibut:operate))))
 
 (defun hui:link-possible-types ()
   "Return list of possible link action types during editing of a Hyperbole 
button.
@@ -1788,105 +1806,109 @@ Buffer without File      link-to-buffer-tmp"
   (let (val
        hbut-sym
        lbl-key)
-    (delq nil
-         (list (cond ((and (featurep 'org-id)
-                           (cond ((save-excursion
-                                    (beginning-of-line)
-                                    (when (looking-at "[ \t]*:ID:[ \t]+\\([^ 
\t\r\n\f]+\\)")
-                                      ;; Org ID definition
-                                      (list 'link-to-org-id (match-string 
1)))))
-                                 (t (let* ((id (thing-at-point 'symbol t)) ;; 
Could be a uuid or some other form of id
-                                           (bounds (when id 
(bounds-of-thing-at-point 'symbol)))
-                                           (start (when bounds (car bounds)))
-                                           (case-fold-search t))
-                                      ;; Org ID link - must have id: prefix or 
is ignored.
-                                      (when start
-                                        (save-excursion
-                                          (goto-char (max (- start 3) 
(point-min)))
-                                          (when (looking-at "\\bid:")
-                                            (list 'link-to-org-id id)))))))))
-
-                     (t (cond ((and (prog1 (setq hbut-sym (hbut:at-p))
-                                      ;; Next line forces use of any ibut name 
in the link.
-                                      (save-excursion (ibut:at-to-name-p 
hbut-sym)))
-                                    (setq lbl-key (hattr:get hbut-sym 
'lbl-key))
-                                    (eq (current-buffer) (get-file-buffer 
(gbut:file))))
-                               (list 'link-to-gbut lbl-key))
-                              ((and hbut-sym (eq (hattr:get hbut-sym 'categ) 
'explicit))
-                               (list 'link-to-ebut lbl-key))
-                              (hbut-sym
-                               (list 'link-to-ibut lbl-key (or 
buffer-file-name (buffer-name))))
-                              ((and (require 'bookmark)
-                                    (derived-mode-p 'bookmark-bmenu-mode)
-                                    (list 'link-to-bookmark 
(bookmark-bmenu-bookmark))))
-                              ((let (node)
-                                 (cond ((derived-mode-p 'Info-mode)
-                                        (if (and Info-current-node
-                                                 (member Info-current-node
-                                                         (Info-index-nodes 
Info-current-file))
-                                                 (Info-menu-item-at-p))
-                                            (let ((hargs:reading-type 
'Info-index-item))
-                                              (list 'link-to-Info-index-item 
(hargs:at-p)))
-                                          (let ((hargs:reading-type 
'Info-node))
-                                            (list 'link-to-Info-node 
(hargs:at-p)))))
-                                       ((and (derived-mode-p #'texinfo-mode)
-                                             (save-excursion
-                                               (beginning-of-line)
-                                               (or (looking-at "@node ")
-                                                   (re-search-backward "^@node 
" nil t))))
-                                        (require 'texnfo-upd)
-                                        (setq node (texinfo-copy-node-name))
-                                        (list 'link-to-texinfo-node 
buffer-file-name node))
-                                       ((hmail:reader-p)
-                                        (list 'link-to-mail
-                                              (list (rmail:msg-id-get) 
buffer-file-name))))))
-                              (t (cond
-                                  ((let ((hargs:reading-type 'directory))
-                                     (setq val (hargs:at-p t)))
-                                   (list 'link-to-directory val))
-                                  ((let ((hargs:reading-type 'file))
-                                     (setq val (hargs:at-p t)))
-                                   (list 'link-to-file val (point)))
-                                  ((derived-mode-p #'kotl-mode)
-                                   (list 'link-to-kcell buffer-file-name 
(kcell-view:idstamp)))
-                                  ;; If link is within an outline-regexp 
prefix, use
-                                  ;; a link-to-string-match.
-                                  ((and (boundp 'outline-regexp)
-                                        (stringp outline-regexp)
-                                        (save-excursion
-                                          (<= (point)
-                                              (progn
-                                                (beginning-of-line)
-                                                (if (looking-at outline-regexp)
-                                                    (match-end 0)
-                                                  0)))))
-                                   (save-excursion
-                                     (let ((heading (string-trim
-                                                     
(buffer-substring-no-properties
-                                                      (point)
-                                                      (line-end-position))))
-                                           (occur 0))
-                                       (end-of-line)
-                                       (while (and (not (string-empty-p 
heading))
-                                                   (search-backward heading 
nil t))
-                                         (setq occur (1+ occur)))
-                                       (list 'link-to-string-match
-                                             heading occur buffer-file-name))))
-                                  (buffer-file-name
-                                   (list 'link-to-file buffer-file-name 
(point)))
-                                  (t (list 'link-to-buffer-tmp 
(buffer-name)))))
-                              ;;
-                              ;; Deleted link to elisp possibility as it can 
embed
-                              ;; long elisp functions in the button data file 
and
-                              ;; possibly not parse them correctly.
-                              ;;
-                              ;; (and (fboundp 'smart-emacs-lisp-mode-p)
-                              ;;      (smart-emacs-lisp-mode-p)
-                              ;;      (or (eq (char-syntax (following-char)) 
?\()
-                              ;;        (eq (char-syntax (preceding-char)) 
?\)))
-                              ;;      (setq val (hargs:sexpression-p))
-                              ;;      (list 'eval-elisp val))
-                              )))))))
+    (prog1 (delq nil
+                (list (cond ((and (featurep 'org-id)
+                                  (cond ((save-excursion
+                                           (beginning-of-line)
+                                           (when (looking-at "[ \t]*:ID:[ 
\t]+\\([^ \t\r\n\f]+\\)")
+                                             ;; Org ID definition
+                                             (list 'link-to-org-id 
(match-string 1)))))
+                                        (t (let* ((id (thing-at-point 'symbol 
t)) ;; Could be a uuid or some other form of id
+                                                  (bounds (when id 
(bounds-of-thing-at-point 'symbol)))
+                                                  (start (when bounds (car 
bounds)))
+                                                  (case-fold-search t))
+                                             ;; Org ID link - must have id: 
prefix or is ignored.
+                                             (when start
+                                               (save-excursion
+                                                 (goto-char (max (- start 3) 
(point-min)))
+                                                 (when (looking-at "\\bid:")
+                                                   (list 'link-to-org-id 
id)))))))))
+
+                            ;; Next clause forces use of any ibut name in the 
link
+                            ;; and sets hbut:current button attributes.
+                            (t (cond ((and (prog1 (setq hbut-sym (hbut:at-p))
+                                             (save-excursion 
(ibut:at-to-name-p hbut-sym)))
+                                           (setq lbl-key (hattr:get hbut-sym 
'lbl-key))
+                                           (eq (current-buffer) 
(get-file-buffer (gbut:file))))
+                                      (list 'link-to-gbut lbl-key))
+                                     ((and hbut-sym (eq (hattr:get hbut-sym 
'categ) 'explicit))
+                                      (list 'link-to-ebut lbl-key))
+                                     (hbut-sym
+                                      (list 'link-to-ibut lbl-key (or 
buffer-file-name (buffer-name))))
+                                     ((and (require 'bookmark)
+                                           (derived-mode-p 
'bookmark-bmenu-mode)
+                                           (list 'link-to-bookmark 
(bookmark-bmenu-bookmark))))
+                                     ((let (node)
+                                        (cond ((derived-mode-p 'Info-mode)
+                                               (if (and Info-current-node
+                                                        (member 
Info-current-node
+                                                                
(Info-index-nodes Info-current-file))
+                                                        (Info-menu-item-at-p))
+                                                   (let ((hargs:reading-type 
'Info-index-item))
+                                                     (list 
'link-to-Info-index-item (hargs:at-p)))
+                                                 (let ((hargs:reading-type 
'Info-node))
+                                                   (list 'link-to-Info-node 
(hargs:at-p)))))
+                                              ((and (derived-mode-p 
#'texinfo-mode)
+                                                    (save-excursion
+                                                      (beginning-of-line)
+                                                      (or (looking-at "@node ")
+                                                          (re-search-backward 
"^@node " nil t))))
+                                               (require 'texnfo-upd)
+                                               (setq node 
(texinfo-copy-node-name))
+                                               (list 'link-to-texinfo-node 
buffer-file-name node))
+                                              ((hmail:reader-p)
+                                               (list 'link-to-mail
+                                                     (list (rmail:msg-id-get) 
buffer-file-name))))))
+                                     (t (cond
+                                         ((let ((hargs:reading-type 
'directory))
+                                            (setq val (hargs:at-p t)))
+                                          (list 'link-to-directory val))
+                                         ((let ((hargs:reading-type 'file))
+                                            (setq val (hargs:at-p t)))
+                                          (list 'link-to-file val (point)))
+                                         ((derived-mode-p #'kotl-mode)
+                                          (list 'link-to-kcell 
buffer-file-name (kcell-view:idstamp)))
+                                         ;; If link is within an 
outline-regexp prefix, use
+                                         ;; a link-to-string-match.
+                                         ((and (boundp 'outline-regexp)
+                                               (stringp outline-regexp)
+                                               (save-excursion
+                                                 (<= (point)
+                                                     (progn
+                                                       (beginning-of-line)
+                                                       (if (looking-at 
outline-regexp)
+                                                           (match-end 0)
+                                                         0)))))
+                                          (save-excursion
+                                            (let ((heading (string-trim
+                                                            
(buffer-substring-no-properties
+                                                             (point)
+                                                             
(line-end-position))))
+                                                  (occur 0))
+                                              (end-of-line)
+                                              (while (and (not (string-empty-p 
heading))
+                                                          (search-backward 
heading nil t))
+                                                (setq occur (1+ occur)))
+                                              (list 'link-to-string-match
+                                                    heading occur 
buffer-file-name))))
+                                         (buffer-file-name
+                                          (list 'link-to-file buffer-file-name 
(point)))
+                                         (t (list 'link-to-buffer-tmp 
(buffer-name)))))
+                                     ;;
+                                     ;; Deleted link to elisp possibility as 
it can embed
+                                     ;; long elisp functions in the button 
data file and
+                                     ;; possibly not parse them correctly.
+                                     ;;
+                                     ;; (and (fboundp 'smart-emacs-lisp-mode-p)
+                                     ;;      (smart-emacs-lisp-mode-p)
+                                     ;;      (or (eq (char-syntax 
(following-char)) ?\()
+                                     ;;         (eq (char-syntax 
(preceding-char)) ?\)))
+                                     ;;      (setq val (hargs:sexpression-p))
+                                     ;;      (list 'eval-elisp val))
+                                     )))))
+      ;; This is a referent button to link to, not the source button,
+      ;; so clear it.
+      (hattr:clear 'hbut:current))))
 
 (defun hui:list-remove-text-properties (lst)
   "Return LST, a list, with text properties removed from any string elements."



reply via email to

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