register.el: Remove bogus deftypes and fix associated methods

* lisp/register.el (frame-register, kmacro-register): Remove bogus deftypes.
(register--type) <oclosure>: Fix kmacro method and generalize it to
any OClosure.
(register--type) <frameset-register>: Fix method and move it to ...
* lisp/frameset.el (register--type) <frameset-register>: ... here,
where `frameset-register` is defined.
This commit is contained in:
Stefan Monnier 2025-04-29 16:04:54 -04:00
parent 483762ef2f
commit b1407b41a1
3 changed files with 10 additions and 5 deletions

View file

@ -1442,6 +1442,7 @@ Used internally for the (major-mode MODE) context specializers."
(cl-call-next-method)))
(cl--generic-prefill-dispatchers 0 oclosure)
(cl--generic-prefill-dispatchers 0 (eql 'x) oclosure integer)
;;; Support for unloading.

View file

@ -1444,6 +1444,11 @@ Called from `list-registers' and `view-register'. Internal use only."
(if (= 1 ns) "" "s")
(format-time-string "%c" (frameset-timestamp fs))))))
(cl-defmethod register--type ((_regval frameset-register))
;; FIXME: Why `frame' rather than `frameset'?
;; FIXME: We shouldn't need to touch an internal function.
'frame)
;;;###autoload
(defun frameset-to-register (register)
"Store the current frameset in register REGISTER.

View file

@ -35,7 +35,6 @@
;; FIXME: Clean up namespace usage!
(declare-function frameset-register-p "frameset")
(declare-function dired-current-directory "dired")
(cl-defstruct
@ -64,6 +63,7 @@ They both receive DATA as argument."
(registerv--make data print-func jump-func insert-func))
(defvar register-alist nil
;; FIXME: This conflates the FRAME-CONFIGURATION and the FRAMESET cases.
"Alist of elements (NAME . CONTENTS), one for each Emacs register.
NAME is a character (a number). CONTENTS is a string, number, marker, list
or a struct returned by `registerv-make'.
@ -387,10 +387,7 @@ satisfy `cl-typep', otherwise the new type should be defined with
(cl-defmethod register--type ((_regval (eql file))) 'file)
(cl-defmethod register--type ((_regval (eql file-query))) 'file-query)
(cl-defmethod register--type ((_regval window-configuration)) 'window)
(cl-deftype frame-register () '(satisfies frameset-register-p))
(cl-defmethod register--type :extra "frame-register" (_regval) 'frame)
(cl-deftype kmacro-register () '(satisfies kmacro-register-p))
(cl-defmethod register--type :extra "kmacro-register" (_regval) 'kmacro)
(cl-defmethod register--type ((regval oclosure)) (oclosure-type regval))
(defun register-of-type-alist (types)
"Filter `register-alist' according to TYPES."
@ -644,6 +641,8 @@ Interactively, prompt for REGISTER using `register-read-with-preview'."
;; Turn the marker into a file-ref if the buffer is killed.
(add-hook 'kill-buffer-hook 'register-swap-out nil t)
(set-register register
;; FIXME: How does this `current-frame-configuration' differ
;; in practice with what `frameset-to-register' does?
(if arg (list (current-frame-configuration) (point-marker))
(point-marker))))