2021-09-19 12:30:16 +02:00
|
|
|
#!/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])
|
2022-04-26 09:02:36 +02:00
|
|
|
arglist = list(path.glob('*.aux')) + list(path.glob('build/*.aux'))
|
2021-09-19 12:30:16 +02:00
|
|
|
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()
|
2022-04-26 09:02:36 +02:00
|
|
|
|
2021-09-19 12:30:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
selected_label = main(sys.argv)
|
|
|
|
print(selected_label)
|