* guile: some update for the output format

This commit is contained in:
djcb 2013-07-23 22:22:57 +03:00
parent b7324d5af6
commit b7219aaf82
3 changed files with 29 additions and 23 deletions

View File

@ -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)))

View File

@ -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

View File

@ -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=<query>: limit to messages matching query
;; INFO: --muhome=<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))