add script to parse labels from aux files that can be called from within vim
This commit is contained in:
parent
f82b732d38
commit
96a3650663
1 changed files with 68 additions and 0 deletions
68
scripts/labels.py
Normal file
68
scripts/labels.py
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
from pathlib import Path
|
||||||
|
from rofi import rofi
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def fancy(label, number):
|
||||||
|
return f"{label} ({number})"
|
||||||
|
|
||||||
|
|
||||||
|
def remove_duplicates(ls):
|
||||||
|
new_list = []
|
||||||
|
[new_list.append(elem) for elem in ls if not elem in new_list]
|
||||||
|
return new_list
|
||||||
|
|
||||||
|
|
||||||
|
def get_labels(path):
|
||||||
|
file = open(path, mode='r', encoding='utf-8-sig')
|
||||||
|
lines = file.readlines()
|
||||||
|
file.close()
|
||||||
|
lines = [line for line in lines if
|
||||||
|
'\\newlabel' in line and '{' in line and not '@' in line and not 'gdef' in line and not 'LastPage' in line]
|
||||||
|
|
||||||
|
labels = [line.split('{')[1].split('}')[0] for line in lines]
|
||||||
|
numbers = [line.split('{')[3].split('}')[0] for line in lines]
|
||||||
|
options = [fancy(label, number) for (label, number) in zip(labels, numbers)]
|
||||||
|
return labels, options
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_labels(pathlist):
|
||||||
|
labels = []
|
||||||
|
options = []
|
||||||
|
for path in pathlist:
|
||||||
|
try:
|
||||||
|
nlabels, noptions = get_labels(path)
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
|
||||||
|
labels += nlabels
|
||||||
|
options += noptions
|
||||||
|
unique = remove_duplicates(zip(labels, options))
|
||||||
|
return [a for (a, b) in unique], [b for (a, b) in unique]
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
arglist = []
|
||||||
|
if len(args) > 1:
|
||||||
|
path = Path(args[1])
|
||||||
|
arglist = list(path.glob('*.aux'))
|
||||||
|
else:
|
||||||
|
arglist = ['/home/maximilian/current_course/full.aux']
|
||||||
|
|
||||||
|
labels, options = get_all_labels(arglist)
|
||||||
|
|
||||||
|
key, index, selected = rofi('Select label', options, [
|
||||||
|
'-lines', min(40, max(len(options), 5)), '-width', '1700'
|
||||||
|
])
|
||||||
|
|
||||||
|
if index >= 0:
|
||||||
|
command = labels[index]
|
||||||
|
else:
|
||||||
|
command = selected
|
||||||
|
return command.strip()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
selected_label = main(sys.argv)
|
||||||
|
print(selected_label)
|
Loading…
Reference in a new issue