Hi,

I've been playing around writing some mode line modules.  I quickly
realized that anything that blocks, blocks the whole window manager.
Using threads improves the situation, but there are still hiccups.
These hiccups mean that hitting the prefix key results in a pause before
the rat shows up.  This can be annoying because no one waits for the
rat before pressing the subsequent keys.

Below is some code that checks a remote maildir directory for new
messages.  The hiccups occur when the connection to the remote host is
broken.  Why this is?  I hoped that threading would have meant a
smoother experience.

Joseph

(defun fmt-maildir-modeline (ml)
  "Return the number of new mails"
  (declare (ignore ml))
  (let ((now (/ (get-internal-real-time) internal-time-units-per-second)))
    (when (or (= 0 *maildir-prev-time*) (>= (- now *maildir-prev-time*) 60))
      (setf *maildir-prev-time* now)
      (sb-thread:make-thread
       (lambda ()
         (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'"))))))))
  (when (string= *new-mail-count* "0")
    (setf *new-mail-count* ""))
  (format nil "~a" *new-mail-count*))


_______________________________________________
Stumpwm-devel mailing list
Stumpwm-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/stumpwm-devel

Reply via email to