Skip to content

Commit

Permalink
* guile: some update for the output format
Browse files Browse the repository at this point in the history
  • Loading branch information
djcb committed Jul 23, 2013
1 parent b7324d5 commit b7219aa
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 23 deletions.
21 changes: 13 additions & 8 deletions guile/mu/plot.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
Expand Down
18 changes: 9 additions & 9 deletions guile/mu/script.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 7 additions & 6 deletions guile/scripts/msgs-per-day.scm
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,27 @@ 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
(lambda (msg)
(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))
Expand Down

0 comments on commit b7219aa

Please sign in to comment.