diff options
| author | Juanma Barranquero | 2013-07-25 11:24:26 +0200 |
|---|---|---|
| committer | Juanma Barranquero | 2013-07-25 11:24:26 +0200 |
| commit | f63ebeb54e453b3da139d3495eb2f1f59bab46c7 (patch) | |
| tree | 87fddc406b8e5eae07b5c4b1794c14945930cb14 | |
| parent | 025309873b9f363d226694953e66ee98d8b11683 (diff) | |
| download | emacs-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/ChangeLog | 2 | ||||
| -rw-r--r-- | lisp/desktop.el | 58 |
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 | ||
| 9 | 2013-07-25 Glenn Morris <rgm@gnu.org> | 11 | 2013-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 | ||