@@ -61,26 +61,24 @@ def g:IsLinkNew()
6161 echom range
6262enddef
6363
64-
65-
6664def OpenLink ()
6765 norm! f [l
66+ # Only work for [blabla][]
6867 var link_id = utils.GetTextObject (' i[' ).text
6968 var link = links_dict[link_id]
7069 if filereadable (link)
71- exe $ ' edit {link}'
72- elseif exists (' :Open' ) != 0
73- exe $ ' Open {link}'
70+ norm! gf
7471 elseif IsURL (link)
75- # TODO : I have :Open everywhere but on macos
76- silent exe $ ' !{g:start_cmd} -a safari.app "{link}"'
72+ norm! gx
7773 else
78- echoerr $ " File {link} does not exists!"
74+ utils. Echoerr ( $ " File {link} does not exists!" )
7975 endif
8076enddef
8177
82-
8378export def GetLinkID (): number
79+ # When user add a new link, it either create a new ID and return it or it
80+ # just return an existing ID if the link already exists
81+ #
8482 var link = input (' Insert link: ' , ' ' , ' customlist,Foo' )
8583 if empty (link)
8684 return 0
@@ -90,17 +88,19 @@ export def GetLinkID(): number
9088 if ! IsURL (link)
9189 link = fnamemodify (link, ' :p' )
9290 endif
91+ var reference_line = search (' \s*#\+\s\+References' , ' nw' )
92+ if reference_line == 0
93+ append (line (' $' ), [' ' , ' ## References' , ' ' ])
94+ endif
9395 var link_line = search (link, ' nw' )
9496 var link_id = 0
9597 if link_line == 0
9698 # Entirely new link
9799 link_id = keys (links_dict)- >map (' str2nr(v:val)' )- >max () + 1
98100 links_dict[$ ' {link_id}' ] = link
99101 # If it is the first link ever, leave a blank line
100- if link_id == 1 && search (' \s*#\+\s\+References' , ' nw' ) != 0
101- append (line (' $' ), ' ' )
102- elseif link_id == 1 && search (' \s*#\+\s\+References' , ' nw' ) == 0
103- append (line (' $' ), [' ' , ' ## References' , ' ' ])
102+ if link_id == 1
103+ append (line (' $' ), ' ' )
104104 endif
105105 append (line (' $' ), $ ' [{link_id}]: {link}' )
106106 else
@@ -123,7 +123,10 @@ export def IsURL(link: string): bool
123123enddef
124124
125125export def GenerateLinksDict ()
126+ # Generate the links_dict but it requires that there is a
127+ # Reference section at the end
126128 var ref_start_line = search (' \s*#\+\s\+References' , ' nw' )
129+ # TODO : error message if not found!
127130 var refs = getline (ref_start_line + 1 , ' $' )
128131 - >filter (' v:val =~ "^\\[\\d\\+\\]:\\s"' )
129132 for item in refs
@@ -149,6 +152,28 @@ export def RemoveLink()
149152 endif
150153enddef
151154
155+ def CreateLink (textobject: string = ' ' )
156+
157+ var link_id = GetLinkID ()
158+ if link_id == 0
159+ return
160+ endif
161+
162+ utils.SurroundSmart (" [" ,
163+ " ]",
164+ markdown.link_open_dict,
165+ markdown.link_close_dict,
166+ textobject)
167+ # add link value
168+ execute $ ' norm! a[{link_id}]'
169+ norm! F]h
170+ if ! IsURL (links_dict[link_id]) && ! filereadable (links_dict[link_id])
171+ exe $ ' edit {links_dict[link_id]}'
172+ # write
173+ endif
174+ enddef
175+
176+
152177# TODO
153178def CleanupReferences ()
154179 echoerr Not Implemented!
@@ -162,22 +187,12 @@ export def HandleLink()
162187 if IsLink ()
163188 OpenLink ()
164189 else
165- var link_id = GetLinkID ()
166- if link_id == 0
167- return
168- endif
169- # Surround stuff
170- norm! lbi[
171- norm! ea ]
172- execute $ ' norm! a[{link_id}]'
173- norm! F]h
174- if ! IsURL (links_dict[link_id]) && ! filereadable (links_dict[link_id])
175- exe $ ' edit {links_dict[link_id]}'
176- # write
177- endif
190+ CreateLink ()
178191 endif
179192enddef
180193
194+ # --------------------- Popups --------------------------------------------
195+
181196def OpenLinkPopup (links_list: list <string> , popup_id: number , choice: number )
182197 var link = links_list[choice - 1 ]
183198 if filereadable (link)
0 commit comments