From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Jean-Christophe Helary Newsgroups: gmane.emacs.help Subject: Re: safe way to add contents to a file ? Date: Wed, 18 Dec 2019 18:41:09 +0900 Message-ID: <08057AA1-387E-489F-9DB9-CF1768172251@traduction-libre.org> References: <0FE61EAF-672C-4348-8107-F4C3D176FCF4@traduction-libre.org> Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3601.0.10\)) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="134456"; mail-complaints-to="usenet@blaine.gmane.org" To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Wed Dec 18 10:46:12 2019 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1ihVuG-000Ypr-FG for geh-help-gnu-emacs@m.gmane.org; Wed, 18 Dec 2019 10:46:12 +0100 Original-Received: from localhost ([::1]:51858 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihVuF-0005hb-C2 for geh-help-gnu-emacs@m.gmane.org; Wed, 18 Dec 2019 04:46:11 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:41790) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihVtk-0005SI-Pr for help-gnu-emacs@gnu.org; Wed, 18 Dec 2019 04:45:42 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ihVti-00007k-UA for help-gnu-emacs@gnu.org; Wed, 18 Dec 2019 04:45:40 -0500 Original-Received: from relay2-d.mail.gandi.net ([217.70.183.194]:47295) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ihVti-0008Tw-ME for help-gnu-emacs@gnu.org; Wed, 18 Dec 2019 04:45:38 -0500 X-Originating-IP: 182.251.132.170 Original-Received: from [172.20.10.2] (KD182251132170.au-net.ne.jp [182.251.132.170]) (Authenticated sender: jean.christophe.helary@traduction-libre.org) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 9577C40014 for ; Wed, 18 Dec 2019 09:45:34 +0000 (UTC) In-Reply-To: X-Mailer: Apple Mail (2.3601.0.10) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 217.70.183.194 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.org gmane.emacs.help:122062 Archived-At: > On Dec 18, 2019, at 12:59, Stefan Monnier = wrote: >=20 >> 1) if APPEND is a number, that's the position from which my contents = will >> *overwrite* the rest of the file (I want to *insert* my contents) >=20 > This is the way life works, it's not specific to Emacs: given the way > files are typically represented on disk, there is simply no efficient > way to *insert* into a file. Maybe a note about that in the function reference would be a good = reminder that disks are not like "shelves" or other places where you put = "files" and "folders" IRL. >> 2) there are weird things like the whole code where I call this = function is >> actually copied to the target file buffer and I have no idea how to >> prevent that. >=20 > I don't understand what you're describing, really, but from where > I stand it sounds like you just had a weird bug in your code which = made > it do something you did not intend. The code is a most simple one liner variation on the following: (write-region "stuff" nil "path/to/my/file/test.txt" nil t nil t). Sometimes the whole *line* above (contained in file "test.el") would be = copied to the file "test.txt" and I have no idea why. >> But I thought, it's not like such things don't happen all the time in = emacs, >> so there must be a better workflow. >=20 > The normal workflow in Emacs is: > - read the file into a buffer. > - modify the buffer as you please (here, insertion is available and > reasonably efficient). > - save the buffer back into the file. >=20 > The case you describe seems to fit this workflow perfectly and it'll = be > pretty close to optimal compared to what could theoretically be = obtained > from the POSIX API (my guess is that in the very worst case you'll be > performing twice the minimum number of disk accesses). Good to know. Thank you. >> But the reference is incredibly cryptic regarding that and the Intro = does >> not address any file i/o at all... >=20 > Which part of which reference? The elisp reference. I'm not aware that there is any other reference = material regarding elisp. Is there ? > What have you looked for? The files chapter, the buffers chapter. It's all descriptions of = function after function and overall very confusing when you don't know = the basics of what's necessary. > Given the structure of your problem, you have to read the file in = order > to find the precise place where you want to insert the new content and > once you've read the file into a buffer, the rest seems to follow > quite naturally. It would certainly follow naturally if I were an elisp native. But thank = you for the general confirmation that I'm going in the right direction. Jean-Christophe Helary ----------------------------------------------- http://mac4translators.blogspot.com @brandelune