Re: [STUMP] using threads in mode line modules to avoid blocking

Joseph Mingrone <[email protected]>
Newsgroups gmane.comp.window-managers.stumpwm.devel
Message-ID <[email protected]>
David Bjergaard <[email protected]> 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)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.