]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/play/zone.el (zone): Allow selecting a program
authorPhilip Kaludercic <philipk@posteo.net>
Tue, 11 Oct 2022 10:28:45 +0000 (12:28 +0200)
committerPhilip Kaludercic <philipk@posteo.net>
Fri, 14 Oct 2022 16:07:51 +0000 (18:07 +0200)
lisp/play/zone.el

index b0ce0194cf0e4dd3ad1357772884f44fcba371bb..5ea5bbc92676ab89362615805ec8cd72cd828c97 100644 (file)
@@ -103,9 +103,24 @@ If the element is a function or a list of a function and a number,
                  program))))
 
 ;;;###autoload
-(defun zone ()
-  "Zone out, completely."
-  (interactive)
+(defun zone (&optional pgm)
+  "Zone out, completely.
+With a prefix argument the user is prompted for a program to run.
+When called from Lisp the optional argument PGM can be used to
+run a specific program.  The program must be a member of
+`zone-programs'."
+  (interactive
+   (and current-prefix-arg
+        (let ((choice (completing-read
+                       "Program: "
+                       (mapcar
+                        (lambda (prog)
+                          (substring (symbol-name prog) 9))
+                        zone-programs)
+                       nil t)))
+          (list (intern (concat "zone-pgm-" choice))))))
+  (unless pgm
+    (setq pgm (aref zone-programs (random (length zone-programs)))))
   (save-window-excursion
     (let ((f (selected-frame))
           (outbuf (get-buffer-create "*zone*"))
@@ -125,8 +140,7 @@ If the element is a function or a list of a function and a number,
       (set-window-start (selected-window) (point-min))
       (set-window-point (selected-window) wp)
       (sit-for 0 500)
-      (let ((pgm (elt zone-programs (random (length zone-programs))))
-            (ct (and f (frame-parameter f 'cursor-type)))
+      (let ((ct (and f (frame-parameter f 'cursor-type)))
             (show-trailing-whitespace nil)
             restore)
         (when ct