From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Luc Teirlinck Newsgroups: gmane.emacs.devel Subject: make-indirect-buffer Date: Sun, 11 Apr 2004 23:58:56 -0500 (CDT) Sender: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Message-ID: <200404120458.i3C4wuc21156@raven.dms.auburn.edu> NNTP-Posting-Host: deer.gmane.org X-Trace: sea.gmane.org 1081748827 3094 80.91.224.253 (12 Apr 2004 05:47:07 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 12 Apr 2004 05:47:07 +0000 (UTC) Original-X-From: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Mon Apr 12 07:47:00 2004 Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1BCuHc-00060r-00 for ; Mon, 12 Apr 2004 07:47:00 +0200 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.35 #1 (Debian)) id 1BCuHc-0001d4-00 for ; Mon, 12 Apr 2004 07:47:00 +0200 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.30) id 1BCspa-0006FT-Bv for emacs-devel@quimby.gnus.org; Mon, 12 Apr 2004 00:13:58 -0400 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.30) id 1BCsjb-0003bs-1d for emacs-devel@gnu.org; Mon, 12 Apr 2004 00:07:47 -0400 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.30) id 1BCsfo-00010p-BB for emacs-devel@gnu.org; Mon, 12 Apr 2004 00:03:53 -0400 Original-Received: from [131.204.53.104] (helo=manatee.dms.auburn.edu) by monty-python.gnu.org with esmtp (Exim 4.30) id 1BCsdg-0008Jc-GO for emacs-devel@gnu.org; Mon, 12 Apr 2004 00:01:40 -0400 Original-Received: from raven.dms.auburn.edu (raven.dms.auburn.edu [131.204.53.29]) by manatee.dms.auburn.edu (8.12.10/8.12.10) with ESMTP id i3C51XKt000693 for ; Mon, 12 Apr 2004 00:01:34 -0500 (CDT) Original-Received: (from teirllm@localhost) by raven.dms.auburn.edu (8.11.6+Sun/8.11.6) id i3C4wuc21156; Sun, 11 Apr 2004 23:58:56 -0500 (CDT) X-Authentication-Warning: raven.dms.auburn.edu: teirllm set sender to teirllm@dms.auburn.edu using -f Original-To: emacs-devel@gnu.org X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.4 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:21515 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:21515 Executing the following ielm run after `emacs -q' makes Emacs crash: ===File ~/indi-after-crash================================== *** Welcome to IELM *** Type (describe-mode) for help. ELISP> (setq apr (get-buffer-create "april")) # ELISP> (with-current-buffer apr (insert "123")) nil ELISP> (kill-buffer apr) t ELISP> (make-indirect-buffer apr "indi") # ELISP> (buffer-base-buffer (get-buffer "indi")) # ELISP> (buffer-size (get-buffer "indi")) 3 ELISP> (switch-to-buffer "indi") # ELISP> ============================================================ (The last two lines are from the auto-save file.) I do not understand how it could possibly be useful to make an indirect buffer with a killed base buffer, especially since killing a base buffer automatically kills all indirect buffers. So my solution is to throw an error if one tries to make an indirect buffer with killed base buffer. The following trivial patch would do that. I could install if desired. ===File ~/buffer.c-diff===================================== *** buffer.c 11 Apr 2004 10:08:04 -0500 1.448 --- buffer.c 11 Apr 2004 23:08:34 -0500 *************** *** 539,544 **** --- 539,546 ---- base_buffer = Fget_buffer (base_buffer); if (NILP (base_buffer)) error ("No such buffer: `%s'", SDATA (name)); + if (NILP (XBUFFER (base_buffer)->name)) + error ("Base buffer has been killed"); if (SCHARS (name) == 0) error ("Empty string for buffer name is not allowed"); ============================================================ After the patch we get: ===File ~/indi-after-patch================================== *** Welcome to IELM *** Type (describe-mode) for help. ELISP> (setq apr (get-buffer-create "april")) # ELISP> (with-current-buffer apr (insert "123")) nil ELISP> (kill-buffer apr) t ELISP> (make-indirect-buffer apr "indi") *** Eval error *** Base buffer has been killed ELISP> (make-indirect-buffer apr "indi" t) *** Eval error *** Base buffer has been killed ELISP> ============================================================