File: utl_usr.txt

package info (click to toggle)
vim-scripts 20210124.4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,384 kB
  • sloc: perl: 420; xml: 95; makefile: 25
file content (1377 lines) | stat: -rw-r--r-- 51,915 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
*utl_usr.txt* Plugin for executing URLs in plain text files
*utl* *utl-plugin* 
For Vim version 6, Version: utl-2.0, $Revision: 1.14 $


		       Utl.vim User Manual

			 By Stefan Bittner
			stb@bf-consulting.de

	Contents:

		1. Intro........................|utl-intro|
		2. Getting started..............|utl-getstart|
		3. Tutorial.....................|utl-tutorial|
		4. Examples of use..............|utl-examples|
		5. Tips, details, pittfalls.....|utl-tipsdetails|
		7. Changes since Utl/Thlnk-1.2..|utl-changes|
		8. Todo list....................|utl-todolist|
		9. Credits......................|utl-credits|


See |utl_ref.txt| for some reference material.
See http://vim.sf.net/script.php?script_id=293 for installation instructions

See |utl-changes| for things that have changed in this version.

Any comments, bug reports, pachtes, fixes and suggestions are welcome, and
sometimes needed for my motivation. See |utl-todolist| if you want to
contribute to Utl.

Happy linking,
Stefan Bittner <URL:mailto:stb@bf-consulting.de>

==============================================================================
1. Intro						*utl-intro*

Welcome to utl.vim!

What is Utl.vim
---------------

* It brings the benefits of URL-based hyperlinking to the realm of plain text,
  extending the URL syntax for plain text needs, in accordance with the RFC 2396
  URI specification.

* It's a handy utility for you right away

* It's fun :-)
  surfing text files, executing text ...


What is it good for?
--------------------

* Enables Vim to be your central desktop application, for instance:

  - Easily navigate in collections of related text files via hyperlinks
  - Call web browser and email client on URLs (configurable protocol handlers)
  - Call MS-Word on .doc files, Acrobat Reader on .pdf, Windows Explorer on
    directories, IrfanView on .jpg etc. (configurable media type handlers)
  - Maintain pictures from your digicam based on a text file
  - Maintain a personal info file containing hotlinks

* Use it for project management, software development, report preparation and
  technical writings. For instance:

  - Reference emails from text files
  - Reference bug tracker database from a text file

* Smart usages. For instance:

  - Embed vim commands in text files and source code.
  - Use it as light weight spell checker,
  - or for dictionary lookups.
  - Start programs using Utl.
  - Use it for relative editing and
  - for navigating HTML source code.

* Use it for quality commenting of source code. For instance:

  - Reference related code with hot links, e.g. reference the definition of a
    struct in C/C++
  - Reference design papers, UML diagrams, man pages etc from source code
  - Turn references like "see below" and "type zR to open the folds" into
    hotlinks


Utl.vim is easy 
-----------------

* You only need to know one single command to get started: \gu = Go URL 

  1. Type :help utl-getstart 
  2. Hit \gu on the live examples given there 

  As a reader of texts containing URLs that's all! As an author you have to 
  know how to write URLs. But utl.vim gives you a training. And what you 
  will learn is 90% general knowlegde about URLs that you can use elsewhere. 

* Utl.vim is friendly: 
  No side effects, fits seamlessly into your Vim Session, well documented. 

Want to give Utl a try? Fine, so lets just dive into the live examples:


==============================================================================
2. Getting started					*utl-start*

Utl.vim's basic mapping is \gu which stands for "Go Url". That's all you need!

Note: If you have changed the mapleader string your actual mapping might also
be ,gu or _gu or whatever, see |mapleader|.

Live Examples now!!!

Position the cursor on the next line:
    <URL:#r=here>
Then hit `\gu'. This should take you ...
    id=here.

You just executed your first link!
`#r=abc' refers to a position in the document, that looks like `id=abc'. (If
you know HTML: that's analogues to a <A HREF="#abc"> which refers to
ID="abc".) The `r' in the expression stands for `reference'.

Hitting `\gu' on <URL:#tn=some text> takes you to ... some text.

The special syntax `tn=' just means that the target of the link is defined by
searching the denoted string (some text) in forward direction (tn stands for
Text Next). You can leave away the `tn=' prefix and just write <URL:#some
text> because the tn= is the default prefix.

Hitting `\gu' on <URL:utl_ref.txt> takes you to the file utl_ref.txt.

Please come back here again after having executed the link!

Hitting `\gu' on <URL:utl_ref.txt#tn=^thanks for> takes you to a specific
position in the file utl_ref.txt. This example can be seen as the combination
of the two previous examples: URL + #xxx

The #xxx suffix is called a fragment expression in URL lingo.

Hitting `\gu' on <URL:http://www.vim.org> will invoke your web browser with
that URL. Just try it, Utl will assist you to set up your favorite browser.

You can leave away the <URL:...> embedding. Try for example:

    http://www.vim.org

or even		     +------- This is also a link which you should execute :-)
		     |
    www.vim.org [#r=foot1]

An advantage of embeddingless links is that normally you will find URLs in
given documents in this form. Also, some people find the <URL:...> embedding
too clunky. The disadvantage is that there is no safe parsing for "naked" URLs
and as one consequence of this, no syntax highlighting.

You can also type an URL in the command line:

    :Gu utl_ref.txt	# Edit file in same directory as current file
    :Gu www.google.com	# Start web browser from within vim. Sometimes
			# faster than from desktop :-)

If you feel it's now time for a "hello world" test, just go ahead and write
your own links. There is no meta data and no tags file needed. Its nothing
but plain text.

Before you seriously start using utl.vim it is recommended to continue with
reading the next chapter, 3, Tutorial. If you are in doubt if Utl valuable for
you, have a look at chapter 5, Examples of use, |utl-examples| first.


==============================================================================
3. Tutorial						*utl-tutorial*


3.1 Forth and back					*utl-tutforthback*

From the previous chapter you already know how to follow links by hitting \gu
when a link is under the cursor.

The following link, as you know, takes you to another file:

    <URL:utl_ref.txt>

Try this now! ... No, Wait! To come back here again, just use the regular
vim command CTRL-O. That's the BACK-Button in the "Vim browser" - and it might
need to be typed more than once.
Now do it! 

Hope you are back again.


3.2 Relative and absolute URLs				*utl-tutrelabs*

The following URLs are all equivalent:

    <URL:utl_ref.txt>
    <URL:./utl_ref.txt>
    <URL:../doc/utl_ref.txt>

These are all  _relative_  URLs. This means that the path given in the URL is
relative to the path of the document containing the URL. Note that this is
different to Vim's :e command where file names are relative to the current
working directory (see |:pwd|). Whenever possible you should use relative
URLs. But sometimes you need  _absolute_  URLs, just as you sometimes need
absolute path names with Vim's :e command. Here is an absolute URL[#r=foot3]:

    <url:file:///home/stb/.vim/doc/utl_ref.txt>

An absolute URL _always_ has a so called scheme (also called protocol) in
front, e.g. file: , http:, mailto: . (And, if there is a protocol in front it
always is an absolute URL.) What also makes sense is to write the above URL
without the protocol:

    <url:/home/stb/.vim/doc/utl_ref.txt>   # equivalent to above

This is a relative URL (because there is no protocol) ... containing an
absolute path. The contrary does not make sense: An absolute URL with a
relative path:

    <url:file:./utl_ref.txt>	# WRONG!!! Absolute URL with relative path
				#	   makes an invalid URL.

Under Windows you can specify drive letters like this:

    <url:file://d:/path/to/foo.txt> or, which is the same,
    <url://d:/path/to/foo.txt>

This is in conformance with URL specifications. Note that you always should use
forward slashes, no matter on what OS you are; URLs are universal and are
independent of the OS.


3.3 Fragments						*utl-tutfrags*

Now lets add fragments to the URL.
The next link again references the same file as in the above examples, but is
extended by a fragment expression. That way a specific position in the target
file can be jumped to. Try to execute the link:

    <URL:utl_ref.txt#tn=thanks for>

and come back again with CTRL-O. The next link specifies the same file, but
the fragment expression is different:

    <URL:utl_ref.txt#r=foot1>

Execute it and come back again! It took you to about the same position as the
previous link, but by other means. The fragment `#r=foot1' means, that the
file utl_ref.txt is searched for the ID reference `foot1'. What follows r=
should be a simple string (an identifier to be exact).

The #tn fragment has one big advantage over #r= fragments. It allows to
refer to specific positions in the target document without the need to
modify that target document, either because you don't want it or because you
don't have write access. The advantage of the ID reference fragment is that
the link is more robust.

#tn= and #r= are the most important fragment specifiers in utl.vim. As
already said, the #tn= prefix is the default prefix, i.e. you can leave it
away. Thus the link above ( #tp=thanks ) will normally be written shorter:

    <URL:utl_ref.txt#thanks for>

This is also called a naked fragment identifier because there is no `key='
prefix. 

Here is an overview of the available fragment expressions:

    #tn=text	    Same as #text
    #tp=text	    Stand for `t'ext `p'revious, i.e. define position by
		    searching first occurance of `text' in backward direction.
    #line=123	    Position defined by line number. Most useful for documents
		    which won't change
    #r=identifier   Position defined by the id `identifier'

See |utl-fragexpr| for some explanation.


3.4 Other media types					*utl-tutmtypes*

URLs are not restricted to .txt files or web pages. You can, for instance,
reference a MS-Word document:

    <url:foo.doc>

To make this work you have to define a handler for .doc type files. Utl tries
to make this a painless as possible through a smart setup facility. Go and
execute the above link to see how this works. In URL and Utl terms a .doc type
file is said to be of media type "application/msword". You can define a
handler for any media type you like. See the explanations under
<URL:config:#r=mediaTypeHandlers>. Here is a list of other typical media
types for which you might want to set up handlers:

    <url:foo.pdf>   # PDF documents
    <url:foo.rtf>   # Rich text format documents (emails)
    <url:foo.ppt>   # Powerpoint documents
    <url:foo.xls>   # Excel sheets
    <url:img_0108.jpg>	 # All kinds of images
    <url:path/to/some/directory>
		    # Call Vim explorer, Windows explorer, shell  etc. on
		    # directory


3.5 Typing an URL					*utl-tuttypeurl*

In a web browser there are two ways to go to a page:

1. You follow a hyperlink from the page you are in.
2. You type an URL yourself.

Possibility 1 corresponds to \gu in utl.vim. Possibility 2 corresponds to an
utl.vim command :Gu

    :Gu utl_ref.txt

You can use the :Gu command for editing another file which is in the same
directory as the current file. Example:

    gvim /really/an/annoying/long/path/to/src/main.c
    :Gu option.c

I myself use :Gu for a lot for this purpose.


3.6 Other commands to execute a link			*utl-tutothercmds*

-----
Normal mode commands

Until now we have used \gu to execute a link. That's the most important one.
Utl.vim defines several other command. \gu corresponds to Vim's :edit. The
other commands correspond to :view :sview etc. For example, the command \gE
opens the URL under the cursor in a separate Vim window. Position the
cursor on the following line and hit \gE to try this:
    <URL:utl_ref.txt> 
See |utl-commands| for the list of mappings and commands.

-----
Visual-commands

There are also visual commands |utl-gourlvis|. But you will rarely need this.
An example might be: `(see www.vim.org)', i.e. an URL without embedding which
is surrounded by characters which confuse Utl's URL parsing (the ')' in this
case. Highlight the URL (see |visual-use| if you don't know how) and execute
\gu then.



3.6 Supported schemes					*utl-tutsuppscms*

Currently utl.vim supports the following protocols:

    file:	# Protocol for accessing local files.
		# If machine is given works like `ftp:'
    ftp:	# Delegates to http, assuming that the browser handles this.
    http:	# Delegates call to your web browser
    https:	# Delegates call to your web browser
    mailto:	# Delegates call to your mail client
    man:	# Unix Man Pages scheme (see |utl-usesourcecode| for usage)
    scp:	# If you have a scp command
    vimscript:	# Vim specific. A scheme for executing vim commands. See
		# |utl-exvs| for usage.
    vimhelp:	# Vim specific. About the same as vimscript:help.  See
		# |utl-exvimhelp| for usage.
    config:	# Protocol for accessing Utl's setup file

You can easily implement your own schemes or define new ones. You just define
a Vim function somewhere. Utl.vim dynamically calls those functions. Have a
look at <URL:../plugin/utl_scm.vim#r=implscmfunc>. I recommend that you read
chapter 5, Tips, details, pitfalls,  before you write your own scheme handler.


3.7 Miscellaneous					*utl-tutmisc*

-----
Creating files using Utl

If you execute an URL which points to a non existing file, this file (more
exact: its Vim buffer) will be created. This is very useful when authoring:
You write the URL in your document and then execute it. You can try this with
the URL <URL:utl_foobar.txt>. People told me that this feature is useful for
WIKI editing.

-----
Multiline URLs

You can spread URLs across several lines like this: <URL:../plu
gin/utl_uri.vim>. This is sometimes useful for long URL, see examples
below at #r=lu. When typing an URL and Vim breaks it (beacuse it contains a
space and Vim's 'tw' option set) you have to be careful: Utl eliminates all
spaces around the line break. The above link is thus equivalent to <URL:../plu
    gin/utl_uri.vim>. In order to preserve the space, you could escape it with
%20 (see |utl-uri-forbchars| about escaping), e.g. <url:this filename
    %20contains blanks.txt>. But you could also just split at another position:
<url:this filenam
    e contains blanks.txt>


-----
Tilde support

You can use the ~ (tilde) character in URLs. Example: <URL:~/.vim/plugin/utl.
vim>. The ~ is replaced by the contents of the $HOME environment variable.
On Unix system ~user also works. See |$HOME|.


==============================================================================
4. Examples of use					*utl-examples*

Here comes a rich collection of Utl examples, usage patterns and smart little
examples. If you go another example it would be nice you mail it to me.


4.1 Use Vim as your central desktop application		*utl-usedesktop*

4.1.1 Index File					*utl-useindex*

One usage is to maintain one or more text files which serve as an index or as
a central point of references. Basically like this:

    ---index.txt-----------------------{
    <url:./foo/bar.txt>
    <url:../docs/foo2.doc>
    <url:../../quote/times.xls>
    ---}

Many people like to load such a file as buffer #1 when starting up Vim and
then browse from there. Well, I do not use Utl for this, I rather work with a
self written tags file for this purpose or with a session file (see
vimhelp:mks) where a file always pertains to the same buffer number.


4.1.2 Project Management

Here is a real example. The following is the root file for a software project
where the task is technical subproject management. The # comments are only for
explanation and not in the original file. It looks something like this:

    --- poland_project.txt ------------{
    file: poland_project.txt - Poland Install project
    hist: 13.07.04/Stb

    References
    ----------
		      # Link to architecture working document
    <url:../i/rcinstall_arch.txt>

		      # Link to installation instructions
    <url:../../data/PL Installation Procedure - IMS Installation.doc>

    <url:cr.txt>	# Link to my change requests notes
    <url:vers.txt>	# Link to SCM related stuff
    <url:t.txt>		# Link to test reports
    <url:t.txt#r=act>	# ... direct link to current test there

		      # Link to root in document management system
    <url:http://kstbx032.ww010.siemens.net/livelink/livelink.exe?func=ll&
    objId=1007014&objAction=browse&sort=name>			    (id=lu)

    Iinstall:		# Link to a specific document there
    <url:http://kstbx032.ww010.siemens.net/livelink/livelink.exe/RC_D_
    INSTALLATION_COMPONENT_IF_SPEC.doc?func=doc.Fetch&nodeId=1017472&
    docTitle=RC_D_INSTALLATION_COMPONENT_IF_SPEC%2Edoc&vernum=1>

		      # Hot link to the current installation CD
    <url://q:/projekt_511/infrastructure/installation/polen/polen-cd>
    .
    .
    Correspondance	# Threads of project specific correspondance
    --------------
    .
    .								  # id=emailex
    <url:corr/20041219_RE FormXtra 2.6 question.rtf> # Reference to a RTF email
    <url:corr/20041220_RE FormXtra 2.6 question.txt> # Reference to a .txt email
    <url:corr/20041221_RE FormXtra 2.6 question.htm> # Reference to a HTML email
    .
    .
    -----------------------------------}

The referenced files also contain links. I guess I do not have even one
selfwritten file which does not contain URLs.


4.1.3 Personal Info File				*utl-useinfofile*

Quite many people maintain something like a personal info file (I also do).
They note there for example:

- Installation of tools they use on the job
- Usage of tools they use, for instance CVS usage and commands
- Links to network drives, resources and documentation
- Web links (instead or additional to bookmarks/favorites in web browser)

This file is much more useful if enriched with URLs!


4.1.5 Other usages

-----
Address book						*utl-useaddressbook*

I maintain all my contacts in a Vim written XML file. A Perl program parses
this file and generates a Vim tags file. This tag file serves as the database
for quick lookup of phone numbers, emails and addresses (contact me if you
would like to try this). I use URLs in this file:

- to add references to contacts. Like order information, and emails
- to execute email addresses (which normally are part of the contact
  information)
- to execute web pages related to the contact
- link between addresses
- link to encrypted login and passwords
- ...


-----
Link Source Code Files					*utl-usesourcecode*

This is an Utl usage of big potential in my opinion. But as Utl is currently
only implemented for the Vim Editor (not for Emacs etc) this usage might be of
real benefit only for people who have an own interest in quality source code.
You can use Utl to:

- link between the source code files using fragment addressing. For
  instance point to a C/C++ header file where a structure/class is defined.

- link from a source code file to Man pages using the man: scheme (Unix only).
  See #r=foot5 for an example 

- link from a source code file to design documents, illustration pictures
  etc

The Utl source code uses URLs itself, see for instance: <URL:../plugin/utl.vim
#URL:vimhelp:cmdline-special>).


-----
Further usages

- Is useful for technical writers.
  Compile changes and references for a (MS-Word) document in a text file
  containing URLs 

- Make a photo index file.
  Reference you photos from within text files which contain links to your
  pictures plus annotation text for the photos.

- Bug Tracker database.
  Maintain a text file which has bug tracker IDs (or change requests more
  generally) as entries:
  
    CR001 Error 8 from replace_client_c.bat 
      date: 27.02.2005
      status: implemented

      text describing the problem...
      text analyzing the problem...
      ...including links to requirements documents, links to to emails
      concerning the problem, e.g. <URL:corr/Re FormXtra 2.6 question.htm>,
      cross references to other CR's

    CR002 ...
  
  I maintain such a file for Utl development for instance. The Change Request
  IDs I choose freely. On my job I also use such files, but the IDs are given
  by the Bug Tracker database which we use there. Normally everything should
  go into the bug tracker itself (says the upper management) but reality is
  different. The Bug Tracker IDs have the form `BT12345' and I can execute
  them as an UTL hotlink (see <URL:../plugin/utl.vim#r=heur_example>). Very
  convenient.


4.2 Smart examples					*utl-smartexamples*

-----
Spell Checker						*utl-spellchecker*

You can use Utl's web browser integration for spell checking of words. With
the following in your .vimrc file:

    nmap ,l :exe "Gu http://dict.leo.org/?search=" . expand("<cword>")


you can lookup the word under the cursor in a web dictionary with the command
,l  . I use this quite often and this is my lightweight spell checking tool
(especially when I have to write english text).


-----
Dictionary Lookup					*utl-dictlookup*

The above mapping above is also useful as dictionary lookup translation
english into german or vice versa. You can also make a similar mapping:

    " Lookup of expression given on command line.
    " Of benefit because often faster than click click on desktop
    " Use %20 or \ or + to escape blanks, example:
    "		for%20that%matter
    "		for\ that\ matter 
    "		for+that+matter 
    nmap ,m :Gu http://dict.leo.org/?search=

In this form you type the word to lookup in the command line.


-----
Gu with dot dir						*utl-gudotdir*

The following command is short but very useful:

    :Gu .

invokes the file browser for the directory where the current file resides. The
file browser will typically be either Vim's file browser or Windows Explorer
(or Konqueror on Linux), depending on how you configured the directory
handler, see Config:#r=mt_dir. Both handlers are of benefit, depending on
what you want to do. If the Vim file explorer is configured, the following is
especially useful:

    :Gu .
    c

i.e. you execute the command 'c' in the Vim file explorer to change the
current working directory ( see vimhelp:current-directory ) accordingly. This
enables you to use file name completion to edit files which are in the same
directory as the previously edited file.


-----
Invoke Utl's media type handlers in file browser	*utl-fbcallmt*

If you are in Vim's file browser you can use \gu to invoke the files and
directories presented there with the Utl-defined media type handlers! For
example open a MS Word document with MS Word, open a picture with irfanview,
open a directory with Windows Explorer (if directory handler configured to
Windows Explorer) etc. That's very convenient. Seems like magic first, but
isn't, is completely straight forward and no special treatment by the utl.vim
plugin (utl.vim is just lucky on one point: concerning directories, that they
are presented with forward slashes even under Windows). It might be worth to
note that you do not execute self written URLs here.


-----
Starting a program					*utl-startprog*

The following starts a vncviewer client for me:

    <url://q:/projekt_511/Iberl/vnc3.3.3R2/vnc_x86_win32/vncviewer/vncviewer.exe?>

The question mark at the end denotes that the path in front of it should be
interpreted as a program to be executed. This is straight forward URL
techniques, Utl applies the general URL query concept to programs which are
directly accessible by your file system. See |utl-filequery| for some specs.

You can also supply the server IP address to connect to:

    <url://q:/projekt_511/Iberl/vnc3.3.3R2/vnc_x86_win32/vncviewer/vncviewer.exe?89.11.11.242>

Or you only link to the directory in order to start the program from
there[#r=foot2].

    <url://q:/projekt_511/Iberl/vnc3.3.3R2/vnc_x86_win32/vncviewer>

Starting programs is especially useful in case of long, strange paths to the
program which you either forget or which is simply to ennoying to type. This
can be an alternative to one liner programs. A good place to keep such links
might be your info file, see |utl-useinfofile|.

Here is another example using a slightly different form of query:

    <url:my-decrypt.pl?stb-cellphone-pin%3e>

This link is contained in my address book. It looks up the PIN number of my
cellphone which is GPG encrypted. My-decrypt is a small Perl program which
asks for the password and then writes the PIN to standard output. The %3e at
the end is the '>' character in escaped form (see |utl-uri-forbchars|). The
'>' as the last character means the following to Utl: Execute the given
program synchronously and write the output into a temporary file. The
temporary file is then displayed in Vim. In the above vncviewer example the
program is started asynchronously and no output is awaited.


-----
The vimscript scheme					*utl-exvs*

The vimscript scheme is a nice example for a non standard protocol. Utl.vim
introduces it in the hope it will be helpful and also as a demonstration for
the URL concept. This URL definition is in full compliance to the URL/URI
specification! Try the folowing examples: 

    <URL:vimscript:ls>

    1. <URL:vimscript:let g:utl_sav=g:colors_name>
    2. <URL:vimscript:colors peachpuff>
    3. <URL:vimscript:exe "colors ".g:utl_sav>

    <URL:vimscript:help uganda>

Here is an example which is derived from the minibufexpl.vim ( see
http://www.vim.org/scripts/script.php?script_id=159 ). This file
contains folds and the following hint:

    Hint: Type zR if you don't know how to use folds

Using UTL this could be turned into a hotlink:

    Hint: Execute <URL:vimscript:normal zR> if you don't know how to use folds

Execute the above URL to see how this works...and to see another example :-)

Yet another vimscript example {{{
This example is derived from the vimspell.vim, see <URL:http://www.vim.org/
scripts/script.php?script_id=465>. This file contains the following:

    " Section: Documentation 
    "----------------------------
    "
    " Documentation should be available by ":help vimspell" command, once the
    " script has been copied in your .vim/plugin directory.
    "
    " You still can read the documentation at the end of this file. Locate it by
    " searching the "vimspell-contents" string (and set ft=help to have
    " appropriate syntaxic coloration). 

Using UTL this can be turned into a hotlinked version:

    " Section: Documentation 
    "----------------------------
    "
    " Documentation should be available by <url:vimhelp:vimspell> command, once the
    " script has been copied in your .vim/plugin directory.
    "
    " You still can read the documentation at the end of this file, see 
    " <url:#vimspell-contents> (and execute <URL:vimscript:set ft=help> to have
    " appropriate syntaxic coloration). 

}}} Execute <URL:vimscript:normal zM> to close the fold again

Regarding the above examples you might agree with me that the possibility to
embed vim commands and hotlinks in a document is nice and smart.

Obviously there is one issue: As long as plain text URLs are not standard, the
standard user who reads the above given samples in minibufexpl.vim or
vimspell.vim would not be able to actually execute the URLs. But the plugin
authors could utilize the URL version anyway since their meaning is obvious to
the user. The user can execute still manually.

Potentially vimscript URLs could also be of benefit for a community, for
instance in the vim@vim.org mailing list where often vim commands are
exchanged. Can be used at hot links for those people who can directly switch
to vim while reading mail.

A historical note: 
The vimscript URL was inspired by the javascript scheme, which is supported by
Mozilla/Firefox and MS Internet Explorer for example (try
<URL:javascript:window.alert(%27hello, worldddd%27)> for a javascript
example). Consider the current vimscript protocol support ( which is actually
one line of code, see ../plugin/utl_scm.vim#r=vimscript ) as a demo. Much more
sophisticated things could be achieved.


-----
The vimhelp scheme					*utl-exvimhelp*

Linking to the Vim Help is especially useful. So Utl provides a a shorter form
for that. Instead <URL:vimscript:help design-documented> you can write:

    <URL:vimhelp:design-documented>

using the special non standard protocol vimhelp. Obviously this is the same as
the Vim-help reference notation |design-documented|. But with the advantage
that the URL version also works if the file containing the link is not part of
the Vim help! Another advantage is that you can use fragments in conjunction
with vimhelp:

    <URL:vimhelp:design-documented#line=4>.
    
That's 4 lines downwards from the position which the URL without the fragment
yields. (Not 4 lines downwards from the top of the file which contains that
help item.) This is useful for instance for documenting Vim scripts! See
<URL:../plugin/utl.vim#vimhelp:expr-==> for an example. It could also be useful
in the Vim mailing list when Utl.vim or plain text URLs become common enough.


-----
Mailto URLs

Utl supports the mailto: protocol. Try for example to execute the following
Links with \gu :

    <URL:mailto:stb@bf-consulting.de>	# with embedding
    mailto:stb@bf-consulting.de		# without embedding
    stb@bf-consulting.de		# without embedding and mailto:

Especially the latter form is useful for directly using email addresses. I
keep my email addresses in my text based address book and often start writing
emails from there. I do not maintain the address book of my mail client
program.

If your mail client supports extended mailto syntax according to RFC2368 you
can also execute URLs like

    <URL:mailto:stb@bf-consulting.de?Subject=mysubject&
	Cc=bf@bf-consulting.de&
	Bcc=stb2@t-email.de&>

You might want use something like:

    <URL:mailto:stb@bf-consulting.de?
    To=hans.mueller@web.de&To=martin.schmidt@t-online.de&To=otto.andres@web.de>

to directly mail to a group of people.


-----
Using a hot key

Most people prefer to have a hot key to execute \gu. For instance you could
use the function key F4 to execute an URL with the mapping:

    :nmap <F4> <Leader>gu

Or do you prefer the "real link" feeling and execute a hyperlink with double
click left mouse button?

    :nmap <2-LeftMouse> <Leader>gu
								    id=vsex
Execute <URL:vimscript:nmap %3c2-LeftMouse%3e %3cLeader%3egu> to try this
mapping. Execute <URL:vimscript:nunmap %3c2-LeftMouse%3e> to unmap it again.



4.3 Referencing Emails

Referencing emails from within a text file can be very useful (see for
example #r=emailex above). There is not yet a proper Utl solution, but some
people (including me) find already useful what is currently possible.

-----
The desired solution?

The desired solution, in my opinion, would be to have a specific scheme for
referencing emails which reside in one of your mail folders, something like
this:

    <url:mbox:[filter expression to select one or more specific email]>
    
for instance:

    <url:mbox:subject=abc>		# Display the thread related to subject abc
    <url:mbox:date=20.12.2004+12:21>	# Specify a mail by date+time
    <url:mbox:id=20001025234042.A29199@smith.com>
					# Specify a mail by its message ID

The latter would probably be the most important case: to identify an email by
its unique message ID (RFC 822 header field "Message-ID:"). Unfortunately not
every mail system supports the message ID, most notably Outlook consortes. For
Outlook, even worse, until now I did not find any possibility to savely
identify an email in a way which can be used for automated lookup. I tried for
example to write a Windows Scripting Host (WSH) script, but it seems you
cannot even identify an email by date/time received because you can only
define filters for time ranges. Who can help here??? Perhaps can be solved
using VBS.

-----
Experimental solution for mbox formatted mail boxes:

For the mbox style mail box format with the Message-ID: header field present
in the emails I work with the following experimental to handle my private
emails. It uses a query URL like this:

    <url:file:///home/stb/Mail/search?20001025234042.A29199@smith.com>

It searches some mail folders for the email with the given Message-Id,
extracts it, and displays it in a Vim window. The program `search' is little
self written perl script (the Vim plugin <URL:http://www.vim.org/scripts/
script.php?script_id=25> performs a similar task.) Using existing
programming interfaces to access mail boxes would probably be a smarter
approach.

-----
Referring to copies

Here comes what I am doing over and over with my Outlook emails on the job. I
save important emails with "Save as" in a project specific "correspondance"
folder. Mostly in .rtf or .txt format. For the file name I prefix the date of
the email, for instance '20041204 RE MDAC 2.6 installation problem.txt'. The
link containing this reference looks something like:

    <url:corr/20041220 RE MDAC 2.6 installation problem.rtf>

The link appears for example in the bug tracker data base. Or in a text file
which contains items for the next revision of a technical documentation.
Compilation of requirements of a software engineering project is another
example.

Depite the annoying step of saving the email to a file (could probably be
automated if I was a WSH or VBS programmer) this procedure proved to be very
powerful during the last years.
>

==============================================================================
5. Tips, details, pitfalls				*utl-tipsdetails*


5.1 Associated Base URL	and Cache Mapping		*utl-tdassbcachem*

-----
Associated Base URL					*utl-tdassb*

Execute the link:

    <URL:utl_ref.txt>

and when you ARE in the other file, utl_ref.txt, then type the utl.vim
command:

    \gs

that shows you the associated base URL in Vim's message line.
It looks something like:

    URL=file:///path/to/.vim/doc/utl_ref.txt

This is the base URL, denoting the context for resolving relative URLs.
If \gs shows you a message which starts with `no associated URL', this means
that the buffer was not invoked by utl.vim, e.g. was invoked by a user
command like :e xyz.

You normally do not need the \gs command. But it is sometimes useful to figure
out what's going on.


-----
The `file:' protocol is the default			*utl-tdfileisdef*

When \gs shows `URL= ' (empty value) you nevertheless can execute relative
URLs. Given a relative URL, say utl_ref.txt, utl.vim just assumes the
`file:' protocol, i.e. file:///path/to/currentBuffer.

This behaviour normally gets the thing started: you are in a normal Vim
session and encounter a link somewhere. Just type \gu to follow the link.

This behaviour to "urlify" the current resource is usual for systems that
support both, URL oriented and file system oriented resources. For example
Linux/KDE's web and file browser konqueror. For the konqueror the http:
protocol is the default.


-----
Cache Mapping						*utl-tdcachemap*

Type now the utl.vim command:

    \gc

Utl.vim shows you it's internal cache-mapping: The mapping between local
files and their URL. That grows up more and more when you continue to
follow links to different URLs. At the moment \gc, like the \gs command, is
mainly useful to see whats going on when learning utl.vim. The cache map is
always looked up first when utl.vim needs a base URL. URLs that are passed
directly to the web browser or to the mail client are an exception. They are
passed to these applications before lookup and will not be visible in the
cache map.

When working with local files, the URL may seem quite academic. But with
remote resources this changes[#r=foot4].


5.2 Writing correct URLs				*utl-tdwriteurls*

As already mentioned, understanding URLs is essential for using utl.vim as
an _author_. Using utl.vim for the _reader_ who only executes URLs requires
not much understanding; you just hit \gu when you encounter a link. That's a
difference between authoring/editing/writing on one side and
reading/browsing/viewing on the other side.

Have you already read the URI primer |utl-uriprim|? Strongly recommended!
OK, enough moralizing. Here are some rules and hints:

- Always use forward slashes!				*utl-usefwslashes*

  Even on MS Windows do not write:

      <url:file:D:\htdocs\corephp\kalender\WebCalendar\index.php>   # bad!!!

  Instead write:

      <url:file://D:/htdocs/corephp/kalender/WebCalendar/index.php> # good!

  Note that the windows drive appears where you normally expect a machine
  name. That is according to URI specifications. Try it out from within your
  web browser if you do not believe it!

							*utl-userels*
- Use relative URLs instead of absolute URLs whenever possible. For example,
  use:

      <url:sub_dir/foo.txt> or
      <url:./sub_dir/foo.txt>	# same as previous line

  instead of:

      <URL:file:/full/path/to/sub_dir/foo.txt>

  Other example with file which is in a directory with is parallel to the
  directory where the current file is in:

      <URL:../sibbling_dir/foo.txt>

  Normally there is no need for an explicit `file:' protocol!


- How relative URLs are combined			*utl-howrelscombine*

  Say you have a file foo.txt which lives in the directory /full/path/to .
  Thus the full pathname of foo.txt is:

      /full/path/to/foo.txt

  Further assume foo.txt contains an URL:

      [foo.txt]
      .
      .
      <URL:sub_dir/bar.txt>
      .
      .
      EOF

  When this URL is executed by utl.vim, the following happens:

  - The URL "sub_dir/bar.txt" is recognized as a relative URL (because it does
    not contain a protocol).

  - Every relative URL has to be transformed into an absolute URL. This is
    achieved by combining it with the base URL. The base URL is the URL of the
    containing document minus its file name. In our case:

	"file:///full/path/to/"

    (When foo.txt itself was retrieved through, say, the scp: protocol,
    then the base URL might read something like "scp://host.de/.../". 
    Utl.vim's \gs command shows you the absolute URL of the current
    document.

      absolute URL of file
      containing the URL:	    file:///full/path/to/foo.txt
    - file component:		    foo.txt
    --------------------------------------------------------------------
    = base URL:			    file:///full/path/to/
    + relative URL:		    sub_dir/bar.txt
    --------------------------------------------------------------------
    = absolute URL:		    file:///full/path/to/sub_dir/bar.txt

  It's always an absolute URL which is executed by utl.vim. Relative
  URLs are never executed directly! They are transformed into absolute
  URLs in order to get executed.


5.3 Common Pitfalls					*utl-commonpitfalls*

-----
Absolute URLs do not combine!!!!!!			*utl-absdontcombine*

The following makes no sense:

  <URL:file:../do/not/do/this>	    # VERY BAD

Here is the easy rule to keep in mind: When the protocol -- `file:' in our
case -- is present, then it's an absolute URL! If it is absent, then it is a
relative URL. Be aware of this rule... although bad URLs as the above one
might seduce you :-)

An absolute URL is taken as it is! The ../ in the example suggests a
relative path. But since the URL is absolute, the path will _not_ be
combined with the path of the document containing that URL. Executing this
link is about the same as when you type the Vim command:

  :edit ../do/not/do/this

That means: the result depends on the current directory, not on
the directory of the file containing the URL. Not what you want!

The moral of the story is:
1. When you use a protocol like file: or http: in your URL, then you have
   to give the complete path in the URL!
2. Use relative URLs whenever possible!

-----
Protocol and file type are different things		*utl-protvsftype*

This is something which is important to understand, especially if you are
going to extend Utl by your owne protocol and media type handlers.

Linking to a HTML file does not mean that you necessarily need the http:
protocol then! Protocol and file type (= media type) of the link target are
completely independent.

You can have http: to retrieve a txt file:

  <URL:http://www.ietf.org/rfc/rfc2396.txt>

Or you can have file: to retrieve a (normally, but not necessarily local) HTML
file:

  <URL:file:///usr/local/apache/htdocs/index.html>

This second example is more important for normal utl.vim usage: for
example, when using utl.vim for editing your website. Utl.vim can
directly execute links in HTML files and it normally does that by implicitly
using the `file:' protocol. See also |utl-footnote-htmledit| and
|utl-tutmeddep|.


							*utl-tdmeddep*
5.4 Embedding and fragment interpretation depend on the media-type

As you already know, Utl introduces the embedding `<URL:myUrl>' for plain
text files. For HTML files (.html or .htm), it makes sense to support HTML's
embedding, i.e. something like `<A HREF="myUrl">'. This means that when you
are editing a HTML file and execute \gu to follow a link, utl.vim expects the
pattern `<A HREF...>' under the cursor.

The URL embedding syntax relates to the media type of the source of the link.
The fragment expression syntax relates to the media type of the target of the
link. The semantics of the fragment expression depends on the media-type.

When the target is a HTML file, with an IdRef expression like `#myFrag' then
Utl finds the position `<A NAME="myFrag">' (it will not parse the HTML file
though, merely search it; but in practice it functions as expected).  When
the target is any other file type (utl.vim only distinguishes HTML from all
others) then Utl finds the position of `id=myFrag' (case never matters).

So you can really use Utl as a HTML-Source-Browser! That's useful
especially for editing and browsing your "under construction" web site.

The other fragment expressions like line=, tn= do not depend on the file
type (= media-type) in utl.vim.


==============================================================================
6. Setup and Customization				*utl-customization*

Setup of web browser, mail client, media type handlers etc is triggered
dynamically by Utl.vim when first requested. All settings are in the file
<URL:../plugin/utl_rc.vim>. Refer to the explanations in the header of this
file. The design goal was to make getting started with Utl easy.

Besides these setup items there is one pure customization item. You can switch
off Utl's syntax highlighting of URL with the following setting in your vimrc
file:

    let g:utl_config_highl = 'off'
    " values: 'on', 'off'. Variable undefined is the same as 'on'


==============================================================================
7. Changes from Utl-1.2 (Thlnk-1.2)			*utl-changes*


-----
Incompatible Changes					*utl-chgincompat*

- #tn= fragment is now default, i.e. #tn=foo is same as #foo

  Previously the ID-reference fragment #r=foo was the default. If you have
  used the naked fragment with the previous version you might want to convert
  your links. Use the search pattern  /<URL:.*#[^=>]*>	to find the links
  which need to be converted (the pattern works within Vim as well as with the
  grep program) and change  #  --into-->  #r= . If I receive more than five
  complains I will supply a converting utility :-)

  The reason for this change was that #tn= semantics is used more often by
  most users.

-----
Changed							*utl-chgchanged*

- Create documents on non existent local URLs (Wiki support).
  No longer complain. Perhaps this should be customizable. For a set of
  read-only documents complaining mighgt be better.

- On http URLs no longer use the wget utility for retrieving files on the web.
  Instead delegate to your web browser.

-----
Added							*utl-chgadded*

- Call web browser on http URLs and email client on mailto URLs (configurable
  scheme handlers)

- Call MS-Word on .doc files, Acrobat Reader on .pdf, IrfanView on .jpg etc.
  (configurable media type handlers)

- Syntax highlighting for URLs (can be switched off)

- Support URL heuristics, e.g. allow www.vim.org, not only http://www.vim.org

- Support exeuction of URLs without <URL:...> embedding (e.g. execute URLs as they
  mostly appear in not specifically written text like "see www.vim.org for Vim plugin"

- Support multiline URLs

- Smart setup and customization facility 

- Tilde Support, e.g. allow <URL:~/foo/bar> and <URL:~user/foo/bar>

- Automatically open file in split window if current buffer cannot be
  abandonned (e.g. is not written) 

-----
Fixed							*utl-fixed*

- Yes, about 10 bugs... but probably more new bugs came in :-)


==============================================================================
8. Todo list						*utl-todo*

-----
Todo list

Please let me know which feature you would like to see in the next release.

- Support for URL creation (authoring support)
  See #foot6 for an approach.

- Dynamic call of handlers.
  There should be a possibility to choose media type and scheme handlers
  dynamically. This is most useful perhaps for links to local directories,
  i.e. URLs like <URL:../doc>: one time you want to call Vim's own file
  explorer, one time the file explorer of the system (e.g. Windows Explorer),
  one time the shell (or DOS box on Windows) with proper cwd. Currently you
  have to always invoke the setup <URL:config:#r=mt_dir> and change it.

- Allow wget to retrieve http documents.
  There should be a possibility to handle http URLs in Vim (using the wget
  utility) as version 1.2 offered it. Currently http URLs are always delegated
  to an external program (normally your web browser). The issue probably
  depends on the previous one.

- Make colors of URL syntax highlighting configurable.

- Check for dangling links
  There should be a function to check whether all links points to existing
  targets. Actually I already have a hack solution. Please email if you think
  this would be a nice feature.

- Follow links when searching.
  Add a function which searches the file tree which is defined by a file
  containing file URLs.

-----
Known bugs						*utl-knownbugs*

- The mappings \gE, \gV which split the screen when executing an URL
  are not respected for a reference to the same document; e.g. executing
  \gV on <URL:#tn=this> doesn't split the screen. The same is true
  when the file is the current file: e.g. <URL:utl_usr.txt#tn=this>.

- Highlighting Bug
  The syntax highlighting gets confused in case of a split window, both
  containing the same file with URLs. Perhaps a Vim bug.


==============================================================================
9. Credits						*utl-credits*

Wolfgang Fleig, my partner for his for his help, co-authoring, dialectical
    antithesis and sponsoring.
Ines Paegert
    for her impulses.
Bram Moolenaar <Bram at moolenaar.net>
    for the Vim editor.
Barrie Stott <G.B.Stott at bolton.ac.uk>
    for helping a lot with the documentation
REKellyIV <Feral at FireTop.Com>
Klaus Horsten <horsten at gmx.at>.
Patrik Nyman <patrik.nyman at orient.su.se>
Engelhard He <Engelhard.Hess at artofbits.de>
Grant Bowman <grantbow at grantbow.com>
Ward Fuller <wfuller at SeeBeyond.com>
Mark S. Thomas <Mark.Thomas at SWFWMD.STATE.FL.US>
William Natter <wnatter at nortelnetworks.com>
Alex Jakushev <Alex.Jakushev at kemek.lt>
Geoff Caplan <geoff at advantae.com>
Bruno Daz <bruno.diaz at gmx.net>
Michael Lesniak <ich at mlesniak.de>
Janek Kozicki <janek at thenut.eti.pg.gda.pl>


==============================================================================
FOOTNOTES

----- id=foot1
An URL like www.vim.org or stb@bf-consulting.de works via a simple heuristic
support of Utl which is similar to what you know from your web browser.
Utl completes  www.xxx.domain  into  http://www.xxx.domain  or
stb@bf-consulting.de  into  mailto:stb@bf-consulting.de. See <URL:../pl
ugin/utl.vim#r=Utl_checkHeuristicAbsUrl> for supported heuristics. You can
extend the heuristics defined there.

----- id=foot2
This only works if you have configured Windows Explorer as text/directory
handler, see <URL:config:#r=mt_dir>).

----- id=foot3
I try to use lower case notations <url:xxx> for URLs that cannot be executed
right away, whereas upper case samples <URL:xxx> should all be directly
executable. Note that this is only a convention used in this document, the 
case does not matter. URL: url: Url: are all fine.

----- id=foot4
In the current version of Utl the cache actually is really somewhat academic.
The previous version, which was Thlnk-1.2, handled web URLs (http://...) using
a web file retriever ( wget, see http://www.gnu.org/software/wget/wget.html ).
HTML files were downloaded using wget into a local cache file and displayed
using Vim, i.e. were always displayed as text. This was very cool for text
files on the web because #tn= fragment addressing could be used. Example:
<URL:http://www.ietf.org/rfc/rfc2396.txt#tn=^1.2.>. Within html files, which
were readable enough in the text-view (in Vim) relative HTML hyperlinks could
be executed directly through the cache. Now web URLs are handled in the
mainstream manner by calling the web browser. Also people had to download
wget. But I would like to reactivate the wget possibilities in a next version.
Dynamic handler selection capabilities need to be added to Utl then.

----- id=foot5
You can use the man: protocol to hotlink from a program source code file to
the relevant man page. This makes use of the Man plugin, see |man-plugin|.
Example:

[myopen.c]
.
.
.
/* Opens file "filename".
 * See <URL:man:open#tn=flags is one of> for possible values of the `flags' 
 * argument.
 * The restrictions described under <URL:man:open#tn=^RESTRICTIONS> also
 * apply to this function.
 */
    int
myopen(char* filename, int flags)
{
    //
    open(filename, flags, mode);
    //
}
.
.
.
EOF

----- id=foot6
You might want to try the following code:

:map ,m :call Mark()<cr>
fu! Mark()
  let g:file = Utl_utilSlash_ExpandFullPath()
  "echo "DBG: g:ins= " . g:ins
  let g:text = getline(".") 
endfu

:iab XF <C-R>=g:file<cr>
:imap XT #tn=<C-R>=g:text<cr>

Position the cursor at the intended target of the link and then execute the
command  ,m  . For inserting a link to this position type  XF  to insert the
file name and perhaps also  XT	to insert a fragment. 


 vim:tw=78:ts=8:ft=help:norl:fdm=marker:fen