[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#68921: File and Buffer register functions.
From: |
Barra Ó Catháin |
Subject: |
bug#68921: File and Buffer register functions. |
Date: |
Tue, 06 Feb 2024 22:42:26 +0000 |
Here follows (hopefully) much improved versions of the patches. I have
to admit, a lot of the "decisions" of the last one were just plain
sillyness, but I hope I've correctly formatted the documentation. I
rendered it and it looked correct to my eyes, but that's my own eyes.
Both commands now take a prefix argument to pick a specific file or
buffer, and otherwise default to the currently visited one.
Further comments would be appreciated!
Thanks,
Barra Ó Catháin.
>From d7d6878664ae22c622f60608e9304fbffe29676c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Barra=20=C3=93=20Cath=C3=A1in?= <barra@ocathain.ie>
Date: Tue, 6 Feb 2024 22:33:32 +0000
Subject: [PATCH] Added buffer and file to register functions.
* lisp/register.el (register-command-info): Register two new functions.
(file-to-register): New function.
(buffer-to-register): New function.
---
lisp/register.el | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/lisp/register.el b/lisp/register.el
index 822467a0d72..645bbc4b0ec 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -297,6 +297,18 @@ If NOCONFIRM is non-nil, request confirmation of register
name by RET."
:act 'set
:noconfirm (memq register-use-preview '(nil never))
:smatch t))
+(cl-defmethod register-command-info ((_command (eql file-to-register)))
+ (make-register-preview-info
+ :types '(all)
+ :msg "File to register `%s'"
+ :act 'set
+ :noconfirm (memq register-use-preview '(nil never))))
+(cl-defmethod register-command-info ((_command (eql buffer-to-register)))
+ (make-register-preview-info
+ :types '(all)
+ :msg "Buffer to register `%s'"
+ :act 'set
+ :noconfirm (memq register-use-preview '(nil never))))
(defun register-preview-forward-line (arg)
"Move to next or previous line in register preview buffer.
@@ -685,6 +697,35 @@ Interactively, prompt for REGISTER using
`register-read-with-preview'."
(let ((val (get-register register)))
(register-val-jump-to val delete)))
+(defun file-to-register (file-name register)
+ "Inserts FILE-NAME in REGISTER.
+To visit the file, use \\[jump-to-register].
+
+Interactively, prompts for REGISTER using `register-read-with-preview'.
+With a prefix-argument, prompts for FILE-NAME using `read-file-name',
+otherwise, uses the currently visited file or directory for FILE-NAME."
+ (interactive (list (if (eq current-prefix-arg nil)
+ (if (eq major-mode 'dired-mode)
+ (dired-current-directory)
+ (buffer-file-name))
+ (read-file-name "File: "))
+ (register-read-with-preview "File to register: ")))
+ (unless (eq file-name nil)
+ (set-register register (cons 'file file-name))))
+
+(defun buffer-to-register (buffer register)
+ "Inserts BUFFER in REGISTER.
+To visit the buffer, use \\[jump-to-register].
+
+Interactively, prompts for REGISTER using `register-read-with-preview'.
+With a prefix-argument, prompts for BUFFER-NAME using `read-buffer',
+otherwise, uses the current buffer."
+ (interactive (list (if (eq current-prefix-arg nil)
+ (current-buffer)
+ (read-buffer "Buffer: "))
+ (register-read-with-preview "Buffer to register: ")))
+ (set-register register (cons 'buffer buffer)))
+
(cl-defgeneric register-val-jump-to (_val _arg)
"Execute the \"jump\" operation of VAL.
VAL is the contents of a register as returned by `get-register'.
--
2.43.0
>From c38e70ad2a93269e46343ea2b1a366ea064cdf84 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Barra=20=C3=93=20Cath=C3=A1in?= <barra@ocathain.ie>
Date: Tue, 6 Feb 2024 14:18:47 +0000
Subject: [PATCH 2/3] * lisp/bindings.el (ctl-x-r-map): Added file-to-register
and buffer-to-register in to keymap, under "F", and "B"
---
lisp/bindings.el | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lisp/bindings.el b/lisp/bindings.el
index 4690897fed4..64f83efbb0a 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -1570,7 +1570,9 @@ ctl-x-r-map
"n" #'number-to-register
"+" #'increment-register
"w" #'window-configuration-to-register
- "f" #'frameset-to-register)
+ "f" #'frameset-to-register
+ "F" #'file-to-register
+ "B" #'buffer-to-register)
(define-key ctl-x-map "r" ctl-x-r-map)
(define-key esc-map "q" 'fill-paragraph)
--
2.43.0
>From 6c6524f70f93b88378c54be5bf4a7c21f422a8fc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Barra=20=C3=93=20Cath=C3=A1in?= <barra@ocathain.ie>
Date: Tue, 6 Feb 2024 22:01:14 +0000
Subject: [PATCH 3/3] Wrote documentation for new to register functions.
* doc/emacs/regs.texi (File and Buffer Registers):
Revised documentation to explain the new commands, rather than the
set-register elisp.
---
doc/emacs/regs.texi | 55 ++++++++++++++++++++++++---------------------
1 file changed, 30 insertions(+), 25 deletions(-)
diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi
index cac5b32c566..9dce7557de2 100644
--- a/doc/emacs/regs.texi
+++ b/doc/emacs/regs.texi
@@ -289,41 +289,46 @@ File and Buffer Registers
@section Keeping File and Buffer Names in Registers
@cindex saving file name in a register
@cindex saving buffer name in a register
+@kindex C-x r F
+@kindex C-x r B
If you visit certain file names frequently, you can visit them more
-conveniently if you put their names in registers. Here's the Lisp code
-used to put a file @var{name} into register @var{r}:
+conveniently if you put their names in registers. Here's how you can
+put a file into a buffer.
-@smallexample
-(set-register @var{r} '(file . @var{name}))
-@end smallexample
-
-@need 3000
-@noindent
-For example,
-
-@smallexample
-(set-register ?z '(file . "/gd/gnu/emacs/19.0/src/ChangeLog"))
-@end smallexample
-
-@noindent
-puts the file name shown in register @samp{z}.
+@table @kbd
+@item C-x r F @var{r}
+@kindex C-x r F
+@findex file-to-register
+Store the currently visited file or directory into register @var{r}
(@code{file-to-register}).
+@item C-u C-x r F @var{r}
+@kindex C-x r F
+@findex file-to-register
+Prompt for a file, and store into register @var{r} (@code{file-to-register}).
+@end table
To visit the file whose name is in register @var{r}, type @kbd{C-x r j
@var{r}}. (This is the same command used to jump to a position or
restore a frame configuration.)
- Similarly, if there are certain buffers you visit frequently, you
-can put their names in registers. For instance, if you visit the
-@samp{*Messages*} buffer often, you can use the following snippet to
-put that buffer into the @samp{m} register:
+ Similarly, if there are certain buffers you visit frequently, you can
+put their names in registers. You can use the following command to put a
+buffer into a register.
-@smallexample
-(set-register ?m '(buffer . "*Messages*"))
-@end smallexample
+@table @kbd
+@item C-x r B @var{r}
+@kindex C-x r B
+@findex buffer-to-register
+Store the current buffer into register @var{r} (@code{buffer-to-register}).
+@item C-u C-x r B @var{r}
+@kindex C-x r B
+@findex buffer-to-register
+Prompt for a buffer, and store into register @var{r}
(@code{buffer-to-register}).
+@end table
- To switch to the buffer whose name is in register @var{r}, type
-@kbd{C-x r j @var{r}}.
+ To visit the buffer whose name is in register @var{r}, type @kbd{C-x r
+ j @var{r}}. (This is the same command used to jump to a position or
+ restore a frame configuration.)
@node Keyboard Macro Registers
@section Keyboard Macro Registers
--
2.43.0