aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuanma Barranquero2013-07-25 11:24:26 +0200
committerJuanma Barranquero2013-07-25 11:24:26 +0200
commitf63ebeb54e453b3da139d3495eb2f1f59bab46c7 (patch)
tree87fddc406b8e5eae07b5c4b1794c14945930cb14
parent025309873b9f363d226694953e66ee98d8b11683 (diff)
downloademacs-f63ebeb54e453b3da139d3495eb2f1f59bab46c7.tar.gz
emacs-f63ebeb54e453b3da139d3495eb2f1f59bab46c7.zip
lisp/desktop.el: Use pcase-let, pcase-let* in a few places.
(desktop--select-frame, desktop--sort-states, desktop-restore-frames): Deobfuscate access to desktop--mini values.
-rw-r--r--lisp/ChangeLog2
-rw-r--r--lisp/desktop.el58
2 files changed, 30 insertions, 30 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 455c9cdd2e3..384e15f758c 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -5,6 +5,8 @@
5 (desktop--filter-save-desktop-parm, desktop--process-minibuffer-frames) 5 (desktop--filter-save-desktop-parm, desktop--process-minibuffer-frames)
6 (desktop--select-frame, desktop--sort-states, desktop-restore-frames): 6 (desktop--select-frame, desktop--sort-states, desktop-restore-frames):
7 Change accordingly. 7 Change accordingly.
8 (desktop--select-frame, desktop--sort-states, desktop-restore-frames):
9 Use pcase-let, pcase-let* to deobfuscate access to desktop--mini values.
8 10
92013-07-25 Glenn Morris <rgm@gnu.org> 112013-07-25 Glenn Morris <rgm@gnu.org>
10 12
diff --git a/lisp/desktop.el b/lisp/desktop.el
index 4fff2ffbe7c..28c781d95e2 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -1228,33 +1228,34 @@ is the parameter list of the frame being restored. Internal use only."
1228 ;; session has already been loaded. The other main use case, which 1228 ;; session has already been loaded. The other main use case, which
1229 ;; is the initial desktop-read upon starting Emacs, should usually 1229 ;; is the initial desktop-read upon starting Emacs, should usually
1230 ;; only have one, or very few, frame(s) to reuse. 1230 ;; only have one, or very few, frame(s) to reuse.
1231 (cond (;; When the target is tty, every existing frame is reusable. 1231 (cond ((null display)
1232 (null display) 1232 ;; When the target is tty, every existing frame is reusable.
1233 (setq frame (desktop--find-frame nil display))) 1233 (setq frame (desktop--find-frame nil display)))
1234 (;; If the frame has its own minibuffer, let's see whether 1234 ((car (setq mini (cdr (assq 'desktop--mini frame-cfg))))
1235 ;; If the frame has its own minibuffer, let's see whether
1235 ;; that frame has already been loaded (which can happen after 1236 ;; that frame has already been loaded (which can happen after
1236 ;; M-x desktop-read). 1237 ;; M-x desktop-read).
1237 (car (setq mini (cdr (assq 'desktop--mini frame-cfg))))
1238 (setq frame (or (desktop--find-frame 1238 (setq frame (or (desktop--find-frame
1239 (lambda (f m) 1239 (lambda (f m)
1240 (equal (frame-parameter f 'desktop--mini) m)) 1240 (equal (frame-parameter f 'desktop--mini) m))
1241 display mini)))) 1241 display mini))))
1242 (;; For minibufferless frames, check whether they already exist, 1242 (mini
1243 ;; For minibufferless frames, check whether they already exist,
1243 ;; and that they are linked to the right minibuffer frame. 1244 ;; and that they are linked to the right minibuffer frame.
1244 mini
1245 (setq frame (desktop--find-frame 1245 (setq frame (desktop--find-frame
1246 (lambda (f n) 1246 (lambda (f n)
1247 (let ((m (frame-parameter f 'desktop--mini))) 1247 (pcase-let (((and m `(,hasmini ,num))
1248 (frame-parameter f 'desktop--mini)))
1248 (and m 1249 (and m
1249 (null (cl-first m)) 1250 (null hasmini)
1250 (= (cl-second m) n) 1251 (= num n)
1251 (equal (cl-second (frame-parameter 1252 (equal (cl-second (frame-parameter
1252 (window-frame (minibuffer-window f)) 1253 (window-frame (minibuffer-window f))
1253 'desktop--mini)) 1254 'desktop--mini))
1254 n)))) 1255 n))))
1255 display (cl-second mini)))) 1256 display (cl-second mini))))
1256 (;; Default to just finding a frame in the same display. 1257 (t
1257 t 1258 ;; Default to just finding a frame in the same display.
1258 (setq frame (desktop--find-frame nil display)))) 1259 (setq frame (desktop--find-frame nil display))))
1259 ;; If found, remove from the list. 1260 ;; If found, remove from the list.
1260 (when frame 1261 (when frame
@@ -1320,14 +1321,12 @@ its window state. Internal use only."
1320 ;; Order: default minibuffer frame 1321 ;; Order: default minibuffer frame
1321 ;; other frames with minibuffer, ascending ID 1322 ;; other frames with minibuffer, ascending ID
1322 ;; minibufferless frames, ascending ID 1323 ;; minibufferless frames, ascending ID
1323 (let ((dm1 (cdr (assq 'desktop--mini (car state1)))) 1324 (pcase-let ((`(,_p1 ,hasmini1 ,num1 ,default1) (assq 'desktop--mini (car state1)))
1324 (dm2 (cdr (assq 'desktop--mini (car state2))))) 1325 (`(,_p2 ,hasmini2 ,num2 ,default2) (assq 'desktop--mini (car state2))))
1325 (cond ((cl-third dm1) t) 1326 (cond (default1 t)
1326 ((cl-third dm2) nil) 1327 (default2 nil)
1327 ((eq (cl-first dm1) (cl-first dm2)) 1328 ((eq hasmini1 hasmini2) (< num1 num2))
1328 (< (cl-second dm1) (cl-second dm2))) 1329 (t hasmini1))))
1329 (t
1330 (cl-first dm1)))))
1331 1330
1332(defun desktop-restoring-frames-p () 1331(defun desktop-restoring-frames-p ()
1333 "True if calling `desktop-restore-frames' will actually restore frames." 1332 "True if calling `desktop-restore-frames' will actually restore frames."
@@ -1353,10 +1352,10 @@ being set (usually, by reading it from the desktop)."
1353 1352
1354 (dolist (state desktop-saved-frame-states) 1353 (dolist (state desktop-saved-frame-states)
1355 (condition-case err 1354 (condition-case err
1356 (let* ((frame-cfg (car state)) 1355 (pcase-let* ((`(,frame-cfg . ,window-cfg) state)
1357 (window-cfg (cdr state)) 1356 ((and d-mini `(,hasmini ,num ,default))
1358 (d-mini (cdr (assq 'desktop--mini frame-cfg))) 1357 (cdr (assq 'desktop--mini frame-cfg)))
1359 num frame to-tty) 1358 (frame nil) (to-tty nil))
1360 ;; Only set target if forcing displays and the target display is different. 1359 ;; Only set target if forcing displays and the target display is different.
1361 (if (or (not forcing) 1360 (if (or (not forcing)
1362 (equal target (or (assq 'display frame-cfg) '(display . nil)))) 1361 (equal target (or (assq 'display frame-cfg) '(display . nil))))
@@ -1379,15 +1378,14 @@ being set (usually, by reading it from the desktop)."
1379 (cond 1378 (cond
1380 ((null d-mini)) ;; No desktop--mini. Process as normal frame. 1379 ((null d-mini)) ;; No desktop--mini. Process as normal frame.
1381 (to-tty) ;; Ignore minibuffer stuff and process as normal frame. 1380 (to-tty) ;; Ignore minibuffer stuff and process as normal frame.
1382 ((cl-first d-mini) ;; Frame has minibuffer (or it is minibuffer-only). 1381 (hasmini ;; Frame has minibuffer (or it is minibuffer-only).
1383 (setq num (cl-second d-mini))
1384 (when (eq (cdr (assq 'minibuffer frame-cfg)) 'only) 1382 (when (eq (cdr (assq 'minibuffer frame-cfg)) 'only)
1385 (setq frame-cfg (append '((tool-bar-lines . 0) (menu-bar-lines . 0)) 1383 (setq frame-cfg (append '((tool-bar-lines . 0) (menu-bar-lines . 0))
1386 frame-cfg)))) 1384 frame-cfg))))
1387 (t ;; Frame depends on other frame's minibuffer window. 1385 (t ;; Frame depends on other frame's minibuffer window.
1388 (let ((mb-frame (cdr (assq (cl-second d-mini) frame-mb-map)))) 1386 (let ((mb-frame (cdr (assq num frame-mb-map))))
1389 (unless (frame-live-p mb-frame) 1387 (unless (frame-live-p mb-frame)
1390 (error "Minibuffer frame %s not found" (cl-second d-mini))) 1388 (error "Minibuffer frame %s not found" num))
1391 (let ((mb-param (assq 'minibuffer frame-cfg)) 1389 (let ((mb-param (assq 'minibuffer frame-cfg))
1392 (mb-window (minibuffer-window mb-frame))) 1390 (mb-window (minibuffer-window mb-frame)))
1393 (unless (and (window-live-p mb-window) 1391 (unless (and (window-live-p mb-window)
@@ -1400,9 +1398,9 @@ being set (usually, by reading it from the desktop)."
1400 ;; restore the window config. 1398 ;; restore the window config.
1401 (setq frame (desktop--make-frame frame-cfg window-cfg)) 1399 (setq frame (desktop--make-frame frame-cfg window-cfg))
1402 ;; Set default-minibuffer if required. 1400 ;; Set default-minibuffer if required.
1403 (when (cl-third d-mini) (setq default-minibuffer-frame frame)) 1401 (when default (setq default-minibuffer-frame frame))
1404 ;; Store frame/NUM to assign to minibufferless frames. 1402 ;; Store NUM/frame to assign to minibufferless frames.
1405 (when num (push (cons num frame) frame-mb-map)))) 1403 (when hasmini (push (cons num frame) frame-mb-map))))
1406 (error 1404 (error
1407 (delay-warning 'desktop (error-message-string err) :error)))) 1405 (delay-warning 'desktop (error-message-string err) :error))))
1408 1406