From b7219aaf829b59d47537f438ec91074b76b21126 Mon Sep 17 00:00:00 2001 From: djcb Date: Tue, 23 Jul 2013 22:22:57 +0300 Subject: [PATCH] * guile: some update for the output format --- guile/mu/plot.scm | 21 +++++++++++++-------- guile/mu/script.scm | 18 +++++++++--------- guile/scripts/msgs-per-day.scm | 13 +++++++------ 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/guile/mu/plot.scm b/guile/mu/plot.scm index ab46870c..ce5ea691 100644 --- a/guile/mu/plot.scm +++ b/guile/mu/plot.scm @@ -45,24 +45,29 @@ not found." (if (access? progpath X_OK) ;; is progpath #f)))) -2 -(define* (mu:plot-histogram data title x-label y-label #:optional (text-only #f) (extra-gnuplot-opts '())) - "Plot DATA with TITLE, X-LABEL and X-LABEL. If TEXT-ONLY is true, -display using raw text, otherwise, use a graphical window. DATA is a -list of cons-pairs (X . Y)." + +(define* (mu:plot-histogram data title x-label y-label output + #:optional (extra-gnuplot-opts '())) + "Plot DATA with TITLE, X-LABEL and X-LABEL using the gnuplot +program. DATA is a list of cons-pairs (X . Y). OUTPUT is a string +that determines the type of output that gnuplot produces, depending on +the system. Which options are available depends on the particulars for +the gnuplot installation, but typical examples would be \"dumb\" for +text-only display, \"wxterm\" to write to a graphical window, or +\"png\" to write a PNG-image to stdout. EXTRA-GNUPLOT-OPTS are any +additional options for gnuplot." (if (not (find-program-in-path "gnuplot")) (error "cannot find 'gnuplot' in path")) - (let ((datafile (export-pairs data)) (gnuplot (open-pipe "gnuplot -p" OPEN_WRITE))) (display (string-append "reset\n" - "set term " (if text-only "dumb" "wxt") "\n" + "set term " (or output "dumb") "\n" "set title \"" title "\"\n" "set xlabel \"" x-label "\"\n" "set ylabel \"" y-label "\"\n" "set boxwidth 0.9\n" - (string-join extra-gnuplot-opts "\n") + (string-join extra-gnuplot-opts "\n") "plot \"" datafile "\" using 2:xticlabels(1) with boxes fs solid\n") gnuplot) (close-pipe gnuplot))) diff --git a/guile/mu/script.scm b/guile/mu/script.scm index dfd9246c..3a629488 100644 --- a/guile/mu/script.scm +++ b/guile/mu/script.scm @@ -34,23 +34,23 @@ Interpret argument-list ARGS (like command-line arguments). Possible arguments are: --help (show some help and exit) --muhome (path to alternative mu home directory) - --textonly (don't show any graphical windows) + --output (a string describing the output, e.g. \"dumb\", \"png\" \"wxt\") searchexpr (a search query) -then call FUNC with args SEARCHEXPR and TEXTONLY." - (setlocale LC_ALL "") - (let* ((optionspec '( (muhome (value #t)) - (query (value #t)) - (textonly (value #f)) - (help (single-char #\h) (value #f)))) +then call FUNC with args SEARCHEXPR and OUTPUT." + (setlocale LC_ALL "") + (let* ((optionspec '((muhome (value #t)) + (query (value #t)) + (output (value #f)) + (help (single-char #\h) (value #f)))) (options (getopt-long args optionspec)) (query (option-ref options 'query #f)) (help (option-ref options 'help #f)) - (textonly (option-ref options 'textonly #f)) + (output (option-ref options 'output #f)) (muhome (option-ref options 'muhome #f)) (restargs (option-ref options '() #f))) (if help (help-and-exit)) (mu:initialize muhome) - (func (or query "") textonly))) + (func (or query "") output))) ;; Local Variables: ;; mode: scheme diff --git a/guile/scripts/msgs-per-day.scm b/guile/scripts/msgs-per-day.scm index a8db78d3..824f5568 100755 --- a/guile/scripts/msgs-per-day.scm +++ b/guile/scripts/msgs-per-day.scm @@ -19,18 +19,19 @@ exec guile -e main -s $0 $@ ;; along with this program; if not, write to the Free Software Foundation, ;; Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -;; INFO: graph the number of messages per day +;; INFO: graph the number of messages per day (using gnuplot) ;; INFO: options: ;; INFO: --query=: limit to messages matching query ;; INFO: --muhome=: path to mu home dir -;; INFO: --textonly: output in text-only format +;; INFO: --output: the output format, such as "png", "wxt" +;; INFO: (depending on the environment) (use-modules (mu) (mu script) (mu stats) (mu plot)) -(define (per-day expr text-only) +(define (per-day expr output) "Count the total number of messages for each weekday (0-6 for -Sun..Sat) that match EXPR. If PLAIN-TEXT is true, use a plain-text -display, otherwise, use a graphical window." +Sun..Sat) that match EXPR. OUTPUT corresponds to the output format, as +per gnuplot's 'set terminal'." (mu:plot-histogram (mu:weekday-numbers->names (sort (mu:tabulate @@ -38,7 +39,7 @@ display, otherwise, use a graphical window." (tm:wday (localtime (mu:date msg)))) expr) (lambda (x y) (< (car x) (car y))))) (format #f "Messages per weekday matching ~a" expr) - "Day" "Messages" text-only)) + "Day" "Messages" output)) (define (main args) (mu:run-stats args per-day))