[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [STUMP] using threads in mode line modules to avoid blocking
From: |
Joseph Mingrone |
Subject: |
Re: [STUMP] using threads in mode line modules to avoid blocking |
Date: |
Tue, 03 Mar 2015 23:22:04 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4 (berkeley-unix) |
David Bjergaard <address@hidden> writes:
> Thinking out loud (this is beyond my expertise), could it be that your
> thread isn't being terminated properly if you lose connection to the
> remote host? If stumpwm (or the lisp kernel) polls your thread and gets
> no response, it probably just hangs there waiting.
>
> Someone with more experience may have better insights.
>
> Dave
I tested a new version that only creates one thread and keeps it
running. It causes the same choppiness, so I don't think that is the
problem.
Joseph
;; swm-maildir-modline.lisp
;;
;; Put %m in your modeline format string to show number of new mails
;;
(in-package #:swm-maildir-modeline)
(defvar *checking-flag* nil)
(defvar *host* "myhost")
(defvar *interval* 60)
(defvar *maildir-prev-time* 0)
(defvar *new-mail-count* "")
(defvar *port* "22")
(defvar *path* "mail/new")
(defvar *user* "me")
(defun check-new-messages ()
(sb-thread:make-thread
(lambda ()
(loop
(setf *new-mail-count*
(string-trim
'(#\Space #\Tab #\Newline)
(stumpwm::run-prog-collect-output
stumpwm::*shell-program* "-c"
(concatenate 'string "/usr/bin/ssh -p " *port*
" -x -o ConnectTimeout=1 " *user*
"@" *host* " 'ls " *path*
" | wc -l'"))))
(sleep *interval*)))
:name "check-new-messages-thread"))
(defun fmt-maildir-modeline (ml)
"Return the number of new mails"
(when (not *checking-flag*)
(setf *checking-flag* t)
(check-new-messages))
(when (string= *new-mail-count* "0")
(setf *new-mail-count* ""))
(format nil "~a" *new-mail-count*))
;; Install formatter
(stumpwm::add-screen-mode-line-formatter #\m #'fmt-maildir-modeline)