Michael Heerdegen writes: > It would not be good to carve the current register type system > into stone. Instead of your `register-type' function I would prefer > something extensible, for the case of new register types being added > (even a normal user might want to do this). So, when one wants to add a > new register type, it is necessary that one is able to declare, in some > way, whether registers of this type should be included or not for > `insert-register' (and maybe also `jump-to-register'). A possible solution for this is adding two vars, insert-register-types and jump-to-register-types and define register-type like this (named register--type here): (defun register--type (register) ;; Call register/type against the register value. (register/type (if (consp (cdr register)) (cadr register) (cdr register)))) (cl-defgeneric register/type (regval)) (cl-defmethod register/type ((regval string)) 'string) (cl-defmethod register/type ((regval number)) 'number) (cl-defmethod register/type ((regval marker)) 'marker) (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) ;; set a new register and check its type like this: (register--type (car register-alist)) So if one wants a new register type he has just to add the type to one of insert-register-types or jump-to-register-types and add a new defmethod for this type. If the new type in not one of cl-typep he may have to define a new type like above. -- Thierry