* Updated agenda printer script
@ 2007-06-03 20:44 Jason F. McBrayer
2007-06-04 7:01 ` Carsten Dominik
0 siblings, 1 reply; 5+ messages in thread
From: Jason F. McBrayer @ 2007-06-03 20:44 UTC (permalink / raw)
To: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 615 bytes --]
And, as promised, here's the updated version of the agenda printer
script. This version has only bugfixes and compatibility fixes.
There are some more fundamental changes (listed in the TODOs in the
source comments) that need to be made, but I'm waiting on a round tuit
for them. I hope people find this useful, and that it is more usable
for them than the previous version.
Changes:
1. Uses os.popen3 rather than the subprocess module; as a result, it
should work with python versions earlier than 2.4.
2. Better quoting for characters in headlines that could cause
problems in the LaTeX output.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Agenda printer script --]
[-- Type: text/x-python, Size: 5127 bytes --]
#!/usr/bin/python
#
# pyagenda -- export an org agenda to PDF
#
# (c) 2007, Jason F. McBrayer
# Version: 1.1
# This file is a stand-alone program.
#
# Legalese:
# pyagenda 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 2, or (at your option)
# any later version.
#
# pyagenda 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.
#
# Documentation:
# pyagenda is a short python program for taking a formatted agenda
# from org-mode (via org-batch-agenda-csv) and producing a PDF-format
# planner page that can be inserted in a planner binder. Run
# 'pyagenda --help' for usage.
#
# Currently, this is only a crude 'worksforme' implementation, with
# many things being hardcoded. It produces an output file named
# cmdkey.pdf where 'cmdkey' is the key given to
# org-agenda-custom-commands. Not all arbitrary searches will work.
# Be aware that it may overwrite cmdkey.tex, cmdkey.log, cmdkey.aux,
# etc. The output size is hardcoded to 5.5x8.0in, which is suitable
# for a Circa or Rollabind junior sized planner. The output is not
# suitable for daily/weekly agenda views, and does not present all the
# information it could. If you want to change any of the output, edit
# the TEX_* constants.
#
# TODO:
# 1. Use safer tmpfile handling.
# 2. Nicer command-line handling.
# 3. Prettier output, including use of more of the information
# passed by org-batch-agenda-csv.
#
import csv
import sys
import os
#from subprocess import Popen, PIPE, call
from os import popen3
import re
EMACS = 'emacs'
INIT_FILE = "~/.emacs.d/init.el" # Most people should use "~/.emacs" instead
AGENDA_COMMAND = '(org-batch-agenda-csv "%s")'
REMOVE_INTERMEDIATES = True # Remove generated latex & tex's log/aux files.
TEX_HEADER = """
\\documentclass[twoside, american]{article}
\\usepackage[T1]{fontenc}
\\usepackage[latin1]{inputenc}
\\usepackage{pslatex}
\\usepackage{geometry}
\\geometry{verbose,paperwidth=5.5in,paperheight=8in,tmargin=0.25in,bmargin=0.25in,lmargin=0.5in,rmargin=0.25in}
\\pagestyle{empty}
\\setlength{\\parskip}{\\medskipamount}
\\setlength{\\parindent}{0pt}
\\usepackage{calc}
\\makeatletter
\\newcommand{\\myline}[1]{
{#1 \\hrule width \\columnwidth }
}
\\usepackage{babel}
\\makeatother
\\begin{document}
\\part*{\\textsf{Actions}\\hfill{}%%
\\framebox{\\begin{minipage}[t][1em][t]{0.25\\paperwidth}%%
\\textsf{%s} \\hfill{}%%
\\end{minipage}}%%
\\protect \\\\
}
\\myline{\\normalsize}
"""
TEX_FOOTER = """
\\end{document}
"""
TEX_ITEM = """
%%
\\framebox{\\begin{minipage}[c][0.5em][c]{0.5em}%%
\\hfill{}%%
\\end{minipage}}%%
%%
\\begin{minipage}[c][1em]{1em}%%
\\hfill{}%%
\\end{minipage}%%
\\textsf{%s}\\\\
\\myline{\\normalsize}
"""
class AgendaItem(object):
def __init__(self, data=None):
if data:
self.category = data[0]
self.headline = data[1]
self.type = data[2]
self.todo = data[3]
self.tags = data[4].split(':')
self.date = data[5]
self.time = data[6]
self.extra = data[7]
self.prio = data[8]
self.fullprio = data[9]
def get_agenda_items(cmdkey):
#output = Popen([EMACS, "-batch", "-l", INIT_FILE,
# "-eval", AGENDA_COMMAND % cmdkey ],
# stdout=PIPE, stderr=PIPE)
_, output, _ = popen3("'%s' -batch -l '%s' -eval '%s'" %
(EMACS, INIT_FILE, AGENDA_COMMAND % cmdkey))
reader = csv.reader(output)
items = []
for row in reader:
items.append(AgendaItem(row))
return items
def usage():
print "Usage: pyagenda 'cmd-key' [label]"
print " cmd-key is an org agenda custom command key, or an "
print " org-agenda tags/todo match string."
print " label (optional) is a context label to be printed "
print " at the top of your agenda page."
def main():
try:
search = sys.argv[1]
except IndexError:
usage()
sys.exit(1)
if search == "--help" or search == "-h":
usage()
sys.exit(0)
try:
label = sys.argv[2]
except IndexError:
label = ""
texfile = file(search + ".tex", 'w')
texfile.write(TEX_HEADER % label + "\n")
for item in get_agenda_items(search):
#texfile.write(TEX_ITEM %
# item.headline.replace('&', r'\&') + "\n" )
texfile.write(TEX_ITEM %
re.sub(r'([&_#])', r'\\\1', item.headline))
texfile.write(TEX_FOOTER)
texfile.close()
#call(['pdflatex', texfile.name], stdout=PIPE, stderr=PIPE)
_, output, _ = popen3("pdflatex '%s'" % texfile.name)
output.read() # pdflatex needs this in order to complete.
if REMOVE_INTERMEDIATES:
os.unlink(texfile.name)
os.unlink(search + ".aux")
os.unlink(search + ".log")
if __name__ == '__main__':
main()
[-- Attachment #3: Type: text/plain, Size: 316 bytes --]
--
+-----------------------------------------------------------+
| Jason F. McBrayer jmcbray@carcosa.net |
| If someone conquers a thousand times a thousand others in |
| battle, and someone else conquers himself, the latter one |
| is the greatest of all conquerors. --- The Dhammapada |
[-- Attachment #4: Type: text/plain, Size: 149 bytes --]
_______________________________________________
Emacs-orgmode mailing list
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Updated agenda printer script
2007-06-03 20:44 Updated agenda printer script Jason F. McBrayer
@ 2007-06-04 7:01 ` Carsten Dominik
2007-06-04 13:10 ` Jason F. McBrayer
0 siblings, 1 reply; 5+ messages in thread
From: Carsten Dominik @ 2007-06-04 7:01 UTC (permalink / raw)
To: Jason F. McBrayer; +Cc: emacs-orgmode
This looks great.
Are you planning to put this up on a website so that I can link
to your site? Or is it time to start that "contrib" directory
in the org-mode distribution... ?
- Carsten
On Jun 3, 2007, at 22:44, Jason F. McBrayer wrote:
> And, as promised, here's the updated version of the agenda printer
> script. This version has only bugfixes and compatibility fixes.
> There are some more fundamental changes (listed in the TODOs in the
> source comments) that need to be made, but I'm waiting on a round tuit
> for them. I hope people find this useful, and that it is more usable
> for them than the previous version.
>
> Changes:
> 1. Uses os.popen3 rather than the subprocess module; as a result, it
> should work with python versions earlier than 2.4.
> 2. Better quoting for characters in headlines that could cause
> problems in the LaTeX output.
>
> <pyagenda>
>
> --
> +-----------------------------------------------------------+
> | Jason F. McBrayer jmcbray@carcosa.net |
> | If someone conquers a thousand times a thousand others in |
> | battle, and someone else conquers himself, the latter one |
> | is the greatest of all conquerors. --- The Dhammapada |
> _______________________________________________
> Emacs-orgmode mailing list
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
--
Carsten Dominik
Sterrenkundig Instituut "Anton Pannekoek"
Universiteit van Amsterdam
Kruislaan 403
NL-1098SJ Amsterdam
phone: +31 20 525 7477
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Updated agenda printer script
2007-06-04 7:01 ` Carsten Dominik
@ 2007-06-04 13:10 ` Jason F. McBrayer
2007-06-04 13:14 ` Leo
0 siblings, 1 reply; 5+ messages in thread
From: Jason F. McBrayer @ 2007-06-04 13:10 UTC (permalink / raw)
To: Carsten Dominik; +Cc: emacs-orgmode
Carsten Dominik <dominik@science.uva.nl> writes:
> This looks great.
Thanks!
> Are you planning to put this up on a website so that I can link
> to your site? Or is it time to start that "contrib" directory
> in the org-mode distribution... ?
I am going to put it up on my website; I just wanted a little feedback
from people before doing so. I got some good bug reports for the
first version, which I've fixed, so I guess it's ready to get posted.
I'll post the address once it's there.
--
+-----------------------------------------------------------+
| Jason F. McBrayer jmcbray@carcosa.net |
| If someone conquers a thousand times a thousand others in |
| battle, and someone else conquers himself, the latter one |
| is the greatest of all conquerors. --- The Dhammapada |
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Updated agenda printer script
2007-06-04 13:10 ` Jason F. McBrayer
@ 2007-06-04 13:14 ` Leo
2007-06-04 14:09 ` Jason F. McBrayer
0 siblings, 1 reply; 5+ messages in thread
From: Leo @ 2007-06-04 13:14 UTC (permalink / raw)
To: emacs-orgmode
----- Jason F. McBrayer (2007-06-04) wrote:-----
>> Are you planning to put this up on a website so that I can link to
>> your site? Or is it time to start that "contrib" directory in the
>> org-mode distribution... ?
>
> I am going to put it up on my website; I just wanted a little feedback
> from people before doing so. I got some good bug reports for the
> first version, which I've fixed, so I guess it's ready to get posted.
> I'll post the address once it's there.
Can that python script be converted to elisp?
--
Leo <sdl.web AT gmail.com> (GPG Key: 9283AA3F)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Re: Updated agenda printer script
2007-06-04 13:14 ` Leo
@ 2007-06-04 14:09 ` Jason F. McBrayer
0 siblings, 0 replies; 5+ messages in thread
From: Jason F. McBrayer @ 2007-06-04 14:09 UTC (permalink / raw)
To: Leo; +Cc: emacs-orgmode
Leo <sdl.web@gmail.com> writes:
> Can that python script be converted to elisp?
It would be pretty simple to write something similar in elisp -- all
the script does is parse the output of org-batch-agenda-csv and
interpolate selected bits of it into a LaTeX skeleton. Of course, if
you were doing this in elisp, you wouldn't want to go all the way to
CSV and back; you'd want to basically copy most of
org-batch-agenda-csv to your function and make it write the LaTeX
output instead of the csv. I guess I could do this once I got a round
tuit, but as I'm more comfortable in python than lisp, I'm not
strongly motivated to do it...
--
+-----------------------------------------------------------+
| Jason F. McBrayer jmcbray@carcosa.net |
| If someone conquers a thousand times a thousand others in |
| battle, and someone else conquers himself, the latter one |
| is the greatest of all conquerors. --- The Dhammapada |
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-06-04 14:09 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-03 20:44 Updated agenda printer script Jason F. McBrayer
2007-06-04 7:01 ` Carsten Dominik
2007-06-04 13:10 ` Jason F. McBrayer
2007-06-04 13:14 ` Leo
2007-06-04 14:09 ` Jason F. McBrayer
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.