Skip to content

Commit 00c5b18

Browse files
committed
Working on links...
1 parent c2b06cf commit 00c5b18

File tree

2 files changed

+46
-26
lines changed

2 files changed

+46
-26
lines changed

lib/links.vim

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -61,26 +61,24 @@ def g:IsLinkNew()
6161
echom range
6262
enddef
6363

64-
65-
6664
def 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
8076
enddef
8177

82-
8378
export 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
123123
enddef
124124

125125
export 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
150153
enddef
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
153178
def 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
179192
enddef
180193

194+
# --------------------- Popups --------------------------------------------
195+
181196
def OpenLinkPopup(links_list: list<string>, popup_id: number, choice: number)
182197
var link = links_list[choice - 1]
183198
if filereadable(link)

lib/utils.vim

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ export def Echowarn(msg: string)
88
echohl WarningMsg | echom $'[markdown_extras] {msg}' | echohl None
99
enddef
1010

11+
def KeysFromValue(dict: dict<any>, target_value: string)
12+
# Given a value, return all the keys associated to it
13+
return keys(filter(copy(dict), 'v:val == target_value'))
14+
enddef
15+
1116
export def DictToListOfDicts(d: dict<any>): list<dict<any>>
1217
# Convert a dict in a list of dict.
1318
#

0 commit comments

Comments
 (0)