1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-02-08 00:33:13 -08:00

* lisp/bindings.el (ctl-x-r-map): Bind ?f to frameset-to-register.

* lisp/register.el: Add support for framesets.
  (frameset-frame-id, frameset-frame-with-id)
  (frameset-p, frameset-restore, frameset-save): Declare.
  (register-alist): Document framesets.
  (frameset-session-filter-alist): Declare.
  (frameset-to-register): New function.
  (jump-to-register): Implement jumping to framesets.  Doc fix.
  (describe-register-1): Describe framesets.
This commit is contained in:
Juanma Barranquero 2013-08-08 02:44:22 +02:00
parent a912c0163d
commit 2805a6512b
3 changed files with 54 additions and 5 deletions

View file

@ -1,3 +1,15 @@
2013-08-08 Juanma Barranquero <lekktu@gmail.com>
* register.el (frameset-frame-id, frameset-frame-with-id)
(frameset-p, frameset-restore, frameset-save): Declare.
(register-alist): Document framesets.
(frameset-session-filter-alist): Declare.
(frameset-to-register): New function.
(jump-to-register): Implement jumping to framesets. Doc fix.
(describe-register-1): Describe framesets.
* bindings.el (ctl-x-r-map): Bind ?f to frameset-to-register.
2013-08-07 Juanma Barranquero <lekktu@gmail.com>
* desktop.el (desktop-save-frameset): Use new frameset-save args.

View file

@ -1220,7 +1220,7 @@ if `inhibit-field-text-motion' is non-nil."
(define-key map "n" 'number-to-register)
(define-key map "+" 'increment-register)
(define-key map "w" 'window-configuration-to-register)
(define-key map "f" 'frame-configuration-to-register)
(define-key map "f" 'frameset-to-register)
map)
"Keymap for subcommands of C-x r.")
(define-key ctl-x-map "r" ctl-x-r-map)

View file

@ -31,6 +31,12 @@
(eval-when-compile (require 'cl-lib))
(declare-function frameset-frame-id "frameset" (frame))
(declare-function frameset-frame-with-id "frameset" (id &optional frame-list))
(declare-function frameset-p "frameset" (frameset))
(declare-function frameset-restore "frameset" (frameset &rest keys) t)
(declare-function frameset-save "frameset" (frame-list &rest keys) t)
;;; Code:
(cl-defstruct
@ -71,7 +77,9 @@ A list of the form (file-query FILE-NAME POSITION) represents
A list of the form (WINDOW-CONFIGURATION POSITION)
represents a saved window configuration plus a saved value of point.
A list of the form (FRAME-CONFIGURATION POSITION)
represents a saved frame configuration plus a saved value of point.")
represents a saved frame configuration plus a saved value of point.
A list of the form (FRAMESET FRAME-ID POSITION)
represents a saved frameset plus the value of point in frame FRAME-ID.")
(defgroup register nil
"Register commands."
@ -132,16 +140,32 @@ Argument is a character, naming the register."
;; of point in the current buffer, so record that separately.
(set-register register (list (current-frame-configuration) (point-marker))))
(defvar frameset-session-filter-alist)
(defun frameset-to-register (register &optional _arg)
"Store the current frameset in register REGISTER.
Use \\[jump-to-register] to restore the frameset.
Argument is a character, naming the register."
(interactive "cFrameset to register: \nP")
(set-register register
(list (frameset-save nil
:app 'register
:filters frameset-session-filter-alist)
;; frameset-save does not include the value of point
;; in the current buffer, so record that separately.
(frameset-frame-id nil)
(point-marker))))
(defalias 'register-to-point 'jump-to-register)
(defun jump-to-register (register &optional delete)
"Move point to location stored in a register.
If the register contains a file name, find that file.
\(To put a file name in a register, you must use `set-register'.)
If the register contains a window configuration (one frame) or a frame
configuration (all frames), restore that frame or all frames accordingly.
If the register contains a window configuration (one frame) or a frameset
\(all frames), restore that frame or all frames accordingly.
First argument is a character, naming the register.
Optional second arg non-nil (interactively, prefix argument) says to
delete any existing frames that the frame configuration doesn't mention.
delete any existing frames that the frameset doesn't mention.
\(Otherwise, these frames are iconified.)"
(interactive "cJump to register: \nP")
(let ((val (get-register register)))
@ -157,6 +181,16 @@ delete any existing frames that the frame configuration doesn't mention.
((and (consp val) (window-configuration-p (car val)))
(set-window-configuration (car val))
(goto-char (cadr val)))
((and (consp val) (frameset-p (car val)))
(let ((iconify-list (if delete nil (frame-list)))
frame)
(frameset-restore (car val)
:filters frameset-session-filter-alist
:reuse-frames (if delete t :keep))
(mapc #'iconify-frame iconify-list)
(when (setq frame (frameset-frame-with-id (cadr val)))
(select-frame-set-input-focus frame)
(goto-char (nth 2 val)))))
((markerp val)
(or (marker-buffer val)
(error "That register's buffer no longer exists"))
@ -269,6 +303,9 @@ The Lisp value REGISTER is a character."
((and (consp val) (frame-configuration-p (car val)))
(princ "a frame configuration."))
((and (consp val) (frameset-p (car val)))
(princ "a frameset."))
((and (consp val) (eq (car val) 'file))
(princ "the file ")
(prin1 (cdr val))