>From ceccf438ab2cf6ee5c1b04e7b59e566ab22ac124 Mon Sep 17 00:00:00 2001 From: Morgan Veyret Date: Mon, 20 Jul 2009 17:53:18 +0200 Subject: [PATCH 13/13] Changed contrib/disk.lisp to use a timer to update disk usage informations. Calling run-shell-command for each modeline refresh was both useless and source of clisp 2.47 segfault in certain conditions. --- contrib/disk.lisp | 20 ++++++++++++++++++-- 1 files changed, 18 insertions(+), 2 deletions(-) diff --git a/contrib/disk.lisp b/contrib/disk.lisp index b230545..1e1b6fd 100644 --- a/contrib/disk.lisp +++ b/contrib/disk.lisp @@ -38,12 +38,24 @@ (dolist (a '((#\D disk-modeline))) (pushnew a *screen-mode-line-formatters* :test 'equal)) +(defvar *disk-usage-timer* nil) +(defvar *disk-usage-update-time* 900) (defvar *disk-usage* nil) +(defun disk-usage-set-update-time (time-in-seconds) + "Set the disk usage update interval." + (when *disk-usage-timer* + (cancel-timer *disk-usage-timer*)) + (setf *disk-usage-update-time* time-in-seconds) + (setf *disk-usage-timer* + (run-with-timer *disk-usage-update-time* *disk-usage-update-time* + 'disk-usage-update *disk-usage-paths*))) + + (defun disk-usage-tokenize (usage-line-str) (ppcre:split "(\\s+)" usage-line-str)) -(defun disk-update-usage (paths) +(defun disk-usage-update (paths) (setf *disk-usage* (with-input-from-string (usage-str (run-shell-command @@ -75,7 +87,11 @@ (defun disk-modeline (ml) (declare (ignore ml)) - (disk-update-usage *disk-usage-paths*) + (unless *disk-usage-timer* + (disk-usage-update *disk-usage-paths*) + (setf *disk-usage-timer* + (run-with-timer *disk-usage-update-time* *disk-usage-update-time* + 'disk-usage-update *disk-usage-paths*))) (let ((fmts (loop for p in *disk-usage-paths* collect (format-expand *disk-formatters-alist* *disk-modeline-fmt* -- 1.6.3.3