unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Barra Ó Catháin via Emacs development discussions." <emacs-devel@gnu.org>
To: emacs-devel@gnu.org
Subject: [PATCH] Add "into-register" functions for buffers and files.
Date: Sat, 03 Feb 2024 23:55:32 +0000	[thread overview]
Message-ID: <87y1c1f6h7.fsf@ocathain.ie> (raw)

[-- Attachment #1: Type: text/plain, Size: 332 bytes --]

Hello, all!
I noticed that files and buffers don't have "to-register" functions of
their own, rather, relying on (set-register). To that end, I have
written 4 functions that I feel may be useful and "complete the set" of
register functions, and some minor tweaks to the relevant manual
section. 

=====
Barra Ó Catháin


[-- Attachment #2: 0001-Added-buffer-and-file-to-register-functions.patch --]
[-- Type: text/plain, Size: 2779 bytes --]

From d697dc8b3fb66fb3c37851ab1d33af665870ae1d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Barra=20=C3=93=20Cath=C3=A1in?= <barra@ocathain.ie>
Date: Fri, 2 Feb 2024 21:45:05 +0000
Subject: [PATCH 1/4] Added buffer and file to register functions.

Added buffer-to-register, file-to-register, current-buffer-to-register,
and current-file-to-register to register.el.
---
 lisp/register.el | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/lisp/register.el b/lisp/register.el
index 822467a0d72..8fff867e547 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -685,6 +685,50 @@ Interactively, prompt for REGISTER using `register-read-with-preview'."
   (let ((val (get-register register)))
     (register-val-jump-to val delete)))
 
+(defun file-to-register (register file-name)
+  "Inserts a given file into a register.  To visit the file, use
+  \\[jump-to-register].
+
+Called from Lisp, takes two args: REGISTER, and FILE-NAME.
+
+Interactively, prompt for REGISTER using `register-read-with-preview',
+and prompt for FILE-NAME using `read-file-name'."
+  (interactive (list (register-read-with-preview "File to register: ")
+                     (read-file-name "File: ")))
+  (set-register register `(file . ,file-name)))
+
+(defun current-file-to-register (register)
+  "Places the current file name into a register.  To visit the file, use
+\\[jump-to-register].
+
+Called from Lisp, takes one arg: REGISTER.
+
+Interactively, prompt for REGISTER using `register-read-with-preview."
+  (interactive (list (register-read-with-preview "Current file to register: ")))                
+  (set-register register `(file . ,(buffer-file-name))))
+
+(defun buffer-to-register (register buffer)
+  "Inserts a given buffer into a register.  To visit the buffer, use
+\\[jump-to-register].
+
+Called from Lisp, takes two args: REGISTER, and BUFFER.
+
+Interactively, prompt for REGISTER using `register-read-with-preview', and
+prompt for BUFFER-NAME using `read-buffer'."
+  (interactive (list (register-read-with-preview "Buffer to register: ")
+                     (read-buffer "Buffer: ")))
+  (set-register register `(buffer . ,buffer)))
+
+(defun current-buffer-to-register (register)
+  "Places the current buffer into a register.  To visit the buffer, use
+\\[jump-to-register].
+
+Called from Lisp, takes one arg: REGISTER.
+
+Interactively, prompt for REGISTER using `register-read-with-preview.'"
+  (interactive (list (register-read-with-preview "Current buffer to register: ")))                
+  (set-register register `(buffer . ,(current-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


[-- Attachment #3: 0002-Added-bindings-for-the-new-to-register-functions.patch --]
[-- Type: text/plain, Size: 981 bytes --]

From f53b313bbf9e033ca0aea9e1e1e4a547d6b5b194 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Barra=20=C3=93=20Cath=C3=A1in?= <barra@ocathain.ie>
Date: Fri, 2 Feb 2024 22:28:44 +0000
Subject: [PATCH 2/4] Added bindings for the new "to register" functions

Added bindings for "current-file-to-register" and
"current-buffer-to-register" to bindings.el.
---
 lisp/bindings.el | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lisp/bindings.el b/lisp/bindings.el
index 4690897fed4..21767f37f61 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -1570,7 +1570,10 @@ if `inhibit-field-text-motion' is non-nil."
   "n"     #'number-to-register
   "+"     #'increment-register
   "w"     #'window-configuration-to-register
-  "f"     #'frameset-to-register)
+  "f"     #'frameset-to-register
+  "F"     #'current-file-to-register
+  "B"     #'current-buffer-to-register)
+
 (define-key ctl-x-map "r" ctl-x-r-map)
 
 (define-key esc-map "q" 'fill-paragraph)
-- 
2.43.0


[-- Attachment #4: 0003-Basic-error-checking-for-new-register-functions.patch --]
[-- Type: text/plain, Size: 1578 bytes --]

From 23dcde96046a9edc04bca68579174300dde5cd44 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Barra=20=C3=93=20Cath=C3=A1in?= <barra@ocathain.ie>
Date: Sat, 3 Feb 2024 20:34:45 +0000
Subject: [PATCH 3/4] Basic error checking for new register functions

---
 lisp/register.el | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/lisp/register.el b/lisp/register.el
index 8fff867e547..cfb3c6a2b13 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -695,7 +695,9 @@ Interactively, prompt for REGISTER using `register-read-with-preview',
 and prompt for FILE-NAME using `read-file-name'."
   (interactive (list (register-read-with-preview "File to register: ")
                      (read-file-name "File: ")))
-  (set-register register `(file . ,file-name)))
+  (if (file-exists-p file-name)
+      (set-register register `(file . ,file-name)))
+  (user-error "File does not exist.")
 
 (defun current-file-to-register (register)
   "Places the current file name into a register.  To visit the file, use
@@ -717,7 +719,9 @@ Interactively, prompt for REGISTER using `register-read-with-preview', and
 prompt for BUFFER-NAME using `read-buffer'."
   (interactive (list (register-read-with-preview "Buffer to register: ")
                      (read-buffer "Buffer: ")))
-  (set-register register `(buffer . ,buffer)))
+  (if (buffer-p buffer)
+      (set-register register `(buffer . ,buffer))
+    (user-error "Not a buffer."))
 
 (defun current-buffer-to-register (register)
   "Places the current buffer into a register.  To visit the buffer, use
-- 
2.43.0


[-- Attachment #5: 0004-Documentation-in-Info-for-new-register-commands.patch --]
[-- Type: text/plain, Size: 2165 bytes --]

From cf28598990cb374f6e3bedb0b5c49e0ccc861477 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Barra=20=C3=93=20Cath=C3=A1in?= <barra@ocathain.ie>
Date: Sat, 3 Feb 2024 20:43:05 +0000
Subject: [PATCH 4/4] Documentation in Info for new register commands

Simple modification to regs.texi to refer to the new register commands.
---
 doc/emacs/regs.texi | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi
index cac5b32c566..e9fb2c74773 100644
--- a/doc/emacs/regs.texi
+++ b/doc/emacs/regs.texi
@@ -291,11 +291,13 @@ numeric argument stores zero in the register.
 @cindex saving buffer name in a register
 
   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.  You may use @kbd{C-x
+r F} to place the currently visited file in a register. 
+
+Here's the Lisp code used to put a file @var{name} into register @var{r}:
 
 @smallexample
-(set-register @var{r} '(file . @var{name}))
+(file-to-register @var{r} @var{name})
 @end smallexample
 
 @need 3000
@@ -303,7 +305,7 @@ used to put a file @var{name} into register @var{r}:
 For example,
 
 @smallexample
-(set-register ?z '(file . "/gd/gnu/emacs/19.0/src/ChangeLog"))
+(file-to-register ?z "/gd/gnu/emacs/19.0/src/ChangeLog")
 @end smallexample
 
 @noindent
@@ -314,12 +316,13 @@ puts the file name shown in register @samp{z}.
 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
+can put their names in registers.  You may use @kbd{C-x r B} to store
+the current buffer in a register.  Or, 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:
 
 @smallexample
-(set-register ?m '(buffer . "*Messages*"))
+(buffer-to-register ?m "*Messages*")
 @end smallexample
 
   To switch to the buffer whose name is in register @var{r}, type
-- 
2.43.0


             reply	other threads:[~2024-02-03 23:55 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-03 23:55 Barra Ó Catháin via Emacs development discussions. [this message]
2024-02-04  6:57 ` [PATCH] Add "into-register" functions for buffers and files Eli Zaretskii
2024-02-04  7:10   ` Thierry Volpiatto
2024-02-04  7:24     ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y1c1f6h7.fsf@ocathain.ie \
    --to=emacs-devel@gnu.org \
    --cc=barra@ocathain.ie \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).