-
Notifications
You must be signed in to change notification settings - Fork 0
/
nautilus-latex.py
218 lines (169 loc) · 6.7 KB
/
nautilus-latex.py
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
# Copyright (C) 2018 Maximilian Schambach
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
"""Nautilus extension for LaTex related tasks.
"""
import os
import sys
try:
import ConfigParser as configparser
except ImportError:
import configparser
from gi.repository import Nautilus, GObject
SRC_PATH="@SRC_PATH@"
config = configparser.ConfigParser()
# Read config file, either in 'src' or in 'nautilus-latex-src'
_out = config.read(os.path.join(SRC_PATH, "config.ini"))
if _out == []:
_out = config.read(os.path.join(SRC_PATH, "src/config.ini"))
if _out == []:
raise RuntimeError("nautilus-latex: No config file found.")
compiler_def = config.get('default', 'compiler')
compiler = config.get('compiler', compiler_def).replace("'", "")
bib_def = config.get('default', 'bibliography')
bib = config.get('bibliography', bib_def).replace("'", "")
# Load modules from SRC path
sys.path.append(SRC_PATH)
from latex_cleanup import get_extensions
from latex_cleanup import latex_cleanup
from latex_cleanup import is_tex_folder
from support import get_path
from support import get_tex_files
from support import compile_tex
from support import compile_latexmk
class LatexExtension(Nautilus.MenuProvider, GObject.GObject):
def __init__(self):
pass
def get_file_items(self, window, files):
# Read files
if len(files) != 1:
return
file = files[0]
if file.is_directory() or file.get_uri_scheme() != 'file':
return
if not file.get_uri().lower().endswith(".tex"):
return
filepath = get_path(file)
folderpath = os.path.dirname(filepath)
# Top Menu
top_menuitem = Nautilus.MenuItem(name='LatexExtension::Latex',
label='LaTex',
tip='',
icon='')
# Main Sub Menu
top_submenu = Nautilus.Menu()
# Menu Item: LaTex Compilation
compile_menuitem = Nautilus.MenuItem(
name='LatexExtension::Compile',
label='Compile File',
tip='',
icon='')
compile_menuitem.connect(
'activate', self.compile_menu_cb, filepath)
# Sub Menu Item: Ĺatexmk
latexmk_menuitem = Nautilus.MenuItem(
name='LatexExtension::Latexmk',
label='Latexmk',
tip='',
icon='')
latexmk_menuitem.connect(
'activate', self.latexmk_menu_cb, folderpath)
# Sub Menu Item: LaTex Cleanup
cleanup_menuitem = Nautilus.MenuItem(
name='LatexExtension::Cleanup',
label='Cleanup temporary LaTex files',
tip='',
icon='')
cleanup_menuitem.connect(
'activate', self.cleanup_menu_cb, folderpath)
# Add menu items to main submenu
top_submenu.append_item(cleanup_menuitem)
top_submenu.append_item(latexmk_menuitem)
top_submenu.append_item(compile_menuitem)
# Add main submenu
top_menuitem.set_submenu(top_submenu)
return top_menuitem,
def get_background_items(self, window, file):
# Get system path to folder
folderpath = get_path(file)
# Check if folder contains tex files, no menu if not
if not is_tex_folder(folderpath):
return
# Get list of tex files in folder
tex_files = get_tex_files(folderpath)
# Top Menu
top_menuitem = Nautilus.MenuItem(name='LatexExtension::LatexBG',
label='LaTex',
tip='',
icon='')
# Main Sub Menu
top_submenu = Nautilus.Menu()
# Sub Menu Item: LaTex Cleanup
cleanup_menuitem = Nautilus.MenuItem(
name='LatexExtension::CleanupBG',
label='Cleanup temporary LaTex files',
tip='',
icon='')
cleanup_menuitem.connect(
'activate', self.cleanup_menu_cb, folderpath)
# Sub Menu Item: Latexmk
latexmk_menuitem = Nautilus.MenuItem(
name='LatexExtension::LatexmkBG',
label='Run Latexmk',
tip='',
icon='')
latexmk_menuitem.connect(
'activate', self.latexmk_menu_cb, folderpath)
# Create submenu entry for every tex file in folder
# Sub Menu Item: LaTex Compilation
compile_menuitem = Nautilus.MenuItem(
name='LatexExtension::CompileBG',
label='Compile',
tip='',
icon='')
# Compile Sub Menu
compile_submenu = Nautilus.Menu()
for tex_file in tex_files:
# Get filename base
tex_file_base = os.path.basename(tex_file)
compile_sub_menuitem = Nautilus.MenuItem(
name='LatexExtension::CompileSubBG' + tex_file_base,
label=tex_file_base,
tip='Compile file ' + tex_file_base,
icon='')
compile_sub_menuitem.connect(
'activate', self.compile_menu_cb, tex_file)
# Add compile submenu items
compile_submenu.append_item(compile_sub_menuitem)
# Add compile submenu
compile_menuitem.set_submenu(compile_submenu)
# Add menu items to main submenu
top_submenu.append_item(cleanup_menuitem)
top_submenu.append_item(latexmk_menuitem)
top_submenu.append_item(compile_menuitem)
# Add main submenu
top_menuitem.set_submenu(top_submenu)
return top_menuitem,
# Callback functions
def compile_menu_cb(self, menu, filepath):
print("Compiling LaTex file ", filepath)
compile_tex(filepath, compiler, bib)
# Callback functions
def latexmk_menu_cb(self, menu, filepath):
print("Compiling with latexmk in folder", filepath)
compile_latexmk(filepath)
def cleanup_menu_cb(self, menu, filepath):
print("Removing temporary files in: ", filepath)
print("Deleting files with extensions: ", get_extensions())
latex_cleanup(filepath, get_extensions())