From: Stefan Monnier <monnier@iro.umontreal.ca>
To: help-gnu-emacs@gnu.org
Subject: Re: safe way to add contents to a file ?
Date: Sun, 22 Dec 2019 13:23:29 -0500 [thread overview]
Message-ID: <jwvzhfk9qdd.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: 3C9F1A1A-551E-411B-91B2-CB31B51094B4@traduction-libre.org
> How is it supposed to be shorter ?
[...]
> (defun myInsert2 (myText myMarker myFile)
> (with-current-buffer
> (set-buffer (find-file-noselect myFile))
This `set-buffer` is redundant:
(defun myInsert2 (myText myMarker myFile)
(with-current-buffer (find-file-noselect myFile)
>> (goto-char (point-min))
>> (if (not (search-forward myMarker nil t))
>> (user-error "Can't find foo bar in your fine file")
>> (goto-char (match-beginning 0))
>
> But here, the code would go on inserting the text in a position that's not correct, right ?
No (for 2 reasons: the insertion would only in the `else` part of the
`if` and the `user-error` immediately terminates the execution of this function).
> And if I put the kill-buffer inside the progn, then I'm left with an
> open buffer that's not relevant anymore...
Cleanup code like this `kill-buffer` should be placed in an
`unwind-protect`, so it's executed both for normal exits and for
non-local exits:
(with-current-buffer (find-file-noselect myFile)
(unwind-protect
(progn
... do the insertion and stuff)
(kill-buffer)))
Tho I'd change that code to pass the buffer explicitly to `kill-buffer`,
just to make sure there's no risk of killing some unrelated buffer in
fringe circumstances:
(with-current-buffer (find-file-noselect myFile)
(let ((buf (current-buffer)))
(unwind-protect
(progn
... do the insertion and stuff)
(kill-buffer buf))))
-- Stefan
next prev parent reply other threads:[~2019-12-22 18:23 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-18 0:03 safe way to add contents to a file ? Jean-Christophe Helary
2019-12-18 0:36 ` Óscar Fuentes
2019-12-18 3:20 ` Jean-Christophe Helary
2019-12-20 13:50 ` Jean-Christophe Helary
2019-12-20 16:00 ` Stefan Monnier
2019-12-22 3:14 ` Jean-Christophe Helary
2019-12-22 4:42 ` Jean-Christophe Helary
2019-12-22 14:37 ` Óscar Fuentes
2019-12-22 22:18 ` Jean-Christophe Helary
2019-12-23 0:08 ` Óscar Fuentes
2019-12-22 18:23 ` Stefan Monnier [this message]
2019-12-18 3:59 ` Stefan Monnier
2019-12-18 9:41 ` Jean-Christophe Helary
2019-12-18 13:10 ` Óscar Fuentes
2019-12-18 22:33 ` Jean-Christophe Helary
2019-12-18 14:10 ` Stefan Monnier
2019-12-18 22:25 ` Jean-Christophe Helary
2019-12-18 22:27 ` Jean-Christophe Helary
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvzhfk9qdd.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=help-gnu-emacs@gnu.org \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.