Commit 070c2506 authored by Karl Heuer's avatar Karl Heuer

(frame-configuration-to-register)

(window-configuration-to-register): Use a marker to save point.
(point-to-register): Include point when saving a frame config.
(number-to-register): New command (was commented out).
(increment-register): New command
(view-register): Handle frame configs and window configs
included in a list with a pointer.
(view-register, insert-register): Use numberp, not integerp.
parent bdb45de9
......@@ -33,12 +33,15 @@
(defvar register-alist nil
"Alist of elements (NAME . CONTENTS), one for each Emacs register.
NAME is a character (a number). CONTENTS is a string, number,
frame configuration, mark or list.
NAME is a character (a number). CONTENTS is a string, number, marker or list.
A list of strings represents a rectangle.
A list of the form (file . NAME) represents the file named NAME.
A list of the form (file-query NAME POSITION) represents position POSITION
in the file named NAME, but query before visiting it.")
in the file named NAME, but query before visiting it.
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.")
(defun get-register (reg)
"Return contents of Emacs register named REG, or nil if none."
......@@ -61,7 +64,8 @@ Use \\[jump-to-register] to go to that location or restore that configuration.
Argument is a character, naming the register."
(interactive "cPoint to register: \nP")
(set-register register
(if arg (current-frame-configuration) (point-marker))))
(if arg (list (current-frame-configuration) (point-marker))
(point-marker))))
(defun window-configuration-to-register (register &optional arg)
"Store the window configuration of the selected frame in register REGISTER.
......@@ -70,7 +74,7 @@ Argument is a character, naming the register."
(interactive "cWindow configuration to register: \nP")
;; current-window-configuration does not include the value
;; of point in the current buffer, so record that separately.
(set-register register (list (current-window-configuration) (point))))
(set-register register (list (current-window-configuration) (point-marker))))
(defun frame-configuration-to-register (register &optional arg)
"Store the window configuration of all frames in register REGISTER.
......@@ -79,7 +83,7 @@ Argument is a character, naming the register."
(interactive "cFrame configuration to register: \nP")
;; current-frame-configuration does not include the value
;; of point in the current buffer, so record that separately.
(set-register register (list (current-frame-configuration) (point))))
(set-register register (list (current-frame-configuration) (point-marker))))
(defalias 'register-to-point 'jump-to-register)
(defun jump-to-register (register &optional delete)
......@@ -132,33 +136,33 @@ delete any existing frames that the frame configuration doesn't mention.
(add-hook 'kill-buffer-hook 'register-swap-out)
;(defun number-to-register (arg char)
; "Store a number in a register.
;Two args, NUMBER and REGISTER (a character, naming the register).
;If NUMBER is nil, digits in the buffer following point are read
;to get the number to store.
;Interactively, NUMBER is the prefix arg (none means nil)."
; (interactive "P\ncNumber to register: ")
; (set-register char
; (if arg
; (prefix-numeric-value arg)
; (if (looking-at "[0-9][0-9]*")
; (save-excursion
; (save-restriction
; (narrow-to-region (point)
; (progn (skip-chars-forward "0-9")
; (point)))
; (goto-char (point-min))
; (read (current-buffer))))
; 0))))
;(defun increment-register (arg char)
; "Add NUMBER to the contents of register REGISTER.
;Interactively, NUMBER is the prefix arg (none means nil)."
; (interactive "p\ncNumber to register: ")
; (or (integerp (get-register char))
; (error "Register does not contain a number"))
; (set-register char (+ arg (get-register char))))
(defun number-to-register (arg char)
"Store a number in a register.
Two args, NUMBER and REGISTER (a character, naming the register).
If NUMBER is nil, digits in the buffer following point are read
to get the number to store.
Interactively, NUMBER is the prefix arg (none means nil)."
(interactive "P\ncNumber to register: ")
(set-register char
(if arg
(prefix-numeric-value arg)
(if (looking-at "[0-9][0-9]*")
(save-excursion
(save-restriction
(narrow-to-region (point)
(progn (skip-chars-forward "0-9")
(point)))
(goto-char (point-min))
(read (current-buffer))))
0))))
(defun increment-register (arg char)
"Add NUMBER to the contents of register REGISTER.
Interactively, NUMBER is the prefix arg (none means nil)."
(interactive "p\ncIncrement register: ")
(or (numberp (get-register char))
(error "Register does not contain a number"))
(set-register char (+ arg (get-register char))))
(defun view-register (register)
"Display what is contained in register named REGISTER.
......@@ -172,7 +176,7 @@ The Lisp value REGISTER is a character."
(princ (single-key-description register))
(princ " contains ")
(cond
((integerp val)
((numberp val)
(princ val))
((markerp val)
......@@ -184,10 +188,10 @@ The Lisp value REGISTER is a character."
(princ ", position ")
(princ (marker-position val)))))
((window-configuration-p val)
((and (consp val) (window-configuration-p (car val)))
(princ "a window configuration."))
((frame-configuration-p val)
((and (consp val) (frame-configuration-p (car val)))
(princ "a frame configuration."))
((and (consp val) (eq (car val) 'file))
......@@ -223,7 +227,7 @@ Interactively, second arg is non-nil if prefix arg is supplied."
(insert-rectangle val))
((stringp val)
(insert val))
((integerp val)
((numberp val)
(princ val (current-buffer)))
((and (markerp val) (marker-position val))
(princ (marker-position val) (current-buffer)))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment