From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#65277: 29.1.50; emacsclient Dired: frame is closed/killed when opening another dir Date: Thu, 17 Aug 2023 22:02:16 +0300 Message-ID: <831qg15w7b.fsf@gnu.org> References: <87350mpkho.fsf@gmail.com> <83ttsy57g0.fsf@gnu.org> Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="3917"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 65277@debbugs.gnu.org To: brickviking@gmail.com Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Aug 17 21:03:27 2023 Return-path: Envelope-to: geb-bug-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 1qWiHG-0000hM-59 for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 17 Aug 2023 21:03:26 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qWiH4-0007ak-Lp; Thu, 17 Aug 2023 15:03:14 -0400 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 1qWiGw-0007aU-GV for bug-gnu-emacs@gnu.org; Thu, 17 Aug 2023 15:03:06 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qWiGs-00087h-HV for bug-gnu-emacs@gnu.org; Thu, 17 Aug 2023 15:03:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qWiGs-0004P2-F4 for bug-gnu-emacs@gnu.org; Thu, 17 Aug 2023 15:03:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 17 Aug 2023 19:03:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65277 X-GNU-PR-Package: emacs Original-Received: via spool by 65277-submit@debbugs.gnu.org id=B65277.169229893916862 (code B ref 65277); Thu, 17 Aug 2023 19:03:02 +0000 Original-Received: (at 65277) by debbugs.gnu.org; 17 Aug 2023 19:02:19 +0000 Original-Received: from localhost ([127.0.0.1]:45635 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qWiGB-0004Nu-7y for submit@debbugs.gnu.org; Thu, 17 Aug 2023 15:02:19 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:44250) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qWiG8-0004Ng-N1 for 65277@debbugs.gnu.org; Thu, 17 Aug 2023 15:02:17 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qWiG3-0007BN-7V; Thu, 17 Aug 2023 15:02:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=iwH1F3TXCOYFOMka+KKla7UySCm1s2eYmG4Vxjep5QI=; b=FyT0Xwq4t1+Z R6VfS5NE0LHRC09KegivFwtkG70vip7/VA7gi9SgU0iYWp3DuQX/LD04D8hvFHq5IlXE6MZf/t2aU PDGy357hapPCDnoDQW4gvSfOa+VSpppH7P6WiRbRpE3Vbvki/h226bOJaTgJeuCLIlQR2qtXSsIno 24jCXyPPniQTnr/TKpJ4983IHJWAhPhWMgEqsIZVVMC4N1JA5URCIQm7f+Dbu8z+2fCNGKs2YNEAM j7BcnvfPmfAe90sJjPQuInmXDsRVQCOlqnsuhd195Q6y13Gf8Blc6qjbntmnTHLXfWOSiVRszV5P0 GRayZXspIWb0qCbWhln9rw==; In-Reply-To: <83ttsy57g0.fsf@gnu.org> (message from Eli Zaretskii on Thu, 17 Aug 2023 12:44:47 +0300) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:267693 Archived-At: > Cc: 65277@debbugs.gnu.org > Date: Thu, 17 Aug 2023 12:44:47 +0300 > From: Eli Zaretskii > > Thanks for testing. Could you please test the improved patch below? Sorry, that patch had a silly mistake. Please use the one below instead: diff --git a/lisp/files.el b/lisp/files.el index 68c0a10..3466a53 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1998,6 +1998,8 @@ kill-buffer-hook Note: Be careful with let-binding this hook considering it is frequently used for cleanup.") +(defvar find-alternate-file-dont-kill-client nil + "If non-nil, `server-buffer-done' should not delete the client.") (defun find-alternate-file (filename &optional wildcards) "Find file FILENAME, select its buffer, kill previous buffer. If the current buffer now contains an empty file that you just visited @@ -2044,7 +2046,8 @@ find-alternate-file ;; save a modified buffer visiting a file. Rather, `kill-buffer' ;; asks that itself. Thus, there's no need to temporarily do ;; `(set-buffer-modified-p nil)' before running this hook. - (run-hooks 'kill-buffer-hook) + (let ((find-alternate-file-dont-kill-client 'dont-kill-client)) + (run-hooks 'kill-buffer-hook)) ;; Okay, now we can end-of-life the old buffer. (if (get-buffer " **lose**") (kill-buffer " **lose**")) diff --git a/lisp/server.el b/lisp/server.el index ba7e02d..1ae1e12 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -372,6 +372,10 @@ server-delete-client ;; console), where there's only one terminal and does not make ;; sense to delete it, or if we are explicitly told not. (unless (or (eq system-type 'windows-nt) + ;; 'find-alternate-file' caused the last client + ;; buffer to be killed, but we will reuse the client + ;; for another buffer. + (eq noframe 'dont-kill-client) (process-get proc 'no-delete-terminal)) (let ((terminal (process-get proc 'terminal))) ;; Only delete the terminal if it is non-nil. @@ -1590,7 +1594,8 @@ server-buffer-done ;; frames, which might change the current buffer. We ;; don't want that (bug#640). (save-current-buffer - (server-delete-client proc)) + (server-delete-client proc + find-alternate-file-dont-kill-client)) (server-delete-client proc)))))) (when (and (bufferp buffer) (buffer-name buffer)) ;; We may or may not kill this buffer;