Index: main/cursor.lisp
===================================================================
--- main/cursor.lisp	(revision main,61)
+++ main/cursor.lisp	(revision main,85)
@@ -1,5 +1,6 @@
 (defpackage #:tui-cursor
   (:use #:cl #:cffi #:tui-window)
-  (:export #:cursor-position #:set-cursor-visible))
+  (:export #:cursor-position #:cursor-visible #:set-cursor-visible
+           #:let-cursor-visible))
 
 (in-package #:tui-cursor)
@@ -37,5 +38,19 @@
   (visibility :int))
 
+(defvar *cursor-visibility* t)
+
+(defun cursor-visible ()
+  *cursor-visibility*)
+
 (defun set-cursor-visible (flag)
   (curs-set (if flag 1 0))
-  flag)
+  (setf *cursor-visibility* flag))
+
+(defsetf cursor-visible set-cursor-visible)
+
+(defmacro let-cursor-visible (flag &body body)
+  (dso-util:with-gensyms (old)
+    `(let ((,old (cursor-visible)))
+       (setf (cursor-visible) ,flag)
+       (unwind-protect (progn ,@body)
+         (setf (cursor-visible) ,old)))))
