(substring d (match-end 0))
d)))
+(defface register-name
+ '((t :inherit help-key-binding))
+ "Face for register names.")
+
(defun register-preview-default (r)
"Return a string describing the register R.
This function is the default value of
`register-preview-function', which see."
(format "%s: %s\n"
- (single-key-description (car r))
+ (propertize (single-key-description (car r)) 'face 'register-name)
(register-describe-oneline (car r))))
(defvar register-preview-function #'register-preview-default
(insert desc))))
register-alist)))))
+(defvar register-volatile-registers nil
+ "List of volatile registers.")
+
+(defun register-volatile-p (register)
+ "Return non-nil if REGISTER is a volatile register."
+ (member register register-volatile-registers))
+
(defun register-read-with-preview (prompt &optional confirm pred)
"Read and return a register name, possibly showing existing registers.
(eq key 'escape)
(eq key ?\C-\[))
(keyboard-quit))
- ((and confirm (get-register key)
+ ((and confirm
+ (not (register-volatile-p key))
+ (get-register key)
(progn
(register-preview buffer nil key pred)
(not (y-or-n-p (substitute-quotes
(setq deactivate-mark t)
(indicate-copied-region (length (car rectangle))))))
+(defun register-toggle-volatility (register)
+ "Toggle volatility of register REGISTER.
+
+Emacs lets you overwrite volatile registers without confirmation, even
+when option `register-confirm-overwrite' is non-nil.
+
+By default, all registers are non-volatile."
+ (interactive
+ (list (register-read-with-preview "Toggle volatility of register: ")))
+ (if (register-volatile-p register)
+ (setq register-volatile-registers
+ (delete register register-volatile-registers))
+ (push register register-volatile-registers))
+ (message "Register %s is now %svolatile"
+ (propertize (single-key-description register) 'face 'register-name)
+ (if (register-volatile-p register) "" "non-")))
+
(provide 'register)
;;; register.el ends here