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

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