From fb55d903fe8d2b24e2a45800d43e3ac359c19bc9 Mon Sep 17 00:00:00 2001 From: Jonathan Grizou Date: Sun, 7 Jul 2013 21:12:30 +0200 Subject: [PATCH] Ad generate_pdf command. --- papers/plugs/texnote/texnote.py | 49 ++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/papers/plugs/texnote/texnote.py b/papers/plugs/texnote/texnote.py index a41c701..a840d71 100644 --- a/papers/plugs/texnote/texnote.py +++ b/papers/plugs/texnote/texnote.py @@ -44,6 +44,7 @@ class TexnotePlugin(PapersPlugin): ('edit_template', self.edit_template), ('generate_bib', self.generate_bib), ('clean', self.clean), + ('generate_pdf', self.generate_pdf), ]) def _ensure_init(self): @@ -84,14 +85,26 @@ class TexnotePlugin(PapersPlugin): help='open the style', default=False) # generate_bib p = sub.add_parser('generate_bib', - help='generate the latex bib used by texnote') + help='generate the latex bib used by texnote') # clean p = sub.add_parser('clean', - help='delete all but tex files in the texnote folder') + help='delete all but tex files and pdf document in the texnote folder') p.add_argument('-f', '--force', action='store_true', - help='do not ask for confirmation', default=False) + help='do not ask for confirmation', default=False) p.add_argument('-d', '--deep', action='store_true', - help='also delete tex file that are not associated a paper', default=False) + help='also delete tex file and pdf document that are not associated to a paper', default=False) + p.add_argument('-p', '--pdf', action='store_true', + help='also delete all pdf document', default=False) + # generate_pdf + p = sub.add_parser('generate_pdf', + help='compile a texnote from its reference') + add_references_argument(p, single=True) + p.add_argument('-v', '--view', action='store_true', + help='open the resulting note in a pdf viewer', default=False) + p.add_argument('-w', '--with', dest='with_command', default=None, + help='command to use to open the pdf') + p.add_argument('-C', '--noclean', action='store_false', dest='clean', + help="don't clean document afterwards") return parser def command(self, args): @@ -177,14 +190,17 @@ class TexnotePlugin(PapersPlugin): cmd = 'papers list -k |xargs papers export >> {}'.format(TPL_BIB) os.system(cmd) - def clean(self, force=False, deep=False): + def clean(self, force=False, deep=False, pdf=False): if deep: rp = repo.Repository(config()) + to_keep = ['.tex'] + if not pdf: + to_keep.append('.pdf') for f in os.listdir(DIR): path = os.path.join(DIR, f) if os.path.isfile(path): name, extension = os.path.splitext(path) - if extension == '.tex': + if extension in to_keep: if not deep: continue citekey, _ = os.path.splitext(f) @@ -197,7 +213,26 @@ class TexnotePlugin(PapersPlugin): if force or sure: os.remove(path) - + def generate_pdf(self, reference, view=False, with_command=None, clean=True): + rp = repo.Repository(config()) + citekey = parse_reference(rp, reference) + origWD = os.getcwd() # remember our original working directory + os.chdir(DIR) + FNULL = open(os.devnull, 'w') + path = self.get_texfile(citekey, autofill=True) + filename, extension = os.path.splitext(path) + subprocess.call(['pdflatex', filename], stdout=FNULL) + subprocess.call(['bibtex', filename], stdout=FNULL) + subprocess.call(['pdflatex', filename], stdout=FNULL) + subprocess.call(['pdflatex', filename], stdout=FNULL) + subprocess.call(['pdflatex', filename], stdout=FNULL) + os.chdir(origWD) # get back to our original working directory + if clean: + self.clean(force=True) + if view: + if with_command is None: + with_command = config().open_cmd + subprocess.Popen([with_command, filename+'.pdf']) @AddEvent.listen()