From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jean Louis Newsgroups: gmane.emacs.help Subject: Re: Why does saving a buffer to a new file clear local variables? Date: Thu, 12 Dec 2024 10:31:55 +0300 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37357"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mutt/2.2.12 (2023-09-09) Cc: help-gnu-emacs@gnu.org To: Patrick Nicodemus Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Thu Dec 12 08:36:59 2024 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1tLdko-0009av-So for geh-help-gnu-emacs@m.gmane-mx.org; Thu, 12 Dec 2024 08:36:58 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tLdkI-0004Se-Kn; Thu, 12 Dec 2024 02:36:26 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tLdkC-0004SN-2j for help-gnu-emacs@gnu.org; Thu, 12 Dec 2024 02:36:20 -0500 Original-Received: from stw1.rcdrun.com ([217.170.207.13]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tLdkA-0003KK-0T for help-gnu-emacs@gnu.org; Thu, 12 Dec 2024 02:36:19 -0500 Original-Received: from localhost ([::ffff:41.75.190.237]) (AUTH: PLAIN admin, TLS: TLS1.3,256bits,ECDHE_RSA_AES_256_GCM_SHA384) by stw1.rcdrun.com with ESMTPSA id 0000000000081EF2.00000000675A924E.00064E85; Thu, 12 Dec 2024 00:35:41 -0700 Mail-Followup-To: Patrick Nicodemus , help-gnu-emacs@gnu.org Content-Disposition: inline In-Reply-To: Received-SPF: pass client-ip=217.170.207.13; envelope-from=bugs@gnu.support; helo=stw1.rcdrun.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.help:148767 Archived-At: * Patrick Nicodemus [2024-12-11 16:59]: > If I create a new buffer like (get-buffer-create "tmpbuf"), > switch to the buffer, and execute the commands > (make-variable-buffer-local "abc") > (setq abc 3) > and then save the buffer to, say, "tmpbuf", then abc becomes nil. > Why is this the case? > Is this behavior documented anywhere? > I checked that it doesn't change the major mode. It is "Fundamental" before > and after saving. I have just checked it, try doing it this way: (defvar-local abc 123) save the buffer, and verify the abc is still there. This way, it doesn't work, variable must be symbol, not string: (make-variable-buffer-local "abc") You can try this way too: - open new buffer ~/tmp/new2 which shall look as file - (setq-local def 123) - save buffer - evaluate def -> 123 It worked that way. And it works this way: - open new buffer ~/tmp/new4 which shall look as file - (defvar-local def 123) - save buffer - evaluate def -> 123 And also it works this way: - C-x b RET WriteAnyNameOfBuffer - (defvar-local def 123) - save buffer as any other name - evaluate def -> 123 But if you try it this way: (make-variable-buffer-local 'abcde) (setq abcde 4) After saving, the variable could lose the value. Then you must consider what documentation says: make-variable-buffer-local is an interactive primitive-function in ‘C source code’. (make-variable-buffer-local VARIABLE) Make VARIABLE become buffer-local whenever it is set. At any time, the value for the current buffer is in effect, unless the variable has never been set in this buffer, in which case the default value is in effect. Note that binding the variable with ‘let’, or setting it while a ‘let’-style binding made in this buffer is in effect, does not make the variable buffer-local. Return VARIABLE. Unless the variable has never been set in this buffer... it becomes default. So that may be the reason of such behavior, and you may be right something is wrong with that function, and myself I do not know if it is. But the way how I have shown you works well that buffer-local variable remains buffer local even after saving. -- Jean Louis