From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 18 Jan 2020 20:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 39181@debbugs.gnu.org X-Debbugs-Original-To: Bug Report Emacs Received: via spool by submit@debbugs.gnu.org id=B.157938106230422 (code B ref -1); Sat, 18 Jan 2020 20:58:02 +0000 Received: (at submit) by debbugs.gnu.org; 18 Jan 2020 20:57:42 +0000 Received: from localhost ([127.0.0.1]:42293 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1isvA5-0007uc-Nf for submit@debbugs.gnu.org; Sat, 18 Jan 2020 15:57:42 -0500 Received: from lists.gnu.org ([209.51.188.17]:44260) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1isvA4-0007uU-1L for submit@debbugs.gnu.org; Sat, 18 Jan 2020 15:57:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58678) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1isvA1-0007Iz-Sh for bug-gnu-emacs@gnu.org; Sat, 18 Jan 2020 15:57:39 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, URIBL_BLOCKED autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1isv9z-0001ZT-Q2 for bug-gnu-emacs@gnu.org; Sat, 18 Jan 2020 15:57:37 -0500 Received: from mail-qt1-x82d.google.com ([2607:f8b0:4864:20::82d]:33805) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1isv9z-0001Z6-Cd for bug-gnu-emacs@gnu.org; Sat, 18 Jan 2020 15:57:35 -0500 Received: by mail-qt1-x82d.google.com with SMTP id 5so24686131qtz.1 for ; Sat, 18 Jan 2020 12:57:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:subject:message-id:date:to; bh=Zg6/XbgLkKraz85xrOhWGZzAywZpoVTrm56NYZM48sU=; b=gMubT6zRtrh2a7N5jw6VSUo2ovDwDk+iMPijkkSTWVtkK3r70c1MBS41l+OyUfr19A BFwVOhLS7+My4sOvLIrg47FtYILtaDf6KK/sboBsy/Kkn1rkcsG9shl4ZEFDTc/ANw7x fV6UCzV/dulC5UJgUvnu2W/05Wp8DnL3EuUZX7bis0Pe0rj+n2J+pHvgQtOfFZ1kr28N VZrz8fe+ttfj+Ujhav/qqB2M/X0hhbpF4abhO1QTrN2rGO/OzuYXCrhk5574WoymYyBk CadYtzMtLA7/WXcuAZBJ6oFLXrXC6YnDKvexBs3kB1lJuzWq6ArFCGBxU9f1m77icrqh o+/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:subject:message-id:date:to; bh=Zg6/XbgLkKraz85xrOhWGZzAywZpoVTrm56NYZM48sU=; b=LKiAKFYF4jGT5Hw4Gad9jKJUIysoEfQKzZqwO3pP06ot1e86QcVmnwM6bNLEe90MFe qYHmMKfP8PsyR/NUPL0//DGN2xKVHp88PE+C89vc8WV/Z8xFs+yBXLqJQsHEwypFgOq5 Jy8eLjWO7Z78v8GEZcVdDfwEbFeWKZ5prTBvmi63vdpcNfCzsBEspJg6UlgImOMgnn+q ofwKpjhLnosxAR9BcEtoNmV7gFkDTtVhusDBSwNN7lhSrRkcydN2QXNxsyVA8gN+mZiv h+nVrVBOuP98itzDrGVzErEm0d7EnhLb15yANpDLCKBIIhW8B0YD2XnfZdKgt9VwOnDm MzLQ== X-Gm-Message-State: APjAAAXX9ZZvQY6K4jmVUZBRIa+eagp1/KP5dSuUuyUphwJ/XC3ghD8n mueqRn2OVLPDOPx77Um0fs0izlkKjLfrjk00 X-Google-Smtp-Source: APXvYqwXCJEnf4Yol7fgdjWWtZRi9+KAGNWUNGamW064sRj0a9XzAiV51gQs6eNnz5WMT9TTfZfHvw== X-Received: by 2002:ac8:71cf:: with SMTP id i15mr13728900qtp.383.1579381054344; Sat, 18 Jan 2020 12:57:34 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id d5sm13813257qke.130.2020.01.18.12.57.33 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Jan 2020 12:57:33 -0800 (PST) From: Yuan Fu Content-Type: multipart/mixed; boundary="Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.40.2.2.4\)) Message-Id: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> Date: Sat, 18 Jan 2020 15:57:32 -0500 X-Mailer: Apple Mail (2.3608.40.2.2.4) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::82d X-Spam-Score: -1.3 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Right now if a user wants to use gdb with many windows, the only layout = option is the default 6-window layout. This patch allows a user to save = her own layout, and use this layout in gdb-mi sessions. I also included = my layout (`default-rearrange`) Maybe we can even ship with some default = layouts that a user can choose from? --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Disposition: inline; filename=default-rearrange.png Content-Type: image/png; name="default-rearrange.png" Content-Transfer-Encoding: base64 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 --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Disposition: attachment; filename=store-window-new.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="store-window-new.patch" Content-Transfer-Encoding: quoted-printable =46rom=206db5201e418bc15ff51a170124a84182093c64db=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Thu,=20= 17=20Oct=202019=2017:35:48=20-0400=0ASubject:=20[PATCH=201/3]=20Add=20= with-selected-window-undedicated=0A=0A*=20lisp/window.el=20= (with-selected-window-undedicated):=20new=0A---=0A=20lisp/window.el=20|=20= 13=20+++++++++++++=0A=201=20file=20changed,=2013=20insertions(+)=0A=0A= diff=20--git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= 433486385d..98b8b21f8a=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,19=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-selected-window-undedicated=20(&rest=20body)=0A+=20=20= "Run=20BODY=20in=20the=20selected=20window=20temporarily=20undedicated."=0A= +=20=20(let=20((window-dedicated-sym=20(gensym)))=0A+=20=20=20=20`(let=20= ((,window-dedicated-sym=20(window-dedicated-p)))=0A+=20=20=20=20=20=20=20= (when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20nil))=0A+=20=20=20=20=20=20=20,@body=0A+=20= =20=20=20=20=20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20= =20;;=20`window-dedicated-p'=20returns=20the=20value=20set=20by=0A+=20=20= =20=20=20=20=20=20=20;;=20`set-window-dedicated-p',=20which=20= differentiates=0A+=20=20=20=20=20=20=20=20=20;;=20non-nil=20and=20t,=20= so=20we=20cannot=20simply=20set=20to=20t=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20,window-dedicated-sym)))))=0A+=0A=20;;=20= The=20following=20two=20functions=20are=20like=20`window-next-sibling'=20= and=0A=20;;=20`window-prev-sibling'=20but=20the=20WINDOW=20argument=20is=20= _not_=20optional=20(so=0A=20;;=20they=20don't=20substitute=20the=20= selected=20window=20for=20nil),=20and=20they=20return=0A--=20=0A2.24.1=0A= =0A=0A=46rom=20bb5e41e230a8452b41a569386131648eb2599501=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Mon,=20= 14=20Oct=202019=2021:11:43=20-0400=0ASubject:=20[PATCH=202/3]=20Add=20= window=20configuration=20save/restore=20feature=20for=20gdb-mi=0A= MIME-Version:=201.0=0AContent-Type:=20text/plain;=20charset=3DUTF-8=0A= Content-Transfer-Encoding:=208bit=0A=0ANow=20you=20can=20save=20a=20gdb=20= window=20configuration=20to=20a=20file=20with=0A= =E2=80=98gdb-store-window-configuration=E2=80=99=20and=20restore=20it=20= from=20a=20file=0Awith=20=E2=80=98gdb-restore-window-configuration=E2=80=99= .=20Set=20a=20default=20window=0Aconfiguration=20by=20setting=20= gdb-default-window-configuration-file.=0ANote=20that=20for=20the=20= default=20window=20configuration=20to=20take=20effect,=0A= gdb-many-windows=20needs=20to=20be=20t.=0A=0A*=20= lisp/progmodes/gdb-mi.el=20(require):=20add=20pcase,=20wrap=20inside=0A= =E2=80=98eval-when-compile=E2=80=99=0A=0A(gdb-get-source-buffer):=20new,=20= extracted=20out=20of=20gdb-restore-window=0A(gdb-restore-window):=20= extract=20out=20gdb-get-source-buffer=0A=0A(gdb-store-window-directory,=20= gdb-buffer-p,=20gdb-function-buffer-p,=0Agdb--buffer-type,=20= gdb--inhibit-window-dedicated,=0Agdb-store-window-configuration,=20= gdb-restore-window-configuration):=20new=0A=0A= (gdb-default-window-configuration-file):=20new=0A(gdb-setup-windows):=20= Add=20a=20condition=20branch=20that=20loads=20default=20window=0Aconfig=20= when=20available=0A=0A(gdb-many-windows,=20gdb-get-source-file):=20add=20= comments=0A---=0A=20lisp/progmodes/gdb-mi.el=20|=20210=20= ++++++++++++++++++++++++++++++++-------=0A=201=20file=20changed,=20176=20= insertions(+),=2034=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= b08d487af3..cf0c8f29a9=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-91,7=20+91,8=20@@=0A=20(require=20= 'gud)=0A=20(require=20'json)=0A=20(require=20'bindat)=0A-(require=20= 'cl-lib)=0A+(eval-when-compile=20(require=20'cl-lib))=0A= +(eval-when-compile=20(require=20'pcase))=0A=20=0A=20(declare-function=20= speedbar-change-initial-expansion-list=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A@@=20-589,6=20= +590,20=20@@=20gdb-show-main=0A=20=20=20:group=20'gdb=0A=20=20=20= :version=20"22.1")=0A=20=0A+(defcustom=20gdb-store-window-directory=20= user-emacs-directory=0A+=20=20"The=20default=20directory=20where=20= window=20configuration=20files=20are=20stored.=0A+If=20nil,=20use=20= `default-directory'."=0A+=20=20:type=20'string=0A+=20=20:group=20'gdb=0A= +=20=20:version=20"28.1")=0A+=0A+(defcustom=20= gdb-default-window-configuration-file=20nil=0A+=20=20"If=20non-nil,=20= gdb=20loads=20this=20window=20configuration=20file=20on=20startup.=0A= +This=20should=20be=20an=20absolute=20file=20path."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A=20= (defvar=20gdbmi-debug-mode=20nil=0A=20=20=20"When=20non-nil,=20print=20= the=20messages=20sent/received=20from=20GDB/MI=20in=20*Messages*.")=0A=20= =0A@@=20-4574,41=20+4589,164=20@@=20gdb-set-window-buffer=0A=20=20=20= (set-window-buffer=20window=20(get-buffer=20name))=0A=20=20=20= (set-window-dedicated-p=20window=20t))=0A=20=0A+(defun=20= gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20displaying=20= source=20file=20or=20nil.=0A+=0A+The=20source=20file=20would=20be=20the=20= most=20relevant=20file=20or=20the=20main=20file."=0A+=20=20(if=20= gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-configuration-file=0A+=20=20=20=20=20=20= (gdb-restore-window-configuration=0A+=20=20=20=20=20=20=20= gdb-default-window-configuration-file)=0A+=20=20=20=20;;=20default=20= layout=0A+=20=20=20=20(gdb-get-buffer-create=20'gdb-locals-buffer)=0A+=20= =20=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A+=20=20=20=20= (gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A+=20=20=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A+=20=20=20=20= (switch-to-buffer=20gud-comint-buffer)=0A+=20=20=20=20= (delete-other-windows)=0A+=20=20=20=20(let=20((win0=20(selected-window))=0A= +=20=20=20=20=20=20=20=20=20=20(win1=20(split-window=20nil=20(=20/=20(=20= *=20(window-height)=203)=204)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20= (split-window=20nil=20(=20/=20(window-height)=203)))=0A+=20=20=20=20=20=20= =20=20=20=20(win3=20(split-window-right)))=0A+=20=20=20=20=20=20= (gdb-set-window-buffer=20(gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20= =20=20=20=20(select-window=20win2)=0A+=20=20=20=20=20=20= (set-window-buffer=0A+=20=20=20=20=20=20=20win2=0A+=20=20=20=20=20=20=20= (or=20(gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect)))=0A+=20=20=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A+=20=20=20=20=20=20(let=20((win4=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=0A= +=20=20=20=20=20=20=20=20=20(gdb-get-buffer-create=20'gdb-inferior-io)=20= nil=20win4))=0A+=20=20=20=20=20=20(select-window=20win1)=0A+=20=20=20=20=20= =20(gdb-set-window-buffer=20(gdb-stack-buffer-name))=0A+=20=20=20=20=20=20= (let=20((win5=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=20(if=20gdb-show-threads-by-default=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20gdb-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20gdb=20function=20buffer.=0A+=0A= +E.g.,=20locals=20buffer,=20registers=20buffer,=20but=20don't=20include=20= the=20main=0A+command=20buffer=20(the=20one=20in=20where=20you=20type=20= gdb=20commands)=20or=20source=0A+buffers."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(derived-mode-p=20'gdb-parent-mode=20= 'gdb-inferior-io-mode)))=0A+=0A+(defun=20gdb--buffer-type=20(buffer)=0A+=20= =20"Return=20the=20buffer=20type=20of=20BUFFER=20or=20nil.=0A+=0A+Buffer=20= type=20is=20like=20`gdb-registers-type',=20`gdb-stack-buffer'.=0A+This=20= symbol=20can=20be=20passed=20to=20`gdb-get-buffer-create'.=0A+=0A+Return=20= nil=20if=20BUFFER=20isn't=20a=20gdb=20function=20buffer."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(cl-loop=20for=20rule=20in=20= gdb-buffer-rules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20for=20= mode-name=20=3D=20(gdb-rules-buffer-mode=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20for=20type=20=3D=20(car=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20if=20(eq=20mode-name=20major-mode)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20return=20type=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20finally=20return=20nil)))=0A+=0A+(defun=20= gdb-store-window-configuration=20(file)=0A+=20=20"Save=20current=20= window=20configuration=20to=20FILE.=0A+=0A+You=20can=20later=20restore=20= this=20configuration=20from=20that=20file=20by=0A= +`gdb-restore-window-configuration'."=0A+=20=20(interactive=20(list=20= (read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"Save=20window=20configuration=20to=20file:=20"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-store-window-directory=20default-directory))))=0A+=20=20;;=20we=20= replace=20the=20buffer=20in=20each=20window=20with=20a=20placeholder,=20= store=0A+=20=20;;=20the=20buffer=20type=20(register,=20breakpoint,=20= etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20store=20the=20= window=20configuration=0A+=20=20(save-window-excursion=0A+=20=20=20=20= (let=20((placeholder=20(get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20= =20=20=20=20=20=20=20=20=20(window-persistent-parameters=0A+=20=20=20=20=20= =20=20=20=20=20=20(cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters))=0A+=20=20=20=20=20=20=20=20=20=20= window-config)=0A+=20=20=20=20=20=20(unwind-protect=0A+=20=20=20=20=20=20= =20=20=20=20(dolist=20(win=20(window-list=20nil=20'no-minibuffer))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(select-window=20win)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(when=20(gdb-buffer-p=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-parameter=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(cond=20((gdb-function-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=201)=20if=20a=20user=20arranged=20the=20window=20= configuration=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20herself=20and=20saves=20it,=20windows=20are=20probably=20= not=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20dedicated=202)=20we=20use=20the=20same=20dedication=20flag=20as=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20in=20= `gdb-display-buffer'=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(set-window-dedicated-p=20nil=20t)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20save=20this=20= gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20we=20can=20later=20pass=20it=20to=20= `gdb-get-buffer-create'=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20one=20example:=20`gdb-registers-buffer'=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb--buffer-type=20(current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(error=20"Unrecognized=20= gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20command=20buffer=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((derived-mode-p=20= 'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20((equal=20(selected-window)=20gdb-source-window)=20= 'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(set-window-prev-buffers=20(selected-window)=20= nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20=20= =20=20=20;;=20save=20the=20window=20configuration=20to=20FILE=0A+=20=20=20= =20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20t)))=0A= +=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20=20=20= =20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-restore-window-configuration=20(file)=0A+=20=20"Restore=20window=20= configuration=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20window=20= configuration=20file=20saved=20by=0A+`gdb-store-window-configuration'."=0A= +=20=20(interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"Restore=20window=20= configuration=20from=20file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(or=20gdb-store-window-directory=20= default-directory))))=0A+=20=20;;=20basically=20we=20restore=20window=20= configuration=20and=20go=20through=20each=0A+=20=20;;=20window=20and=20= restore=20the=20function=20buffers=0A+=20=20(let*=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*")))=0A+=20=20=20=20= (unwind-protect=20;=20don't=20leak=20buffer=0A+=20=20=20=20=20=20=20=20= (let=20((window-config=20(with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (insert-file-contents=20file)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(goto-char=20= (point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20need=20to=20go=20to=20= point-min=20even=20we=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20are=20reading=20the=20= whole=20buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(read=20(current-buffer))))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(source-buffer=20(if=20= gdb-source-window=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(window-buffer=20= gdb-source-window)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20(gdb-get-source-buffer)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20do=20the=20same=20thing=20as=20in=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20`gdb-setup-windows'=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(list-buffers-noselect))))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20= (window-state-put=20window-config=20(frame-root-window))=0A+=20=20=20=20=20= =20=20=20=20=20(dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(setq=20buffer-type=20= (window-parameter=20nil=20'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(pcase=20buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20('source=20(when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20= nil=20source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(setq=20gdb-source-window=20= (selected-window))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ('command=20(switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(_=20(let=20((buffer=20= (gdb-get-buffer-create=20buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(with-selected-window-undedicated=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-buffer=20nil=20buffer))))))))=0A+=20=20=20=20=20=20= (kill-buffer=20placeholder))))=0A=20=0A=20(define-minor-mode=20= gdb-many-windows=0A=20=20=20"If=20nil=20just=20pop=20up=20the=20GUD=20= buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20-4627,6=20+4765,9=20= @@=20gdb-many-windows=0A=20(defun=20gdb-restore-windows=20()=0A=20=20=20= "Restore=20the=20basic=20arrangement=20of=20windows=20used=20by=20gdb.=0A= =20This=20arrangement=20depends=20on=20the=20value=20of=20option=20= `gdb-many-windows'."=0A+=20=20;;=20this=20function=20is=20used=20when=20= the=20user=20messed=20up=20window=0A+=20=20;;=20configuration=20and=20= want=20to=20"reset=20to=20default".=20the=20function=20that=0A+=20=20;;=20= sets=20up=20window=20configuration=20on=20start=20up=20is=20= `gdb-get-source-file'=0A=20=20=20(interactive)=0A=20=20=20= (switch-to-buffer=20gud-comint-buffer)=20;Select=20the=20right=20window=20= and=20frame.=0A=20=20=20(delete-other-windows)=0A@@=20-4678,6=20+4819,7=20= @@=20gdb-reset=0A=20(defun=20gdb-get-source-file=20()=0A=20=20=20"Find=20= the=20source=20file=20where=20the=20program=20starts=20and=20display=20= it=20with=20related=0A=20buffers,=20if=20required."=0A+=20=20;;=20this=20= function=20is=20called=20only=20once=20on=20startup=0A=20=20=20= (goto-char=20(point-min))=0A=20=20=20(if=20(re-search-forward=20= gdb-source-file-regexp=20nil=20t)=0A=20=20=20=20=20=20=20(setq=20= gdb-main-file=20(read=20(match-string=201))))=0A--=20=0A2.24.1=0A=0A=0A= =46rom=20c7ac67ec759d16e1f5d212b6fadf93d4ec853ace=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Thu,=20= 16=20Jan=202020=2018:52:17=20-0500=0ASubject:=20[PATCH=203/3]=20Restore=20= window=20configuration=20when=20gdb=20quits=0A=0AMake=20gdb=20preserve=20= the=20window=20configuration=20that=20the=20user=20had=20before=0A= starting=20gdb.=0A=0A*=20lisp/progmodes/gdb-mi.el=20= (gdb--window-configuration-before):=20new=0A(gdb):=20save=20= configuration=20before=20start=0A(gdb-reset):=20restore=20window=20= configuration=0A---=0A=20lisp/progmodes/gdb-mi.el=20|=2011=20++++++++++-=0A= =201=20file=20changed,=2010=20insertions(+),=201=20deletion(-)=0A=0Adiff=20= --git=20a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= cf0c8f29a9..582ccf9562=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-243,6=20+243,9=20@@=20gdb-output-sink=0A= =20=09=20=20=20=20=20=20=20disposition=20of=20output=20generated=20by=20= commands=20that=0A=20=09=20=20=20=20=20=20=20gdb=20mode=20sends=20to=20= gdb=20on=20its=20own=20behalf.")=0A=20=0A+(defvar=20= gdb--window-configuration-before=20nil=0A+=20=20"Stores=20the=20window=20= configuration=20before=20starting=20gdb.")=0A+=0A=20(defcustom=20= gdb-discard-unordered-replies=20t=0A=20=20=20"Non-nil=20means=20discard=20= any=20out-of-order=20GDB=20replies.=0A=20This=20protects=20against=20= lost=20GDB=20replies,=20assuming=20that=20GDB=20always=0A@@=20-762,6=20= +765,10=20@@=20gdb=0A=20=20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20= (error=0A=20=20=20=20=20=20"Multiple=20debugging=20requires=20restarting=20= in=20text=20command=20mode"))=0A+=0A+=20=20;;=20save=20window=20= configuration=20before=20starting=20gdb=20so=20we=20can=20restore=0A+=20=20= ;;=20it=20after=20gdb=20quits=0A+=20=20(setq=20= gdb--window-configuration-before=20(window-state-get))=0A=20=20=20;;=0A=20= =20=20(gud-common-init=20command-line=20nil=20'gud-gdbmi-marker-filter)=0A= =20=0A@@=20-4814,7=20+4821,9=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20= 'speedbar-frame)=20(speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20= nil)=0A=20=20=20(setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20recover=20= window=20configuration=0A+=20=20(window-state-put=20= gdb--window-configuration-before))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A--=20=0A= 2.24.1=0A=0A= --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Disposition: attachment; filename=default-rearrange Content-Type: application/octet-stream; x-unix-mode=0700; name="default-rearrange" Content-Transfer-Encoding: quoted-printable (((min-height=20.=2012)=20(min-width=20.=2030)=20(min-height-ignore=20.=20= 9)=20(min-width-ignore=20.=2012)=20(min-height-safe=20.=203)=20= (min-width-safe=20.=206)=20(min-pixel-height=20.=20204)=20= (min-pixel-width=20.=20240)=20(min-pixel-height-ignore=20.=20153)=20= (min-pixel-width-ignore=20.=2096)=20(min-pixel-height-safe=20.=2051)=20= (min-pixel-width-safe=20.=2048))=20hc=20(pixel-width=20.=201920)=20= (pixel-height=20.=20992)=20(total-width=20.=20240)=20(total-height=20.=20= 58)=20(normal-height=20.=201.0)=20(normal-width=20.=201.0)=20= (combination-limit)=20(leaf=20(pixel-width=20.=20783)=20(pixel-height=20= .=20992)=20(total-width=20.=2098)=20(total-height=20.=2058)=20= (normal-height=20.=201.0)=20(normal-width=20.=200.4059618986693193)=20= (parameters=20(gdb-buffer-type=20.=20source))=20(buffer=20"=20= *gdb-placeholder*"=20(selected=20.=20t)=20(hscroll=20.=200)=20(fringes=20= 8=208=20nil=20nil)=20(margins=20nil)=20(scroll-bars=20nil=200=20t=20nil=20= 0=20t=20nil)=20(vscroll=20.=200)=20(dedicated)=20(point=20.=201)=20= (start=20.=201)))=20(vc=20(pixel-width=20.=20847)=20(pixel-height=20.=20= 992)=20(total-width=20.=20106)=20(total-height=20.=2058)=20= (normal-height=20.=201.0)=20(normal-width=20.=200.4427600627286984)=20= (combination-limit)=20(leaf=20(pixel-width=20.=20847)=20(pixel-height=20= .=20483)=20(total-width=20.=20106)=20(total-height=20.=2028)=20= (normal-height=20.=200.4829123497015181)=20(normal-width=20.=201.0)=20= (parameters=20(gdb-buffer-type=20.=20command))=20(buffer=20"=20= *gdb-placeholder*"=20(selected)=20(hscroll=20.=200)=20(fringes=208=208=20= nil=20nil)=20(margins=20nil)=20(scroll-bars=20nil=200=20t=20nil=200=20t=20= nil)=20(vscroll=20.=200)=20(dedicated)=20(point=20.=201)=20(start=20.=20= 1)))=20(leaf=20(pixel-width=20.=20847)=20(pixel-height=20.=20278)=20= (total-width=20.=20106)=20(total-height=20.=2016)=20(normal-height=20.=20= 0.28280773143438453)=20(normal-width=20.=201.0)=20(parameters=20= (gdb-buffer-type=20.=20gdb-inferior-io))=20(buffer=20"=20= *gdb-placeholder*"=20(selected)=20(hscroll=20.=200)=20(fringes=208=208=20= nil=20nil)=20(margins=20nil)=20(scroll-bars=20nil=200=20t=20nil=200=20t=20= nil)=20(vscroll=20.=200)=20(dedicated=20.=20t)=20(point=20.=201)=20= (start=20.=201)))=20(leaf=20(last=20.=20t)=20(pixel-width=20.=20847)=20= (pixel-height=20.=20231)=20(total-width=20.=20106)=20(total-height=20.=20= 14)=20(normal-height=20.=200.23427991886409735)=20(normal-width=20.=20= 1.0)=20(parameters=20(gdb-buffer-type=20.=20gdb-breakpoints-buffer))=20= (buffer=20"=20*gdb-placeholder*"=20(selected)=20(hscroll=20.=200)=20= (fringes=208=208=20nil=20nil)=20(margins=20nil)=20(scroll-bars=20nil=200=20= t=20nil=200=20t=20nil)=20(vscroll=20.=200)=20(dedicated=20.=20t)=20= (point=20.=201)=20(start=20.=201))))=20(vc=20(last=20.=20t)=20= (pixel-width=20.=20290)=20(pixel-height=20.=20992)=20(total-width=20.=20= 36)=20(total-height=20.=2058)=20(normal-height=20.=201.0)=20= (normal-width=20.=200.15127803860198227)=20(combination-limit)=20(leaf=20= (pixel-width=20.=20290)=20(pixel-height=20.=20499)=20(total-width=20.=20= 36)=20(total-height=20.=2029)=20(normal-height=20.=200.5)=20= (normal-width=20.=201.0)=20(parameters=20(gdb-buffer-type=20.=20= gdb-locals-buffer))=20(buffer=20"=20*gdb-placeholder*"=20(selected)=20= (hscroll=20.=200)=20(fringes=208=208=20nil=20nil)=20(margins=20nil)=20= (scroll-bars=20nil=200=20t=20nil=200=20t=20nil)=20(vscroll=20.=200)=20= (dedicated=20.=20t)=20(point=20.=201)=20(start=20.=201)))=20(leaf=20= (last=20.=20t)=20(pixel-width=20.=20290)=20(pixel-height=20.=20493)=20= (total-width=20.=2036)=20(total-height=20.=2029)=20(normal-height=20.=20= 0.5)=20(normal-width=20.=201.0)=20(parameters=20(gdb-buffer-type=20.=20= gdb-stack-buffer))=20(buffer=20"=20*gdb-placeholder*"=20(selected)=20= (hscroll=20.=200)=20(fringes=208=208=20nil=20nil)=20(margins=20nil)=20= (scroll-bars=20nil=200=20t=20nil=200=20t=20nil)=20(vscroll=20.=200)=20= (dedicated=20.=20t)=20(point=20.=201)=20(start=20.=201)))))= --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii In GNU Emacs 27.0.50 (build 3, x86_64-apple-darwin19.0.0, NS = appkit-1894.10 Version 10.15.1 (Build 19B88)) of 2019-11-30 built on missSilver Repository revision: e2828795d73637577c7726965974a047fe2d7119 Repository branch: master Windowing system distributor 'Apple', version 10.3.1894 System Description: Mac OS X 10.15.2 Recent messages: Checking 71 files in /Users/yuan/attic/emacs/lisp/erc... Checking 34 files in /Users/yuan/attic/emacs/lisp/emulation... Checking 180 files in /Users/yuan/attic/emacs/lisp/emacs-lisp... Checking 24 files in /Users/yuan/attic/emacs/lisp/cedet... Checking 59 files in /Users/yuan/attic/emacs/lisp/calendar... Checking 87 files in /Users/yuan/attic/emacs/lisp/calc... Checking 113 files in /Users/yuan/attic/emacs/lisp/obsolete... Checking for load-path shadows...done Auto-saving... Buffer *unsent mail to bug-gnu-emacs@gnu.org*<2> modified; kill anyway? = (y or n) y Configured using: 'configure --with-modules --with-pdumper=3Dyes = --oldincludedir=3D/Applications/Xcode.app/Contents/Developer/Platforms/Mac= OSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2/' Configured features: NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES THREADS PDUMPER LCMS2 Important settings: value of $LC_CTYPE: UTF-8 value of $LANG: en_CN.UTF-8 locale-coding-system: utf-8-unix Major mode: Emacs-Lisp Minor modes in effect: magit-todos-mode: t bug-reference-prog-mode: t desktop-save-mode: t ghelp-global-minor-mode: t minibuffer-electric-default-mode: t flymake-mode: t global-magit-file-mode: t magit-file-mode: t global-git-commit-mode: t async-bytecomp-package-mode: t shell-dirtrack-mode: t flyspell-mode: t outshine-mode: t ws-butler-global-mode: t ws-butler-mode: t minions-mode: t eyebrowse-mode: t savehist-mode: t global-hl-todo-mode: t hl-todo-mode: t global-highlight-parentheses-mode: t highlight-parentheses-mode: t rainbow-delimiters-mode: t global-undo-tree-mode: t undo-tree-mode: t electric-pair-mode: t winner-mode: t aggressive-indent-mode: t ivy-prescient-mode: t prescient-persist-mode: t recentf-mode: t which-key-mode: t general-override-mode: t outline-minor-mode: t ivy-mode: t company-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-quote-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t transient-mark-mode: t hs-minor-mode: t Load-path shadows: /Users/yuan/.emacs.d/ranch/winman/windman hides = /Users/yuan/.emacs.d/ranch/windman/windman /Users/yuan/.emacs.d/ranch/nerd-font/test/test-helper hides = /Users/yuan/.emacs.d/ranch/doom-themes/test/test-helper /Users/yuan/.emacs.d/ranch/julia-mode/julia-mode hides = /Users/yuan/.emacs.d/package/julia-mode-20190813.1326/julia-mode /Users/yuan/.emacs.d/ranch/julia-mode/julia-latexsubs hides = /Users/yuan/.emacs.d/package/julia-mode-20190813.1326/julia-latexsubs /Users/yuan/.emacs.d/ranch/matlab-emacs/mlint hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/mlint /Users/yuan/.emacs.d/ranch/matlab-emacs/company-matlab-shell hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/company-matlab-shel= l /Users/yuan/.emacs.d/ranch/matlab-emacs/linemark hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/linemark /Users/yuan/.emacs.d/ranch/matlab-emacs/semanticdb-matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/semanticdb-matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/semantic-matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/semantic-matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/srecode-matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/srecode-matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/cedet-matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/cedet-matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/tlc hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/tlc /Users/yuan/.emacs.d/ranch/matlab-emacs/matlab-publish hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/matlab-publish /Users/yuan/.emacs.d/ranch/matlab-emacs/matlab-mode-pkg hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/matlab-mode-pkg /Users/yuan/.emacs.d/package/faceup-20170925.1946/faceup hides = /Users/yuan/attic/emacs/lisp/emacs-lisp/faceup Features: (magit-todos pcre2el rxt re-builder grep checkdoc lisp-mnt bug-reference vc-mtn vc-hg ffap tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat parse-time iso8601 ls-lisp shadow sort mail-extr emacsbug sendmail vc-git vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs vc vc-dispatcher magit-bookmark bookmark company-oddmuse company-keywords company-etags etags fileloop company-gtags company-dabbrev-code company-dabbrev company-files company-capf company-cmake company-xcode company-clang company-semantic company-eclim company-template company-bbdb hideshow desktop frameset trivial-copy ghelp-eglot ghelp-helpful ghelp-builtin ghelp cus-edit cus-start cus-load luna-publish utility pause luna-general-config minibuf-eldef eglot array jsonrpc ert pp ewoc debug flymake-proc flymake warnings url-util magit-submodule magit-obsolete magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func magit-diff smerge-mode diff-mode magit-core magit-autorevert autorevert filenotify magit-margin magit-transient magit-process magit-mode transient git-commit magit-git magit-section magit-utils crm log-edit message rmc puny rfc822 mml mml-sec epa derived epg epg-config gnus-util rmail rmail-loaddefs text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log with-editor async-bytecomp async shell server flyspell ispell outshine outshine-org-cmds outorg isolate inline expand-region text-mode-expansions the-org-mode-expansions er-basic-expansions thingatpt expand-region-core expand-region-custom ws-butler minions eyebrowse savehist buffer-move windmove hl-todo highlight-parentheses rainbow-delimiters doom-cyberpunk-theme undo-tree diff doom-one-light-theme elec-pair winner doom-themes doom-themes-base windman aggressive-indent find-char ivy-prescient prescient recentf-ext recentf tree-widget wid-edit which-key general helpful imenu trace edebug backtrace info-look f dash-functional help-fns radix-tree elisp-refs s loop dash org-element avl-tree generator org advice org-macro org-footnote org-pcomplete pcomplete org-list org-faces org-entities time-date noutline outline org-version ob-emacs-lisp ob ob-tangle org-src ob-ref ob-lob ob-table ob-keys ob-exp ob-comint ob-core ob-eval org-compat org-macs org-loaddefs format-spec find-func cal-menu calendar cal-loaddefs counsel xdg xref project dired dired-loaddefs compile comint ansi-color swiper cl-extra help-mode ivy delsel ring colir color ivy-overlay company edmacro kmacro pcase use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core finder-inf tex-site info cowboy package easymenu browse-url url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map url-vars cl-loaddefs cl-lib lunary lunary-ui luna-f rx seq byte-opt gv bytecomp byte-compile cconv tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads kqueue cocoa ns lcms2 multi-tty make-network-process emacs) Memory information: ((conses 16 198008 22858) (symbols 48 9376 47) (strings 32 38332 2464) (string-bytes 1 1117094) (vectors 16 24687) (vector-slots 8 290292 27848) (floats 8 516 434) (intervals 56 14668 1334) (buffers 1000 28)) --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 31 Jan 2020 10:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15804656669198 (code B ref 39181); Fri, 31 Jan 2020 10:15:02 +0000 Received: (at 39181) by debbugs.gnu.org; 31 Jan 2020 10:14:26 +0000 Received: from localhost ([127.0.0.1]:36599 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ixTJh-0002OH-Nd for submit@debbugs.gnu.org; Fri, 31 Jan 2020 05:14:25 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40242) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ixTJf-0002O4-Gm for 39181@debbugs.gnu.org; Fri, 31 Jan 2020 05:14:24 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60691) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ixTJa-000050-EJ; Fri, 31 Jan 2020 05:14:18 -0500 Received: from [176.228.60.248] (port=2681 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1ixTJZ-0001WL-Hd; Fri, 31 Jan 2020 05:14:18 -0500 Date: Fri, 31 Jan 2020 12:13:56 +0200 Message-Id: <83lfpokk63.fsf@gnu.org> From: Eli Zaretskii In-reply-to: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> (message from Yuan Fu on Sat, 18 Jan 2020 15:57:32 -0500) References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > From: Yuan Fu > Date: Sat, 18 Jan 2020 15:57:32 -0500 > > Right now if a user wants to use gdb with many windows, the only layout option is the default 6-window layout. This is not entirely accurate. The user could start "M-x gdb" normally, then selectively display some of the other windows via the Gud->GDB-Windows or Gud->GDB-Frames menus. > This patch allows a user to save her own layout, and use this layout in gdb-mi sessions. I'd prefer to extend the existing capability by adding a feature, both in the menu bar and as a command, to save and restore the window configuration set via the above-mentioned existing facilities. WDYT? Please also fix all the minor nits I mentioned in review of your previous patches: quoting, 2 blanks between sentences, complete sentences in comments and log messages, etc. Last, but not least, please don't break a single patch into several separate ones, unless each one of the separate patches can make sense if applied on its own. Thanks. From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 02 Feb 2020 14:23:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Eli Zaretskii Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158065334110395 (code B ref 39181); Sun, 02 Feb 2020 14:23:02 +0000 Received: (at 39181) by debbugs.gnu.org; 2 Feb 2020 14:22:21 +0000 Received: from localhost ([127.0.0.1]:39676 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iyG8j-0002hb-IJ for submit@debbugs.gnu.org; Sun, 02 Feb 2020 09:22:21 -0500 Received: from mail-qk1-f170.google.com ([209.85.222.170]:38684) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iyG8i-0002hP-B0 for 39181@debbugs.gnu.org; Sun, 02 Feb 2020 09:22:20 -0500 Received: by mail-qk1-f170.google.com with SMTP id k6so11661767qki.5 for <39181@debbugs.gnu.org>; Sun, 02 Feb 2020 06:22:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=Ub1+42yBeOCsC4obKutxlAHnR2ybncYSlZcW2kGN51w=; b=n7yyfbe0+1LXsJp7tSC6tHghZ9NDdKYUKKiiggBXuDIZmhSrYSeNbPmEetWCbUCg9G ldGHneAsC90nQqvHYmSmClAiIa74sp1nZutddrZu2BYtl24VFuSWHmIuIqXIZTdDzy1Q B5gw5ZUTP5TNS7bdxTzPi7kcih0drGOlLmvBNGPGRzANmOugBM3hBDTcxU/83Xw20fxV yn1Njbvps1oxf/GdmGt4klMZcqoM12hX6nRSE6IqSXhn1ZDBPI81iPRgtHF1Wy00Xnt/ Z0EVruGI2tjIss3Kxhx1JbfpMTIJaGKClF7WJpzPv5wav0fwBkfdeKVewWXz6uA5ZYvr kIlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=Ub1+42yBeOCsC4obKutxlAHnR2ybncYSlZcW2kGN51w=; b=PTuK63aM7wT6+5K4yJxQbDYJt7S4apjXqbWH85ICCXbV6DJ+3b67Olt9nxFS0w+Xm3 0LgfPwqdV3xlwkWBFGySLv8JfW8/3z4ccTWMcaDuDz5WYOw9t+hozDVkBnWLVZiodXFZ BCPc0e1IwnDE7RiB88T5ezlkQzGRv2zWbYO/6vTFzkVgrXJpXLPt9AEL6CyqvHJU9TRS GcQ7c7PzH0Woqlc+3MndwblxkgSieLJLd4WYfOoSU9DDBmlJFiw23BSzVdBLFl1vOqwh nIti/j6WRZZlu6/GOVqr0cnkm4RKxXUJeLMRewE4AzrrpyTLVw/vIYrOnb8eV08bj1Q/ hNOA== X-Gm-Message-State: APjAAAUngipEoaG1wAbayoBnYIhS4chN9Pbmkux4npTVLUrA8h55w4wL xMOq/Wmkwx1ZSbdVh+vrgU5D9agpLuRb1w== X-Google-Smtp-Source: APXvYqwyBGM8Jp9J1vHUHdBvI4sn2M9FuIkB/BODD0fpUr+99RApcgAzLJM/7FldGBW1kwuOztTi/w== X-Received: by 2002:a37:2e47:: with SMTP id u68mr19280137qkh.485.1580653334725; Sun, 02 Feb 2020 06:22:14 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id i4sm551903qkf.111.2020.02.02.06.22.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Feb 2020 06:22:14 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.40.2.2.4\)) From: Yuan Fu In-Reply-To: <83lfpokk63.fsf@gnu.org> Date: Sun, 2 Feb 2020 09:22:07 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> X-Mailer: Apple Mail (2.3608.40.2.2.4) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Jan 31, 2020, at 5:13 AM, Eli Zaretskii wrote: >=20 >> From: Yuan Fu >> Date: Sat, 18 Jan 2020 15:57:32 -0500 >>=20 >> Right now if a user wants to use gdb with many windows, the only = layout option is the default 6-window layout. >=20 > This is not entirely accurate. The user could start "M-x gdb" > normally, then selectively display some of the other windows via the > Gud->GDB-Windows or Gud->GDB-Frames menus. >=20 >> This patch allows a user to save her own layout, and use this layout = in gdb-mi sessions. >=20 > I'd prefer to extend the existing capability by adding a feature, both > in the menu bar and as a command, to save and restore the window > configuration set via the above-mentioned existing facilities. WDYT? Thanks makes sense; will do. I=E2=80=99ll put them in GUD windows menu. > Please also fix all the minor nits I mentioned in review of your > previous patches: quoting, 2 blanks between sentences, complete > sentences in comments and log messages, etc. Last, but not least, > please don't break a single patch into several separate ones, unless > each one of the separate patches can make sense if applied on its own. Will do. Yuan From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 07 Feb 2020 22:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Eli Zaretskii Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158111450716198 (code B ref 39181); Fri, 07 Feb 2020 22:29:02 +0000 Received: (at 39181) by debbugs.gnu.org; 7 Feb 2020 22:28:27 +0000 Received: from localhost ([127.0.0.1]:50396 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j0C6s-0004DB-MP for submit@debbugs.gnu.org; Fri, 07 Feb 2020 17:28:27 -0500 Received: from mail-qt1-f180.google.com ([209.85.160.180]:44433) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j0C6q-0004Cw-CO for 39181@debbugs.gnu.org; Fri, 07 Feb 2020 17:28:24 -0500 Received: by mail-qt1-f180.google.com with SMTP id w8so603129qts.11 for <39181@debbugs.gnu.org>; Fri, 07 Feb 2020 14:28:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=QDpzCJJU3tW0b/9nzDCdvsJC5zmb82e6fakXnyNaDog=; b=GZ4rNgyHA+3hVYo1k+P+mwBw01vZ5Kvn7ngMRKPd0mfLBtk5zmBIzomop7rSMXwD0s FvGb5pcqMFtlLmNSXpDsl//2n6C50G7p+G7ao4VxbXgu/iFGRQEyHhMDGjWxJuk8mycF kaneUFWJ4EGDg41oo3h4omtuS7WNQi8tZVoBZF2u8Rp5O/08PY/J1/ncaWHu8vk8Akbf 3GG9lAav+wbuffVgpLed2YYcSIeVWE+BAFcz3IDM4N5oC0UxcS/Y9/L0qf2fHEdLsC8N D4hYsCIVtRmRxRdb7vwXu7QegtPSeC3txXi9d+bcvcLnockGXAmXAOoIzUDTI3QW9Cmj VqGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=QDpzCJJU3tW0b/9nzDCdvsJC5zmb82e6fakXnyNaDog=; b=uEsvfa5VXYicpglrjfBivou3UJPIPQzCJdIY4HItQk5++ldWyuB3G8s+4/mEuju6TX VRf0fEeusr6SOGHqXMopf5a7LelJ9ltpYP9pRNV6nJ0XnWhPTTynIkLgjdpHN1KYJfzj wEXSyAT/6TrbgEosSegpBeUqV5G5gg3Itar2SDubhgGN9y3gFP3rN9s0vDGf/pNi45om VRS5Pp5LYjxRuZEPHgnagUSRMCbxsVk8sxFNwH/SwZi98+SxGjgx9HUqcnWa8YCymXB4 QgV6dNPDJWGeTSfAM4yhikP2Nr6CruH/x2e7TTzWd54RWl1sAEP8LGqHNuhiuVKUo49Q VsRw== X-Gm-Message-State: APjAAAUGLg6hBF/9g+lJdsyw+T9Fe/LXdnD1ngkbfViIf9ikDV26nSes xKtHZ2iXEf9Y6SaeWu8AGpTsUsIQ09UF+g== X-Google-Smtp-Source: APXvYqxO0GVCrIhlFvVNrWcbpUoixXXQaHLh+bi/GQIsO0Fhja5urN7gX7pXaOUrdrCTN1P6eiJ/Kg== X-Received: by 2002:ac8:4616:: with SMTP id p22mr572000qtn.368.1581114498546; Fri, 07 Feb 2020 14:28:18 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id b24sm2049205qto.71.2020.02.07.14.28.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 07 Feb 2020 14:28:17 -0800 (PST) From: Yuan Fu Message-Id: <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_B6AB3B29-8915-482E-BACC-057A6184FA32" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.40.2.2.4\)) Date: Fri, 7 Feb 2020 17:28:09 -0500 In-Reply-To: <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> X-Mailer: Apple Mail (2.3608.40.2.2.4) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_B6AB3B29-8915-482E-BACC-057A6184FA32 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Here is the new patch. New-store-window.patch contains the one allowing = user store/restore window config. I added the two menu items. And I = changed the name to gdb-save-window-layout and gdb-load-window-layout = because I think they are shorter and easier to understand; WDYT? Restore-after-quit.patch contain the patch which restores the original = window configuration after gdb quits. Maybe I should send it as a = separate patch? BTW, It used to be three commits, I merged the first one on window.el = into new-restore-window.patch. Yuan --Apple-Mail=_B6AB3B29-8915-482E-BACC-057A6184FA32 Content-Disposition: attachment; filename=new-store-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-store-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=2095cb85d242f8270387e873f65a383b2e4cb5336f=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Thu,=20= 16=20Jan=202020=2018:52:17=20-0500=0ASubject:=20[PATCH]=20Restore=20= window=20configuration=20when=20gdb=20quits=0A=0AMake=20gdb=20preserve=20= the=20window=20configuration=20that=20the=20user=20had=20before=0A= starting=20gdb.=0A=0A*=20lisp/progmodes/gdb-mi.el=20= (gdb--window-configuration-before):=20New=0Avariable.=0A(gdb):=20Save=20= configuration=20on=20startup.=0A(gdb-reset):=20Restore=20window=20= configuration=20after=20quit.=0A---=0A=20lisp/progmodes/gdb-mi.el=20|=20= 11=20++++++++++-=0A=201=20file=20changed,=2010=20insertions(+),=201=20= deletion(-)=0A=0Adiff=20--git=20a/lisp/progmodes/gdb-mi.el=20= b/lisp/progmodes/gdb-mi.el=0Aindex=208c7e81d727..4b18c5cd80=20100644=0A= ---=20a/lisp/progmodes/gdb-mi.el=0A+++=20b/lisp/progmodes/gdb-mi.el=0A@@=20= -243,6=20+243,9=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20= disposition=20of=20output=20generated=20by=20commands=20that=0A=20=09=20=20= =20=20=20=20=20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20= behalf.")=0A=20=0A+(defvar=20gdb--window-configuration-before=20nil=0A+=20= =20"Stores=20the=20window=20configuration=20before=20starting=20gdb.")=0A= +=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-762,6=20+765,10=20@@=20gdb=0A=20=20=20=20=20= (gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20=20=20=20=20= "Multiple=20debugging=20requires=20restarting=20in=20text=20command=20= mode"))=0A+=0A+=20=20;;=20save=20window=20configuration=20before=20= starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20after=20gdb=20= quits=0A+=20=20(setq=20gdb--window-configuration-before=20= (window-state-get))=0A=20=20=20;;=0A=20=20=20(gud-common-init=20= command-line=20nil=20'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4821,7=20= +4828,9=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20recover=20= window=20configuration=0A+=20=20(window-state-put=20= gdb--window-configuration-before))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A--=20=0A= 2.25.0=0A=0A= --Apple-Mail=_B6AB3B29-8915-482E-BACC-057A6184FA32 Content-Disposition: attachment; filename=restore-after-quit.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="restore-after-quit.patch" Content-Transfer-Encoding: quoted-printable =46rom=20fcee6b9498359b089d4f99ee23cd037e615a4568=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Thu,=20= 16=20Jan=202020=2018:52:17=20-0500=0ASubject:=20[PATCH]=20Restore=20= window=20configuration=20when=20gdb=20quits=0A=0AMake=20gdb=20preserve=20= the=20window=20configuration=20that=20the=20user=20had=20before=0A= starting=20gdb.=0A=0A*=20lisp/progmodes/gdb-mi.el=20= (gdb--window-configuration-before):=20New=0Avariable.=0A(gdb):=20Save=20= configuration=20on=20startup.=0A(gdb-reset):=20Restore=20window=20= configuration=20after=20quit.=0A---=0A=20lisp/progmodes/gdb-mi.el=20|=20= 11=20++++++++++-=0A=201=20file=20changed,=2010=20insertions(+),=201=20= deletion(-)=0A=0Adiff=20--git=20a/lisp/progmodes/gdb-mi.el=20= b/lisp/progmodes/gdb-mi.el=0Aindex=203c2eee5b73..8b5c4f2ec1=20100644=0A= ---=20a/lisp/progmodes/gdb-mi.el=0A+++=20b/lisp/progmodes/gdb-mi.el=0A@@=20= -243,6=20+243,9=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20= disposition=20of=20output=20generated=20by=20commands=20that=0A=20=09=20=20= =20=20=20=20=20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20= behalf.")=0A=20=0A+(defvar=20gdb--window-configuration-before=20nil=0A+=20= =20"Stores=20the=20window=20configuration=20before=20starting=20gdb.")=0A= +=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-762,6=20+765,10=20@@=20gdb=0A=20=20=20=20=20= (gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20=20=20=20=20= "Multiple=20debugging=20requires=20restarting=20in=20text=20command=20= mode"))=0A+=0A+=20=20;;=20save=20window=20configuration=20before=20= starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20after=20gdb=20= quits=0A+=20=20(setq=20gdb--window-configuration-before=20= (window-state-get))=0A=20=20=20;;=0A=20=20=20(gud-common-init=20= command-line=20nil=20'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4819,7=20= +4826,9=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20recover=20= window=20configuration=0A+=20=20(window-state-put=20= gdb--window-configuration-before))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A--=20=0A= 2.25.0=0A=0A= --Apple-Mail=_B6AB3B29-8915-482E-BACC-057A6184FA32-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 10 Feb 2020 04:57:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Eli Zaretskii Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158131061715160 (code B ref 39181); Mon, 10 Feb 2020 04:57:02 +0000 Received: (at 39181) by debbugs.gnu.org; 10 Feb 2020 04:56:57 +0000 Received: from localhost ([127.0.0.1]:53561 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j117w-0003wS-P3 for submit@debbugs.gnu.org; Sun, 09 Feb 2020 23:56:57 -0500 Received: from mail-qk1-f182.google.com ([209.85.222.182]:40670) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j117v-0003wE-56 for 39181@debbugs.gnu.org; Sun, 09 Feb 2020 23:56:55 -0500 Received: by mail-qk1-f182.google.com with SMTP id b7so5329480qkl.7 for <39181@debbugs.gnu.org>; Sun, 09 Feb 2020 20:56:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=NNO6ajAPNDrsqFc0HU4jggSTo5dsnvM5faO6jVOgh1Q=; b=vIhXj6kaw34igbVLnCEOw+pywwgBktafp+S6aeswpBMvgij9yzFuT3oYX+bO6CFOIM eQHhKj0OtvS6HYOWm25yyxdXM2oUPDaajRT+Sgca5Dybob02nuZrMbgZiltHD8RrWEQf IS8NYYPX8QwtNF4WRnBNThEf9T6HzmllFQoYonWV/Ug9rpW46zSdrBU7s+V+LcWaUxsO HK9lSzwkPH0ubHTHYTE2SXBE8Jp9G/rIew1YQeHauIeT75d8i+idtD1U/uxZdhYSNr5h +oh2U4IKqxGeuGe7Miie9beGNg2QXDYTLASxn8Fdm1by7qWU5OttVrJLa4IujYDuOLV3 3YRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=NNO6ajAPNDrsqFc0HU4jggSTo5dsnvM5faO6jVOgh1Q=; b=WbFdbGPgLFFdF4o0INVRJDaZmOzGn3+a2YxIRLrAsv/GaFaxHy9ochVvilpDOfkEOF YN74oHU5AdfxXgDDWsjncOONPzzzn1GEl0uG+An+yO7eRHMr1NBhaC22tvuBt1TZ4m78 Iwnht92cj+Aor2Qa8JN2dTIz+eMKhvyt49c/nRKUJWZExcrYXn2Sce/aEfgDZNYN0O1H ZCyVZDram6nNNoQGRStArjPM77iZ6yE2rBGwH8MSypHsz9ulqcSTqyh+/Ss5g8TFcqCS msSt92/WkaL+6v29+d9crkehrsBLgjgEOXvGadgU8rJ3g7LqSuZBifgZ4Mkbkzhava+n /yUQ== X-Gm-Message-State: APjAAAVIJpVlEJhl2vr5iyw8/fPurPatosKrAn3Y1PumHR5NTrBngcOG m3N9DjcEvjwHlug2FcKc0ek= X-Google-Smtp-Source: APXvYqyhUSlr4lCjdTWj9O0gwh+Q8KsEIObLOsyvlSG2dYRzaMAOq96rhzPlInN6C3Bu07QxLRiGoQ== X-Received: by 2002:a05:620a:1586:: with SMTP id d6mr3864633qkk.234.1581310609519; Sun, 09 Feb 2020 20:56:49 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id k5sm5233292qkk.117.2020.02.09.20.56.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Feb 2020 20:56:49 -0800 (PST) From: Yuan Fu Message-Id: Content-Type: multipart/mixed; boundary="Apple-Mail=_DAB05EEB-D33C-4D29-BA1E-A72E534C599F" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Sun, 9 Feb 2020 23:56:47 -0500 In-Reply-To: <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_DAB05EEB-D33C-4D29-BA1E-A72E534C599F Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii I updated my patch according to your suggestion in the memory patch. Yuan --Apple-Mail=_DAB05EEB-D33C-4D29-BA1E-A72E534C599F Content-Disposition: attachment; filename=restore-after-quit.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="restore-after-quit.patch" Content-Transfer-Encoding: quoted-printable =46rom=20fcee6b9498359b089d4f99ee23cd037e615a4568=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Thu,=20= 16=20Jan=202020=2018:52:17=20-0500=0ASubject:=20[PATCH]=20Restore=20= previous=20window=20layout=20when=20gdb=20quits=0A=0AMake=20gdb=20= preserve=20the=20window=20configuration=20that=20the=20user=20had=20= before=0Astarting=20gdb.=0A*=20lisp/progmodes/gdb-mi.el=20= (gdb--window-configuration-before):=20New=0Avariable.=0A(gdb):=20Save=20= configuration=20on=20startup.=0A(gdb-reset):=20Restore=20window=20= configuration=20after=20quit.=0A---=0A=20lisp/progmodes/gdb-mi.el=20|=20= 11=20++++++++++-=0A=201=20file=20changed,=2010=20insertions(+),=201=20= deletion(-)=0A=0Adiff=20--git=20a/lisp/progmodes/gdb-mi.el=20= b/lisp/progmodes/gdb-mi.el=0Aindex=203c2eee5b73..8b5c4f2ec1=20100644=0A= ---=20a/lisp/progmodes/gdb-mi.el=0A+++=20b/lisp/progmodes/gdb-mi.el=0A@@=20= -243,6=20+243,9=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20= disposition=20of=20output=20generated=20by=20commands=20that=0A=20=09=20=20= =20=20=20=20=20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20= behalf.")=0A=20=0A+(defvar=20gdb--window-configuration-before=20nil=0A+=20= =20"Stores=20the=20window=20configuration=20before=20starting=20gdb.")=0A= +=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-762,6=20+765,10=20@@=20gdb=0A=20=20=20=20=20= (gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20=20=20=20=20= "Multiple=20debugging=20requires=20restarting=20in=20text=20command=20= mode"))=0A+=0A+=20=20;;=20save=20window=20configuration=20before=20= starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20after=20gdb=20= quits=0A+=20=20(setq=20gdb--window-configuration-before=20= (window-state-get))=0A=20=20=20;;=0A=20=20=20(gud-common-init=20= command-line=20nil=20'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4819,7=20= +4826,9=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20recover=20= window=20configuration=0A+=20=20(window-state-put=20= gdb--window-configuration-before))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A--=20=0A= 2.25.0=0A=0A= --Apple-Mail=_DAB05EEB-D33C-4D29-BA1E-A72E534C599F Content-Disposition: attachment; filename=new-store-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-store-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=20014b52066abff85eac6b90933eec7d3aa0259fda=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Thu,=20= 17=20Oct=202019=2017:35:48=20-0400=0ASubject:=20[PATCH]=20Allow=20user=20= to=20save/load=20window=20layout=20in=20gdb-mi=0AMIME-Version:=201.0=0A= Content-Type:=20text/plain;=20charset=3DUTF-8=0A= Content-Transfer-Encoding:=208bit=0A=0AAdd=20a=20feature=20that=20allows=20= a=20user=20to=20save=20a=20gdb=20window=20layout=20to=20a=20file=0Awith=20= 'gdb-save-window-layout'=20and=20load=20it=20back=20it=20with=0A= 'gdb-load-window-layout'.=20Set=20a=20default=20window=20configuration=20= by=0Asetting=20'gdb-default-window-layout-file'.=20Note=20that=20for=20= the=20default=0Awindow=20configuration=20to=20take=20effect,=20= 'gdb-many-windows'=20needs=20to=20be=20t.=0AIn=20window.el,=20add=20= 'with-selected-window-undedicated'.=0A*=20lisp/progmodes/gdb-mi.el=20= (require):=20add=20'pcase',=20wrap=20'pcase'=20and=20'cl-lib'=0Ainside=20= =E2=80=98eval-when-compile=E2=80=99.=0A(gdb-window-layout-directory,=20= gdb-default-window-layout-file):=20New=0Avariables.=0A(gud-menu-map):=20= Add=20"Load=20window=20layout"=20and=20"Save=20window=20layout"=20to=0A= menu.=0A(gdb-get-source-buffer):=20New=20function,=20extracted=20out=20= of=0A'gdb-restore-window'.=0A(gdb-setup-windows):=20Add=20a=20condition=20= branch=20that=20loads=20default=20window=0Alayout=20when=20available.=0A= (gdb-buffer-p,=20gdb-function-buffer-p,=20gdb--buffer-type,=0A= gdb-save-window-layout,=20gdb-load-window-layout):=20New=20functions.=0A= (gdb-many-windows,=20gdb-get-source-file):=20Add=20comments.=0A*=20= lisp/window.el=20(with-selected-window-undedicated):=20New=20function.=0A= ---=0A=20lisp/progmodes/gdb-mi.el=20|=20217=20= +++++++++++++++++++++++++++++++++------=0A=20lisp/window.el=20=20=20=20=20= =20=20=20=20=20=20|=20=2013=20+++=0A=202=20files=20changed,=20196=20= insertions(+),=2034=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= b08d487af3..8c7e81d727=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-91,7=20+91,8=20@@=0A=20(require=20= 'gud)=0A=20(require=20'json)=0A=20(require=20'bindat)=0A-(require=20= 'cl-lib)=0A+(eval-when-compile=20(require=20'cl-lib))=0A= +(eval-when-compile=20(require=20'pcase))=0A=20=0A=20(declare-function=20= speedbar-change-initial-expansion-list=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A@@=20-589,6=20= +590,20=20@@=20gdb-show-main=0A=20=20=20:group=20'gdb=0A=20=20=20= :version=20"22.1")=0A=20=0A+(defcustom=20gdb-window-layout-directory=20= user-emacs-directory=0A+=20=20"The=20default=20directory=20where=20= window=20configuration=20files=20are=20stored.=0A+If=20nil,=20use=20= `default-directory'."=0A+=20=20:type=20'string=0A+=20=20:group=20'gdb=0A= +=20=20:version=20"28.1")=0A+=0A+(defcustom=20= gdb-default-window-layout-file=20nil=0A+=20=20"If=20non-nil,=20gdb=20= loads=20this=20window=20layout=20file=20on=20startup.=0A+If=20not=20= absolute,=20GDB=20will=20look=20under=20`gdb-window-layout-directory'."=0A= +=20=20:type=20'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defvar=20gdbmi-debug-mode=20nil=0A=20=20=20"When=20= non-nil,=20print=20the=20messages=20sent/received=20from=20GDB/MI=20in=20= *Messages*.")=0A=20=0A@@=20-4459,6=20+4474,8=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20(define-key=20= gud-menu-map=20[displays]=0A=20=20=20=20=20`(menu-item=20"GDB-Windows"=20= ,menu=0A=20=09=09:visible=20(eq=20gud-minor-mode=20'gdbmi)))=0A+=20=20= (define-key=20menu=20[load-layout]=20'("Load=20window=20layout"=20.=20= gdb-load-window-layout))=0A+=20=20(define-key=20menu=20[save-layout]=20= '("Save=20window=20layout"=20.=20gdb-save-window-layout))=0A=20=20=20= (define-key=20menu=20[gdb]=20'("Gdb"=20.=20gdb-display-gdb-buffer))=0A=20= =20=20(define-key=20menu=20[threads]=20'("Threads"=20.=20= gdb-display-threads-buffer))=0A=20=20=20(define-key=20menu=20[memory]=20= '("Memory"=20.=20gdb-display-memory-buffer))=0A@@=20-4574,41=20+4591,169=20= @@=20gdb-set-window-buffer=0A=20=20=20(set-window-buffer=20window=20= (get-buffer=20name))=0A=20=20=20(set-window-dedicated-p=20window=20t))=0A= =20=0A+(defun=20gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20= displaying=20source=20file=20or=20nil.=0A+=0A+The=20source=20file=20= would=20be=20the=20most=20relevant=20file=20or=20the=20main=20file."=0A+=20= =20(if=20gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-layout-file=0A+=20=20=20=20=20=20= (gdb-load-window-layout=0A+=20=20=20=20=20=20=20(if=20= (file-name-absolute-p=20gdb-default-window-layout-file)=0A+=20=20=20=20=20= =20=20=20=20=20=20gdb-default-window-layout-file=0A+=20=20=20=20=20=20=20= =20=20(expand-file-name=20gdb-default-window-layout-file=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-window-layout-directory)))=0A+=20=20=20=20;;=20Create=20default=20= layout=20as=20before.=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-stack-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-breakpoints-buffer)=0A+=20=20=20=20(set-window-dedicated-p=20= (selected-window)=20nil)=0A+=20=20=20=20(switch-to-buffer=20= gud-comint-buffer)=0A+=20=20=20=20(delete-other-windows)=0A+=20=20=20=20= (let=20((win0=20(selected-window))=0A+=20=20=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20= /=20(window-height)=203)))=0A+=20=20=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20=20=20=20=20= (select-window=20win2)=0A+=20=20=20=20=20=20(set-window-buffer=0A+=20=20=20= =20=20=20=20win2=0A+=20=20=20=20=20=20=20(or=20(gdb-get-source-buffer)=0A= +=20=20=20=20=20=20=20=20=20=20=20(list-buffers-noselect)))=0A+=20=20=20=20= =20=20(setq=20gdb-source-window=20(selected-window))=0A+=20=20=20=20=20=20= (let=20((win4=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=0A+=20=20=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A+=20=20=20=20= =20=20(select-window=20win1)=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A+=20=20=20=20=20=20(let=20((win5=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=20= (if=20gdb-show-threads-by-default=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20gdb-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20gdb=20function=20buffer.=0A+=0A= +E.g.,=20locals=20buffer,=20registers=20buffer,=20but=20don't=20include=20= the=20main=0A+command=20buffer=20(the=20one=20in=20where=20you=20type=20= gdb=20commands)=20or=20source=0A+buffers."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(derived-mode-p=20'gdb-parent-mode=20= 'gdb-inferior-io-mode)))=0A+=0A+(defun=20gdb--buffer-type=20(buffer)=0A+=20= =20"Return=20the=20buffer=20type=20of=20BUFFER=20or=20nil.=0A+=0A+Buffer=20= type=20is=20like=20`gdb-registers-type',=20`gdb-stack-buffer'.=0A+This=20= symbol=20can=20be=20passed=20to=20`gdb-get-buffer-create'.=0A+=0A+Return=20= nil=20if=20BUFFER=20isn't=20a=20gdb=20function=20buffer."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(cl-loop=20for=20rule=20in=20= gdb-buffer-rules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20for=20= mode-name=20=3D=20(gdb-rules-buffer-mode=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20for=20type=20=3D=20(car=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20if=20(eq=20mode-name=20major-mode)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20return=20type=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20finally=20return=20nil)))=0A+=0A+(defun=20gdb-save-window-layout=20= (file)=0A+=20=20"Save=20current=20window=20layout=20(window=20= configuration)=20to=20FILE.=0A+=0A+You=20can=20later=20restore=20this=20= layout=20from=20that=20file=20by=0A+`gdb-load-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Save=20window=20configuration=20to=20= file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(or=20gdb-window-layout-directory=20default-directory))))=0A+=20=20= ;;=20We=20replace=20the=20buffer=20in=20each=20window=20with=20a=20= placeholder,=20store=0A+=20=20;;=20the=20buffer=20type=20(register,=20= breakpoint,=20etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20write=20= the=20window=20configuration=20to=20the=20file.=0A+=20=20= (save-window-excursion=0A+=20=20=20=20(let=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20=20=20=20=20=20=20=20= =20=20(window-persistent-parameters=0A+=20=20=20=20=20=20=20=20=20=20=20= (cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters))=0A+=20=20=20=20=20=20=20=20=20=20= window-config)=0A+=20=20=20=20=20=20(unwind-protect=0A+=20=20=20=20=20=20= =20=20=20=20(dolist=20(win=20(window-list=20nil=20'no-minibuffer))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(select-window=20win)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(when=20(gdb-buffer-p=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-parameter=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(cond=20((gdb-function-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=201)=20If=20a=20user=20arranged=20the=20window=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= configuration=20herself=20and=20saves=20it,=20windows=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20are=20probably=20= not=20dedicated.=20=202)=20We=20use=20the=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20same=20dedication=20flag=20as=20= in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20`gdb-display-buffer'.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(set-window-dedicated-p=20nil=20t)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20We=20save=20this=20= gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20we=20can=20later=20pass=20it=20to=20= `gdb-get-buffer-create';=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20one=20example:=20`gdb-registers-buffer'.=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb--buffer-type=20(current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(error=20"Unrecognized=20= gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20Command=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((derived-mode-p=20= 'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20((equal=20(selected-window)=20gdb-source-window)=20= 'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(set-window-prev-buffers=20(selected-window)=20= nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20=20= =20=20=20;;=20Save=20the=20window=20configuration=20to=20FILE.=0A+=20=20=20= =20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20t)))=0A= +=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20=20=20= =20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-load-window-layout=20(file)=0A+=20=20"Restore=20window=20layout=20= (window=20configuration)=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20= window=20layout=20file=20saved=20by=0A+`gdb-save-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Restore=20window=20configuration=20= from=20file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(or=20gdb-window-layout-directory=20default-directory))))=0A= +=20=20;;=20Basically,=20we=20restore=20window=20configuration=20and=20= go=20through=20each=0A+=20=20;;=20window=20and=20restore=20the=20= function=20buffers.=0A+=20=20(let*=20((placeholder=20(get-buffer-create=20= "=20*gdb-placeholder*")))=0A+=20=20=20=20(unwind-protect=20;=20Don't=20= leak=20buffer.=0A+=20=20=20=20=20=20=20=20(let=20((window-config=20= (with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(insert-file-contents=20file)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20We=20need=20to=20go=20to=20point-min=20even=20we=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20are=20reading=20the=20whole=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read=20= (current-buffer))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (source-buffer=20(if=20gdb-source-window=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (window-buffer=20gdb-source-window)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Do=20the=20= same=20thing=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-setup-windows'=20if=20no=20source=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20buffer=20is=20found.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20(window-state-put=20= window-config=20(frame-root-window))=0A+=20=20=20=20=20=20=20=20=20=20= (dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20buffer-type=20(window-parameter=20nil=20= 'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pcase=20= buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('source=20= (when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20gdb-source-window=20(selected-window))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('command=20= (switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(_=20(let=20((buffer=20(gdb-get-buffer-create=20= buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= buffer))))))))=0A+=20=20=20=20=20=20(kill-buffer=20placeholder))))=0A=20=0A= =20(define-minor-mode=20gdb-many-windows=0A=20=20=20"If=20nil=20just=20= pop=20up=20the=20GUD=20buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20= -4627,6=20+4772,9=20@@=20gdb-many-windows=0A=20(defun=20= gdb-restore-windows=20()=0A=20=20=20"Restore=20the=20basic=20arrangement=20= of=20windows=20used=20by=20gdb.=0A=20This=20arrangement=20depends=20on=20= the=20value=20of=20option=20`gdb-many-windows'."=0A+=20=20;;=20This=20= function=20is=20used=20when=20the=20user=20messed=20up=20window=0A+=20=20= ;;=20configuration=20and=20want=20to=20"reset=20to=20default".=20=20The=20= function=20that=0A+=20=20;;=20sets=20up=20window=20configuration=20on=20= start=20up=20is=20`gdb-get-source-file'.=0A=20=20=20(interactive)=0A=20=20= =20(switch-to-buffer=20gud-comint-buffer)=20;Select=20the=20right=20= window=20and=20frame.=0A=20=20=20(delete-other-windows)=0A@@=20-4678,6=20= +4826,7=20@@=20gdb-reset=0A=20(defun=20gdb-get-source-file=20()=0A=20=20=20= "Find=20the=20source=20file=20where=20the=20program=20starts=20and=20= display=20it=20with=20related=0A=20buffers,=20if=20required."=0A+=20=20= ;;=20This=20function=20is=20called=20only=20once=20on=20startup.=0A=20=20= =20(goto-char=20(point-min))=0A=20=20=20(if=20(re-search-forward=20= gdb-source-file-regexp=20nil=20t)=0A=20=20=20=20=20=20=20(setq=20= gdb-main-file=20(read=20(match-string=201))))=0Adiff=20--git=20= a/lisp/window.el=20b/lisp/window.el=0Aindex=20433486385d..0f4f242212=20= 100644=0A---=20a/lisp/window.el=0A+++=20b/lisp/window.el=0A@@=20-278,6=20= +278,19=20@@=20with-displayed-buffer-window=0A=20=09=20=20=20=20=20= (funcall=20,vquit-function=20,window=20,value)=0A=20=09=20=20=20= ,value)))))=0A=20=0A+(defmacro=20with-selected-window-undedicated=20= (&rest=20body)=0A+=20=20"Run=20BODY=20in=20the=20selected=20window=20= temporarily=20undedicated."=0A+=20=20(let=20((window-dedicated-sym=20= (gensym)))=0A+=20=20=20=20`(let=20((,window-dedicated-sym=20= (window-dedicated-p)))=0A+=20=20=20=20=20=20=20(when=20= ,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20nil))=0A+=20=20=20=20=20=20=20,@body=0A+=20= =20=20=20=20=20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20= =20;;=20`window-dedicated-p'=20returns=20the=20value=20set=20by=0A+=20=20= =20=20=20=20=20=20=20;;=20`set-window-dedicated-p',=20which=20= differentiates=0A+=20=20=20=20=20=20=20=20=20;;=20non-nil=20and=20t,=20= so=20we=20cannot=20simply=20set=20to=20t.=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20,window-dedicated-sym)))))=0A+=0A=20;;=20= The=20following=20two=20functions=20are=20like=20`window-next-sibling'=20= and=0A=20;;=20`window-prev-sibling'=20but=20the=20WINDOW=20argument=20is=20= _not_=20optional=20(so=0A=20;;=20they=20don't=20substitute=20the=20= selected=20window=20for=20nil),=20and=20they=20return=0A--=20=0A2.25.0=0A= =0A= --Apple-Mail=_DAB05EEB-D33C-4D29-BA1E-A72E534C599F-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Feb 2020 08:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu , martin rudalics Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158175413431068 (code B ref 39181); Sat, 15 Feb 2020 08:09:01 +0000 Received: (at 39181) by debbugs.gnu.org; 15 Feb 2020 08:08:54 +0000 Received: from localhost ([127.0.0.1]:34990 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j2sVS-000852-3d for submit@debbugs.gnu.org; Sat, 15 Feb 2020 03:08:54 -0500 Received: from eggs.gnu.org ([209.51.188.92]:45403) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j2sVQ-00084p-EO for 39181@debbugs.gnu.org; Sat, 15 Feb 2020 03:08:52 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47509) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1j2sVL-0002Ok-BT; Sat, 15 Feb 2020 03:08:47 -0500 Received: from [176.228.60.248] (port=4319 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1j2sVK-0003Xf-OG; Sat, 15 Feb 2020 03:08:47 -0500 Date: Sat, 15 Feb 2020 10:08:54 +0200 Message-Id: <83ftfcnug9.fsf@gnu.org> From: Eli Zaretskii In-reply-to: (message from Yuan Fu on Sun, 9 Feb 2020 23:56:47 -0500) References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > From: Yuan Fu > Date: Sun, 9 Feb 2020 23:56:47 -0500 > Cc: 39181@debbugs.gnu.org > > I updated my patch according to your suggestion in the memory patch. Thanks. Martin, any comments? From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Feb 2020 09:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Eli Zaretskii , Yuan Fu Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15817605437915 (code B ref 39181); Sat, 15 Feb 2020 09:56:02 +0000 Received: (at 39181) by debbugs.gnu.org; 15 Feb 2020 09:55:43 +0000 Received: from localhost ([127.0.0.1]:35021 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j2uAp-00023b-Hy for submit@debbugs.gnu.org; Sat, 15 Feb 2020 04:55:43 -0500 Received: from mout.gmx.net ([212.227.17.22]:38793) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j2uAo-00023P-N9 for 39181@debbugs.gnu.org; Sat, 15 Feb 2020 04:55:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1581760535; bh=ErQ7qn20DmKnIsomVdMu0YVrfdEiiAS7hR9BotuY9Vk=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=AISwua5zXLxc7JHzRUW0FVTYShRBxQW/yQO4U6xykOVCd+lVCh8mXk8/dcqiIqtRQ 8aiycKFtiUpM0FW36GgLjWmrW5Dl1AQb1nogVf9nPy6Nk7RnfAlrMqJdHppG+EVtFL vAMeVH5C9Bzv47piOCuMj8zXrsSJ29GhAcKhfMeo= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.94]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M26vB-1j4q7C2DBx-002YcY; Sat, 15 Feb 2020 10:55:35 +0100 References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> <83ftfcnug9.fsf@gnu.org> From: martin rudalics Message-ID: <8ec96fa1-4042-f4e0-430e-a4e6779fbb56@gmx.at> Date: Sat, 15 Feb 2020 10:55:34 +0100 MIME-Version: 1.0 In-Reply-To: <83ftfcnug9.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:mLfupi+bHLGMYXJYEApnb6XwB6b/Y9LjeG1RKLxytqQxNKdRJym 7Te9TRrJXEaCkIXtmfaGfIl6QTuVdgrYlOJ29ceU+fKF5JQMbARk9KJlUNmkQcE73DyBMRD I/SrheGA+U0CPePdT+S0j1FjT7CsY7I49rLtWHE1shGSqJv8glcMmK2AhgVYCgcmOUaCGbj B24RCeepUFuJKKLV8p3fQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:nGBsBtJeCi8=:Qzcmj8HctwDaWOf703Nesn 3cjiOIvkwOYJ7ihiquPqZEZ3iQPzv5WbXFY2HZjC/WDzVzQv3IBVvedm6OM0Xl2NXc51MwLRI n8xeJq1DPZErZPwCKtX38boTfiLPTOgYYDHpjGP9fau/TsCAYc8il5/7k9dIlKW9rC+etoS0v M6SKPuBHBoUyHvBu4N7y3CxYnSlkbaGtw4E2Hysxb1mg+1OPWXXXm3BFACsfuek63aXezrh8O CjHxms93MqqfnI8v6HDMLTgvVTsMWpKO484MxIXxOB6iEVJU9eMt2l0R2uyHdkRAi1nfNPQ+c GZsnJElLGMxszDGqeJVdyOSqidndcuiYhGQF9WzHZlyKzc0b2rnrGJvEmWVupNlvo60QhWOSS fAuDi6wdbZnda4nLz9MJGE03c16+yiuhp2BRGwZWweaNafONzRNN1WspNGHgl2Bo5GtCiq1OJ 76iJVY4+Tu4j1qi0jFQDOM9DVgt0qHJWw1j4eEeQt2ycimqjp6WOxixN7L9bMA+DOzD/RrqLZ ArQzwI+ZhDosewqiAPS+m4EAiF59BEwAObzzeNNePJpIdM13Sq2A3uYduNUb9F8eH64/PkmsC 21nphd7Nvxe2EmhAqkxGI/HvFvz9xGVOZMWWo04QYnGBwGssdwNnaHDn9TBMUQe0bGxdLg3fz RqfBepy2/vr+IEziKyxHK9jfwnRSlDJZbJ81IjRxjPvxYQf7XkhoUqSwOWRf985FJYbomcxYZ ggzVerkrjsVdPbMTEVTDpCZYISC/pJ//3/feQ2O8xzXZIIBI7fgNjmCLehJdmbvizq5DgmckC nIBi6TObzXtllnnwz/GCV6l6PNOguZGDIDCf5arzd6C0i6qqyXA0YfuvMbEvowkVdRmZ5eqHN E5/3Nd2uccoMn5h/m8J7dYgvcaIY0c5+oso+bSnAjKF8t0RAd7S4FstMzA08hp5YwC1IttoOt ey/NJuSN3aWd7V2ez4V9fkWtpPSDarPO6JyFypwp1Ke0CIQmCl2CFBJFwWXYRyrTjgTz2OPDT UsoPNuCRrZoBn0JZkdxdhZ4GewyFNIAP6E6TnFT4MOeDuNfcP2ld6edyH482Au9PGleQ2RPYd lrmj6IeT/qcgycrGZoEbBl+ezUVLiyQEXtv5b7z94vSoktxQFmaeUUCuSChykK7cwMnRjJN/s YtHpYDgK7oKJEUSYiw2xWPCJAuvnWR/gfyKEfAdTBamlnXzhzWs6Yn7+4dg1iBF4OeLc7WE54 ZWLexFjuwJnzrPDp3 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Martin, any comments? IMHO "restoring the previous window layout when gdb quits" should be opt-in (or at least opt-out). Maybe it also should restore the layout only when 'gdb-many-windows' is non-nil, so we'd have the three option values nil, t, and if-gdb-many-windows (in a menu entry). martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Feb 2020 10:20:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: casouri@gmail.com, 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158176196710037 (code B ref 39181); Sat, 15 Feb 2020 10:20:02 +0000 Received: (at 39181) by debbugs.gnu.org; 15 Feb 2020 10:19:27 +0000 Received: from localhost ([127.0.0.1]:35026 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j2uXn-0002bp-Fo for submit@debbugs.gnu.org; Sat, 15 Feb 2020 05:19:27 -0500 Received: from eggs.gnu.org ([209.51.188.92]:56516) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j2uXl-0002bc-72 for 39181@debbugs.gnu.org; Sat, 15 Feb 2020 05:19:26 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48479) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1j2uXf-0002U4-Ux; Sat, 15 Feb 2020 05:19:19 -0500 Received: from [176.228.60.248] (port=4363 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1j2uXf-0006qM-Dq; Sat, 15 Feb 2020 05:19:19 -0500 Date: Sat, 15 Feb 2020 12:19:26 +0200 Message-Id: <835zg8noep.fsf@gnu.org> From: Eli Zaretskii In-reply-to: <8ec96fa1-4042-f4e0-430e-a4e6779fbb56@gmx.at> (message from martin rudalics on Sat, 15 Feb 2020 10:55:34 +0100) References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> <83ftfcnug9.fsf@gnu.org> <8ec96fa1-4042-f4e0-430e-a4e6779fbb56@gmx.at> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Cc: 39181@debbugs.gnu.org > From: martin rudalics > Date: Sat, 15 Feb 2020 10:55:34 +0100 > > > Martin, any comments? > > IMHO "restoring the previous window layout when gdb quits" should be > opt-in (or at least opt-out). Maybe it also should restore the layout > only when 'gdb-many-windows' is non-nil, so we'd have the three option > values nil, t, and if-gdb-many-windows (in a menu entry). I had the same thoughts myself, and I agree on both counts. From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Feb 2020 20:38:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Eli Zaretskii Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158179907517341 (code B ref 39181); Sat, 15 Feb 2020 20:38:02 +0000 Received: (at 39181) by debbugs.gnu.org; 15 Feb 2020 20:37:55 +0000 Received: from localhost ([127.0.0.1]:36417 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j34CI-0004Vd-EC for submit@debbugs.gnu.org; Sat, 15 Feb 2020 15:37:54 -0500 Received: from mail-qt1-f175.google.com ([209.85.160.175]:45831) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j34CG-0004VP-Hg for 39181@debbugs.gnu.org; Sat, 15 Feb 2020 15:37:53 -0500 Received: by mail-qt1-f175.google.com with SMTP id d9so9408853qte.12 for <39181@debbugs.gnu.org>; Sat, 15 Feb 2020 12:37:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=xA8KaycL/NOuRerN3kP8rWH81G81KWzRZSebx0a31ZU=; b=VUTVeVl6RggTFDpFlKQAB48fdCkS6F+X324lJWFjAihTYsX0xq92EHdm/TURZzziAM BP6Y2q9RH8nR5LrkefiYq+aKHdU8+S5xh7Y1Jr2bNzozmB/aGk3TqKNgp/fd42rWVF03 QM1gQpUCawguge6vPgoOPzEbomdcIcJwIzk1p8tyuvWRB9RMPbSyhpH/TGovIZbxC5ys vWEMJvUp4NiGj+Lf7HtSW2L/hO19Sq37g/e/lyYdH4LJFNxIq5tVa40h1yxfWpwRIZZ4 zx++XpCIcPx6J0PRsk3ayAncaDwMhIUiB0qtWuqjcpmrHke5y7WiQzeo5fcIbMfhaugO 0VhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=xA8KaycL/NOuRerN3kP8rWH81G81KWzRZSebx0a31ZU=; b=D1m3oKDBREhCt2+nzKguIrVMEq14dtCekDwZDaTgGArB3I33yGfCUl9jniFp5x0Iov ifA3+TBqViYsmaFHlsa6bWRgdUzZA+vujYa9KxwJ58Ckhq43nMRxBQ9V6qCTcdV4L7QE fU6QggyDZKOSj/j1OZOf20ptmrppHoc64nrWqsTYLdtNo40D2O3QzxBZ56iT2JM5UkUU n7iw4dhbFpA9aVubI1V1yQ0JaA5OksvbagsNZSL4PuHX0ub9PiTO7/J3MiyCba+KIHZe VtxkGXm2+crFo0aQy8fY+iNNdg2/iYMNvts5c9VxZreChYUajx8EiJ3OL+TnW6dtnN/+ +Bug== X-Gm-Message-State: APjAAAVjS2DJancksAaNgqVYkAvfuZ5Hsc5xfTCBImw5UeLdn8QtOApS QPFVs4DF5Cscb7fjTJbl4ls= X-Google-Smtp-Source: APXvYqxeMgCVbivrRzVCxE5P7JneJ6igoSsfJ3X6QxrMqRSK9sqCEpexQOZzlTJiCm1aU17JuXIuyA== X-Received: by 2002:ac8:1c1d:: with SMTP id a29mr7622413qtk.183.1581799065590; Sat, 15 Feb 2020 12:37:45 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id c25sm6004282qkc.12.2020.02.15.12.37.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 15 Feb 2020 12:37:45 -0800 (PST) From: Yuan Fu Message-Id: <06950D5B-902C-49C9-81B2-9989FB35F0DB@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_8B04DA89-86D9-4725-8651-A5D76013C459" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Sat, 15 Feb 2020 15:37:43 -0500 In-Reply-To: <835zg8noep.fsf@gnu.org> References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> <83ftfcnug9.fsf@gnu.org> <8ec96fa1-4042-f4e0-430e-a4e6779fbb56@gmx.at> <835zg8noep.fsf@gnu.org> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_8B04DA89-86D9-4725-8651-A5D76013C459 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On Feb 15, 2020, at 5:19 AM, Eli Zaretskii wrote: >=20 >> Cc: 39181@debbugs.gnu.org >> From: martin rudalics >> Date: Sat, 15 Feb 2020 10:55:34 +0100 >>=20 >>> Martin, any comments? >>=20 >> IMHO "restoring the previous window layout when gdb quits" should be >> opt-in (or at least opt-out). Maybe it also should restore the = layout >> only when 'gdb-many-windows' is non-nil, so we'd have the three = option >> values nil, t, and if-gdb-many-windows (in a menu entry). >=20 > I had the same thoughts myself, and I agree on both counts. I agree. I made it into a custom variable with choices, is that what you = mean by menu entry? Yuan --Apple-Mail=_8B04DA89-86D9-4725-8651-A5D76013C459 Content-Type: multipart/mixed; boundary="Apple-Mail=_22047EB3-EA3C-4CFE-9550-C07767C89CD6" --Apple-Mail=_22047EB3-EA3C-4CFE-9550-C07767C89CD6 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii

On Feb 15, 2020, at 5:19 AM, Eli Zaretskii <eliz@gnu.org> = wrote:

Cc: 39181@debbugs.gnu.org
From: martin rudalics = <rudalics@gmx.at>
Date: Sat, 15 Feb 2020 = 10:55:34 +0100

Martin, any comments?

IMHO "restoring the previous window layout when gdb quits" = should be
opt-in (or at least opt-out).  Maybe it = also should restore the layout
only when = 'gdb-many-windows' is non-nil, so we'd have the three option
values nil, t, and if-gdb-many-windows (in a menu entry).

I had the same thoughts myself, and I agree on both = counts.

I = agree. I made it into a custom variable with choices, is that what you = mean by menu entry?

Yuan

= --Apple-Mail=_22047EB3-EA3C-4CFE-9550-C07767C89CD6 Content-Disposition: attachment; filename=restore-after-quit-new.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="restore-after-quit-new.patch" Content-Transfer-Encoding: quoted-printable =46rom=2003ab125435ca145ca81707e09524c64d63c80183=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Sat,=20= 15=20Feb=202020=2015:15:20=20-0500=0ASubject:=20[PATCH]=20Restore=20= previous=20window=20layout=20when=20gdb=20quits=0A=0AMake=20gdb=20= preserve=20the=20window=20configuration=20that=20the=20user=20had=20= before=0Astarting=20gdb.=0A*=20lisp/progmodes/gdb-mi.el=20= (gdb--window-configuration-before):=20New=0Avariable.=0A= (gdb-restore-window-layout-after-quit):=20New=20custom=20variable.=0A= (gdb):=20Save=20configuration=20on=20startup.=0A(gdb-reset):=20Restore=20= window=20configuration=20after=20quit.=0A---=0A=20= lisp/progmodes/gdb-mi.el=20|=2043=20= +++++++++++++++++++++++++++++++++++++++-=0A=201=20file=20changed,=2042=20= insertions(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= da5a2a503a..313fc58dce=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-253,6=20+253,25=20@@=20= gdb-output-sink=0A=20=09=20=20=20=20=20=20=20disposition=20of=20output=20= generated=20by=20commands=20that=0A=20=09=20=20=20=20=20=20=20gdb=20mode=20= sends=20to=20gdb=20on=20its=20own=20behalf.")=0A=20=0A+(defvar=20= gdb--window-configuration-before=20nil=0A+=20=20"Stores=20the=20window=20= configuration=20before=20starting=20gdb.")=0A+=0A+(defcustom=20= gdb-restore-window-layout-after-quit=20nil=0A+=20=20"Specify=20whether=20= to=20restore=20the=20window=20layout=20the=20user=20had=20before=20gdb=20= starts.=0A+=0A+Possible=20values=20are:=0A+=20=20=20=20t=20--=20Always=20= restore.=0A+=20=20=20=20nil=20--=20Don't=20restore.=0A+=20=20=20=20= 'if-show-main=20--=20Restore=20only=20if=20`gdb-show-main'=20is=20= non-nil=0A+=20=20=20=20'if-many-windows=20--=20Restore=20only=20if=20= variable=20`gdb-many-windows'=20is=20non-nil."=0A+=20=20:type=20'(choice=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Always=20restore"=20t)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Don't=20restore"=20nil)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Depends=20on=20= `gdb-show-main'"=20'if-gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20= (const=20:tag=20"Depends=20on=20`gdb-many-windows'"=20= 'if-gdb-many-windows))=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-761,6=20+780,16=20@@=20gdb=0A=20=20=20=20=20= (gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20=20=20=20=20= "Multiple=20debugging=20requires=20restarting=20in=20text=20command=20= mode"))=0A+=0A+=20=20;;=20Save=20window=20configuration=20before=20= starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20after=20gdb=20= quits.=0A+=20=20(when=20(or=20(eq=20gdb-restore-window-layout-after-quit=20= t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-layout-after-quit=20'if-show-main)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20gdb-show-main)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(and=20(eq=20gdb-restore-window-layout-after-quit=20= 'if-many-windows)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-many-windows))=0A+=20=20=20=20(setq=20= gdb--window-configuration-before=20(window-state-get)))=0A+=0A=20=20=20= ;;=0A=20=20=20(gud-common-init=20command-line=20nil=20= 'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4705,7=20+4734,19=20@@=20= gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20Recover=20= window=20configuration.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-layout-after-quit=20t)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(and=20(eq=20gdb-restore-window-layout-after-quit=20'if-show-main)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-show-main)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-layout-after-quit=20'if-many-windows)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20=20=20=20= (when=20gdb--window-configuration-before=0A+=20=20=20=20=20=20= (window-state-put=20gdb--window-configuration-before)=0A+=20=20=20=20=20=20= ;;=20This=20way=20we=20don't=20accidentally=20restore=20an=20outdated=20= window=0A+=20=20=20=20=20=20;;=20configuration.=20=20Maybe=20the=20user=20= changed=20the=20configuration=0A+=20=20=20=20=20=20;;=20after=20starting=20= GDB,=20who=20knows.=0A+=20=20=20=20=20=20(setq=20= gdb--window-configuration-before=20nil))))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A--=20=0A= 2.25.0=0A=0A= --Apple-Mail=_22047EB3-EA3C-4CFE-9550-C07767C89CD6 Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii
--Apple-Mail=_22047EB3-EA3C-4CFE-9550-C07767C89CD6-- --Apple-Mail=_8B04DA89-86D9-4725-8651-A5D76013C459-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 16 Feb 2020 10:01:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu , Eli Zaretskii Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15818472439946 (code B ref 39181); Sun, 16 Feb 2020 10:01:01 +0000 Received: (at 39181) by debbugs.gnu.org; 16 Feb 2020 10:00:43 +0000 Received: from localhost ([127.0.0.1]:36713 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j3GjD-0002aM-Gc for submit@debbugs.gnu.org; Sun, 16 Feb 2020 05:00:43 -0500 Received: from mout.gmx.net ([212.227.17.22]:44683) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j3GjB-0002a7-5v for 39181@debbugs.gnu.org; Sun, 16 Feb 2020 05:00:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1581847234; bh=PwWNBo9y5d2MAns40UDje4j+uR6023OpSgR6OglvNzM=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=UZhkUvRXoRizmzZgHo4lZHCkETxC2LMkLlOMZ1OLwgr18spuA7KFJp0gWakSu1rxF tRkgs9xg/pjYy+R5KVczr1suQ6IVX9lC6gZlZ7+crotOFB+Imqhy84u54HEOzQyH9A e42VkFjWZnhjHBIniyWK3au9d5MlQnWLr61gZ9WM= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.138]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MYNNy-1izVER3LPe-00VTUU; Sun, 16 Feb 2020 11:00:33 +0100 References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> <83ftfcnug9.fsf@gnu.org> <8ec96fa1-4042-f4e0-430e-a4e6779fbb56@gmx.at> <835zg8noep.fsf@gnu.org> <06950D5B-902C-49C9-81B2-9989FB35F0DB@gmail.com> From: martin rudalics Message-ID: <30edb35e-a2fd-6089-9b02-3669309a4216@gmx.at> Date: Sun, 16 Feb 2020 11:00:32 +0100 MIME-Version: 1.0 In-Reply-To: <06950D5B-902C-49C9-81B2-9989FB35F0DB@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:HPQug09dw5AGhTEZ99C09VRwEcAlUTHXWQWTQuD0qGNHaDijhmL SU5xqbSnsoFf3MiAOihok4HLR1lkj1uPAsf+iIQ/LJrS2m+4LP2hR3bzF2is083dD/GYSA7 1x3KFsw0jiVB8uLXNbmDFw5wrgIwTQzKjiLxIQy2/ODmr/b1DUNa11bjYAGEc6R83bnOYVe C/dcyq5hRnocCkKNhG7iA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:yEmjNjZTWGc=:I06O+mnX7nwCOUzW75Od7I RRT7axBtcWD65R+/D7GkLeRw1yFB3JZQr9TUyAovZdAJ1QNKPuDrezo5zpOwyj1jqKCqBQOLP p7n7EC/l6aZFSJapOQve6r+F3iKfgvu5Y9PkVbNWkcNI1V8Je9HP0mKv+gkKP7GosEBxL0BKX 8KSnXZIWrPV++JKyThsO4oRvtEVuJArn1UTkUvAsJey+zpD7Ai3JZ43isJGYuM17DrHte/efd HwwQgiQDnf+VWECBEUhO1SPoTnwxUnEF16rcItQlbTFCkizl4WLKIyxsehd10cgz5PAS6nRNN ZtmtpGZY2VUnNQLyBjGtQHTuwe6nVBfwpMDxi56fYRa5HOZ1DyfcO22B4p0Sj5n2YYW5bp0l7 DG3nJedjR3pfbOiGVzA45MtFEgUp8Wc9C6P79wyBUk1jyJXSu178wnAK1cUrQL3KR9Ha54Ypa TyruRt8ZgMxTGp7yFOsx/l05jX0AOx+YW3j3m/TBd+Isl9T7mpYBG9yrGZVrwLfIMc22qQU5B mG3PW7JQz1kk9oGjTHAWoxxhxgEZJMc55TPelmvrr1XH8TfFZR2MpaIEEzp6vdoIQk7TRtrei i31LXoKF7ZB2+OY6u0ObKekPnmgr7S4Zhhd6nkX6WR4PKlTaIi+tdxgR2N+NeCYsuo0yFwdhX 2IPkBh/ucK1xmnotPWrRYCaKz9rOz6FhVvvUMR2jgV4ZEXB/oBZADbX7NcHCSuQeCvftVOFRR 1EGxa2GfLN6j3TN68wQND94J86qaa5CKJTBK1ArvHCIMBKQzZuSZZvIGJwrwUp/oDW/RBimr8 ZHC0quPgzXW0dF1q5A5bOcqGONLUiDAl+kGN9NVEli2zqOMdFocOiLd8SAP6+cX2URmG6cKuv bPZmZfY2bhcSE9l7rX3cLNsj9JVkTY2OUN+DEK5MDI+/Nz+Jj+vmYiAkU+38Z1RprnktGSnVk CIcjOIHS1ilhNHztxQrnpzPfpy/JLYS4W5rTNLNfRe3LTl7GcTqeDmuWrMJ6mT2Hv+Wy8aJHR O5gvd0qQJKV0JqqqDYL0FJQ2JCx23Xqku6mI+9vwwwHnbXuzptAERgypqoWh92NCpZJ+HU7jp kuR9JMf3AwBbOXECsbXYMv2ap7D6SDBKk8YycNixSfi0QLAOIwvWPLDPwqgWFB+ZbHYJGFQHD UYLChi1uJZY1vmZ98nSJvaRtNmC4FVibfsYBsYDUE3R9alS9k4CCsXVmJHdvkiy/QEv/e25Cs wundagWJyCjHuc8oa X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > I agree. I made it into a custom variable with choices, That's the first part of what I meant. > is that what you mean by menu entry? The menu entry could be written on top of the 'defcustom' and appear as a toggle somewhere near the "Restore Window Layout" menu entry. Also we should explain the differences between that entry and your new option since otherwise users might get confused. martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 03 Mar 2020 23:42:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: Eli Zaretskii , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158327890218621 (code B ref 39181); Tue, 03 Mar 2020 23:42:01 +0000 Received: (at 39181) by debbugs.gnu.org; 3 Mar 2020 23:41:42 +0000 Received: from localhost ([127.0.0.1]:40129 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9HAU-0004qH-F9 for submit@debbugs.gnu.org; Tue, 03 Mar 2020 18:41:42 -0500 Received: from mail-qk1-f177.google.com ([209.85.222.177]:41209) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9HAS-0004q3-Kh for 39181@debbugs.gnu.org; Tue, 03 Mar 2020 18:41:41 -0500 Received: by mail-qk1-f177.google.com with SMTP id b5so5292564qkh.8 for <39181@debbugs.gnu.org>; Tue, 03 Mar 2020 15:41:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=o3w25CEphSU51+BiRvpbFTZpmvmgx2YOD2llSKW/WE4=; b=J3HmysVbXgxASsJ8pdbAilkjGO+3tq9jECcN+FuP1OnrEzmr/Ttp2IARv83R7MKU8F EHz1K0NJGqki6p0aCLvQ7yLZjM31QcqodZOM4k7v3poNGKFvvPVeLtAYntXvDBmW8K9O LOrP8Xmu7mX9K21IZDRPC3mq8kfx1sfpMbc3L5J6m/y6EE5Rsz1LyEfZUwy49fR4Uoks fWuD5N1z69HIlgzu4GdupAYCbPCnWsv9Bt8dv09yXdFwGRYt5upM+Ghowaus1XIK9VtQ t8esX/7KYL9m+0AHRYhknGhuDII/BATFuxWTH6SVmWuVYaUcg/IMiUTRjOa8TrO3iBra 9zlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=o3w25CEphSU51+BiRvpbFTZpmvmgx2YOD2llSKW/WE4=; b=eUIbrjkhuuW9YbOIM+YYmvFoNS9s24IMQscGCCBDElym7uVFlcijdhk45BCaerHmsT SHN/n5TGZ7lCX+bxeVCi0FbEyiyjr0ZcTzGbh66dgmWLlUhmJHIvWM8Xp8Fr9x9TqVib EwAO9loxT5fgLWoV8l5XthEW50pSikVuQCUcKmXH5RhGQhLtZxROq75135M6Cn0DHosE uhvNR757mablx08+WXWRKC5wonXATqDbilLexOMYBCAS39iAndrcw0bgJ3WaXxzNA380 gww8bzQOQVlLO68cZWoJ8sVgZW8Kt7u7cIUlqyYv2g0/cr7xUdW+y3B4dE8RqxjvX78C r8yA== X-Gm-Message-State: ANhLgQ2l86jB8Gm/TUz/8Q2VKxdUfKsyL5jDsHjWDnmQ8tEPvDcz9e4t TVtYqyOpLqBueu/3ESjm1eY= X-Google-Smtp-Source: ADFU+vtXP9vMVDBfdTqbYpMPO2fYl+MP5kocstEg8nC4wDeAIGM/rjSHu/EP7cqYxUGATrUOgnz2aw== X-Received: by 2002:a37:a191:: with SMTP id k139mr470631qke.67.1583278894978; Tue, 03 Mar 2020 15:41:34 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id 202sm12717518qkg.132.2020.03.03.15.41.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Mar 2020 15:41:34 -0800 (PST) From: Yuan Fu Message-Id: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_E8278DED-E82C-4F86-BB91-DF8937D4718A" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Tue, 3 Mar 2020 18:41:31 -0500 In-Reply-To: <30edb35e-a2fd-6089-9b02-3669309a4216@gmx.at> References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> <83lfpokk63.fsf@gnu.org> <27BC0F04-C81E-4D46-A84C-B61AAE700F59@gmail.com> <499CD0CF-DA9D-4706-9F8D-6DF6CFE752BE@gmail.com> <83ftfcnug9.fsf@gnu.org> <8ec96fa1-4042-f4e0-430e-a4e6779fbb56@gmx.at> <835zg8noep.fsf@gnu.org> <06950D5B-902C-49C9-81B2-9989FB35F0DB@gmail.com> <30edb35e-a2fd-6089-9b02-3669309a4216@gmx.at> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: -1.5 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.5 (--) --Apple-Mail=_E8278DED-E82C-4F86-BB91-DF8937D4718A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Sorry for the delay, I missed the mail and was waiting for your reply. I = added a toggle button in the menu with help echos. How does it look? = Since there are more than two options, I make the button to toggle = between the two basic ones. Also I combined two patches into one. Yuan --Apple-Mail=_E8278DED-E82C-4F86-BB91-DF8937D4718A Content-Disposition: attachment; filename=new-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=209ce7c5a14de3dfb6baf91a4287d4462157dd31e1=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Tue,=20= 3=20Mar=202020=2018:30:03=20-0500=0ASubject:=20[PATCH]=20Add=20window=20= streo/restore=20feature=20for=20gdb-mi=0AMIME-Version:=201.0=0A= Content-Type:=20text/plain;=20charset=3DUTF-8=0A= Content-Transfer-Encoding:=208bit=0A=0AAdd=20a=20feature=20that=20allows=20= a=20user=20to=20save=20a=20gdb=20window=20layout=20to=20a=20file=0Awith=20= 'gdb-save-window-layout'=20and=20load=20it=20back=20it=20with=0A= 'gdb-load-window-layout'.=20=20Set=20a=20default=20window=20= configuration=20by=0Asetting=20'gdb-default-window-layout-file'.=20=20= Note=20that=20for=20the=20default=0Awindow=20configuration=20to=20take=20= effect,=20'gdb-many-windows'=20needs=20to=20be=20t.=0AMake=20gdb=20= preserve=20the=20window=20configuration=20that=20the=20user=20had=20= before=0Astarting=20gdb.=20=20In=20window.el,=20add=20= 'with-selected-window-undedicated'.=0A*=20lisp/progmodes/gdb-mi.el=20= (require):=20add=20'pcase',=20wrap=20'pcase'=20and=20'cl-lib'=0Ainside=20= =E2=80=98eval-when-compile=E2=80=99.=0A= (gdb--window-configuration-before):=20New=20variable.=0A= (gdb-restore-window-layout-after-quit):=20New=20custom=20variable.=0A= (gdb):=20Save=20configuration=20on=20startup.=0A(gdb-reset):=20Restore=20= window=20configuration=20after=20quit.=0A(gdb-window-layout-directory,=20= gdb-default-window-layout-file):=20New=0Avariables.=0A(gud-menu-map):=20= Add=20"Load=20window=20layout"=20and=20"Save=20window=20layout"=20to=0A= menu.=20Add=20"Restore=20window=20layout"=20button=20to=20menu.=0A= (gdb-toggle-restore-window-layout):=20New=20function.=0A= (gdb-get-source-buffer):=20New=20function,=20extracted=20out=20of=0A= 'gdb-restore-window'.=0A(gdb-setup-windows):=20Add=20a=20condition=20= branch=20that=20loads=20default=20window=0Alayout=20when=20available.=0A= (gdb-buffer-p,=20gdb-function-buffer-p,=20gdb--buffer-type,=0A= gdb-save-window-layout,=20gdb-load-window-layout):=20New=20functions.=0A= (gdb-many-windows,=20gdb-get-source-file):=20Add=20comments.=0A*=20= lisp/window.el=20(with-selected-window-undedicated):=20New=20function.=0A= ---=0A=20lisp/progmodes/gdb-mi.el=20|=20271=20= ++++++++++++++++++++++++++++++++++-----=0A=20lisp/window.el=20=20=20=20=20= =20=20=20=20=20=20|=20=2013=20++=0A=202=20files=20changed,=20249=20= insertions(+),=2035=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= da5a2a503a..bee33b69e4=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-91,7=20+91,8=20@@=0A=20(require=20= 'gud)=0A=20(require=20'json)=0A=20(require=20'bindat)=0A-(require=20= 'cl-lib)=0A+(eval-when-compile=20(require=20'cl-lib))=0A= +(eval-when-compile=20(require=20'pcase))=0A=20=0A=20(declare-function=20= speedbar-change-initial-expansion-list=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A@@=20-253,6=20= +254,25=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20disposition=20= of=20output=20generated=20by=20commands=20that=0A=20=09=20=20=20=20=20=20= =20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20behalf.")=0A=20=0A= +(defvar=20gdb--window-configuration-before=20nil=0A+=20=20"Stores=20the=20= window=20configuration=20before=20starting=20gdb.")=0A+=0A+(defcustom=20= gdb-restore-window-layout-after-quit=20nil=0A+=20=20"Specify=20whether=20= to=20restore=20the=20window=20layout=20the=20user=20had=20before=20gdb=20= starts.=0A+=0A+Possible=20values=20are:=0A+=20=20=20=20t=20--=20Always=20= restore.=0A+=20=20=20=20nil=20--=20Don't=20restore.=0A+=20=20=20=20= 'if-show-main=20--=20Restore=20only=20if=20`gdb-show-main'=20is=20= non-nil=0A+=20=20=20=20'if-many-windows=20--=20Restore=20only=20if=20= variable=20`gdb-many-windows'=20is=20non-nil."=0A+=20=20:type=20'(choice=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Always=20restore"=20t)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Don't=20restore"=20nil)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Depends=20on=20= `gdb-show-main'"=20'if-gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20= (const=20:tag=20"Depends=20on=20`gdb-many-windows'"=20= 'if-gdb-many-windows))=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-603,6=20+623,20=20@@=20gdb-show-main=0A=20=20=20= :group=20'gdb=0A=20=20=20:version=20"22.1")=0A=20=0A+(defcustom=20= gdb-window-layout-directory=20user-emacs-directory=0A+=20=20"The=20= default=20directory=20where=20window=20configuration=20files=20are=20= stored.=0A+If=20nil,=20use=20`default-directory'."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A= +(defcustom=20gdb-default-window-layout-file=20nil=0A+=20=20"If=20= non-nil,=20gdb=20loads=20this=20window=20layout=20file=20on=20startup.=0A= +If=20not=20absolute,=20GDB=20will=20look=20under=20= `gdb-window-layout-directory'."=0A+=20=20:type=20'string=0A+=20=20:group=20= 'gdb=0A+=20=20:version=20"28.1")=0A+=0A=20(defvar=20gdbmi-debug-mode=20= nil=0A=20=20=20"When=20non-nil,=20print=20the=20messages=20sent/received=20= from=20GDB/MI=20in=20*Messages*.")=0A=20=0A@@=20-761,6=20+795,16=20@@=20= gdb=0A=20=20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20= =20=20=20=20"Multiple=20debugging=20requires=20restarting=20in=20text=20= command=20mode"))=0A+=0A+=20=20;;=20Save=20window=20configuration=20= before=20starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20= after=20gdb=20quits.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-layout-after-quit=20t)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(and=20(eq=20gdb-restore-window-layout-after-quit=20'if-show-main)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-show-main)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-layout-after-quit=20'if-many-windows)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20=20=20=20= (setq=20gdb--window-configuration-before=20(window-state-get)))=0A+=0A=20= =20=20;;=0A=20=20=20(gud-common-init=20command-line=20nil=20= 'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4491,6=20+4535,13=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20(define-key=20= gud-menu-map=20[displays]=0A=20=20=20=20=20`(menu-item=20"GDB-Windows"=20= ,menu=0A=20=09=09:visible=20(eq=20gud-minor-mode=20'gdbmi)))=0A+=20=20= (define-key=20menu=20[load-layout]=20'("Load=20window=20layout"=20"Load=20= GDB=20window=20layout=20from=20a=20file"=20.=20gdb-load-window-layout))=0A= +=20=20(define-key=20menu=20[save-layout]=20'("Save=20window=20layout"=20= "Save=20current=20GDB=20window=20layout=20to=20a=20file"=20.=20= gdb-save-window-layout))=0A+=20=20(define-key=20menu=20= [restore-layout-when-finish]=0A+=20=20=20=20'(menu-item=20"Restore=20= window=20layout"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-toggle-restore-window-layout=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20.=20(:button=20(:toggle=20.=20= gdb-restore-window-layout-after-quit)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:help=20"If=20on,=20GDB=20= restores=20the=20window=20layout=20you=20had=20before=20starting=20GDB=20= after=20it=20quits")))=0A=20=20=20(define-key=20menu=20[gdb]=20'("Gdb"=20= .=20gdb-display-gdb-buffer))=0A=20=20=20(define-key=20menu=20[threads]=20= '("Threads"=20.=20gdb-display-threads-buffer))=0A=20=20=20(define-key=20= menu=20[memory]=20'("Memory"=20.=20gdb-display-memory-buffer))=0A@@=20= -4606,41=20+4657,175=20@@=20gdb-set-window-buffer=0A=20=20=20= (set-window-buffer=20window=20(get-buffer=20name))=0A=20=20=20= (set-window-dedicated-p=20window=20t))=0A=20=0A+(defun=20= gdb-toggle-restore-window-layout=20()=0A+=20=20"Toggle=20whether=20to=20= restore=20window=20layout=20when=20GDB=20quit."=0A+=20=20(interactive)=0A= +=20=20(setq=20gdb-restore-window-layout-after-quit=0A+=20=20=20=20=20=20= =20=20(not=20gdb-restore-window-layout-after-quit)))=0A+=0A+(defun=20= gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20displaying=20= source=20file=20or=20nil.=0A+=0A+The=20source=20file=20would=20be=20the=20= most=20relevant=20file=20or=20the=20main=20file."=0A+=20=20(if=20= gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-layout-file=0A+=20=20=20=20=20=20= (gdb-load-window-layout=0A+=20=20=20=20=20=20=20(if=20= (file-name-absolute-p=20gdb-default-window-layout-file)=0A+=20=20=20=20=20= =20=20=20=20=20=20gdb-default-window-layout-file=0A+=20=20=20=20=20=20=20= =20=20(expand-file-name=20gdb-default-window-layout-file=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-window-layout-directory)))=0A+=20=20=20=20;;=20Create=20default=20= layout=20as=20before.=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-stack-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-breakpoints-buffer)=0A+=20=20=20=20(set-window-dedicated-p=20= (selected-window)=20nil)=0A+=20=20=20=20(switch-to-buffer=20= gud-comint-buffer)=0A+=20=20=20=20(delete-other-windows)=0A+=20=20=20=20= (let=20((win0=20(selected-window))=0A+=20=20=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20= /=20(window-height)=203)))=0A+=20=20=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20=20=20=20=20= (select-window=20win2)=0A+=20=20=20=20=20=20(set-window-buffer=0A+=20=20=20= =20=20=20=20win2=0A+=20=20=20=20=20=20=20(or=20(gdb-get-source-buffer)=0A= +=20=20=20=20=20=20=20=20=20=20=20(list-buffers-noselect)))=0A+=20=20=20=20= =20=20(setq=20gdb-source-window=20(selected-window))=0A+=20=20=20=20=20=20= (let=20((win4=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=0A+=20=20=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A+=20=20=20=20= =20=20(select-window=20win1)=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A+=20=20=20=20=20=20(let=20((win5=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=20= (if=20gdb-show-threads-by-default=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20gdb-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20gdb=20function=20buffer.=0A+=0A= +E.g.,=20locals=20buffer,=20registers=20buffer,=20but=20don't=20include=20= the=20main=0A+command=20buffer=20(the=20one=20in=20where=20you=20type=20= gdb=20commands)=20or=20source=0A+buffers."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(derived-mode-p=20'gdb-parent-mode=20= 'gdb-inferior-io-mode)))=0A+=0A+(defun=20gdb--buffer-type=20(buffer)=0A+=20= =20"Return=20the=20buffer=20type=20of=20BUFFER=20or=20nil.=0A+=0A+Buffer=20= type=20is=20like=20`gdb-registers-type',=20`gdb-stack-buffer'.=0A+This=20= symbol=20can=20be=20passed=20to=20`gdb-get-buffer-create'.=0A+=0A+Return=20= nil=20if=20BUFFER=20isn't=20a=20gdb=20function=20buffer."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(cl-loop=20for=20rule=20in=20= gdb-buffer-rules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20for=20= mode-name=20=3D=20(gdb-rules-buffer-mode=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20for=20type=20=3D=20(car=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20if=20(eq=20mode-name=20major-mode)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20return=20type=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20finally=20return=20nil)))=0A+=0A+(defun=20gdb-save-window-layout=20= (file)=0A+=20=20"Save=20current=20window=20layout=20(window=20= configuration)=20to=20FILE.=0A+=0A+You=20can=20later=20restore=20this=20= layout=20from=20that=20file=20by=0A+`gdb-load-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Save=20window=20configuration=20to=20= file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(or=20gdb-window-layout-directory=20default-directory))))=0A+=20=20= ;;=20We=20replace=20the=20buffer=20in=20each=20window=20with=20a=20= placeholder,=20store=0A+=20=20;;=20the=20buffer=20type=20(register,=20= breakpoint,=20etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20write=20= the=20window=20configuration=20to=20the=20file.=0A+=20=20= (save-window-excursion=0A+=20=20=20=20(let=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20=20=20=20=20=20=20=20= =20=20(window-persistent-parameters=0A+=20=20=20=20=20=20=20=20=20=20=20= (cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters))=0A+=20=20=20=20=20=20=20=20=20=20= window-config)=0A+=20=20=20=20=20=20(unwind-protect=0A+=20=20=20=20=20=20= =20=20=20=20(dolist=20(win=20(window-list=20nil=20'no-minibuffer))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(select-window=20win)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(when=20(gdb-buffer-p=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-parameter=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(cond=20((gdb-function-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=201)=20If=20a=20user=20arranged=20the=20window=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= configuration=20herself=20and=20saves=20it,=20windows=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20are=20probably=20= not=20dedicated.=20=202)=20We=20use=20the=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20same=20dedication=20flag=20as=20= in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20`gdb-display-buffer'.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(set-window-dedicated-p=20nil=20t)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20We=20save=20this=20= gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20we=20can=20later=20pass=20it=20to=20= `gdb-get-buffer-create';=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20one=20example:=20`gdb-registers-buffer'.=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb--buffer-type=20(current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(error=20"Unrecognized=20= gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20Command=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((derived-mode-p=20= 'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20((equal=20(selected-window)=20gdb-source-window)=20= 'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(set-window-prev-buffers=20(selected-window)=20= nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20=20= =20=20=20;;=20Save=20the=20window=20configuration=20to=20FILE.=0A+=20=20=20= =20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20t)))=0A= +=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20=20=20= =20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-load-window-layout=20(file)=0A+=20=20"Restore=20window=20layout=20= (window=20configuration)=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20= window=20layout=20file=20saved=20by=0A+`gdb-save-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Restore=20window=20configuration=20= from=20file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(or=20gdb-window-layout-directory=20default-directory))))=0A= +=20=20;;=20Basically,=20we=20restore=20window=20configuration=20and=20= go=20through=20each=0A+=20=20;;=20window=20and=20restore=20the=20= function=20buffers.=0A+=20=20(let*=20((placeholder=20(get-buffer-create=20= "=20*gdb-placeholder*")))=0A+=20=20=20=20(unwind-protect=20;=20Don't=20= leak=20buffer.=0A+=20=20=20=20=20=20=20=20(let=20((window-config=20= (with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(insert-file-contents=20file)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20We=20need=20to=20go=20to=20point-min=20even=20we=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20are=20reading=20the=20whole=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read=20= (current-buffer))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (source-buffer=20(if=20gdb-source-window=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (window-buffer=20gdb-source-window)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Do=20the=20= same=20thing=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-setup-windows'=20if=20no=20source=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20buffer=20is=20found.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20(window-state-put=20= window-config=20(frame-root-window))=0A+=20=20=20=20=20=20=20=20=20=20= (dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20buffer-type=20(window-parameter=20nil=20= 'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pcase=20= buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('source=20= (when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20gdb-source-window=20(selected-window))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('command=20= (switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(_=20(let=20((buffer=20(gdb-get-buffer-create=20= buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= buffer))))))))=0A+=20=20=20=20=20=20(kill-buffer=20placeholder))))=0A=20=0A= =20(define-minor-mode=20gdb-many-windows=0A=20=20=20"If=20nil=20just=20= pop=20up=20the=20GUD=20buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20= -4659,6=20+4844,9=20@@=20gdb-many-windows=0A=20(defun=20= gdb-restore-windows=20()=0A=20=20=20"Restore=20the=20basic=20arrangement=20= of=20windows=20used=20by=20gdb.=0A=20This=20arrangement=20depends=20on=20= the=20value=20of=20option=20`gdb-many-windows'."=0A+=20=20;;=20This=20= function=20is=20used=20when=20the=20user=20messed=20up=20window=0A+=20=20= ;;=20configuration=20and=20want=20to=20"reset=20to=20default".=20=20The=20= function=20that=0A+=20=20;;=20sets=20up=20window=20configuration=20on=20= start=20up=20is=20`gdb-get-source-file'.=0A=20=20=20(interactive)=0A=20=20= =20(switch-to-buffer=20gud-comint-buffer)=20;Select=20the=20right=20= window=20and=20frame.=0A=20=20=20(delete-other-windows)=0A@@=20-4705,11=20= +4893,24=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20Recover=20= window=20configuration.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-layout-after-quit=20t)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(and=20(eq=20gdb-restore-window-layout-after-quit=20'if-show-main)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-show-main)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-layout-after-quit=20'if-many-windows)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20=20=20=20= (when=20gdb--window-configuration-before=0A+=20=20=20=20=20=20= (window-state-put=20gdb--window-configuration-before)=0A+=20=20=20=20=20=20= ;;=20This=20way=20we=20don't=20accidentally=20restore=20an=20outdated=20= window=0A+=20=20=20=20=20=20;;=20configuration.=20=20Maybe=20the=20user=20= changed=20the=20configuration=0A+=20=20=20=20=20=20;;=20after=20starting=20= GDB,=20who=20knows.=0A+=20=20=20=20=20=20(setq=20= gdb--window-configuration-before=20nil))))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A=20= buffers,=20if=20required."=0A+=20=20;;=20This=20function=20is=20called=20= only=20once=20on=20startup.=0A=20=20=20(goto-char=20(point-min))=0A=20=20= =20(if=20(re-search-forward=20gdb-source-file-regexp=20nil=20t)=0A=20=20=20= =20=20=20=20(setq=20gdb-main-file=20(read=20(match-string=201))))=0Adiff=20= --git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= bd825c09e1..229400966a=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,19=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-selected-window-undedicated=20(&rest=20body)=0A+=20=20= "Run=20BODY=20in=20the=20selected=20window=20temporarily=20undedicated."=0A= +=20=20(let=20((window-dedicated-sym=20(gensym)))=0A+=20=20=20=20`(let=20= ((,window-dedicated-sym=20(window-dedicated-p)))=0A+=20=20=20=20=20=20=20= (when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20nil))=0A+=20=20=20=20=20=20=20,@body=0A+=20= =20=20=20=20=20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20= =20;;=20`window-dedicated-p'=20returns=20the=20value=20set=20by=0A+=20=20= =20=20=20=20=20=20=20;;=20`set-window-dedicated-p',=20which=20= differentiates=0A+=20=20=20=20=20=20=20=20=20;;=20non-nil=20and=20t,=20= so=20we=20cannot=20simply=20set=20to=20t.=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20,window-dedicated-sym)))))=0A+=0A=20;;=20= The=20following=20two=20functions=20are=20like=20`window-next-sibling'=20= and=0A=20;;=20`window-prev-sibling'=20but=20the=20WINDOW=20argument=20is=20= _not_=20optional=20(so=0A=20;;=20they=20don't=20substitute=20the=20= selected=20window=20for=20nil),=20and=20they=20return=0A--=20=0A2.25.1=0A= =0A= --Apple-Mail=_E8278DED-E82C-4F86-BB91-DF8937D4718A-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Fu Yuan Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 04 Mar 2020 13:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: Eli Zaretskii , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158332852728572 (code B ref 39181); Wed, 04 Mar 2020 13:29:02 +0000 Received: (at 39181) by debbugs.gnu.org; 4 Mar 2020 13:28:47 +0000 Received: from localhost ([127.0.0.1]:40507 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9U4t-0007Ql-Lq for submit@debbugs.gnu.org; Wed, 04 Mar 2020 08:28:47 -0500 Received: from mail-qt1-f171.google.com ([209.85.160.171]:46809) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9U4r-0007QW-Uj for 39181@debbugs.gnu.org; Wed, 04 Mar 2020 08:28:46 -0500 Received: by mail-qt1-f171.google.com with SMTP id x21so1241565qto.13 for <39181@debbugs.gnu.org>; Wed, 04 Mar 2020 05:28:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=content-transfer-encoding:from:mime-version:subject:date:message-id :references:cc:in-reply-to:to; bh=SEBQ+mB4mpBafjqXPzrQJ5xjoR0f/mR+Zx3YELp6fZs=; b=DpTwCHZxxnF7V0yvrY4uqL08aHCT58Amp/qL92HTSgK8om5acsSEie15nlouhkXpIF F0uZvjx1lpXljL5oh+/7sz8xs9RBP6tSyAlTineezp50GW/9H+j3KFx5hJpMoFzRpVvZ yE4SBY4ws5w/NKEEOvymoOww6MIHlrzWZxgXGpFdRDmKkheV/wvccDaZVSKyyL62U2ZI lu+neVpLSgrspwvyECajBX+yqMUxA8NeQb47Sq2PYDxdnQpV2GiAJmHu0uidOehH9/aM 22TkRH+4DOg0inBRDWX93rz+od9OvV5GLcjnb1fZ9nrHETDusLJw3R3pnsoJ/SVjFKZf HT+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:content-transfer-encoding:from:mime-version :subject:date:message-id:references:cc:in-reply-to:to; bh=SEBQ+mB4mpBafjqXPzrQJ5xjoR0f/mR+Zx3YELp6fZs=; b=cZ3MQ4RUfTba1NDwT4PrTDaG8kPgJ82NiqOG0eWgk8ZtimQPKivzgM1X53BVruFv6X nP/G2qc33GD5rN3IOXiRzPE9TCiGVKNhhdXiIBKkt9xV8v8eJMWqo0jNecQFUCLJVSgK GjBORvoKrOCppmLdTYG7hpbO8ItEzPjY7zgeD1+FG3j1Fy2HrvZzCKCd1WzFUdKiJecZ wPKNjV/G1mWuSpDrBTiDE7Nw6ZCAuOc3f9Vk3Cmv8joBjH52qag97Jb98umudCHOhKZ+ OvzUqNHm4+RfqBPWMhwbMzYhkD6UK6Q1gLi9JnRndKprqrZ0zlPoTpeJCJuZC35uOg1O 57JQ== X-Gm-Message-State: ANhLgQ0arFewzKDtls1V/xaVsmPX7+UHchs4Rzv26wecjDJpF2Mjm7PG EYtDNXP49Gqqr/icIQi9oiY= X-Google-Smtp-Source: ADFU+vvRb59oO54ukdeD8Fg0qfcxom7zkquwNOquT7747vq7sVA3nFIBGM7FMlLVNRvJBfdSBB6vLw== X-Received: by 2002:ac8:6f0c:: with SMTP id g12mr827343qtv.151.1583328520340; Wed, 04 Mar 2020 05:28:40 -0800 (PST) Received: from [104.39.248.232] ([104.39.248.232]) by smtp.gmail.com with ESMTPSA id t29sm14692090qtt.20.2020.03.04.05.28.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Mar 2020 05:28:39 -0800 (PST) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Fu Yuan Mime-Version: 1.0 (1.0) Date: Wed, 4 Mar 2020 08:28:38 -0500 Message-Id: <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> In-Reply-To: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> X-Mailer: iPhone Mail (17D50) X-Spam-Score: -1.5 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.5 (--) Actually, it is more intuitive to _alwaya_ save the original window layout o= n startup and restore when quit depending on the toggle variable. Let me fi= x that tonight. Sorry for the fuzz. Yuan > =E5=9C=A8 2020=E5=B9=B43=E6=9C=883=E6=97=A5=EF=BC=8C=E4=B8=8B=E5=8D=886:41= =EF=BC=8CYuan Fu =E5=86=99=E9=81=93=EF=BC=9A >=20 > =EF=BB=BFSorry for the delay, I missed the mail and was waiting for your r= eply. I added a toggle button in the menu with help echos. How does it look?= Since there are more than two options, I make the button to toggle between t= he two basic ones. Also I combined two patches into one. >=20 > Yuan >=20 >=20 > From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 05 Mar 2020 06:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: Eli Zaretskii , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158338876028520 (code B ref 39181); Thu, 05 Mar 2020 06:13:01 +0000 Received: (at 39181) by debbugs.gnu.org; 5 Mar 2020 06:12:40 +0000 Received: from localhost ([127.0.0.1]:42110 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9jkO-0007Pv-FC for submit@debbugs.gnu.org; Thu, 05 Mar 2020 01:12:40 -0500 Received: from mail-qk1-f170.google.com ([209.85.222.170]:39139) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9jkN-0007Pj-KK for 39181@debbugs.gnu.org; Thu, 05 Mar 2020 01:12:39 -0500 Received: by mail-qk1-f170.google.com with SMTP id e16so4215705qkl.6 for <39181@debbugs.gnu.org>; Wed, 04 Mar 2020 22:12:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=BPqHh7IoFZgRmoV05C+9GEGqNUVdCyD85P443zHWchM=; b=YyrYVw8W9Q+g17+zvhsLur1tzxXk/hpun6KNGej9D+tgc31NYjgnt9AYzTDxNVN0Xh GlGTVOTeqKpihkGqMA3Z3GXOoNMwsKlPFhOrumqxVC9v3Q6sMWckrB2eNmPZKcBwXN0o 52I5WzaHxXR2VdsnTYmT54ayA+1clTBbegFxVoj0luTqdw/vcvLqeCTZPPuTDwDTT1g0 R4b6JlgHHx8spWpku32sW6+k1K3S3GGfiBmPs4R9fhv3tTrGknB1OKQhnrGq+ji0O7ss oeeo+Im3ImBSyJP0C9ZSeR+4BA2eNS0hlRgH7e3gI+NvbKc+AEecyWd7bnsBW4Z4Rsg6 p1Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=BPqHh7IoFZgRmoV05C+9GEGqNUVdCyD85P443zHWchM=; b=Iw/2/uK52lKZCLf+bHPi+Ogjeb2a2tFGTV2eaBw5o+Oc/AI+10/CR4IXd+lOHYcAoS RMAXYV0RdsAXMggzvQHjzHj0ias9eXvmu9J3YJLdW/7ziz3Sn2wITbsEz/sKKVoHujuU 9kdQHVgahnPIMavdfsYIXizoA2WJ34S20DpATAoTs0FDv8LHJc/MNYqi/uBOkCGjkSMM WW0f22HBv9GzVXaUA7rm+tRt53wTCVgjlyl8/AnxJ4ULkAZ+9s7rSPIob+Gx98AsNp3J YWCSmaPBiz8sPq2FpgXf6g1XmCWp0pt0nv0uEs1LivgmysxCwTx6/ZRhbFx6WzuoGHdS nNkg== X-Gm-Message-State: ANhLgQ3YQzsACTmonY5gNCnXqtSi3sYnHh45JI5ihzhqSDDjRVgeKBOm 2CJvubHXc0J28+7mQFvez/E= X-Google-Smtp-Source: ADFU+vtgoiAiw+AikTvKQBjbIpluwqiqE1r+nCweSh1h+zZfwhLnlHbtRkNdb53hqCN+hXobdCxE+Q== X-Received: by 2002:a05:620a:10ac:: with SMTP id h12mr6454465qkk.487.1583388754105; Wed, 04 Mar 2020 22:12:34 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id w2sm15351977qto.73.2020.03.04.22.12.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 Mar 2020 22:12:33 -0800 (PST) From: Yuan Fu Message-Id: <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_EA81A4D2-41F1-44C0-8B36-AA75DB9B5CE7" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Thu, 5 Mar 2020 01:12:30 -0500 In-Reply-To: <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: -1.5 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.5 (--) --Apple-Mail=_EA81A4D2-41F1-44C0-8B36-AA75DB9B5CE7 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Here is the patch. Yuan --Apple-Mail=_EA81A4D2-41F1-44C0-8B36-AA75DB9B5CE7 Content-Disposition: attachment; filename=new-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=20c5226b26f117806572da3cc0acbe709c37880181=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Tue,=20= 3=20Mar=202020=2018:30:03=20-0500=0ASubject:=20[PATCH]=20Add=20window=20= streo/restore=20feature=20for=20gdb-mi=0AMIME-Version:=201.0=0A= Content-Type:=20text/plain;=20charset=3DUTF-8=0A= Content-Transfer-Encoding:=208bit=0A=0AAdd=20a=20feature=20that=20allows=20= a=20user=20to=20save=20a=20gdb=20window=20layout=20to=20a=20file=0Awith=20= 'gdb-save-window-layout'=20and=20load=20it=20back=20it=20with=0A= 'gdb-load-window-layout'.=20=20Set=20a=20default=20window=20= configuration=20by=0Asetting=20'gdb-default-window-layout-file'.=20=20= Note=20that=20for=20the=20default=0Awindow=20configuration=20to=20take=20= effect,=20'gdb-many-windows'=20needs=20to=20be=20t.=0AMake=20gdb=20= preserve=20the=20window=20configuration=20that=20the=20user=20had=20= before=0Astarting=20gdb.=20=20In=20window.el,=20add=20= 'with-selected-window-undedicated'.=0A*=20lisp/progmodes/gdb-mi.el=20= (require):=20add=20'pcase',=20wrap=20'pcase'=20and=20'cl-lib'=0Ainside=20= =E2=80=98eval-when-compile=E2=80=99.=0A= (gdb--window-configuration-before):=20New=20variable.=0A= (gdb-restore-window-layout-after-quit):=20New=20custom=20variable.=0A= (gdb):=20Save=20configuration=20on=20startup.=0A(gdb-reset):=20Restore=20= window=20configuration=20after=20quit.=0A(gdb-window-layout-directory,=20= gdb-default-window-layout-file):=20New=0Avariables.=0A(gud-menu-map):=20= Add=20"Load=20window=20layout"=20and=20"Save=20window=20layout"=20to=0A= menu.=20Add=20"Restore=20window=20layout"=20button=20to=20menu.=0A= (gdb-toggle-restore-window-layout):=20New=20function.=0A= (gdb-get-source-buffer):=20New=20function,=20extracted=20out=20of=0A= 'gdb-restore-window'.=0A(gdb-setup-windows):=20Add=20a=20condition=20= branch=20that=20loads=20default=20window=0Alayout=20when=20available.=0A= (gdb-buffer-p,=20gdb-function-buffer-p,=20gdb--buffer-type,=0A= gdb-save-window-layout,=20gdb-load-window-layout):=20New=20functions.=0A= (gdb-many-windows,=20gdb-get-source-file):=20Add=20comments.=0A*=20= lisp/window.el=20(with-selected-window-undedicated):=20New=20function.=0A= ---=0A=20lisp/progmodes/gdb-mi.el=20|=20267=20= ++++++++++++++++++++++++++++++++++-----=0A=20lisp/window.el=20=20=20=20=20= =20=20=20=20=20=20|=20=2013=20++=0A=202=20files=20changed,=20245=20= insertions(+),=2035=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= da5a2a503a..c8d4c0ceab=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-91,7=20+91,8=20@@=0A=20(require=20= 'gud)=0A=20(require=20'json)=0A=20(require=20'bindat)=0A-(require=20= 'cl-lib)=0A+(eval-when-compile=20(require=20'cl-lib))=0A= +(eval-when-compile=20(require=20'pcase))=0A=20=0A=20(declare-function=20= speedbar-change-initial-expansion-list=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A@@=20-253,6=20= +254,25=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20disposition=20= of=20output=20generated=20by=20commands=20that=0A=20=09=20=20=20=20=20=20= =20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20behalf.")=0A=20=0A= +(defvar=20gdb--window-configuration-before=20nil=0A+=20=20"Stores=20the=20= window=20configuration=20before=20starting=20gdb.")=0A+=0A+(defcustom=20= gdb-restore-window-layout-after-quit=20nil=0A+=20=20"Specify=20whether=20= to=20restore=20the=20window=20layout=20the=20user=20had=20before=20gdb=20= starts.=0A+=0A+Possible=20values=20are:=0A+=20=20=20=20t=20--=20Always=20= restore.=0A+=20=20=20=20nil=20--=20Don't=20restore.=0A+=20=20=20=20= 'if-show-main=20--=20Restore=20only=20if=20`gdb-show-main'=20is=20= non-nil=0A+=20=20=20=20'if-many-windows=20--=20Restore=20only=20if=20= variable=20`gdb-many-windows'=20is=20non-nil."=0A+=20=20:type=20'(choice=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Always=20restore"=20t)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Don't=20restore"=20nil)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Depends=20on=20= `gdb-show-main'"=20'if-gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20= (const=20:tag=20"Depends=20on=20`gdb-many-windows'"=20= 'if-gdb-many-windows))=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-603,6=20+623,20=20@@=20gdb-show-main=0A=20=20=20= :group=20'gdb=0A=20=20=20:version=20"22.1")=0A=20=0A+(defcustom=20= gdb-window-layout-directory=20user-emacs-directory=0A+=20=20"The=20= default=20directory=20where=20window=20configuration=20files=20are=20= stored.=0A+If=20nil,=20use=20`default-directory'."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A= +(defcustom=20gdb-default-window-layout-file=20nil=0A+=20=20"If=20= non-nil,=20gdb=20loads=20this=20window=20layout=20file=20on=20startup.=0A= +If=20not=20absolute,=20GDB=20will=20look=20under=20= `gdb-window-layout-directory'."=0A+=20=20:type=20'string=0A+=20=20:group=20= 'gdb=0A+=20=20:version=20"28.1")=0A+=0A=20(defvar=20gdbmi-debug-mode=20= nil=0A=20=20=20"When=20non-nil,=20print=20the=20messages=20sent/received=20= from=20GDB/MI=20in=20*Messages*.")=0A=20=0A@@=20-761,6=20+795,12=20@@=20= gdb=0A=20=20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20= =20=20=20=20"Multiple=20debugging=20requires=20restarting=20in=20text=20= command=20mode"))=0A+=0A+=20=20;;=20Save=20window=20configuration=20= before=20starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20= after=20gdb=20quits.=20Save=20it=20regardless=20of=20the=20value=20of=0A= +=20=20;;=20`gdb-restore-window-layout-after-quit'.=0A+=20=20(setq=20= gdb--window-configuration-before=20(window-state-get))=0A+=0A=20=20=20;;=0A= =20=20=20(gud-common-init=20command-line=20nil=20= 'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4491,6=20+4531,13=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20(define-key=20= gud-menu-map=20[displays]=0A=20=20=20=20=20`(menu-item=20"GDB-Windows"=20= ,menu=0A=20=09=09:visible=20(eq=20gud-minor-mode=20'gdbmi)))=0A+=20=20= (define-key=20menu=20[load-layout]=20'("Load=20window=20layout"=20"Load=20= GDB=20window=20layout=20from=20a=20file"=20.=20gdb-load-window-layout))=0A= +=20=20(define-key=20menu=20[save-layout]=20'("Save=20window=20layout"=20= "Save=20current=20GDB=20window=20layout=20to=20a=20file"=20.=20= gdb-save-window-layout))=0A+=20=20(define-key=20menu=20= [restore-layout-when-finish]=0A+=20=20=20=20'(menu-item=20"Restore=20= window=20layout"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-toggle-restore-window-layout=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20.=20(:button=20(:toggle=20.=20= gdb-restore-window-layout-after-quit)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:help=20"If=20on,=20GDB=20= restores=20the=20window=20layout=20you=20had=20before=20starting=20GDB=20= after=20it=20quits")))=0A=20=20=20(define-key=20menu=20[gdb]=20'("Gdb"=20= .=20gdb-display-gdb-buffer))=0A=20=20=20(define-key=20menu=20[threads]=20= '("Threads"=20.=20gdb-display-threads-buffer))=0A=20=20=20(define-key=20= menu=20[memory]=20'("Memory"=20.=20gdb-display-memory-buffer))=0A@@=20= -4606,41=20+4653,175=20@@=20gdb-set-window-buffer=0A=20=20=20= (set-window-buffer=20window=20(get-buffer=20name))=0A=20=20=20= (set-window-dedicated-p=20window=20t))=0A=20=0A+(defun=20= gdb-toggle-restore-window-layout=20()=0A+=20=20"Toggle=20whether=20to=20= restore=20window=20layout=20when=20GDB=20quit."=0A+=20=20(interactive)=0A= +=20=20(setq=20gdb-restore-window-layout-after-quit=0A+=20=20=20=20=20=20= =20=20(not=20gdb-restore-window-layout-after-quit)))=0A+=0A+(defun=20= gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20displaying=20= source=20file=20or=20nil.=0A+=0A+The=20source=20file=20would=20be=20the=20= most=20relevant=20file=20or=20the=20main=20file."=0A+=20=20(if=20= gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-layout-file=0A+=20=20=20=20=20=20= (gdb-load-window-layout=0A+=20=20=20=20=20=20=20(if=20= (file-name-absolute-p=20gdb-default-window-layout-file)=0A+=20=20=20=20=20= =20=20=20=20=20=20gdb-default-window-layout-file=0A+=20=20=20=20=20=20=20= =20=20(expand-file-name=20gdb-default-window-layout-file=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-window-layout-directory)))=0A+=20=20=20=20;;=20Create=20default=20= layout=20as=20before.=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-stack-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-breakpoints-buffer)=0A+=20=20=20=20(set-window-dedicated-p=20= (selected-window)=20nil)=0A+=20=20=20=20(switch-to-buffer=20= gud-comint-buffer)=0A+=20=20=20=20(delete-other-windows)=0A+=20=20=20=20= (let=20((win0=20(selected-window))=0A+=20=20=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20= /=20(window-height)=203)))=0A+=20=20=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20=20=20=20=20= (select-window=20win2)=0A+=20=20=20=20=20=20(set-window-buffer=0A+=20=20=20= =20=20=20=20win2=0A+=20=20=20=20=20=20=20(or=20(gdb-get-source-buffer)=0A= +=20=20=20=20=20=20=20=20=20=20=20(list-buffers-noselect)))=0A+=20=20=20=20= =20=20(setq=20gdb-source-window=20(selected-window))=0A+=20=20=20=20=20=20= (let=20((win4=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=0A+=20=20=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A+=20=20=20=20= =20=20(select-window=20win1)=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A+=20=20=20=20=20=20(let=20((win5=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=20= (if=20gdb-show-threads-by-default=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20gdb-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20gdb=20function=20buffer.=0A+=0A= +E.g.,=20locals=20buffer,=20registers=20buffer,=20but=20don't=20include=20= the=20main=0A+command=20buffer=20(the=20one=20in=20where=20you=20type=20= gdb=20commands)=20or=20source=0A+buffers."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(derived-mode-p=20'gdb-parent-mode=20= 'gdb-inferior-io-mode)))=0A+=0A+(defun=20gdb--buffer-type=20(buffer)=0A+=20= =20"Return=20the=20buffer=20type=20of=20BUFFER=20or=20nil.=0A+=0A+Buffer=20= type=20is=20like=20`gdb-registers-type',=20`gdb-stack-buffer'.=0A+This=20= symbol=20can=20be=20passed=20to=20`gdb-get-buffer-create'.=0A+=0A+Return=20= nil=20if=20BUFFER=20isn't=20a=20gdb=20function=20buffer."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(cl-loop=20for=20rule=20in=20= gdb-buffer-rules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20for=20= mode-name=20=3D=20(gdb-rules-buffer-mode=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20for=20type=20=3D=20(car=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20if=20(eq=20mode-name=20major-mode)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20return=20type=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20finally=20return=20nil)))=0A+=0A+(defun=20gdb-save-window-layout=20= (file)=0A+=20=20"Save=20current=20window=20layout=20(window=20= configuration)=20to=20FILE.=0A+=0A+You=20can=20later=20restore=20this=20= layout=20from=20that=20file=20by=0A+`gdb-load-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Save=20window=20configuration=20to=20= file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(or=20gdb-window-layout-directory=20default-directory))))=0A+=20=20= ;;=20We=20replace=20the=20buffer=20in=20each=20window=20with=20a=20= placeholder,=20store=0A+=20=20;;=20the=20buffer=20type=20(register,=20= breakpoint,=20etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20write=20= the=20window=20configuration=20to=20the=20file.=0A+=20=20= (save-window-excursion=0A+=20=20=20=20(let=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20=20=20=20=20=20=20=20= =20=20(window-persistent-parameters=0A+=20=20=20=20=20=20=20=20=20=20=20= (cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters))=0A+=20=20=20=20=20=20=20=20=20=20= window-config)=0A+=20=20=20=20=20=20(unwind-protect=0A+=20=20=20=20=20=20= =20=20=20=20(dolist=20(win=20(window-list=20nil=20'no-minibuffer))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(select-window=20win)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(when=20(gdb-buffer-p=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-parameter=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(cond=20((gdb-function-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=201)=20If=20a=20user=20arranged=20the=20window=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= configuration=20herself=20and=20saves=20it,=20windows=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20are=20probably=20= not=20dedicated.=20=202)=20We=20use=20the=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20same=20dedication=20flag=20as=20= in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20`gdb-display-buffer'.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(set-window-dedicated-p=20nil=20t)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20We=20save=20this=20= gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20we=20can=20later=20pass=20it=20to=20= `gdb-get-buffer-create';=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20one=20example:=20`gdb-registers-buffer'.=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb--buffer-type=20(current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(error=20"Unrecognized=20= gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20Command=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((derived-mode-p=20= 'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20((equal=20(selected-window)=20gdb-source-window)=20= 'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(set-window-prev-buffers=20(selected-window)=20= nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20=20= =20=20=20;;=20Save=20the=20window=20configuration=20to=20FILE.=0A+=20=20=20= =20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20t)))=0A= +=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20=20=20= =20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-load-window-layout=20(file)=0A+=20=20"Restore=20window=20layout=20= (window=20configuration)=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20= window=20layout=20file=20saved=20by=0A+`gdb-save-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Restore=20window=20configuration=20= from=20file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(or=20gdb-window-layout-directory=20default-directory))))=0A= +=20=20;;=20Basically,=20we=20restore=20window=20configuration=20and=20= go=20through=20each=0A+=20=20;;=20window=20and=20restore=20the=20= function=20buffers.=0A+=20=20(let*=20((placeholder=20(get-buffer-create=20= "=20*gdb-placeholder*")))=0A+=20=20=20=20(unwind-protect=20;=20Don't=20= leak=20buffer.=0A+=20=20=20=20=20=20=20=20(let=20((window-config=20= (with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(insert-file-contents=20file)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20We=20need=20to=20go=20to=20point-min=20even=20we=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20are=20reading=20the=20whole=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read=20= (current-buffer))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (source-buffer=20(if=20gdb-source-window=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (window-buffer=20gdb-source-window)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Do=20the=20= same=20thing=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-setup-windows'=20if=20no=20source=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20buffer=20is=20found.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20(window-state-put=20= window-config=20(frame-root-window))=0A+=20=20=20=20=20=20=20=20=20=20= (dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20buffer-type=20(window-parameter=20nil=20= 'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pcase=20= buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('source=20= (when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20gdb-source-window=20(selected-window))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('command=20= (switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(_=20(let=20((buffer=20(gdb-get-buffer-create=20= buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= buffer))))))))=0A+=20=20=20=20=20=20(kill-buffer=20placeholder))))=0A=20=0A= =20(define-minor-mode=20gdb-many-windows=0A=20=20=20"If=20nil=20just=20= pop=20up=20the=20GUD=20buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20= -4659,6=20+4840,9=20@@=20gdb-many-windows=0A=20(defun=20= gdb-restore-windows=20()=0A=20=20=20"Restore=20the=20basic=20arrangement=20= of=20windows=20used=20by=20gdb.=0A=20This=20arrangement=20depends=20on=20= the=20value=20of=20option=20`gdb-many-windows'."=0A+=20=20;;=20This=20= function=20is=20used=20when=20the=20user=20messed=20up=20window=0A+=20=20= ;;=20configuration=20and=20want=20to=20"reset=20to=20default".=20=20The=20= function=20that=0A+=20=20;;=20sets=20up=20window=20configuration=20on=20= start=20up=20is=20`gdb-get-source-file'.=0A=20=20=20(interactive)=0A=20=20= =20(switch-to-buffer=20gud-comint-buffer)=20;Select=20the=20right=20= window=20and=20frame.=0A=20=20=20(delete-other-windows)=0A@@=20-4705,11=20= +4889,24=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20Recover=20= window=20configuration.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-layout-after-quit=20t)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(and=20(eq=20gdb-restore-window-layout-after-quit=20'if-show-main)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-show-main)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-layout-after-quit=20'if-many-windows)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20=20=20=20= (when=20gdb--window-configuration-before=0A+=20=20=20=20=20=20= (window-state-put=20gdb--window-configuration-before)=0A+=20=20=20=20=20=20= ;;=20This=20way=20we=20don't=20accidentally=20restore=20an=20outdated=20= window=0A+=20=20=20=20=20=20;;=20configuration.=20=20Maybe=20the=20user=20= changed=20the=20configuration=0A+=20=20=20=20=20=20;;=20after=20starting=20= GDB,=20who=20knows.=0A+=20=20=20=20=20=20(setq=20= gdb--window-configuration-before=20nil))))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A=20= buffers,=20if=20required."=0A+=20=20;;=20This=20function=20is=20called=20= only=20once=20on=20startup.=0A=20=20=20(goto-char=20(point-min))=0A=20=20= =20(if=20(re-search-forward=20gdb-source-file-regexp=20nil=20t)=0A=20=20=20= =20=20=20=20(setq=20gdb-main-file=20(read=20(match-string=201))))=0Adiff=20= --git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= bd825c09e1..229400966a=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,19=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-selected-window-undedicated=20(&rest=20body)=0A+=20=20= "Run=20BODY=20in=20the=20selected=20window=20temporarily=20undedicated."=0A= +=20=20(let=20((window-dedicated-sym=20(gensym)))=0A+=20=20=20=20`(let=20= ((,window-dedicated-sym=20(window-dedicated-p)))=0A+=20=20=20=20=20=20=20= (when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20nil))=0A+=20=20=20=20=20=20=20,@body=0A+=20= =20=20=20=20=20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20= =20;;=20`window-dedicated-p'=20returns=20the=20value=20set=20by=0A+=20=20= =20=20=20=20=20=20=20;;=20`set-window-dedicated-p',=20which=20= differentiates=0A+=20=20=20=20=20=20=20=20=20;;=20non-nil=20and=20t,=20= so=20we=20cannot=20simply=20set=20to=20t.=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20,window-dedicated-sym)))))=0A+=0A=20;;=20= The=20following=20two=20functions=20are=20like=20`window-next-sibling'=20= and=0A=20;;=20`window-prev-sibling'=20but=20the=20WINDOW=20argument=20is=20= _not_=20optional=20(so=0A=20;;=20they=20don't=20substitute=20the=20= selected=20window=20for=20nil),=20and=20they=20return=0A--=20=0A2.25.1=0A= =0A= --Apple-Mail=_EA81A4D2-41F1-44C0-8B36-AA75DB9B5CE7 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_EA81A4D2-41F1-44C0-8B36-AA75DB9B5CE7-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 05 Mar 2020 09:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: Eli Zaretskii , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158339969512245 (code B ref 39181); Thu, 05 Mar 2020 09:15:02 +0000 Received: (at 39181) by debbugs.gnu.org; 5 Mar 2020 09:14:55 +0000 Received: from localhost ([127.0.0.1]:42160 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9mak-0003BR-SV for submit@debbugs.gnu.org; Thu, 05 Mar 2020 04:14:55 -0500 Received: from mout.gmx.net ([212.227.17.20]:50199) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9maj-0003BE-I6 for 39181@debbugs.gnu.org; Thu, 05 Mar 2020 04:14:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1583399687; bh=+xINhxtGd9EAq3uWF0yVKrl+H3Tuk8CKRyk8oRjtsW0=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=a5tFqyMauWwFOMMYWi5b4RYfjNx4wQzDJ8DdGMHZ40Cy73AjXfZ20DjDFo1XgcOa7 F9NfYbVNJTPyCTuP9cSAwwwQGgESdXrUm+sq16hK0DfZd74abfR8OomQ1N5wxYQjI0 3kjxaNfo8D3VtgwsSwRcO9J/w2hWdXa76tpYUX3k= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.18]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MJE6F-1iv95R40Yl-00KeTR; Thu, 05 Mar 2020 10:14:47 +0100 References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> From: martin rudalics Message-ID: <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> Date: Thu, 5 Mar 2020 10:14:46 +0100 MIME-Version: 1.0 In-Reply-To: <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:i1EKuvWfKox+9+A75fiBSmjBhLQBTlqi10vJpkpiibbW3xJplzb H5UdVPZ0XMoJZcdy4L/HjgSNEECWk86+nx6nBhAkF4ioAG82Zq7398kJYXEDfcsmA73qYbB F3vF433rK6SFK1RVj9VH670KXyYXwM0KDYdOTsJEBWrCP1SAehfx566L8z1YA0seLepPeYP aIzdjwdUCx/7kKOwsQWtg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:r1lBtcTvqF4=:9qupxomxS0ZnRzL/Wssnr1 E8loI+L0uSnEgeh9iWk0KKTjGm0otUKVOxFNFD/tQTzd9YEZ6wi8w7mWWWqsVMJgbejcB80bJ hcQk1EgEejdeoljSu/PtPnIjdihNiSJSgcqWak8SACd0BErgP4u2KBrrRWcYQ/magtFWW+yJC ex7fzayOaWyjfVe7H6g8YlRmkD/ib+HaGq8vAE0u1wDyiD6AZuuuhzv2u4JBMpGpw3vHG8y3c MvXC4hCiB92s1DY7sZNk/uZXSgDTX/GNyfbJXVLyq1yKOg3w9yImmF06ccKsLd3s+6lySt/Sm 082qwLoGvPC88HerG7xMin7rWQRLP4eWSbfkDGtzTcUOwdyhbJBEEfVhgTRjCar+e/rX/ETmG kK58GsuzwpoeHWcRfP5QnGLV48KbA8eVXg3u34ozncj6EdHUKA9Zoj9I7m/Wa+FWbbCKk1iUX kweGOXP9IuNQBruCPnyZ/EIIc9IGGfCFH+6Ccu67zriWiWoQN4H0IchTnnkW/jml9uIv7WHWZ m0wfUOaHNdyrr14/2zY5iZLCfi+IREOprnIcw3K5DIISAxtv+UM7FbZ6Utf0KvrDO9UXDUgAv ZfUnEEjd5D1Y4bXVHXV7JDMWM5Orpaxhq88YReWSRYy7CQAbkF89Ni7UwMB9MD0ATe6iOFS38 Jb/+jCxlr+uJ7HOBuV5YYnUYaurBbt8o0us88y0dP51JTt81w2ofBNbzFdXYYtrx/gFcALbg3 tONh66Zpg+J12obsquMJdYpcJky7oZ+iVevMpVN2GJw8OqLMP4aNYjnD81Top/hGmyIGiYAHH bOusFFrHsG5CexlgpoCvbW/820lp1rJZbyLbi1hg016bTDj/a1N7pddW5FAEZcRsXGhoV/FQS 8aZFanwf8tTypIWPxFuRjVv5yQktMD2V/cpNlnqvhM66ReHBTmkPAwoPpcdguPRyoK5im2tQA 8v660NsTkUNERNeX7+fuzCAt4AdlJam4IUlGkCNwD+0AXnFMOnmiPVC6g8ARRXDbrTCevyQJU QdtMInusVyLYGZMkJ/V8doST61lESNLa0HDFoIJB8FkHl+iIsw2ZGZsNrlYGQk3GqRBcPLc/v 9bb2M4Vcq3MgXEbr8jnA1+6bsemDejkhqGxqPDOR2/LI69YtmlDkKf4ryuKDFAJHTyxvciu+q HlhMGM+0oX454rKsEdZxsJjJP8Qui9b0cd08r68LoRRNhI9hrEij7X+vzKhh0Z6TOYQtevvcK Zws26XAOl6Dxrj8Uw X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Here is the patch. Thanks. It gets me here the following warnings when building on master (sorry, I'm a complete ignorant of the 'cl-' snafu): ELC progmodes/gdb-mi.elc In toplevel form: =2E./../lisp/progmodes/gdb-mi.el:4738:1: Warning: Unused lexical variable= =E2=80=98window-config=E2=80=99 In end of data: =2E./../lisp/progmodes/gdb-mi.el:5069:1: Warning: the following functions= might not be defined at runtime: cl-delete-if, cl-find-if, cl-mapcar A few remarks: + "If non-nil, gdb loads this window layout file on startup. +If not absolute, GDB will look under `gdb-window-layout-directory'." We should settle in descriptions on whether we write gdb or GDB. Also, "if not absolute" is too terse IMHO. + (define-key menu [load-layout] '("Load window layout" "Load GDB window= layout from a file" . gdb-load-window-layout)) + (define-key menu [save-layout] '("Save window layout" "Save current GD= B window layout to a file" . gdb-save-window-layout)) I think we could omit the "window" in these which should allow us to, instead of + '(menu-item "Restore window layout" say + '(menu-item "Restore layout after quit" so it becomes more clear that "load" and "save" act _immediately_ on the current state while "restore" is a more general setting that becomes effective only when the user quits. (Note also that in general we cannot guarantee that menu tooltips are always shown on each and every system where Emacs runs.) Also, I would mention all four possible values of 'gdb-restore-window-layout-after-quit' (currently "toggle" indicates that there are only two of them) like, for example, with the side values for tool-bar mode. + "Return a buffer displaying source file or nil. + +The source file would be the most relevant file or the main file." This is IMHO too terse in every respect. Neither "source file" nor "main file" are canonical terms in the context of GDB so we should explain here how they are set up (what is nil in this context?). +E.g., locals buffer, registers buffer, but don't include the main I would say "Function buffers are locals buffers, ...". +(defun gdb--buffer-type (buffer) + "Return the buffer type of BUFFER or nil. Maybe "Return the type of BUFFER if it is a GDB function buffer." would be better. Thanks for your work on this, martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 07 Mar 2020 18:11:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: Eli Zaretskii , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158360460512337 (code B ref 39181); Sat, 07 Mar 2020 18:11:01 +0000 Received: (at 39181) by debbugs.gnu.org; 7 Mar 2020 18:10:05 +0000 Received: from localhost ([127.0.0.1]:47530 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jAdtl-0003Cv-Bg for submit@debbugs.gnu.org; Sat, 07 Mar 2020 13:10:05 -0500 Received: from mail-qk1-f195.google.com ([209.85.222.195]:47029) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jAdtj-0003CM-Dy for 39181@debbugs.gnu.org; Sat, 07 Mar 2020 13:10:03 -0500 Received: by mail-qk1-f195.google.com with SMTP id u124so5463306qkh.13 for <39181@debbugs.gnu.org>; Sat, 07 Mar 2020 10:10:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=FCh6e7TK91I3rCTe0+Yy+VcY/PlN45fFy7GSMpYGFiU=; b=pJ+zKXCIcTo8gqwENKQ+uX7LjUZ2EkYPF7d8BCteoYG+T1mGYxoUk8l4fBOzYWzApy TzJQMNpxEeyzsO5Rukn28n8BJNnK4rPXIVy0L6KuCHSxp/RW+Kni9zVOhgxwrGbTDSKY LlIBEDV1ZhXfk9RKBAtTII3/URHir+Iz+R2RZaC+hi+2dydb4CvPN22wbb1SzPtZjQG9 bL2tvBo5dVhMb627c1bRZnLxmHS3mDMzJ+oywNkSJ71DsCk2R6Ksob5JY84zgERypI2z JsJEw/++ERqWMHGCW9tqsczEqukvSf7ntyJiD7a5RWj5MVUV19CldLlNeONkG98ddb6n a//w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=FCh6e7TK91I3rCTe0+Yy+VcY/PlN45fFy7GSMpYGFiU=; b=pQH2T5xFP6R+6Kd0kaajZdUp/FH2OYK9/wI9JWxPP+NTkggMDG069fFVtSPa64iHSy bVkyF8/ode9Njea+8H9AuY8ISOu9KKCm6rcTpFCY1LSMBF+MGthgULl9NYaO9F53K/By X+BRs5cOezMGe1zdxl61z4+0SE/hysLu8DwM3uDmbyFJH1NUrIR3bYlknwo+xeO8B3hW AV0Fc7T/nOBeUP5jlfh8VTwPsU2440lJB0OskWSeypganafqZlBsTsY8Cna9nG7YozIY 9MEJH6XVc3C+cvDr0LuzmszV9CzZutKKQieeI2vaEZABBCvmd1I+/hFYem4eu12tV1b6 Xi9A== X-Gm-Message-State: ANhLgQ0acAcMilF+BzDXlV4wswUImtS3fSK3JuLwKJR/hwAvGTMKYvn6 1+qPf5GJS7wd3bD9LrACzLQ= X-Google-Smtp-Source: ADFU+vs7mYvByYrV3ml0DRi5GUx1k295zylTyXDcnZYtA/WM4hD4T4MdDCbpkC8gf3ezFfcu0HmcVA== X-Received: by 2002:a37:5d86:: with SMTP id r128mr3046674qkb.177.1583604597845; Sat, 07 Mar 2020 10:09:57 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id e7sm10833103qtp.0.2020.03.07.10.09.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Mar 2020 10:09:57 -0800 (PST) From: Yuan Fu Message-Id: <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_F1BD9F4B-5F69-4BCC-A2E1-9FD5AE73422B" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Sat, 7 Mar 2020 13:09:53 -0500 In-Reply-To: <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: -1.5 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.5 (--) --Apple-Mail=_F1BD9F4B-5F69-4BCC-A2E1-9FD5AE73422B Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 5, 2020, at 4:14 AM, martin rudalics wrote: >=20 > > Here is the patch. >=20 > Thanks. It gets me here the following warnings when building on master > (sorry, I'm a complete ignorant of the 'cl-' snafu): >=20 > ELC progmodes/gdb-mi.elc >=20 > In toplevel form: > ../../lisp/progmodes/gdb-mi.el:4738:1: Warning: Unused lexical = variable > =E2=80=98window-config=E2=80=99 >=20 > In end of data: > ../../lisp/progmodes/gdb-mi.el:5069:1: Warning: the following = functions might > not be defined at runtime: cl-delete-if, cl-find-if, cl-mapcar Fixed. >=20 > A few remarks: >=20 > + "If non-nil, gdb loads this window layout file on startup. > +If not absolute, GDB will look under `gdb-window-layout-directory'." >=20 > We should settle in descriptions on whether we write gdb or GDB. = Also, > "if not absolute" is too terse IMHO. >=20 > + (define-key menu [load-layout] '("Load window layout" "Load GDB = window layout from a file" . gdb-load-window-layout)) > + (define-key menu [save-layout] '("Save window layout" "Save current = GDB window layout to a file" . gdb-save-window-layout)) >=20 > I think we could omit the "window" in these which should allow us to, > instead of >=20 > + '(menu-item "Restore window layout" >=20 > say >=20 > + '(menu-item "Restore layout after quit" >=20 > so it becomes more clear that "load" and "save" act _immediately_ on = the > current state while "restore" is a more general setting that becomes > effective only when the user quits. (Note also that in general we > cannot guarantee that menu tooltips are always shown on each and every > system where Emacs runs.) >=20 > Also, I would mention all four possible values of > 'gdb-restore-window-layout-after-quit' (currently "toggle" indicates > that there are only two of them) like, for example, with the side = values > for tool-bar mode. I removed =E2=80=9Cwindow=E2=80=9D in their names. I mentioned the other = possible values in the help echo, is that fine? Not sure where else I = can put it. >=20 > + "Return a buffer displaying source file or nil. > + > +The source file would be the most relevant file or the main file." >=20 > This is IMHO too terse in every respect. Neither "source file" nor > "main file" are canonical terms in the context of GDB so we should > explain here how they are set up (what is nil in this context?). >=20 > +E.g., locals buffer, registers buffer, but don't include the main >=20 > I would say "Function buffers are locals buffers, ...". >=20 > +(defun gdb--buffer-type (buffer) > + "Return the buffer type of BUFFER or nil. >=20 > Maybe >=20 > "Return the type of BUFFER if it is a GDB function buffer." >=20 > would be better. I added some explanations. I hope they are clear now. > Thanks for your work on this, Martin Thanks for reviewing :-) Here is the new patch. Yuan --Apple-Mail=_F1BD9F4B-5F69-4BCC-A2E1-9FD5AE73422B Content-Disposition: attachment; filename=new-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=208c17b76667317ef85a10df5244a8ad3a44b172b9=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Tue,=20= 3=20Mar=202020=2018:30:03=20-0500=0ASubject:=20[PATCH]=20Add=20window=20= streo/restore=20feature=20for=20gdb-mi=0AMIME-Version:=201.0=0A= Content-Type:=20text/plain;=20charset=3DUTF-8=0A= Content-Transfer-Encoding:=208bit=0A=0AAdd=20a=20feature=20that=20allows=20= a=20user=20to=20save=20a=20gdb=20window=20layout=20to=20a=20file=0Awith=20= 'gdb-save-window-layout'=20and=20load=20it=20back=20it=20with=0A= 'gdb-load-window-layout'.=20=20Set=20a=20default=20window=20= configuration=20by=0Asetting=20'gdb-default-window-layout-file'.=20=20= Note=20that=20for=20the=20default=0Awindow=20configuration=20to=20take=20= effect,=20'gdb-many-windows'=20needs=20to=20be=20t.=0AMake=20gdb=20= preserve=20the=20window=20configuration=20that=20the=20user=20had=20= before=0Astarting=20gdb.=20=20In=20window.el,=20add=20= 'with-selected-window-undedicated'.=0A*=20lisp/progmodes/gdb-mi.el=20= (require):=20add=20'pcase',=20wrap=20'pcase'=20and=20'cl-lib'=0Ainside=20= =E2=80=98eval-when-compile=E2=80=99.=0A= (gdb--window-configuration-before):=20New=20variable.=0A= (gdb-restore-window-layout-after-quit):=20New=20custom=20variable.=0A= (gdb):=20Save=20configuration=20on=20startup.=0A(gdb-reset):=20Restore=20= window=20configuration=20after=20quit.=0A(gdb-window-layout-directory,=20= gdb-default-window-layout-file):=20New=0Avariables.=0A(gud-menu-map):=20= Add=20"Load=20window=20layout"=20and=20"Save=20window=20layout"=20to=0A= menu.=20Add=20"Restore=20window=20layout"=20button=20to=20menu.=0A= (gdb-toggle-restore-window-layout):=20New=20function.=0A= (gdb-get-source-buffer):=20New=20function,=20extracted=20out=20of=0A= 'gdb-restore-window'.=0A(gdb-setup-windows):=20Add=20a=20condition=20= branch=20that=20loads=20default=20window=0Alayout=20when=20available.=0A= (gdb-buffer-p,=20gdb-function-buffer-p,=20gdb--buffer-type,=0A= gdb-save-window-layout,=20gdb-load-window-layout):=20New=20functions.=0A= (gdb-many-windows,=20gdb-get-source-file):=20Add=20comments.=0A*=20= lisp/window.el=20(with-selected-window-undedicated):=20New=20function.=0A= ---=0A=20lisp/progmodes/gdb-mi.el=20|=20272=20= ++++++++++++++++++++++++++++++++++-----=0A=20lisp/window.el=20=20=20=20=20= =20=20=20=20=20=20|=20=2013=20++=0A=202=20files=20changed,=20251=20= insertions(+),=2034=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= da5a2a503a..206d81ec6a=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-92,6=20+92,8=20@@=0A=20(require=20= 'json)=0A=20(require=20'bindat)=0A=20(require=20'cl-lib)=0A+(require=20= 'cl-seq)=0A+(eval-when-compile=20(require=20'pcase))=0A=20=0A=20= (declare-function=20speedbar-change-initial-expansion-list=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A= @@=20-253,6=20+255,25=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20= disposition=20of=20output=20generated=20by=20commands=20that=0A=20=09=20=20= =20=20=20=20=20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20= behalf.")=0A=20=0A+(defvar=20gdb--window-configuration-before=20nil=0A+=20= =20"Stores=20the=20window=20configuration=20before=20starting=20gdb.")=0A= +=0A+(defcustom=20gdb-restore-window-layout-after-quit=20nil=0A+=20=20= "Specify=20whether=20to=20restore=20the=20window=20layout=20the=20user=20= had=20before=20gdb=20starts.=0A+=0A+Possible=20values=20are:=0A+=20=20=20= =20t=20--=20Always=20restore.=0A+=20=20=20=20nil=20--=20Don't=20restore.=0A= +=20=20=20=20'if-show-main=20--=20Restore=20only=20if=20`gdb-show-main'=20= is=20non-nil=0A+=20=20=20=20'if-many-windows=20--=20Restore=20only=20if=20= variable=20`gdb-many-windows'=20is=20non-nil."=0A+=20=20:type=20'(choice=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Always=20restore"=20t)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Don't=20restore"=20nil)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Depends=20on=20= `gdb-show-main'"=20'if-gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20= (const=20:tag=20"Depends=20on=20`gdb-many-windows'"=20= 'if-gdb-many-windows))=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-603,6=20+624,22=20@@=20gdb-show-main=0A=20=20=20= :group=20'gdb=0A=20=20=20:version=20"22.1")=0A=20=0A+(defcustom=20= gdb-window-layout-directory=20user-emacs-directory=0A+=20=20"The=20= default=20directory=20where=20window=20configuration=20files=20are=20= stored.=0A+If=20nil,=20use=20`default-directory'."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A= +(defcustom=20gdb-default-window-layout-file=20nil=0A+=20=20"If=20= non-nil,=20GDB=20loads=20this=20window=20layout=20file=20on=20startup.=0A= +This=20should=20be=20the=20path=20to=20the=20window=20layout=20file.=20=20= If=20the=20path=0A+is=20not=20an=20absolute=20path,=20GDB=20treats=20it=20= as=20a=20relative=20path=20and=0A+looks=20under=20= `gdb-window-layout-directory'."=0A+=20=20:type=20'string=0A+=20=20:group=20= 'gdb=0A+=20=20:version=20"28.1")=0A+=0A=20(defvar=20gdbmi-debug-mode=20= nil=0A=20=20=20"When=20non-nil,=20print=20the=20messages=20sent/received=20= from=20GDB/MI=20in=20*Messages*.")=0A=20=0A@@=20-761,6=20+798,12=20@@=20= gdb=0A=20=20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20= =20=20=20=20"Multiple=20debugging=20requires=20restarting=20in=20text=20= command=20mode"))=0A+=0A+=20=20;;=20Save=20window=20configuration=20= before=20starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20= after=20gdb=20quits.=20Save=20it=20regardless=20of=20the=20value=20of=0A= +=20=20;;=20`gdb-restore-window-layout-after-quit'.=0A+=20=20(setq=20= gdb--window-configuration-before=20(window-state-get))=0A+=0A=20=20=20;;=0A= =20=20=20(gud-common-init=20command-line=20nil=20= 'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4491,6=20+4534,14=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20(define-key=20= gud-menu-map=20[displays]=0A=20=20=20=20=20`(menu-item=20"GDB-Windows"=20= ,menu=0A=20=09=09:visible=20(eq=20gud-minor-mode=20'gdbmi)))=0A+=20=20= (define-key=20menu=20[load-layout]=20'("Load=20layout"=20"Load=20GDB=20= window=20layout=20from=20a=20file"=20.=20gdb-load-window-layout))=0A+=20=20= (define-key=20menu=20[save-layout]=20'("Save=20layout"=20"Save=20current=20= GDB=20window=20layout=20to=20a=20file"=20.=20gdb-save-window-layout))=0A= +=20=20(define-key=20menu=20[restore-layout-when-finish]=0A+=20=20=20=20= '(menu-item=20"Restore=20layout=20after=20quit"=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20gdb-toggle-restore-window-layout=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20.=20(:button=20(:toggle=20.=20= gdb-restore-window-layout-after-quit)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:help=20"Toggle=20= between=20always=20restore=20the=20window=20layout=20after=20GDB=20quits=20= and=20never=20restore.=0A+You=20can=20also=20change=20this=20setting=20= in=20Customize=20to=20conditionally=20restore.")))=0A=20=20=20= (define-key=20menu=20[gdb]=20'("Gdb"=20.=20gdb-display-gdb-buffer))=0A=20= =20=20(define-key=20menu=20[threads]=20'("Threads"=20.=20= gdb-display-threads-buffer))=0A=20=20=20(define-key=20menu=20[memory]=20= '("Memory"=20.=20gdb-display-memory-buffer))=0A@@=20-4606,41=20+4657,178=20= @@=20gdb-set-window-buffer=0A=20=20=20(set-window-buffer=20window=20= (get-buffer=20name))=0A=20=20=20(set-window-dedicated-p=20window=20t))=0A= =20=0A+(defun=20gdb-toggle-restore-window-layout=20()=0A+=20=20"Toggle=20= whether=20to=20restore=20window=20layout=20when=20GDB=20quit."=0A+=20=20= (interactive)=0A+=20=20(setq=20gdb-restore-window-layout-after-quit=0A+=20= =20=20=20=20=20=20=20(not=20gdb-restore-window-layout-after-quit)))=0A+=0A= +(defun=20gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20= displaying=20source=20file=20or=20nil=20if=20we=20can't=20find=20one.=0A= +=0A+The=20source=20file=20is=20the=20file=20that=20contains=20the=20= code=20at=20where=20GDB=0A+stops.=20=20There=20could=20be=20multiple=20= source=20files=20during=20a=20debugging=0A+session,=20we=20get=20the=20= most=20recently=20showed=20one.=20=20If=20program=20hasn't=0A+start=20= running=20yet,=20the=20source=20file=20is=20the=20\"main=20file\"=20at=20= where=0A+the=20GDB=20session=20starts=20(see=20`gdb-main-file')."=0A+=20=20= (if=20gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-layout-file=0A+=20=20=20=20=20=20= (gdb-load-window-layout=0A+=20=20=20=20=20=20=20(if=20= (file-name-absolute-p=20gdb-default-window-layout-file)=0A+=20=20=20=20=20= =20=20=20=20=20=20gdb-default-window-layout-file=0A+=20=20=20=20=20=20=20= =20=20(expand-file-name=20gdb-default-window-layout-file=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-window-layout-directory)))=0A+=20=20=20=20;;=20Create=20default=20= layout=20as=20before.=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-stack-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-breakpoints-buffer)=0A+=20=20=20=20(set-window-dedicated-p=20= (selected-window)=20nil)=0A+=20=20=20=20(switch-to-buffer=20= gud-comint-buffer)=0A+=20=20=20=20(delete-other-windows)=0A+=20=20=20=20= (let=20((win0=20(selected-window))=0A+=20=20=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20= /=20(window-height)=203)))=0A+=20=20=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20=20=20=20=20= (select-window=20win2)=0A+=20=20=20=20=20=20(set-window-buffer=0A+=20=20=20= =20=20=20=20win2=0A+=20=20=20=20=20=20=20(or=20(gdb-get-source-buffer)=0A= +=20=20=20=20=20=20=20=20=20=20=20(list-buffers-noselect)))=0A+=20=20=20=20= =20=20(setq=20gdb-source-window=20(selected-window))=0A+=20=20=20=20=20=20= (let=20((win4=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=0A+=20=20=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A+=20=20=20=20= =20=20(select-window=20win1)=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A+=20=20=20=20=20=20(let=20((win5=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=20= (if=20gdb-show-threads-by-default=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20GDB-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20GDB=20function=20buffer.=0A+=0A= +Function=20buffers=20are=20locals=20buffer,=20registers=20buffer,=20= etc,=20but=0A+not=20including=20main=20command=20buffer=20(the=20one=20= in=20where=20you=20type=20GDB=0A+commands)=20or=20source=20buffers=20= (that=20displays=20program=20source=20code)."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(derived-mode-p=20= 'gdb-parent-mode=20'gdb-inferior-io-mode)))=0A+=0A+(defun=20= gdb--buffer-type=20(buffer)=0A+=20=20"Return=20the=20type=20of=20BUFFER=20= if=20it=20is=20a=20function=20buffer.=0A+=0A+Buffer=20type=20is=20like=20= `gdb-registers-type',=20`gdb-stack-buffer'.=0A+These=20symbols=20are=20= used=20by=20`gdb-get-buffer-create'.=0A+=0A+Return=20nil=20if=20BUFFER=20= isn't=20a=20GDB=20function=20buffer."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(cl-loop=20for=20rule=20in=20gdb-buffer-rules=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20for=20mode-name=20=3D=20= (gdb-rules-buffer-mode=20rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= for=20type=20=3D=20(car=20rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= if=20(eq=20mode-name=20major-mode)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20return=20type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20finally=20= return=20nil)))=0A+=0A+(defun=20gdb-save-window-layout=20(file)=0A+=20=20= "Save=20current=20window=20layout=20(window=20configuration)=20to=20= FILE.=0A+=0A+You=20can=20later=20restore=20this=20layout=20from=20that=20= file=20by=0A+`gdb-load-window-layout'."=0A+=20=20(interactive=20(list=20= (read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"Save=20window=20configuration=20to=20file:=20"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-window-layout-directory=20default-directory))))=0A+=20=20;;=20We=20= replace=20the=20buffer=20in=20each=20window=20with=20a=20placeholder,=20= store=0A+=20=20;;=20the=20buffer=20type=20(register,=20breakpoint,=20= etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20write=20the=20= window=20configuration=20to=20the=20file.=0A+=20=20= (save-window-excursion=0A+=20=20=20=20(let=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20=20=20=20=20=20=20=20= =20=20(window-persistent-parameters=0A+=20=20=20=20=20=20=20=20=20=20=20= (cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters)))=0A+=20=20=20=20=20=20(unwind-protect=0A+=20= =20=20=20=20=20=20=20=20=20(dolist=20(win=20(window-list=20nil=20= 'no-minibuffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(select-window=20= win)=0A+=20=20=20=20=20=20=20=20=20=20=20=20(when=20(gdb-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-parameter=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cond=20((gdb-function-buffer-p=20(current-buffer))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=201)=20If=20a=20user=20= arranged=20the=20window=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20configuration=20herself=20and=20saves=20it,=20= windows=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20are=20probably=20not=20dedicated.=20=202)=20We=20use=20the=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20same=20= dedication=20flag=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20`gdb-display-buffer'.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(set-window-dedicated-p=20= nil=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20We=20save=20this=20gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20can=20later=20= pass=20it=20to=20`gdb-get-buffer-create';=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20one=20example:=20= `gdb-registers-buffer'.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(or=20(gdb--buffer-type=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (error=20"Unrecognized=20gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Command=20= buffer.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ((derived-mode-p=20'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20((equal=20(selected-window)=20= gdb-source-window)=20'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(set-window-prev-buffers=20(selected-window)=20= nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20=20= =20=20=20;;=20Save=20the=20window=20configuration=20to=20FILE.=0A+=20=20=20= =20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20t)))=0A= +=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20=20=20= =20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-load-window-layout=20(file)=0A+=20=20"Restore=20window=20layout=20= (window=20configuration)=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20= window=20layout=20file=20saved=20by=0A+`gdb-save-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Restore=20window=20configuration=20= from=20file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(or=20gdb-window-layout-directory=20default-directory))))=0A= +=20=20;;=20Basically,=20we=20restore=20window=20configuration=20and=20= go=20through=20each=0A+=20=20;;=20window=20and=20restore=20the=20= function=20buffers.=0A+=20=20(let*=20((placeholder=20(get-buffer-create=20= "=20*gdb-placeholder*")))=0A+=20=20=20=20(unwind-protect=20;=20Don't=20= leak=20buffer.=0A+=20=20=20=20=20=20=20=20(let=20((window-config=20= (with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(insert-file-contents=20file)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20We=20need=20to=20go=20to=20point-min=20even=20we=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20are=20reading=20the=20whole=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read=20= (current-buffer))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (source-buffer=20(if=20gdb-source-window=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (window-buffer=20gdb-source-window)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Do=20the=20= same=20thing=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-setup-windows'=20if=20no=20source=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20buffer=20is=20found.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20(window-state-put=20= window-config=20(frame-root-window))=0A+=20=20=20=20=20=20=20=20=20=20= (dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20buffer-type=20(window-parameter=20nil=20= 'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pcase=20= buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('source=20= (when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20gdb-source-window=20(selected-window))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('command=20= (switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(_=20(let=20((buffer=20(gdb-get-buffer-create=20= buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= buffer))))))))=0A+=20=20=20=20=20=20(kill-buffer=20placeholder))))=0A=20=0A= =20(define-minor-mode=20gdb-many-windows=0A=20=20=20"If=20nil=20just=20= pop=20up=20the=20GUD=20buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20= -4659,6=20+4847,9=20@@=20gdb-many-windows=0A=20(defun=20= gdb-restore-windows=20()=0A=20=20=20"Restore=20the=20basic=20arrangement=20= of=20windows=20used=20by=20gdb.=0A=20This=20arrangement=20depends=20on=20= the=20value=20of=20option=20`gdb-many-windows'."=0A+=20=20;;=20This=20= function=20is=20used=20when=20the=20user=20messed=20up=20window=0A+=20=20= ;;=20configuration=20and=20want=20to=20"reset=20to=20default".=20=20The=20= function=20that=0A+=20=20;;=20sets=20up=20window=20configuration=20on=20= start=20up=20is=20`gdb-get-source-file'.=0A=20=20=20(interactive)=0A=20=20= =20(switch-to-buffer=20gud-comint-buffer)=20;Select=20the=20right=20= window=20and=20frame.=0A=20=20=20(delete-other-windows)=0A@@=20-4705,11=20= +4896,24=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20Recover=20= window=20configuration.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-layout-after-quit=20t)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(and=20(eq=20gdb-restore-window-layout-after-quit=20'if-show-main)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-show-main)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-layout-after-quit=20'if-many-windows)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20=20=20=20= (when=20gdb--window-configuration-before=0A+=20=20=20=20=20=20= (window-state-put=20gdb--window-configuration-before)=0A+=20=20=20=20=20=20= ;;=20This=20way=20we=20don't=20accidentally=20restore=20an=20outdated=20= window=0A+=20=20=20=20=20=20;;=20configuration.=20=20Maybe=20the=20user=20= changed=20the=20configuration=0A+=20=20=20=20=20=20;;=20after=20starting=20= GDB,=20who=20knows.=0A+=20=20=20=20=20=20(setq=20= gdb--window-configuration-before=20nil))))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A=20= buffers,=20if=20required."=0A+=20=20;;=20This=20function=20is=20called=20= only=20once=20on=20startup.=0A=20=20=20(goto-char=20(point-min))=0A=20=20= =20(if=20(re-search-forward=20gdb-source-file-regexp=20nil=20t)=0A=20=20=20= =20=20=20=20(setq=20gdb-main-file=20(read=20(match-string=201))))=0Adiff=20= --git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= bd825c09e1..229400966a=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,19=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-selected-window-undedicated=20(&rest=20body)=0A+=20=20= "Run=20BODY=20in=20the=20selected=20window=20temporarily=20undedicated."=0A= +=20=20(let=20((window-dedicated-sym=20(gensym)))=0A+=20=20=20=20`(let=20= ((,window-dedicated-sym=20(window-dedicated-p)))=0A+=20=20=20=20=20=20=20= (when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20nil))=0A+=20=20=20=20=20=20=20,@body=0A+=20= =20=20=20=20=20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20= =20;;=20`window-dedicated-p'=20returns=20the=20value=20set=20by=0A+=20=20= =20=20=20=20=20=20=20;;=20`set-window-dedicated-p',=20which=20= differentiates=0A+=20=20=20=20=20=20=20=20=20;;=20non-nil=20and=20t,=20= so=20we=20cannot=20simply=20set=20to=20t.=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20,window-dedicated-sym)))))=0A+=0A=20;;=20= The=20following=20two=20functions=20are=20like=20`window-next-sibling'=20= and=0A=20;;=20`window-prev-sibling'=20but=20the=20WINDOW=20argument=20is=20= _not_=20optional=20(so=0A=20;;=20they=20don't=20substitute=20the=20= selected=20window=20for=20nil),=20and=20they=20return=0A--=20=0A2.25.1=0A= =0A= --Apple-Mail=_F1BD9F4B-5F69-4BCC-A2E1-9FD5AE73422B Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_F1BD9F4B-5F69-4BCC-A2E1-9FD5AE73422B-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 07 Mar 2020 19:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158360804825130 (code B ref 39181); Sat, 07 Mar 2020 19:08:01 +0000 Received: (at 39181) by debbugs.gnu.org; 7 Mar 2020 19:07:28 +0000 Received: from localhost ([127.0.0.1]:47560 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jAenI-0006XG-6N for submit@debbugs.gnu.org; Sat, 07 Mar 2020 14:07:28 -0500 Received: from mail-lj1-f194.google.com ([209.85.208.194]:45802) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jAenG-0006X2-0O for 39181@debbugs.gnu.org; Sat, 07 Mar 2020 14:07:27 -0500 Received: by mail-lj1-f194.google.com with SMTP id e18so5771288ljn.12 for <39181@debbugs.gnu.org>; Sat, 07 Mar 2020 11:07:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=n/nG+RPoTTSQT3kqXkwC4y4Xux4R3NuPxSCvcd20/4w=; b=IzqoGWrQZZTWOi+S49wqmScS30d10DI7GdP218QqJ4WQkwjB7uKKDW6l+3aBitapPD 1DIywWYLnhVzdkjOX4Zq/Tt6TxsscsWBfVZWn4YQi5X3durB+Db94dZi/XMmmFfmrBzn FfekIh1wgMQQ3g6yHHZBVAsYnaa6DBV0rHbWeKNS9WmOhI3fT/KtIJgPwYMvKxUhiYm9 U2wPBR2m42y+Hz9W+8HB2kdliHvTK9NSPrlXBkjcjU+tsNEHX3+9bJWn1Ri3yzn4oTB/ WjgnARaqhTDaknGtpwqwNo9cbS+IDecij7RCKIm/Ur2MzQNN9sCqsyBV/q8oqBMoL4HI 3v3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=n/nG+RPoTTSQT3kqXkwC4y4Xux4R3NuPxSCvcd20/4w=; b=isdMezs26jEsMr6xE6AQ7wD+zi0oREEQsEKOD7nzwHRPDIbJcUtQvX8hkBv6mImJz4 3lx2qGWwN+xk1ga/3HpO878SYjRrR52OJ7fgd21Ce31fngTP8JB0ZHE7hI3JtZypHSVS M9xgDDaeLz9T6CJqgRWO7H84CRwLgM27QgMhNVFWc1Bvu9FfFgahb7uJH/XuOC7y23pc BbEB3C6vIUDD/b9Xze4NUCWHnQPW6IVTXB6+RIYVD61lprTty2w7tGMFj8YtGI6b616y FNNPs+17um8N4Y5aLA0hFTgiaHszOFHNLzOyHmgFeyFm5T2ltdizLCQjEeeiQ0KY4CwO iKmQ== X-Gm-Message-State: ANhLgQ3ipfjMi3MeXVcquE+AERymXJhtLh8K7ewTrB4pTZ5yR2VwIw9i C7yoEL9SqzC5Cp9dDbXwD+w= X-Google-Smtp-Source: ADFU+vtPkxfvMczorL3VHgby3eFhchrG5H6xgi4PkovGlkJ3degKjzWgejgeN2iUHYOTQzt9PBQquw== X-Received: by 2002:a2e:a553:: with SMTP id e19mr5406173ljn.64.1583608040057; Sat, 07 Mar 2020 11:07:20 -0800 (PST) Received: from localhost ([185.112.167.59]) by smtp.gmail.com with ESMTPSA id a2sm17822814ljn.50.2020.03.07.11.07.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Mar 2020 11:07:19 -0800 (PST) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> (Yuan Fu's message of "Sat, 7 Mar 2020 13:09:53 -0500") References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Date: Sat, 07 Mar 2020 20:07:37 +0100 Message-ID: <87zhcsyoee.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -1.5 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.5 (--) On Sat, 7 Mar 2020 13:09:53 -0500 Yuan Fu wrote: [...] > diff --git a/lisp/window.el b/lisp/window.el > index bd825c09e1..229400966a 100644 > --- a/lisp/window.el > +++ b/lisp/window.el > @@ -278,6 +278,19 @@ with-displayed-buffer-window > (funcall ,vquit-function ,window ,value) > ,value))))) >=20=20 > +(defmacro with-selected-window-undedicated (&rest body) > + "Run BODY in the selected window temporarily undedicated." > + (let ((window-dedicated-sym (gensym))) > + `(let ((,window-dedicated-sym (window-dedicated-p))) > + (when ,window-dedicated-sym > + (set-window-dedicated-p nil nil)) > + ,@body > + (when ,window-dedicated-sym > + ;; `window-dedicated-p' returns the value set by > + ;; `set-window-dedicated-p', which differentiates > + ;; non-nil and t, so we cannot simply set to t. > + (set-window-dedicated-p nil ,window-dedicated-sym))))) > + > ;; The following two functions are like `window-next-sibling' and > ;; `window-prev-sibling' but the WINDOW argument is _not_ optional (so > ;; they don't substitute the selected window for nil), and they return I'm sorry, I only skimmed through your patch, but shouldn't this use 'unwind-protect'? Otherwise the "temporarily" won't hold in case of abnormal exit from BODY, unless I'm missing something. --=20 =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 07 Mar 2020 19:18:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158360864526055 (code B ref 39181); Sat, 07 Mar 2020 19:18:02 +0000 Received: (at 39181) by debbugs.gnu.org; 7 Mar 2020 19:17:25 +0000 Received: from localhost ([127.0.0.1]:47571 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jAewv-0006mA-G3 for submit@debbugs.gnu.org; Sat, 07 Mar 2020 14:17:25 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:38873) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jAewt-0006lx-Qo for 39181@debbugs.gnu.org; Sat, 07 Mar 2020 14:17:24 -0500 Received: by mail-qt1-f194.google.com with SMTP id e20so4271520qto.5 for <39181@debbugs.gnu.org>; Sat, 07 Mar 2020 11:17:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=JR/9E0hhabcer+SiV0dMT1+0Kai7mZqNkIsABzK8i0Q=; b=m61cZyBp5LO96t9zfskSzXWgAMSSSdLmlEkuUApK35ahuWd86YBxtNLZZVvt8ULExk dddlGM6K7tP8IFqJez1Z7rCmX4Q07jDSr1M5Aus5CnUGUVHU0yeLPRXgC6nLNnNmZcVe YPuTRfyiO/lpq2PtC0qoiMe+NBpQROYpS0+QG5iPPoTDizXaVzOj9l1deKSlAYPCt/fI MqOtWaME67y7K9HMCfrzdLtHmLoZT9jS9BU6WF2a1048G3YMwruoWO/0p6p1aLc4LvHy bYKloRYFg0e5bZ5ZGkbIDQbFSHpuCaSGM8DXEkx+/JG5nIA4fybVIkz6dOtHIG6plKEK UY1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=JR/9E0hhabcer+SiV0dMT1+0Kai7mZqNkIsABzK8i0Q=; b=rFoDT7ZK1YitpElXMT1KcU6Xj+wkolbf4pFfR5eW3MG2FmF5hEJytMspFvetb9nb62 BlGJkR8q+Uz4hSoHWz76YqKEZY8LX2nlMhd21wfp0xSb6KeSlzqn6kaux8d+EuitBVnX k4DciT5JviLKwbeS5DECh8c+dD4DRULnIBcL58XTmLP8GnL4Hg/DfWcZzEweCJcHoxvW wWR7ncG/TxVfvibZR/twpaccgaru6XrrPGy3hxTW5I7raZFMtlq7xRRVeI9Q95fbwp5E 27kxW2cxemlJH71Nw/hnknVlFwntnbfSnqngJKVnTaKL4WxfbxRQzug6pXB0ll7laYht S2OQ== X-Gm-Message-State: ANhLgQ1PpjmN1E59WRqqL7hHe73AHe84wR0VkaRZ9nHOmDPK2pW1sNP+ 5TpFrP/7LTvCGKGMGCJNqgU= X-Google-Smtp-Source: ADFU+vt/Cz9ei5O/LYEWd5tEFTyYJDGQ3b/3FBDD20TKkCPCFDfIbU5qyRkXb3WdAOWlIpvDrzzS+w== X-Received: by 2002:ac8:44c1:: with SMTP id b1mr7702640qto.331.1583608638216; Sat, 07 Mar 2020 11:17:18 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id 184sm2767610qkh.63.2020.03.07.11.17.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Mar 2020 11:17:17 -0800 (PST) From: Yuan Fu Message-Id: <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_26A6C6FE-A765-440C-8ADE-B1F50EEC2D51" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Sat, 7 Mar 2020 14:17:14 -0500 In-Reply-To: <87zhcsyoee.fsf@gmail.com> References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> <87zhcsyoee.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_26A6C6FE-A765-440C-8ADE-B1F50EEC2D51 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 7, 2020, at 2:07 PM, =C5=A0t=C4=9Bp=C3=A1n N=C4=9Bmec = wrote: >=20 > On Sat, 7 Mar 2020 13:09:53 -0500 > Yuan Fu wrote: >=20 > [...] >=20 >> diff --git a/lisp/window.el b/lisp/window.el >> index bd825c09e1..229400966a 100644 >> --- a/lisp/window.el >> +++ b/lisp/window.el >> @@ -278,6 +278,19 @@ with-displayed-buffer-window >> (funcall ,vquit-function ,window ,value) >> ,value))))) >>=20 >> +(defmacro with-selected-window-undedicated (&rest body) >> + "Run BODY in the selected window temporarily undedicated." >> + (let ((window-dedicated-sym (gensym))) >> + `(let ((,window-dedicated-sym (window-dedicated-p))) >> + (when ,window-dedicated-sym >> + (set-window-dedicated-p nil nil)) >> + ,@body >> + (when ,window-dedicated-sym >> + ;; `window-dedicated-p' returns the value set by >> + ;; `set-window-dedicated-p', which differentiates >> + ;; non-nil and t, so we cannot simply set to t. >> + (set-window-dedicated-p nil ,window-dedicated-sym))))) >> + >> ;; The following two functions are like `window-next-sibling' and >> ;; `window-prev-sibling' but the WINDOW argument is _not_ optional = (so >> ;; they don't substitute the selected window for nil), and they = return >=20 > I'm sorry, I only skimmed through your patch, but shouldn't this use > 'unwind-protect'? Otherwise the "temporarily" won't hold in case of > abnormal exit from BODY, unless I'm missing something. >=20 > =E2=80=94=20 > =C5=A0t=C4=9Bp=C3=A1n Thanks for spotting that. I added the unwind-protext form. Yuan --Apple-Mail=_26A6C6FE-A765-440C-8ADE-B1F50EEC2D51 Content-Disposition: attachment; filename=new-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=201c628f05b11de93102fc7972f6c5ecd396e6cebf=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Tue,=20= 3=20Mar=202020=2018:30:03=20-0500=0ASubject:=20[PATCH]=20Add=20window=20= streo/restore=20feature=20for=20gdb-mi=0AMIME-Version:=201.0=0A= Content-Type:=20text/plain;=20charset=3DUTF-8=0A= Content-Transfer-Encoding:=208bit=0A=0AAdd=20a=20feature=20that=20allows=20= a=20user=20to=20save=20a=20gdb=20window=20layout=20to=20a=20file=0Awith=20= 'gdb-save-window-layout'=20and=20load=20it=20back=20it=20with=0A= 'gdb-load-window-layout'.=20=20Set=20a=20default=20window=20= configuration=20by=0Asetting=20'gdb-default-window-layout-file'.=20=20= Note=20that=20for=20the=20default=0Awindow=20configuration=20to=20take=20= effect,=20'gdb-many-windows'=20needs=20to=20be=20t.=0AMake=20gdb=20= preserve=20the=20window=20configuration=20that=20the=20user=20had=20= before=0Astarting=20gdb.=20=20In=20window.el,=20add=20= 'with-selected-window-undedicated'.=0A*=20lisp/progmodes/gdb-mi.el=20= (require):=20add=20'pcase',=20wrap=20'pcase'=20and=20'cl-lib'=0Ainside=20= =E2=80=98eval-when-compile=E2=80=99.=0A= (gdb--window-configuration-before):=20New=20variable.=0A= (gdb-restore-window-layout-after-quit):=20New=20custom=20variable.=0A= (gdb):=20Save=20configuration=20on=20startup.=0A(gdb-reset):=20Restore=20= window=20configuration=20after=20quit.=0A(gdb-window-layout-directory,=20= gdb-default-window-layout-file):=20New=0Avariables.=0A(gud-menu-map):=20= Add=20"Load=20window=20layout"=20and=20"Save=20window=20layout"=20to=0A= menu.=20Add=20"Restore=20window=20layout"=20button=20to=20menu.=0A= (gdb-toggle-restore-window-layout):=20New=20function.=0A= (gdb-get-source-buffer):=20New=20function,=20extracted=20out=20of=0A= 'gdb-restore-window'.=0A(gdb-setup-windows):=20Add=20a=20condition=20= branch=20that=20loads=20default=20window=0Alayout=20when=20available.=0A= (gdb-buffer-p,=20gdb-function-buffer-p,=20gdb--buffer-type,=0A= gdb-save-window-layout,=20gdb-load-window-layout):=20New=20functions.=0A= (gdb-many-windows,=20gdb-get-source-file):=20Add=20comments.=0A*=20= lisp/window.el=20(with-selected-window-undedicated):=20New=20function.=0A= ---=0A=20lisp/progmodes/gdb-mi.el=20|=20272=20= ++++++++++++++++++++++++++++++++++-----=0A=20lisp/window.el=20=20=20=20=20= =20=20=20=20=20=20|=20=2014=20++=0A=202=20files=20changed,=20252=20= insertions(+),=2034=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= da5a2a503a..206d81ec6a=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-92,6=20+92,8=20@@=0A=20(require=20= 'json)=0A=20(require=20'bindat)=0A=20(require=20'cl-lib)=0A+(require=20= 'cl-seq)=0A+(eval-when-compile=20(require=20'pcase))=0A=20=0A=20= (declare-function=20speedbar-change-initial-expansion-list=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A= @@=20-253,6=20+255,25=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20= disposition=20of=20output=20generated=20by=20commands=20that=0A=20=09=20=20= =20=20=20=20=20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20= behalf.")=0A=20=0A+(defvar=20gdb--window-configuration-before=20nil=0A+=20= =20"Stores=20the=20window=20configuration=20before=20starting=20gdb.")=0A= +=0A+(defcustom=20gdb-restore-window-layout-after-quit=20nil=0A+=20=20= "Specify=20whether=20to=20restore=20the=20window=20layout=20the=20user=20= had=20before=20gdb=20starts.=0A+=0A+Possible=20values=20are:=0A+=20=20=20= =20t=20--=20Always=20restore.=0A+=20=20=20=20nil=20--=20Don't=20restore.=0A= +=20=20=20=20'if-show-main=20--=20Restore=20only=20if=20`gdb-show-main'=20= is=20non-nil=0A+=20=20=20=20'if-many-windows=20--=20Restore=20only=20if=20= variable=20`gdb-many-windows'=20is=20non-nil."=0A+=20=20:type=20'(choice=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Always=20restore"=20t)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Don't=20restore"=20nil)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Depends=20on=20= `gdb-show-main'"=20'if-gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20= (const=20:tag=20"Depends=20on=20`gdb-many-windows'"=20= 'if-gdb-many-windows))=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-603,6=20+624,22=20@@=20gdb-show-main=0A=20=20=20= :group=20'gdb=0A=20=20=20:version=20"22.1")=0A=20=0A+(defcustom=20= gdb-window-layout-directory=20user-emacs-directory=0A+=20=20"The=20= default=20directory=20where=20window=20configuration=20files=20are=20= stored.=0A+If=20nil,=20use=20`default-directory'."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A= +(defcustom=20gdb-default-window-layout-file=20nil=0A+=20=20"If=20= non-nil,=20GDB=20loads=20this=20window=20layout=20file=20on=20startup.=0A= +This=20should=20be=20the=20path=20to=20the=20window=20layout=20file.=20=20= If=20the=20path=0A+is=20not=20an=20absolute=20path,=20GDB=20treats=20it=20= as=20a=20relative=20path=20and=0A+looks=20under=20= `gdb-window-layout-directory'."=0A+=20=20:type=20'string=0A+=20=20:group=20= 'gdb=0A+=20=20:version=20"28.1")=0A+=0A=20(defvar=20gdbmi-debug-mode=20= nil=0A=20=20=20"When=20non-nil,=20print=20the=20messages=20sent/received=20= from=20GDB/MI=20in=20*Messages*.")=0A=20=0A@@=20-761,6=20+798,12=20@@=20= gdb=0A=20=20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20= =20=20=20=20"Multiple=20debugging=20requires=20restarting=20in=20text=20= command=20mode"))=0A+=0A+=20=20;;=20Save=20window=20configuration=20= before=20starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20= after=20gdb=20quits.=20Save=20it=20regardless=20of=20the=20value=20of=0A= +=20=20;;=20`gdb-restore-window-layout-after-quit'.=0A+=20=20(setq=20= gdb--window-configuration-before=20(window-state-get))=0A+=0A=20=20=20;;=0A= =20=20=20(gud-common-init=20command-line=20nil=20= 'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4491,6=20+4534,14=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20(define-key=20= gud-menu-map=20[displays]=0A=20=20=20=20=20`(menu-item=20"GDB-Windows"=20= ,menu=0A=20=09=09:visible=20(eq=20gud-minor-mode=20'gdbmi)))=0A+=20=20= (define-key=20menu=20[load-layout]=20'("Load=20layout"=20"Load=20GDB=20= window=20layout=20from=20a=20file"=20.=20gdb-load-window-layout))=0A+=20=20= (define-key=20menu=20[save-layout]=20'("Save=20layout"=20"Save=20current=20= GDB=20window=20layout=20to=20a=20file"=20.=20gdb-save-window-layout))=0A= +=20=20(define-key=20menu=20[restore-layout-when-finish]=0A+=20=20=20=20= '(menu-item=20"Restore=20layout=20after=20quit"=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20gdb-toggle-restore-window-layout=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20.=20(:button=20(:toggle=20.=20= gdb-restore-window-layout-after-quit)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:help=20"Toggle=20= between=20always=20restore=20the=20window=20layout=20after=20GDB=20quits=20= and=20never=20restore.=0A+You=20can=20also=20change=20this=20setting=20= in=20Customize=20to=20conditionally=20restore.")))=0A=20=20=20= (define-key=20menu=20[gdb]=20'("Gdb"=20.=20gdb-display-gdb-buffer))=0A=20= =20=20(define-key=20menu=20[threads]=20'("Threads"=20.=20= gdb-display-threads-buffer))=0A=20=20=20(define-key=20menu=20[memory]=20= '("Memory"=20.=20gdb-display-memory-buffer))=0A@@=20-4606,41=20+4657,178=20= @@=20gdb-set-window-buffer=0A=20=20=20(set-window-buffer=20window=20= (get-buffer=20name))=0A=20=20=20(set-window-dedicated-p=20window=20t))=0A= =20=0A+(defun=20gdb-toggle-restore-window-layout=20()=0A+=20=20"Toggle=20= whether=20to=20restore=20window=20layout=20when=20GDB=20quit."=0A+=20=20= (interactive)=0A+=20=20(setq=20gdb-restore-window-layout-after-quit=0A+=20= =20=20=20=20=20=20=20(not=20gdb-restore-window-layout-after-quit)))=0A+=0A= +(defun=20gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20= displaying=20source=20file=20or=20nil=20if=20we=20can't=20find=20one.=0A= +=0A+The=20source=20file=20is=20the=20file=20that=20contains=20the=20= code=20at=20where=20GDB=0A+stops.=20=20There=20could=20be=20multiple=20= source=20files=20during=20a=20debugging=0A+session,=20we=20get=20the=20= most=20recently=20showed=20one.=20=20If=20program=20hasn't=0A+start=20= running=20yet,=20the=20source=20file=20is=20the=20\"main=20file\"=20at=20= where=0A+the=20GDB=20session=20starts=20(see=20`gdb-main-file')."=0A+=20=20= (if=20gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-layout-file=0A+=20=20=20=20=20=20= (gdb-load-window-layout=0A+=20=20=20=20=20=20=20(if=20= (file-name-absolute-p=20gdb-default-window-layout-file)=0A+=20=20=20=20=20= =20=20=20=20=20=20gdb-default-window-layout-file=0A+=20=20=20=20=20=20=20= =20=20(expand-file-name=20gdb-default-window-layout-file=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-window-layout-directory)))=0A+=20=20=20=20;;=20Create=20default=20= layout=20as=20before.=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-stack-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-breakpoints-buffer)=0A+=20=20=20=20(set-window-dedicated-p=20= (selected-window)=20nil)=0A+=20=20=20=20(switch-to-buffer=20= gud-comint-buffer)=0A+=20=20=20=20(delete-other-windows)=0A+=20=20=20=20= (let=20((win0=20(selected-window))=0A+=20=20=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20= /=20(window-height)=203)))=0A+=20=20=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20=20=20=20=20= (select-window=20win2)=0A+=20=20=20=20=20=20(set-window-buffer=0A+=20=20=20= =20=20=20=20win2=0A+=20=20=20=20=20=20=20(or=20(gdb-get-source-buffer)=0A= +=20=20=20=20=20=20=20=20=20=20=20(list-buffers-noselect)))=0A+=20=20=20=20= =20=20(setq=20gdb-source-window=20(selected-window))=0A+=20=20=20=20=20=20= (let=20((win4=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=0A+=20=20=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A+=20=20=20=20= =20=20(select-window=20win1)=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A+=20=20=20=20=20=20(let=20((win5=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=20= (if=20gdb-show-threads-by-default=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20GDB-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20GDB=20function=20buffer.=0A+=0A= +Function=20buffers=20are=20locals=20buffer,=20registers=20buffer,=20= etc,=20but=0A+not=20including=20main=20command=20buffer=20(the=20one=20= in=20where=20you=20type=20GDB=0A+commands)=20or=20source=20buffers=20= (that=20displays=20program=20source=20code)."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(derived-mode-p=20= 'gdb-parent-mode=20'gdb-inferior-io-mode)))=0A+=0A+(defun=20= gdb--buffer-type=20(buffer)=0A+=20=20"Return=20the=20type=20of=20BUFFER=20= if=20it=20is=20a=20function=20buffer.=0A+=0A+Buffer=20type=20is=20like=20= `gdb-registers-type',=20`gdb-stack-buffer'.=0A+These=20symbols=20are=20= used=20by=20`gdb-get-buffer-create'.=0A+=0A+Return=20nil=20if=20BUFFER=20= isn't=20a=20GDB=20function=20buffer."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(cl-loop=20for=20rule=20in=20gdb-buffer-rules=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20for=20mode-name=20=3D=20= (gdb-rules-buffer-mode=20rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= for=20type=20=3D=20(car=20rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= if=20(eq=20mode-name=20major-mode)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20return=20type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20finally=20= return=20nil)))=0A+=0A+(defun=20gdb-save-window-layout=20(file)=0A+=20=20= "Save=20current=20window=20layout=20(window=20configuration)=20to=20= FILE.=0A+=0A+You=20can=20later=20restore=20this=20layout=20from=20that=20= file=20by=0A+`gdb-load-window-layout'."=0A+=20=20(interactive=20(list=20= (read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"Save=20window=20configuration=20to=20file:=20"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-window-layout-directory=20default-directory))))=0A+=20=20;;=20We=20= replace=20the=20buffer=20in=20each=20window=20with=20a=20placeholder,=20= store=0A+=20=20;;=20the=20buffer=20type=20(register,=20breakpoint,=20= etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20write=20the=20= window=20configuration=20to=20the=20file.=0A+=20=20= (save-window-excursion=0A+=20=20=20=20(let=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20=20=20=20=20=20=20=20= =20=20(window-persistent-parameters=0A+=20=20=20=20=20=20=20=20=20=20=20= (cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters)))=0A+=20=20=20=20=20=20(unwind-protect=0A+=20= =20=20=20=20=20=20=20=20=20(dolist=20(win=20(window-list=20nil=20= 'no-minibuffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(select-window=20= win)=0A+=20=20=20=20=20=20=20=20=20=20=20=20(when=20(gdb-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-parameter=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cond=20((gdb-function-buffer-p=20(current-buffer))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=201)=20If=20a=20user=20= arranged=20the=20window=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20configuration=20herself=20and=20saves=20it,=20= windows=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20are=20probably=20not=20dedicated.=20=202)=20We=20use=20the=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20same=20= dedication=20flag=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20`gdb-display-buffer'.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(set-window-dedicated-p=20= nil=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20We=20save=20this=20gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20can=20later=20= pass=20it=20to=20`gdb-get-buffer-create';=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20one=20example:=20= `gdb-registers-buffer'.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(or=20(gdb--buffer-type=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (error=20"Unrecognized=20gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Command=20= buffer.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ((derived-mode-p=20'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20((equal=20(selected-window)=20= gdb-source-window)=20'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(set-window-prev-buffers=20(selected-window)=20= nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20=20= =20=20=20;;=20Save=20the=20window=20configuration=20to=20FILE.=0A+=20=20=20= =20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20t)))=0A= +=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20=20=20= =20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-load-window-layout=20(file)=0A+=20=20"Restore=20window=20layout=20= (window=20configuration)=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20= window=20layout=20file=20saved=20by=0A+`gdb-save-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Restore=20window=20configuration=20= from=20file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(or=20gdb-window-layout-directory=20default-directory))))=0A= +=20=20;;=20Basically,=20we=20restore=20window=20configuration=20and=20= go=20through=20each=0A+=20=20;;=20window=20and=20restore=20the=20= function=20buffers.=0A+=20=20(let*=20((placeholder=20(get-buffer-create=20= "=20*gdb-placeholder*")))=0A+=20=20=20=20(unwind-protect=20;=20Don't=20= leak=20buffer.=0A+=20=20=20=20=20=20=20=20(let=20((window-config=20= (with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(insert-file-contents=20file)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20We=20need=20to=20go=20to=20point-min=20even=20we=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20are=20reading=20the=20whole=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read=20= (current-buffer))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (source-buffer=20(if=20gdb-source-window=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (window-buffer=20gdb-source-window)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Do=20the=20= same=20thing=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-setup-windows'=20if=20no=20source=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20buffer=20is=20found.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20(window-state-put=20= window-config=20(frame-root-window))=0A+=20=20=20=20=20=20=20=20=20=20= (dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20buffer-type=20(window-parameter=20nil=20= 'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pcase=20= buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('source=20= (when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20gdb-source-window=20(selected-window))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('command=20= (switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(_=20(let=20((buffer=20(gdb-get-buffer-create=20= buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= buffer))))))))=0A+=20=20=20=20=20=20(kill-buffer=20placeholder))))=0A=20=0A= =20(define-minor-mode=20gdb-many-windows=0A=20=20=20"If=20nil=20just=20= pop=20up=20the=20GUD=20buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20= -4659,6=20+4847,9=20@@=20gdb-many-windows=0A=20(defun=20= gdb-restore-windows=20()=0A=20=20=20"Restore=20the=20basic=20arrangement=20= of=20windows=20used=20by=20gdb.=0A=20This=20arrangement=20depends=20on=20= the=20value=20of=20option=20`gdb-many-windows'."=0A+=20=20;;=20This=20= function=20is=20used=20when=20the=20user=20messed=20up=20window=0A+=20=20= ;;=20configuration=20and=20want=20to=20"reset=20to=20default".=20=20The=20= function=20that=0A+=20=20;;=20sets=20up=20window=20configuration=20on=20= start=20up=20is=20`gdb-get-source-file'.=0A=20=20=20(interactive)=0A=20=20= =20(switch-to-buffer=20gud-comint-buffer)=20;Select=20the=20right=20= window=20and=20frame.=0A=20=20=20(delete-other-windows)=0A@@=20-4705,11=20= +4896,24=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20Recover=20= window=20configuration.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-layout-after-quit=20t)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(and=20(eq=20gdb-restore-window-layout-after-quit=20'if-show-main)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-show-main)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-layout-after-quit=20'if-many-windows)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20=20=20=20= (when=20gdb--window-configuration-before=0A+=20=20=20=20=20=20= (window-state-put=20gdb--window-configuration-before)=0A+=20=20=20=20=20=20= ;;=20This=20way=20we=20don't=20accidentally=20restore=20an=20outdated=20= window=0A+=20=20=20=20=20=20;;=20configuration.=20=20Maybe=20the=20user=20= changed=20the=20configuration=0A+=20=20=20=20=20=20;;=20after=20starting=20= GDB,=20who=20knows.=0A+=20=20=20=20=20=20(setq=20= gdb--window-configuration-before=20nil))))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A=20= buffers,=20if=20required."=0A+=20=20;;=20This=20function=20is=20called=20= only=20once=20on=20startup.=0A=20=20=20(goto-char=20(point-min))=0A=20=20= =20(if=20(re-search-forward=20gdb-source-file-regexp=20nil=20t)=0A=20=20=20= =20=20=20=20(setq=20gdb-main-file=20(read=20(match-string=201))))=0Adiff=20= --git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= bd825c09e1..9ddde7d1c1=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,20=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-selected-window-undedicated=20(&rest=20body)=0A+=20=20= "Run=20BODY=20in=20the=20selected=20window=20temporarily=20undedicated."=0A= +=20=20(let=20((window-dedicated-sym=20(gensym)))=0A+=20=20=20=20`(let=20= ((,window-dedicated-sym=20(window-dedicated-p)))=0A+=20=20=20=20=20=20=20= (when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20nil))=0A+=20=20=20=20=20=20=20= (unwind-protect=0A+=20=20=20=20=20=20=20=20=20=20=20(progn=20,@body)=0A+=20= =20=20=20=20=20=20=20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20= =20=20=20=20=20;;=20`window-dedicated-p'=20returns=20the=20value=20set=20= by=0A+=20=20=20=20=20=20=20=20=20=20=20;;=20`set-window-dedicated-p',=20= which=20differentiates=0A+=20=20=20=20=20=20=20=20=20=20=20;;=20non-nil=20= and=20t,=20so=20we=20cannot=20simply=20set=20to=20t.=0A+=20=20=20=20=20=20= =20=20=20=20=20(set-window-dedicated-p=20nil=20= ,window-dedicated-sym))))))=0A+=0A=20;;=20The=20following=20two=20= functions=20are=20like=20`window-next-sibling'=20and=0A=20;;=20= `window-prev-sibling'=20but=20the=20WINDOW=20argument=20is=20_not_=20= optional=20(so=0A=20;;=20they=20don't=20substitute=20the=20selected=20= window=20for=20nil),=20and=20they=20return=0A--=20=0A2.25.1=0A=0A= --Apple-Mail=_26A6C6FE-A765-440C-8ADE-B1F50EEC2D51 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_26A6C6FE-A765-440C-8ADE-B1F50EEC2D51-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 09 Mar 2020 09:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu , =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158374452429717 (code B ref 39181); Mon, 09 Mar 2020 09:03:01 +0000 Received: (at 39181) by debbugs.gnu.org; 9 Mar 2020 09:02:04 +0000 Received: from localhost ([127.0.0.1]:49761 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBEIW-0007jF-F6 for submit@debbugs.gnu.org; Mon, 09 Mar 2020 05:02:04 -0400 Received: from mout.gmx.net ([212.227.15.15]:47241) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBEIU-0007id-0h for 39181@debbugs.gnu.org; Mon, 09 Mar 2020 05:02:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1583744514; bh=sjG7xyjm1AZgcbdTbvoxc7QXj4SGJTaBKlrmKFXLKMQ=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=diDtA7vmdoX/b8rlHfdRyNn5gE4FvTGurqWKv8t5mpk1aH9Ksqh7uBn+lhC5iPZsY dmYDV0WnxcyHnTmP9n/bR+a1+w5SrPxPKLLdkEn1rjM7cQBB3cJMcT0oeWBH9F0wfi DBFd93gqvY/5aqLli8NeKIxVJ4Sa5y6ICDAYkCeU= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.251]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MeU0k-1jjSeU2bbA-00aYfS; Mon, 09 Mar 2020 10:01:54 +0100 References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> <87zhcsyoee.fsf@gmail.com> <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> From: martin rudalics Message-ID: <2bc5d577-eded-c79c-5b05-c815ed8ac212@gmx.at> Date: Mon, 9 Mar 2020 10:01:53 +0100 MIME-Version: 1.0 In-Reply-To: <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:KO8ktzWxWRhK4QA4V5Mme3X2mUIhJYtwnrBgOY0mWmzrG4SgyVd gSb3FqJUYDJrZiQKoRx6dZOCzKz5BpbZDKHtmW1QpbkGiVpxdCJbW171oJYDznHQOAwYbsv pXjVfdF8r/s93/rMsNbEF599ye7bx72K/RP/hGBQL4cGRwCDZIb+Fh5gI7oS2V7TjMJA8K6 HpfmqdG3x6jB0A8gizbsg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:FukM3ndeapk=:LWBQhRpza1PQHq3Hm3k7ah 81FQCpsGpGaIQdGA2xTdNzF7Qwq/0naduN8Tl8k5G6bWTjMvo4kkVDl5qYwN49RPrqxAMBIYr G8/2uv0izladbstkLJi08DrA15l+N9Lhjry8HOUl8jQaxFU5XToKPqjfyYPeuWbLmEpUulwcF gELf2NZeu71Dj77kDH00KoUzQas4UguOtMk1CAwjYnXcnDBz/PqOyUz4W+wpL+1fXxyT7oI2C M06gKwB2/s4AlV9V6Y0BPk0hJxnSwwohbFZyu17jOiKLOaImglIrbgEBtIJ8ay57GDhK4JPBO CBEbkBVXZeXO/61MFOAsKXxKrqKvaqFLg41Uvrx+PAfLM/Rc/y8WKK6dZW89+FrESiwPwK78E 1pRcShFqQLb4Vm9fQaT7siHeAxPEyHy9oMcFAqoNFCijvhhJ8+SOar4Zcmj5J/xVQyrNnCsiZ TtesQZDRVroBr71d1Y41Y7JXCE3Ng+bGAO6/P7Tnh/85hL/roife1jXq0UfdKvcj4kM/yg9AM QUZKPBPpY8kCudaeHg74uX2RwwgKToy834qIMTRoH5EPz4/7GrUbAYm8cYXMVa4wXLnHsuYYq l5z6ermzAaBVLb6plfKErWJUkV5Vdfat7VRjQuOePDGKy41xWmjtR9yaLXdRnC/OOcoFk92zu Fwz7IZ+ZpKgcNAMJYcOYLy7rs7inou57/ez05KSy7nygsJFOcwklFDnMROUygPIq5oA0Pm+1Y HfX0IJfeSojUC9PCKJuJ54xtcvcDMi0l6p0lzL0wfrpGCMydwVkHByLJKV0/IgTtT17tDVwcn n4d3xMyPxsSNzqi5xXLjLhWQ3r/o/2Sm+HlcctxNLzu515KopQW21jEAaTMjXF0+HqdeAJTsE k25kMTwzH4Qn7agPTgBqZZQaz7mLlreck7kwTtn/MrVHVQkIXitbZhEFCSuTQD89EYhSQQEom 9D9k6e5WdPXd0aUo7eaTu74fIU26YWf0cEEW5iC4o0pKtwEyLv8RkR2TRW2bUajnR6eKu6730 v1/v8aj42yNyk00dX8hUmLISBiLuxpPbPX405MsD9xf4u/csSka2VGslurIrHNK0EHWbNljuS gEVtYWzbIUmyULUYa6HPHK8VDLn7d1rkHQDbat5JsztcO17bohm4WfUCF/cir5SoM1RxkpK/p UCkdfrdPnSs3yYF0zds58se01P4sYBdgW7u8NlA/x4ulmCY7jUasToy7AAW10lvwTixSp/Him d8Ow2SOBm4mZcun5z X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) >> I'm sorry, I only skimmed through your patch, but shouldn't this use >> 'unwind-protect'? Otherwise the "temporarily" won't hold in case of >> abnormal exit from BODY, unless I'm missing something. >> >> =E2=80=94 >> =C5=A0t=C4=9Bp=C3=A1n > > Thanks for spotting that. I added the unwind-protext form. If we want to be more strict about this macro then how about the following forms: (with-selected-window-undedicated (set-window-dedicated-p nil t)) will leave the selected window dedicated which does not really violate the contract of the macro but is unexpected at least. The following is more serious: Suppose a user has a >=3D 2 windows layout= and does (set-window-dedicated-p nil t) (with-selected-window-undedicated (other-window 1)) which will have the macro make some other window dedicated and the initially selected window undedicated. A similar thing happens with (set-window-dedicated-p nil t) (with-selected-window-undedicated (delete-window)) The macro should be named 'with-window-undedicated', take a WINDOW (nil for the selected one) as first argument and BODY as second. It should restore the dedicated status of WINDOW to what it was before running BODY and leave the dedicated status of all other windows alone. IMHO. martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 09 Mar 2020 18:00:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158377678215066 (code B ref 39181); Mon, 09 Mar 2020 18:00:01 +0000 Received: (at 39181) by debbugs.gnu.org; 9 Mar 2020 17:59:42 +0000 Received: from localhost ([127.0.0.1]:51438 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBMgn-0003uu-Uy for submit@debbugs.gnu.org; Mon, 09 Mar 2020 13:59:42 -0400 Received: from mail-qt1-f172.google.com ([209.85.160.172]:38969) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBMgl-0003ui-Ei for 39181@debbugs.gnu.org; Mon, 09 Mar 2020 13:59:40 -0400 Received: by mail-qt1-f172.google.com with SMTP id e13so7694217qts.6 for <39181@debbugs.gnu.org>; Mon, 09 Mar 2020 10:59:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=1yV38+c91XdSSF7uIep+6o/fSqPWLlWPOVcmwbu6aR8=; b=AXp1O/8VhYYDGaJGVZDGcY91eq1njm/Lxo26JdvDQF6/uN7m3TLp7cddxlKnlWyWxZ n6sWsuyT2GFi8lnkFfOdZSbaHF+hmjSRuv/sPSi+5KR09gN7tk7a45B6lUgBUfVlSOtR IXBM6Jps4UFpZSnlNnXS1KqvALdKYS7fRDbRgWoWB4zwm28HZJ43bnDa1R0m1mB/i+RC DQ7iZxekKDl/Zj67jfz0DUelxxZqb3pJhHGfeujrZmga7V1nkSYvkZY6iFhZmdmb81LA HHgilVjlbkfgsHPd0Vv2DTLjt96FMQientAiYzgxP4B43V/hlugt4Qrfj/u0Zqno+4PC svBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=1yV38+c91XdSSF7uIep+6o/fSqPWLlWPOVcmwbu6aR8=; b=Fy1vbqjHlWfIFgywsL/Y87cc/tLLRIjzCnTTZIQ2Z8TwNQJ5zXeUF3RLZWJDyaYIsN Y9n/tPO158hgSkK1x+GftWyKFA2+c2RfLaBGBAY3f1jb1AceTWZ1rKii4TiYOlGwESkw 8MHTTeXz+Ykb+QXxnCu0mHxiE6AhPCEd8nbKG6StA4hozOB+IUwbk6xeRr6hDGMh9fyb auCRBHBNVUlmuLiGzb+M5XWiTbp+NOP+u/Pk+2YCXPR+/Fw1BmD7L8HR6noBtJZo/QEV Px6QXWF5TziU58gnfs2+/LNWAdVJW3GqNb2mY8gm5TfvuXNwYFiBUStN9vi8W2GLDWF3 XBDw== X-Gm-Message-State: ANhLgQ1INhVPteu36fP70J0QZpHRBQl6Ir4Hu2SjMsDerxOetEhT+M5w E4pb9IlkY4sM5OYvDZD8MUw= X-Google-Smtp-Source: ADFU+vsAGRNIo4ghB69ipSN9ubnrbHd3hBgnznCc6hiUh7FhiI+w4sCBycwEHQvHKs388s4tzj+RJQ== X-Received: by 2002:ac8:7b8e:: with SMTP id p14mr15358599qtu.352.1583776773766; Mon, 09 Mar 2020 10:59:33 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id w1sm7399239qkc.117.2020.03.09.10.59.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 09 Mar 2020 10:59:33 -0700 (PDT) From: Yuan Fu Message-Id: Content-Type: multipart/mixed; boundary="Apple-Mail=_C82B3142-CCD7-4D39-A092-FCE768CB93DD" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Mon, 9 Mar 2020 13:59:31 -0400 In-Reply-To: <2bc5d577-eded-c79c-5b05-c815ed8ac212@gmx.at> References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> <87zhcsyoee.fsf@gmail.com> <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> <2bc5d577-eded-c79c-5b05-c815ed8ac212@gmx.at> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_C82B3142-CCD7-4D39-A092-FCE768CB93DD Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 9, 2020, at 5:01 AM, martin rudalics wrote: >=20 > >> I'm sorry, I only skimmed through your patch, but shouldn't this = use > >> 'unwind-protect'? Otherwise the "temporarily" won't hold in case of > >> abnormal exit from BODY, unless I'm missing something. > >> > >> =E2=80=94 > >> =C5=A0t=C4=9Bp=C3=A1n > > > > Thanks for spotting that. I added the unwind-protext form. >=20 > If we want to be more strict about this macro then how about the > following forms: >=20 > (with-selected-window-undedicated > (set-window-dedicated-p nil t)) >=20 > will leave the selected window dedicated which does not really violate > the contract of the macro but is unexpected at least. >=20 > The following is more serious: Suppose a user has a >=3D 2 windows = layout > and does >=20 > (set-window-dedicated-p nil t) > (with-selected-window-undedicated > (other-window 1)) >=20 > which will have the macro make some other window dedicated and the > initially selected window undedicated. A similar thing happens with >=20 > (set-window-dedicated-p nil t) > (with-selected-window-undedicated > (delete-window)) >=20 > The macro should be named 'with-window-undedicated', take a WINDOW = (nil > for the selected one) as first argument and BODY as second. It should > restore the dedicated status of WINDOW to what it was before running > BODY and leave the dedicated status of all other windows alone. IMHO. >=20 > Martin >=20 I updated the patch accordingly. Could you have a look at the docsting? = I had a hard time writing it. Yuan --Apple-Mail=_C82B3142-CCD7-4D39-A092-FCE768CB93DD Content-Disposition: attachment; filename=new-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=20c27f39a3e321a7a1111f71dd95573104f025c89c=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Tue,=20= 3=20Mar=202020=2018:30:03=20-0500=0ASubject:=20[PATCH]=20Add=20window=20= streo/restore=20feature=20for=20gdb-mi=0AMIME-Version:=201.0=0A= Content-Type:=20text/plain;=20charset=3DUTF-8=0A= Content-Transfer-Encoding:=208bit=0A=0AAdd=20a=20feature=20that=20allows=20= a=20user=20to=20save=20a=20gdb=20window=20layout=20to=20a=20file=0Awith=20= 'gdb-save-window-layout'=20and=20load=20it=20back=20it=20with=0A= 'gdb-load-window-layout'.=20=20Set=20a=20default=20window=20= configuration=20by=0Asetting=20'gdb-default-window-layout-file'.=20=20= Note=20that=20for=20the=20default=0Awindow=20configuration=20to=20take=20= effect,=20'gdb-many-windows'=20needs=20to=20be=20t.=0AMake=20gdb=20= preserve=20the=20window=20configuration=20that=20the=20user=20had=20= before=0Astarting=20gdb.=20=20In=20window.el,=20add=20= 'with-selected-window-undedicated'.=0A*=20lisp/progmodes/gdb-mi.el=20= (require):=20add=20'pcase',=20wrap=20'pcase'=20and=20'cl-lib'=0Ainside=20= =E2=80=98eval-when-compile=E2=80=99.=0A= (gdb--window-configuration-before):=20New=20variable.=0A= (gdb-restore-window-layout-after-quit):=20New=20custom=20variable.=0A= (gdb):=20Save=20configuration=20on=20startup.=0A(gdb-reset):=20Restore=20= window=20configuration=20after=20quit.=0A(gdb-window-layout-directory,=20= gdb-default-window-layout-file):=20New=0Avariables.=0A(gud-menu-map):=20= Add=20"Load=20window=20layout"=20and=20"Save=20window=20layout"=20to=0A= menu.=20Add=20"Restore=20window=20layout"=20button=20to=20menu.=0A= (gdb-toggle-restore-window-layout):=20New=20function.=0A= (gdb-get-source-buffer):=20New=20function,=20extracted=20out=20of=0A= 'gdb-restore-window'.=0A(gdb-setup-windows):=20Add=20a=20condition=20= branch=20that=20loads=20default=20window=0Alayout=20when=20available.=0A= (gdb-buffer-p,=20gdb-function-buffer-p,=20gdb--buffer-type,=0A= gdb-save-window-layout,=20gdb-load-window-layout):=20New=20functions.=0A= (gdb-many-windows,=20gdb-get-source-file):=20Add=20comments.=0A*=20= lisp/window.el=20(with-window-undedicated):=20New=20function.=0A---=0A=20= lisp/progmodes/gdb-mi.el=20|=20272=20= ++++++++++++++++++++++++++++++++++-----=0A=20lisp/window.el=20=20=20=20=20= =20=20=20=20=20=20|=20=2029=20+++++=0A=202=20files=20changed,=20267=20= insertions(+),=2034=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= da5a2a503a..dd0ec304a3=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-92,6=20+92,8=20@@=0A=20(require=20= 'json)=0A=20(require=20'bindat)=0A=20(require=20'cl-lib)=0A+(require=20= 'cl-seq)=0A+(eval-when-compile=20(require=20'pcase))=0A=20=0A=20= (declare-function=20speedbar-change-initial-expansion-list=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A= @@=20-253,6=20+255,25=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20= disposition=20of=20output=20generated=20by=20commands=20that=0A=20=09=20=20= =20=20=20=20=20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20= behalf.")=0A=20=0A+(defvar=20gdb--window-configuration-before=20nil=0A+=20= =20"Stores=20the=20window=20configuration=20before=20starting=20gdb.")=0A= +=0A+(defcustom=20gdb-restore-window-layout-after-quit=20nil=0A+=20=20= "Specify=20whether=20to=20restore=20the=20window=20layout=20the=20user=20= had=20before=20gdb=20starts.=0A+=0A+Possible=20values=20are:=0A+=20=20=20= =20t=20--=20Always=20restore.=0A+=20=20=20=20nil=20--=20Don't=20restore.=0A= +=20=20=20=20'if-show-main=20--=20Restore=20only=20if=20`gdb-show-main'=20= is=20non-nil=0A+=20=20=20=20'if-many-windows=20--=20Restore=20only=20if=20= variable=20`gdb-many-windows'=20is=20non-nil."=0A+=20=20:type=20'(choice=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Always=20restore"=20t)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Don't=20restore"=20nil)=0A= +=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Depends=20on=20= `gdb-show-main'"=20'if-gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20= (const=20:tag=20"Depends=20on=20`gdb-many-windows'"=20= 'if-gdb-many-windows))=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-603,6=20+624,22=20@@=20gdb-show-main=0A=20=20=20= :group=20'gdb=0A=20=20=20:version=20"22.1")=0A=20=0A+(defcustom=20= gdb-window-layout-directory=20user-emacs-directory=0A+=20=20"The=20= default=20directory=20where=20window=20configuration=20files=20are=20= stored.=0A+If=20nil,=20use=20`default-directory'."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A= +(defcustom=20gdb-default-window-layout-file=20nil=0A+=20=20"If=20= non-nil,=20GDB=20loads=20this=20window=20layout=20file=20on=20startup.=0A= +This=20should=20be=20the=20path=20to=20the=20window=20layout=20file.=20=20= If=20the=20path=0A+is=20not=20an=20absolute=20path,=20GDB=20treats=20it=20= as=20a=20relative=20path=20and=0A+looks=20under=20= `gdb-window-layout-directory'."=0A+=20=20:type=20'string=0A+=20=20:group=20= 'gdb=0A+=20=20:version=20"28.1")=0A+=0A=20(defvar=20gdbmi-debug-mode=20= nil=0A=20=20=20"When=20non-nil,=20print=20the=20messages=20sent/received=20= from=20GDB/MI=20in=20*Messages*.")=0A=20=0A@@=20-761,6=20+798,12=20@@=20= gdb=0A=20=20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20= =20=20=20=20"Multiple=20debugging=20requires=20restarting=20in=20text=20= command=20mode"))=0A+=0A+=20=20;;=20Save=20window=20configuration=20= before=20starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20= after=20gdb=20quits.=20Save=20it=20regardless=20of=20the=20value=20of=0A= +=20=20;;=20`gdb-restore-window-layout-after-quit'.=0A+=20=20(setq=20= gdb--window-configuration-before=20(window-state-get))=0A+=0A=20=20=20;;=0A= =20=20=20(gud-common-init=20command-line=20nil=20= 'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4491,6=20+4534,14=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20(define-key=20= gud-menu-map=20[displays]=0A=20=20=20=20=20`(menu-item=20"GDB-Windows"=20= ,menu=0A=20=09=09:visible=20(eq=20gud-minor-mode=20'gdbmi)))=0A+=20=20= (define-key=20menu=20[load-layout]=20'("Load=20layout"=20"Load=20GDB=20= window=20layout=20from=20a=20file"=20.=20gdb-load-window-layout))=0A+=20=20= (define-key=20menu=20[save-layout]=20'("Save=20layout"=20"Save=20current=20= GDB=20window=20layout=20to=20a=20file"=20.=20gdb-save-window-layout))=0A= +=20=20(define-key=20menu=20[restore-layout-when-finish]=0A+=20=20=20=20= '(menu-item=20"Restore=20layout=20after=20quit"=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20gdb-toggle-restore-window-layout=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20.=20(:button=20(:toggle=20.=20= gdb-restore-window-layout-after-quit)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:help=20"Toggle=20= between=20always=20restore=20the=20window=20layout=20after=20GDB=20quits=20= and=20never=20restore.=0A+You=20can=20also=20change=20this=20setting=20= in=20Customize=20to=20conditionally=20restore.")))=0A=20=20=20= (define-key=20menu=20[gdb]=20'("Gdb"=20.=20gdb-display-gdb-buffer))=0A=20= =20=20(define-key=20menu=20[threads]=20'("Threads"=20.=20= gdb-display-threads-buffer))=0A=20=20=20(define-key=20menu=20[memory]=20= '("Memory"=20.=20gdb-display-memory-buffer))=0A@@=20-4606,41=20+4657,178=20= @@=20gdb-set-window-buffer=0A=20=20=20(set-window-buffer=20window=20= (get-buffer=20name))=0A=20=20=20(set-window-dedicated-p=20window=20t))=0A= =20=0A+(defun=20gdb-toggle-restore-window-layout=20()=0A+=20=20"Toggle=20= whether=20to=20restore=20window=20layout=20when=20GDB=20quit."=0A+=20=20= (interactive)=0A+=20=20(setq=20gdb-restore-window-layout-after-quit=0A+=20= =20=20=20=20=20=20=20(not=20gdb-restore-window-layout-after-quit)))=0A+=0A= +(defun=20gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20= displaying=20source=20file=20or=20nil=20if=20we=20can't=20find=20one.=0A= +=0A+The=20source=20file=20is=20the=20file=20that=20contains=20the=20= code=20at=20where=20GDB=0A+stops.=20=20There=20could=20be=20multiple=20= source=20files=20during=20a=20debugging=0A+session,=20we=20get=20the=20= most=20recently=20showed=20one.=20=20If=20program=20hasn't=0A+start=20= running=20yet,=20the=20source=20file=20is=20the=20\"main=20file\"=20at=20= where=0A+the=20GDB=20session=20starts=20(see=20`gdb-main-file')."=0A+=20=20= (if=20gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-layout-file=0A+=20=20=20=20=20=20= (gdb-load-window-layout=0A+=20=20=20=20=20=20=20(if=20= (file-name-absolute-p=20gdb-default-window-layout-file)=0A+=20=20=20=20=20= =20=20=20=20=20=20gdb-default-window-layout-file=0A+=20=20=20=20=20=20=20= =20=20(expand-file-name=20gdb-default-window-layout-file=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-window-layout-directory)))=0A+=20=20=20=20;;=20Create=20default=20= layout=20as=20before.=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-stack-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-breakpoints-buffer)=0A+=20=20=20=20(set-window-dedicated-p=20= (selected-window)=20nil)=0A+=20=20=20=20(switch-to-buffer=20= gud-comint-buffer)=0A+=20=20=20=20(delete-other-windows)=0A+=20=20=20=20= (let=20((win0=20(selected-window))=0A+=20=20=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20= /=20(window-height)=203)))=0A+=20=20=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20=20=20=20=20= (select-window=20win2)=0A+=20=20=20=20=20=20(set-window-buffer=0A+=20=20=20= =20=20=20=20win2=0A+=20=20=20=20=20=20=20(or=20(gdb-get-source-buffer)=0A= +=20=20=20=20=20=20=20=20=20=20=20(list-buffers-noselect)))=0A+=20=20=20=20= =20=20(setq=20gdb-source-window=20(selected-window))=0A+=20=20=20=20=20=20= (let=20((win4=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=0A+=20=20=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A+=20=20=20=20= =20=20(select-window=20win1)=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A+=20=20=20=20=20=20(let=20((win5=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=20= (if=20gdb-show-threads-by-default=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20GDB-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20GDB=20function=20buffer.=0A+=0A= +Function=20buffers=20are=20locals=20buffer,=20registers=20buffer,=20= etc,=20but=0A+not=20including=20main=20command=20buffer=20(the=20one=20= in=20where=20you=20type=20GDB=0A+commands)=20or=20source=20buffers=20= (that=20displays=20program=20source=20code)."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(derived-mode-p=20= 'gdb-parent-mode=20'gdb-inferior-io-mode)))=0A+=0A+(defun=20= gdb--buffer-type=20(buffer)=0A+=20=20"Return=20the=20type=20of=20BUFFER=20= if=20it=20is=20a=20function=20buffer.=0A+=0A+Buffer=20type=20is=20like=20= `gdb-registers-type',=20`gdb-stack-buffer'.=0A+These=20symbols=20are=20= used=20by=20`gdb-get-buffer-create'.=0A+=0A+Return=20nil=20if=20BUFFER=20= isn't=20a=20GDB=20function=20buffer."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(cl-loop=20for=20rule=20in=20gdb-buffer-rules=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20for=20mode-name=20=3D=20= (gdb-rules-buffer-mode=20rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= for=20type=20=3D=20(car=20rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= if=20(eq=20mode-name=20major-mode)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20return=20type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20finally=20= return=20nil)))=0A+=0A+(defun=20gdb-save-window-layout=20(file)=0A+=20=20= "Save=20current=20window=20layout=20(window=20configuration)=20to=20= FILE.=0A+=0A+You=20can=20later=20restore=20this=20layout=20from=20that=20= file=20by=0A+`gdb-load-window-layout'."=0A+=20=20(interactive=20(list=20= (read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"Save=20window=20configuration=20to=20file:=20"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-window-layout-directory=20default-directory))))=0A+=20=20;;=20We=20= replace=20the=20buffer=20in=20each=20window=20with=20a=20placeholder,=20= store=0A+=20=20;;=20the=20buffer=20type=20(register,=20breakpoint,=20= etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20write=20the=20= window=20configuration=20to=20the=20file.=0A+=20=20= (save-window-excursion=0A+=20=20=20=20(let=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20=20=20=20=20=20=20=20= =20=20(window-persistent-parameters=0A+=20=20=20=20=20=20=20=20=20=20=20= (cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters)))=0A+=20=20=20=20=20=20(unwind-protect=0A+=20= =20=20=20=20=20=20=20=20=20(dolist=20(win=20(window-list=20nil=20= 'no-minibuffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(select-window=20= win)=0A+=20=20=20=20=20=20=20=20=20=20=20=20(when=20(gdb-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-parameter=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cond=20((gdb-function-buffer-p=20(current-buffer))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=201)=20If=20a=20user=20= arranged=20the=20window=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20configuration=20herself=20and=20saves=20it,=20= windows=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20are=20probably=20not=20dedicated.=20=202)=20We=20use=20the=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20same=20= dedication=20flag=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20`gdb-display-buffer'.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(set-window-dedicated-p=20= nil=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20We=20save=20this=20gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20can=20later=20= pass=20it=20to=20`gdb-get-buffer-create';=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20one=20example:=20= `gdb-registers-buffer'.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(or=20(gdb--buffer-type=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (error=20"Unrecognized=20gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Command=20= buffer.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ((derived-mode-p=20'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20((equal=20(selected-window)=20= gdb-source-window)=20'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(with-window-undedicated=20nil=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(set-window-prev-buffers=20= (selected-window)=20nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20= =20=20=20=20;;=20Save=20the=20window=20configuration=20to=20FILE.=0A+=20=20= =20=20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20= t)))=0A+=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20= =20=20=20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-load-window-layout=20(file)=0A+=20=20"Restore=20window=20layout=20= (window=20configuration)=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20= window=20layout=20file=20saved=20by=0A+`gdb-save-window-layout'."=0A+=20=20= (interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"Restore=20window=20configuration=20= from=20file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(or=20gdb-window-layout-directory=20default-directory))))=0A= +=20=20;;=20Basically,=20we=20restore=20window=20configuration=20and=20= go=20through=20each=0A+=20=20;;=20window=20and=20restore=20the=20= function=20buffers.=0A+=20=20(let*=20((placeholder=20(get-buffer-create=20= "=20*gdb-placeholder*")))=0A+=20=20=20=20(unwind-protect=20;=20Don't=20= leak=20buffer.=0A+=20=20=20=20=20=20=20=20(let=20((window-config=20= (with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(insert-file-contents=20file)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20We=20need=20to=20go=20to=20point-min=20even=20we=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20are=20reading=20the=20whole=20buffer.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read=20= (current-buffer))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (source-buffer=20(if=20gdb-source-window=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (window-buffer=20gdb-source-window)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Do=20the=20= same=20thing=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-setup-windows'=20if=20no=20source=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20buffer=20is=20found.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20(window-state-put=20= window-config=20(frame-root-window))=0A+=20=20=20=20=20=20=20=20=20=20= (dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20buffer-type=20(window-parameter=20nil=20= 'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pcase=20= buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('source=20= (when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20gdb-source-window=20(selected-window))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('command=20= (switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(_=20(let=20((buffer=20(gdb-get-buffer-create=20= buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(with-window-undedicated=20nil=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= buffer))))))))=0A+=20=20=20=20=20=20(kill-buffer=20placeholder))))=0A=20=0A= =20(define-minor-mode=20gdb-many-windows=0A=20=20=20"If=20nil=20just=20= pop=20up=20the=20GUD=20buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20= -4659,6=20+4847,9=20@@=20gdb-many-windows=0A=20(defun=20= gdb-restore-windows=20()=0A=20=20=20"Restore=20the=20basic=20arrangement=20= of=20windows=20used=20by=20gdb.=0A=20This=20arrangement=20depends=20on=20= the=20value=20of=20option=20`gdb-many-windows'."=0A+=20=20;;=20This=20= function=20is=20used=20when=20the=20user=20messed=20up=20window=0A+=20=20= ;;=20configuration=20and=20want=20to=20"reset=20to=20default".=20=20The=20= function=20that=0A+=20=20;;=20sets=20up=20window=20configuration=20on=20= start=20up=20is=20`gdb-get-source-file'.=0A=20=20=20(interactive)=0A=20=20= =20(switch-to-buffer=20gud-comint-buffer)=20;Select=20the=20right=20= window=20and=20frame.=0A=20=20=20(delete-other-windows)=0A@@=20-4705,11=20= +4896,24=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20'speedbar-frame)=20= (speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20nil)=0A=20=20=20= (setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20Recover=20= window=20configuration.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-layout-after-quit=20t)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(and=20(eq=20gdb-restore-window-layout-after-quit=20'if-show-main)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-show-main)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-layout-after-quit=20'if-many-windows)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20=20=20=20= (when=20gdb--window-configuration-before=0A+=20=20=20=20=20=20= (window-state-put=20gdb--window-configuration-before)=0A+=20=20=20=20=20=20= ;;=20This=20way=20we=20don't=20accidentally=20restore=20an=20outdated=20= window=0A+=20=20=20=20=20=20;;=20configuration.=20=20Maybe=20the=20user=20= changed=20the=20configuration=0A+=20=20=20=20=20=20;;=20after=20starting=20= GDB,=20who=20knows.=0A+=20=20=20=20=20=20(setq=20= gdb--window-configuration-before=20nil))))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A=20= buffers,=20if=20required."=0A+=20=20;;=20This=20function=20is=20called=20= only=20once=20on=20startup.=0A=20=20=20(goto-char=20(point-min))=0A=20=20= =20(if=20(re-search-forward=20gdb-source-file-regexp=20nil=20t)=0A=20=20=20= =20=20=20=20(setq=20gdb-main-file=20(read=20(match-string=201))))=0Adiff=20= --git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= bd825c09e1..709e30a462=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,35=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-window-undedicated=20(window=20&rest=20body)=0A+=20=20= "Select=20WINDOW,=20set=20it=20to=20be=20undedicated=20and=20execute=20= BODY.=0A+=0A+WINDOW=20is=20only=20set=20to=20be=20undedicated=20= temporarily=20while=20executing=0A+BODY.=20=20That=20is,=20the=20= original=20value=20of=20WINDOW's=20dedication=20is=0A+restored=20after=20= executing=20BODY.=20=20If=20WINDOW=20is=20nil,=20use=20the=0A+selected=20= window.=20=20The=20value=20returned=20is=20the=20value=20of=20the=20last=0A= +form=20in=20BODY.=0A+=0A+This=20macro=20uses=20`with-selected-window'=20= to=20select=20WINDOW=20(which=20see)."=0A+=20=20(declare=20(indent=201)=20= (debug=20t))=0A+=20=20(let=20((window-dedicated-sym=20(gensym))=0A+=20=20= =20=20=20=20=20=20(window-sym=20(gensym)))=0A+=20=20=20=20= `(with-selected-window=20(or=20,window=20(selected-window))=0A+=20=20=20=20= =20=20=20(let=20((,window-dedicated-sym=20(window-dedicated-p))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20(,window-sym=20(selected-window)))=0A+=20= =20=20=20=20=20=20=20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20= =20=20=20=20=20(set-window-dedicated-p=20nil=20nil))=0A+=20=20=20=20=20=20= =20=20=20(unwind-protect=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (progn=20,@body)=0A+=20=20=20=20=20=20=20=20=20=20=20;;=20Even=20if=20= the=20user=20does=20weird=20things=20like=20switching=20to=0A+=20=20=20=20= =20=20=20=20=20=20=20;;=20another=20window=20in=20BODY,=20we=20are=20= covered=20because=20we've=0A+=20=20=20=20=20=20=20=20=20=20=20;;=20saved=20= the=20intended=20window=20in=20WINDOW-SYM.=0A+=20=20=20=20=20=20=20=20=20= =20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20`window-dedicated-p'=20returns=20the=20value=20set=20by=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20`set-window-dedicated-p',=20which=20= differentiates=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20non-nil=20= and=20t,=20so=20we=20cannot=20simply=20set=20to=20t.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20(set-window-dedicated-p=20,window-sym=20= ,window-dedicated-sym)))))))=0A+=0A=20;;=20The=20following=20two=20= functions=20are=20like=20`window-next-sibling'=20and=0A=20;;=20= `window-prev-sibling'=20but=20the=20WINDOW=20argument=20is=20_not_=20= optional=20(so=0A=20;;=20they=20don't=20substitute=20the=20selected=20= window=20for=20nil),=20and=20they=20return=0A--=20=0A2.25.1=0A=0A= --Apple-Mail=_C82B3142-CCD7-4D39-A092-FCE768CB93DD Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_C82B3142-CCD7-4D39-A092-FCE768CB93DD-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 09 Mar 2020 19:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu , martin rudalics Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158378151422450 (code B ref 39181); Mon, 09 Mar 2020 19:19:02 +0000 Received: (at 39181) by debbugs.gnu.org; 9 Mar 2020 19:18:34 +0000 Received: from localhost ([127.0.0.1]:51468 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBNv8-0005q1-CI for submit@debbugs.gnu.org; Mon, 09 Mar 2020 15:18:34 -0400 Received: from mail-lf1-f66.google.com ([209.85.167.66]:34615) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBNv7-0005po-44 for 39181@debbugs.gnu.org; Mon, 09 Mar 2020 15:18:33 -0400 Received: by mail-lf1-f66.google.com with SMTP id i19so2750027lfl.1 for <39181@debbugs.gnu.org>; Mon, 09 Mar 2020 12:18:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=yrsk6TdpyXn5obr6SvGF4FKaHimnktTbYVq4jSITjvo=; b=gpoF6GYKZ2D82rYnnHQ7u0sUk7/RipH1/7ccHV+2Cdc+1bYl4oYoP+pv88Th2EtRha AA3bzZ3GUDCkmjxkV5A/dIRrKI1QXM6xJDxJsaFx3uB8Tz0YA+qztAkVNznmpHRDWUvr bIoU4osiO2AXWxIZo9NrUyh2UZJzBkf8hXbCFb7w+LyIbJX/oklyJo7QvwKfdhVAuoNe VrGgeGfdAlvfg7HhSLKeq7BCLRAPtirsJ9z4h0nuY0Nlyqmx7L7thkRyGDNBG49cRaDc PWo2JMyQ3sCiFQluHE2LBvtA4XvewOJ1SOEHSH8bMtOvOsl979pIGa+eGh2TGMCw8rcv cahg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=yrsk6TdpyXn5obr6SvGF4FKaHimnktTbYVq4jSITjvo=; b=cZJ7aOSxi56ZjPILkuC8fshmJgpMM3jNLBaWqnL7n9VKldeRa70sSHGOr56YhkhwmK zrG2xWGB76PPUUphy5xZV9mvQ5rVmgPX4jXVN53CZFAhvZdwrNS23YBgF1rT6qS/tlLn l+s5iJJ/JIRCnr9tRubvnaMk99SQmrqy5hGU0CeodiRlTrOJcEVY2Ck3TxwS5lcGhaPv 3ROagmkJIoKgovmuZnzFRUE6wsvL7KXVui5gu3k101R7kcASanzNPClpAWyVwA1gN1+H /RTBhjo2PmpBC4k9IYMljRTQTT9hNgDDymMCEYqhx9CfAQAt1/pFO56lptY/VhIWlv2d HW7Q== X-Gm-Message-State: ANhLgQ1CHatxw8hTigRaAQnbbhnqZoW3yyI75lxDPFS3kozoNRMfPNPG UipbcYzMf/KmcFJe5vzIr8g= X-Google-Smtp-Source: ADFU+vtYzZ+TYGmxkwKhT7GRh0nfRNnZF9SvUTx4NZGJVj1xkZ/81L6kH3e1bhPyUOHwap2UpjcOZg== X-Received: by 2002:ac2:5508:: with SMTP id j8mr5824584lfk.31.1583781507047; Mon, 09 Mar 2020 12:18:27 -0700 (PDT) Received: from localhost ([185.112.167.59]) by smtp.gmail.com with ESMTPSA id r15sm22024345ljh.11.2020.03.09.12.18.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2020 12:18:26 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> <87zhcsyoee.fsf@gmail.com> <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> <2bc5d577-eded-c79c-5b05-c815ed8ac212@gmx.at> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Mon, 09 Mar 2020 20:18:44 +0100 Message-ID: <87ftehjq0b.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Again, having little experience with gdb(-mi) I have mostly checked the doc strings; I hope Martin will provide better feedback. Other than the nit picks below, I have one question: is there any difference between "window layout" and "window configuration" in this context? You seem to be using both interchangeably, both in documentation and the function/variable names. There seems to be some prior usage of "layout" in gdb-mi, but the general Emacs term AFAIK is "configuration". Wouldn't it make sense to unify the usage somewhat, at least in the new code? Just an observation (I found it confusing.) On Mon, 09 Mar 2020 13:59:31 -0400 Yuan Fu wrote: > From c27f39a3e321a7a1111f71dd95573104f025c89c Mon Sep 17 00:00:00 2001 > From: Yuan Fu > Date: Tue, 3 Mar 2020 18:30:03 -0500 > Subject: [PATCH] Add window streo/restore feature for gdb-mi > MIME-Version: 1.0 > Content-Type: text/plain; charset=3DUTF-8 > Content-Transfer-Encoding: 8bit > > Add a feature that allows a user to save a gdb window layout to a file > with 'gdb-save-window-layout' and load it back it with ^^ Typo? [...] > +(defcustom gdb-restore-window-layout-after-quit nil > + "Specify whether to restore the window layout the user had before gdb = starts. > + > +Possible values are: > + t -- Always restore. > + nil -- Don't restore. > + 'if-show-main -- Restore only if `gdb-show-main' is non-nil > + 'if-many-windows -- Restore only if variable `gdb-many-windows' is n= on-nil." ^^^^^^^^^^^^^^^^ The documented symbols don't match the actual ones below. Also, if you want to quote them in the doc string, the convention (which you do follow elsewhere) is `like-this', 'this is confusing. > + :type '(choice > + (const :tag "Always restore" t) > + (const :tag "Don't restore" nil) > + (const :tag "Depends on `gdb-show-main'" 'if-gdb-show-main) > + (const :tag "Depends on `gdb-many-windows'" 'if-gdb-many-windo= ws)) ^^^^^^^^^^^^^^^^^= ^^ [...] > +(defun gdb-toggle-restore-window-layout () > + "Toggle whether to restore window layout when GDB quit." ^^^^ quits > + (interactive) > + (setq gdb-restore-window-layout-after-quit > + (not gdb-restore-window-layout-after-quit))) > + > +(defun gdb-get-source-buffer () > + "Return a buffer displaying source file or nil if we can't find one. > + > +The source file is the file that contains the code at where GDB ^^^^^^^^ Just "where", or perhaps "source location where"? > +stops. There could be multiple source files during a debugging > +session, we get the most recently showed one. If program hasn't > +start running yet, the source file is the \"main file\" at where ^^^^^^^^ Same as above. > +the GDB session starts (see `gdb-main-file')." [...] > +(defun gdb-function-buffer-p (buffer) > + "Return t if BUFFER is a GDB function buffer. > + > +Function buffers are locals buffer, registers buffer, etc, but > +not including main command buffer (the one in where you type GDB ^^^^^^^^ Again, just "where". > +commands) or source buffers (that displays program source code)." ^ "display" [...] > +(defun gdb-load-window-layout (file) > + "Restore window layout (window configuration) from FILE. > + > +FILE should be a window layout file saved by > +`gdb-save-window-layout'." > + (interactive (list (read-file-name > + "Restore window configuration from file: " > + (or gdb-window-layout-directory default-directory)= ))) > + ;; Basically, we restore window configuration and go through each > + ;; window and restore the function buffers. > + (let* ((placeholder (get-buffer-create " *gdb-placeholder*"))) > + (unwind-protect ; Don't leak buffer. > + (let ((window-config (with-temp-buffer > + (insert-file-contents file) > + ;; We need to go to point-min even we > + ;; are reading the whole buffer. I can't understand this comment. Maybe "even" should have been "so that"? > + (goto-char (point-min)) > + (read (current-buffer)))) [...] > @@ -4659,6 +4847,9 @@ gdb-many-windows > (defun gdb-restore-windows () > "Restore the basic arrangement of windows used by gdb. > This arrangement depends on the value of option `gdb-many-windows'." > + ;; This function is used when the user messed up window > + ;; configuration and want to "reset to default". The function that ^^^^ "wants" [...] > +(defmacro with-window-undedicated (window &rest body) > + "Select WINDOW, set it to be undedicated and execute BODY. > + > +WINDOW is only set to be undedicated temporarily while executing > +BODY. That is, the original value of WINDOW's dedication is > +restored after executing BODY. If WINDOW is nil, use the > +selected window. The value returned is the value of the last > +form in BODY. The "temporarily" thing is actually expected/understood with with- macros, so I think it could be simplified to something like the following (BTW, while there are occurences or "non-dedicated" in Emacs sources, there are no occurences of "undedicated". Another thing to maybe consider for the sake of consistency/least surprise.): "Evaluate BODY with WINDOW selected and temporarily made non-dedicated. If WINDOW is nil, use the selected window. Return the value of the last form in BODY." Thank you, =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 09 Mar 2020 20:19:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158378508928023 (code B ref 39181); Mon, 09 Mar 2020 20:19:01 +0000 Received: (at 39181) by debbugs.gnu.org; 9 Mar 2020 20:18:09 +0000 Received: from localhost ([127.0.0.1]:51504 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBOqn-0007Hv-AB for submit@debbugs.gnu.org; Mon, 09 Mar 2020 16:18:09 -0400 Received: from mail-qv1-f48.google.com ([209.85.219.48]:44290) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBOql-0007Hg-Qo for 39181@debbugs.gnu.org; Mon, 09 Mar 2020 16:18:08 -0400 Received: by mail-qv1-f48.google.com with SMTP id bp19so2661760qvb.11 for <39181@debbugs.gnu.org>; Mon, 09 Mar 2020 13:18:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=DfDgbId5ePxgwEepUpbMN+RTsX2HanIouSbxgJnEkiM=; b=XYyk2cUlI1tyH6v04pJtXCKph+LqlcIxeZlX2Yl3at/lbeSWMLsNDNwTBsjQTsEdkQ akCsnN1RXBXmv2LC4SyWuZrg3kiAwZuJmVh+680iy2q2mB5EnvqbV6Yivo4rxC1h69Gg 0ubSyWNQODuMVU+sScrMYr3cH5Jc3Hp5v1N2rSX58AMBWFRuldGV0wjWu/DBhOcF/0c5 tGG2tKY5rGa+/R5fSpfTrh7Bw2bFibqqMr14cuFgY0H0CE3Bi+MFc4qXKn/ieJbbxpLa vFJzhXyy/V7pbohcteJ6YZKY/oEz5+zEFHllTm4/q1ahulSFBXVN5pUY+J2fBy0ZnRHn Vlng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=DfDgbId5ePxgwEepUpbMN+RTsX2HanIouSbxgJnEkiM=; b=OzmXj2Q+sRqFhJZvR0pczxLI682nfS12KEzkl2KgKTcTpyXSp+46XBduI7T3wpKoiz FJ9Gd58wGTWdZ3j5tOJJlAdvdtnyq/GSVOf+WwAfZlRfHrNsuV890BovMjdwefyyiET3 MH0G5feaVqMPAt2Rkk/natxip6WzpwSorgNrQ1bdHKk7NDSYj+bFCLO4iecJtSC3Nre4 5I+KNhMJWWn2U1BqWsfY1vEFg1wjSa2Kh7q97lJXCzW/9dvaHjS4DObMBvjBBiixTFdq 6MYBKpUF4bl5W2AAbE8vUsd8pRAApQsKpJmwebDJftU5I2061rIDevoES7xv62NTOVjV o4jw== X-Gm-Message-State: ANhLgQ2RqkOPS8y1hNGrwlDGkqjifX8RCPhHEynhovRorLVZYlsTCFnk SpM7n1CY+2oA9Ucoi9VVUBk= X-Google-Smtp-Source: ADFU+vs8MvR6pJwlT17yd90q0362YAjP4v3poC7aRR2+XJ/kfDN2H3EhuICCyNzcRdGHmXC8u21n9g== X-Received: by 2002:a0c:eb47:: with SMTP id c7mr15935899qvq.55.1583785081329; Mon, 09 Mar 2020 13:18:01 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id w19sm6554848qkw.104.2020.03.09.13.18.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 09 Mar 2020 13:18:00 -0700 (PDT) From: Yuan Fu Message-Id: <150C19DE-ACA2-4066-AB25-DAB7DAD96774@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_9BA20231-9228-4646-9B4C-61DE3F4E833E" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Mon, 9 Mar 2020 16:17:59 -0400 In-Reply-To: <87ftehjq0b.fsf@gmail.com> References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> <87zhcsyoee.fsf@gmail.com> <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> <2bc5d577-eded-c79c-5b05-c815ed8ac212@gmx.at> <87ftehjq0b.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_9BA20231-9228-4646-9B4C-61DE3F4E833E Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 9, 2020, at 3:18 PM, =C5=A0t=C4=9Bp=C3=A1n N=C4=9Bmec = wrote: >=20 >=20 > Other than the nit picks below, I have one question: is there any > difference between "window layout" and "window configuration" in this > context? You seem to be using both interchangeably, both in > documentation and the function/variable names. There seems to be some > prior usage of "layout" in gdb-mi, but the general Emacs term AFAIK is > "configuration". Wouldn't it make sense to unify the usage somewhat, = at > least in the new code? Just an observation (I found it confusing.) >=20 No, not really, that=E2=80=99s my fault. Before I go in and change every = word, which one do you think I should use: configuration or layout? = Configuration is the conventional Emacs term but I felt that layout is = easier to understand for a user. If you are find with both I guess I = will change all to configuration. Yuan=20= --Apple-Mail=_9BA20231-9228-4646-9B4C-61DE3F4E833E Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8
On = Mar 9, 2020, at 3:18 PM, =C5=A0t=C4=9Bp=C3=A1n N=C4=9Bmec <stepnem@gmail.com> = wrote:


Other than the nit picks below, I have one question: is there = any
difference between "window layout" and "window configuration" = in this
context? You seem to be using both interchangeably, both = in
documentation and the function/variable names. There seems to = be some
prior usage of "layout" in gdb-mi, but the general Emacs term = AFAIK is
"configuration". Wouldn't it make sense to unify the usage = somewhat, at
least in the new code? Just an observation (I found it = confusing.)


No, not really, that=E2=80=99s my fault. = Before I go in and change every word, which one do you think I should = use: configuration or layout? Configuration is the conventional Emacs = term but I felt that layout is easier to understand for a user. If you = are find with both I guess I will change all to configuration.

Yuan 
= --Apple-Mail=_9BA20231-9228-4646-9B4C-61DE3F4E833E-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 09 Mar 2020 20:55:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158378726831241 (code B ref 39181); Mon, 09 Mar 2020 20:55:02 +0000 Received: (at 39181) by debbugs.gnu.org; 9 Mar 2020 20:54:28 +0000 Received: from localhost ([127.0.0.1]:51509 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBPPw-00087p-85 for submit@debbugs.gnu.org; Mon, 09 Mar 2020 16:54:28 -0400 Received: from mail-lf1-f48.google.com ([209.85.167.48]:33747) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBPPu-00087Z-8w for 39181@debbugs.gnu.org; Mon, 09 Mar 2020 16:54:26 -0400 Received: by mail-lf1-f48.google.com with SMTP id c20so8971681lfb.0 for <39181@debbugs.gnu.org>; Mon, 09 Mar 2020 13:54:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=vQE9591FsHS9oEkIelfmV7DphcKJNTiAMDIzOQuNbNM=; b=SpuXy5p33I7kcp/HRFHA1fbe4TrBYBkmtxpecYOPPdNKV5Fgw+bMWyqR7sGW1Q4kL+ ovChG0ygyWWo3FPNiKo0EXUbVG15HO1MO3wtD3Amt/qgXb2rqqrJKtMGuFme5nHq92yf 1SM0EfEXZIpYOqb2e4OWvJu5DTd6h2QDtgaqz8O0h++zNlE7iWnf2Ieot2LRSXvUoA7l vvabBKTBHf3Z5ym4gzm0d84hFFZK3qMysyxykcMXQwAMZr1g8FN0xHvduqQhMBugVhw6 1JBduw+m+zYydLhchbHNn4tmmCi/Vxlj9gQAMGrlQtNy8ezRbmnmaV3RNAhjI7Z0YI5H YxFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=vQE9591FsHS9oEkIelfmV7DphcKJNTiAMDIzOQuNbNM=; b=XzHxrY/Z+0N527A4Wj5uX+xcOnsTyU/9edmPeZjqEwYXgoZesW6yp/MK8iLm7YjaDH AYsbWY0Tc5r5EBPTg/hY1ZXrMs7Hc5l7j4JrUYWW9x6V+WgRGFiIZYsfkAXcFpMn1uaA KUXa6Mb2sEaTrqxgOyv6Qz0exJFL6Qwcg+6ayvXShvFyuR88nP4yCiWxzN6DlXT0F0TC mVLKuTzweSr08lLaGn7pCEaTTvciGzog6Y7LdyZyX+afFuBrOOf5EEzP0TKmWcU71npe Us9cVRT+aBC4alyJJQ1wK+Cdgic5mdn/rxZGxyj1CFthbuklWjYND4tlyzRSfSXW2nY3 LkyQ== X-Gm-Message-State: ANhLgQ0bZQSy4TX2k5hNG27AxBjR6HujN5DfIG9PWS1UyRM1geOSXOEC SA4iZdIezl8r9Ca2vfed/Vo= X-Google-Smtp-Source: ADFU+vvbFsyOZxTAfbJPCIcgUm2j+4qq2y+sp6nAFgkkCJ/Y9nRGdGFYNjKFPMqCmeaMxfb9LkcAmA== X-Received: by 2002:a19:6b09:: with SMTP id d9mr10766886lfa.203.1583787260164; Mon, 09 Mar 2020 13:54:20 -0700 (PDT) Received: from localhost ([185.112.167.59]) by smtp.gmail.com with ESMTPSA id y6sm7534736lfc.24.2020.03.09.13.54.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2020 13:54:19 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: <150C19DE-ACA2-4066-AB25-DAB7DAD96774@gmail.com> References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> <87zhcsyoee.fsf@gmail.com> <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> <2bc5d577-eded-c79c-5b05-c815ed8ac212@gmx.at> <87ftehjq0b.fsf@gmail.com> <150C19DE-ACA2-4066-AB25-DAB7DAD96774@gmail.com> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Mon, 09 Mar 2020 21:54:37 +0100 Message-ID: <87blp5jlki.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Mon, 09 Mar 2020 16:17:59 -0400 Yuan Fu wrote: >> On Mar 9, 2020, at 3:18 PM, =C5=A0t=C4=9Bp=C3=A1n N=C4=9Bmec wrote: >>=20 >>=20 >> Other than the nit picks below, I have one question: is there any >> difference between "window layout" and "window configuration" in this >> context? You seem to be using both interchangeably, both in >> documentation and the function/variable names. There seems to be some >> prior usage of "layout" in gdb-mi, but the general Emacs term AFAIK is >> "configuration". Wouldn't it make sense to unify the usage somewhat, at >> least in the new code? Just an observation (I found it confusing.) >>=20 > > No, not really, that=E2=80=99s my fault. Before I go in and change every = word, > which one do you think I should use: configuration or layout? > Configuration is the conventional Emacs term but I felt that layout is > easier to understand for a user. If you are find with both I guess I > will change all to configuration. If they mean the same thing, then I'd say "configuration" is definitely the way to go. It is true that some Emacs terms might be unfamiliar to new users, but thanks to the excellent documentation capabilities it's very easy to learn the respective definitions (e.g., in this case 'C-h r i configuration' will display the relevant manual entries). It is important to stay consistent. --=20 =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 10 Mar 2020 08:50:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15838301438847 (code B ref 39181); Tue, 10 Mar 2020 08:50:02 +0000 Received: (at 39181) by debbugs.gnu.org; 10 Mar 2020 08:49:03 +0000 Received: from localhost ([127.0.0.1]:51831 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBaZT-0002IT-0Q for submit@debbugs.gnu.org; Tue, 10 Mar 2020 04:49:03 -0400 Received: from mout.gmx.net ([212.227.15.19]:43165) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBaZQ-0002Hu-U5 for 39181@debbugs.gnu.org; Tue, 10 Mar 2020 04:49:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1583830133; bh=SwiFGqoh3WTB0njX3HnjfwT+WHVMwEOxeO0RrX9rheQ=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=BCj4gCkZWUSPIjfGA92dmlb/ADtNbUw8S2E0qTb0kEcxhfDogKc+z5A2vo1Z031uK QqFc4IxS1LvBGx/cDgkT1leHBAxQT4pFmTaoh9WgTv5CEfaGVRQ+jeWRFKfPDwsIDo Q9EKsfRMS8yRV4EWkIx6lYen5q+QnJDPJLoSa/sA= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.149]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mi2Jn-1jp27I18Qj-00e4ES; Tue, 10 Mar 2020 09:48:53 +0100 References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> <87zhcsyoee.fsf@gmail.com> <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> <2bc5d577-eded-c79c-5b05-c815ed8ac212@gmx.at> From: martin rudalics Message-ID: Date: Tue, 10 Mar 2020 09:48:52 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:lBt4Jp85HabrIQEhyPLfcENXbXaw8M0g6fuShiZS+2kSH4CKaF8 jpGJk8PPr6qP8LwjzAOLPFhPbeGz6/2aYuuslgeMYHsk1k7UikJDpJflI5qrJklecsWKNxf rutf92SQI2FooSHf9zwAz9Q2QzzbuE2hip7ab+OKs8n7mKWABnoA1tRjqMe5+bv9mleLUSE /d1E9mtJgVvtJl5MKeqZw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:e5f74+42DwE=:L1NDlz0WiQmoBfAsAoVpac dyIh1xTqGNekwkOXhrz0curm1bRSdXfxYqDangXzZziuc0gIgo3h6pbPzpleBqLMrj4iKfHYS AOx46Teye7sNdzETM+MAWuwIUYuuKJD58lGuPZmHE+33UuacJhMOwuCIWsAiw8Lr59Dctzunt FyEnQgU6SUcmIPp76u08lA1jid1uZ8I7Not88XFrhEXMen/a2ruNQTc0DMNffT5SVNfkpLq2r 7Wot+IbLjY7EmxynGcrrlnHN+QCikmDJMaKioyVz576Ae9Ki7FszR/ilZJNxP+dk81XypwZlz mcViL8L4TldxHu34I6+j5HkNWxKFbK1mcVBxAz+Ya8jAlbwt7iGRtTsrZU8Zh1Nv/VK7jJDfU c6XyITwOIfZGhTpJUqByiMjqQZXsT3P/z1EAuIQ2CuHS37zFzgs6Vd9xBKXYs+HZ6dtw4WdDi NHXPFWAWY5TDZhi8C+U3v3RX8Ylv0xrMha0f0id2nKw2zSlVB/soHwkC1D4NVpWzDZMFgkyK4 sm56R+Rn54m3SwQmnN82HcesdnuonACwGxNJTw5e+VgEVTahHl4bryCFoL9jf/t30fa7EaAcl ttN3W3W1BqyP/0hjBBUKAu4Z2EUdSCOZz+vAesHJHUaMyf517qt+VzLP1bIcmqmmZTZawL0qf tsjIwXTJR3rAsN+VM6Oq4ql4eYmee+/dA65ARfzPc2V5x+7uwWHht1nV+QSKaoSNkrQJavBxV SeIp+hOXBMqcWPq3ZRsPS5pL0rfUloi3RQ4jP5hnHIeT+MuyJFN9UQQqqLWuszld0AorsPmqh tR1McebnQOnxMvQ2Jhzkh35UiEWZpkvml/agRKBrwVgOQt6bCLxfsasYR2cvHs1xExwcl5vrn exYDk1rMtiI5VJ6++eOTCFKfqfH2KYt8SPRSAD3tz6Dg1ijcisVkOXlA0fuA7sWoWCf2xdDmH Mxw2vRTohwSQhujS4iyxLXDgsUnAbvug6xIEUbya+pNC8Bh8dDhEkvGVUVCf1tgnB5ia2NLp5 z1UhnNxbf7Lrjq0bDpHeBMVF+Lbb+EPWzhyY79hZ6GTqjTsSqcsAO7xyw412I3vqZAZEY4Osb qBLE/58xrUpU7lhq+7CY1Jurb/16zVM3FYOKS3Qw+cwjbDqsYNMKkhxCJe3kkwEpwTpf1q89Y vNoBuDD53Q5XWqOP73P3dS71si0BxQGLXdcZbf99tRtd5tdxN/6iYxupN82KYDksW7K+u+jIw eNVzRYuwa20Mb/Sjs X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > I updated the patch accordingly. Could you have a look at the docsting? I had a hard time writing it. Please don't select WINDOW in 'with-window-undedicated'. In general, try to avoid selecting a window unless it is really needed. This is particularly important when WINDOW can be on another frame where selecting WINDOW entails switching to that frame with all its overhead. I would use something like the untested below. This could be then useful for 'ffap-other-frame' or 'ffap-dired-other-frame' as well. martin (defmacro with-window-undedicated (window &rest body) "Execute BODY with WINDOW temporarily undedicated. WINDOW must be a live window and defaults to the selected one." (declare (indent 1) (debug t)) (let ((window-dedicated-sym (gensym)) (window-sym (gensym))) `(let* ((,window-sym (window-normalize-window window t)) (,window-dedicated-sym (window-dedicated-p ,window-sym))) (set-window-dedicated-p ,window-sym nil) (unwind-protect (progn ,@body) (set-window-dedicated-p ,window-sym ,window-dedicated-sym))))) From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 10 Mar 2020 08:50:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu , =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15838301538880 (code B ref 39181); Tue, 10 Mar 2020 08:50:03 +0000 Received: (at 39181) by debbugs.gnu.org; 10 Mar 2020 08:49:13 +0000 Received: from localhost ([127.0.0.1]:51834 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBaZd-0002JA-9Z for submit@debbugs.gnu.org; Tue, 10 Mar 2020 04:49:13 -0400 Received: from mout.gmx.net ([212.227.15.18]:57421) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBaZb-0002Ix-Ei for 39181@debbugs.gnu.org; Tue, 10 Mar 2020 04:49:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1583830145; bh=IemaVciOvh8DT5QwFX8ufJWG/dbXxmB+k/95mbrKIec=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=INC7KsIwPQeqAFSNPVD8n45GAjirf6mZUyR7+YY2WdhymxXy5U36+I7J0D74ASPGA GzKRzE2D3poc+qbj5fZ1K8SL1yx7pVDHL2BMae9YroEtQtYdbM8WN7ZQv8LrT5KwZE iPwpvOL8rSiHC37Rg3ZyYeScN+pgRlQBJ2vwpNeI= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.149]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MmULr-1jbsun3U9J-00iVHJ; Tue, 10 Mar 2020 09:49:04 +0100 References: <75FC69BA-CCD4-46D0-B9F5-109200C796F3@gmail.com> <55235252-FD03-4801-804A-864EFC1DCA0A@gmail.com> <90254CFF-2FFD-4D54-8467-717FF10166A2@gmail.com> <5c8d9f6a-0bc5-b2ff-1513-4b8631fee1a3@gmx.at> <2A945E3B-5506-4077-9C2E-AD049BCEFA23@gmail.com> <87zhcsyoee.fsf@gmail.com> <7DBBA6F5-4F53-48DC-A895-A0B06FF2A333@gmail.com> <2bc5d577-eded-c79c-5b05-c815ed8ac212@gmx.at> <87ftehjq0b.fsf@gmail.com> <150C19DE-ACA2-4066-AB25-DAB7DAD96774@gmail.com> From: martin rudalics Message-ID: Date: Tue, 10 Mar 2020 09:49:03 +0100 MIME-Version: 1.0 In-Reply-To: <150C19DE-ACA2-4066-AB25-DAB7DAD96774@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:TkaxPR2AxlcQLvQAbF6kVvGYnT4nkDVzJuzULqOgpEDOsfzu2PZ Y4vtwE2s+h36UPlnBVJNxqxz1E6Oy4CU2uTZSMVpAEUCCi5N0FY2Ij/7SZXXET+Uv6jNglV KOfB5dInMvg3nvRR/YO3spxOc5WMbN6IVvtOuBNC/yoUneRgM0u1gQO/fr9HJhPe+fMI/YN eLsTNlKIPBdOqKJTkP1Zw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:bUtFCbK1Q7c=:pwvENGRaFjWfyKfTuo8jFj ayU6/W/MdULlVW/xvi9lF6kw8f7h0Zw2M6FYY+JRIqvskxBzSNyQ84zA4sTcjh84IyaXIOCyJ rMiG4/WP/5gk20zjToD3HumKYYMMo2JhGvmmcC+vj32eaMAHkKgqKULeDbGgez5/7li98dNgN rdkAQMUcLNsd1xOAiAwAZ1eDY/9O16uXK6h8Ss5Jw8/xyGgy0mOEZDyUI/LvghloXt/4J+k1U XJj1MIXhAZYcpCSjPXqU/Eky4GCz8r9rzlYlLhBRn6junDpzH2MzOBOHGbfkM7DR7RoiNHNQ1 aHAuqIuS46166HCQSgg4wFTVC9Xwy5LMtZmv6FCR4gQrtkkGywand/sXASx8tcQlsuiAKzMrz DUWfndbaXYCBC1QV8QwfC6bNUI9HCKYW9F0l7nVpQKAhvv1zZJwE1/GPtu+SnA+orkylIsDX3 6syOyHOQGzutz/83huR2HoSavG4Xwlu+2sMteNH/QE7e+Zgy8HoTTNSy7PQ7oGgf4pjs7EZL7 IvxdRizu8GIL+oWp4YDPII6N3J3UUR6LLDwtv3AlgVqWztP6+hyQEk3mMrYBhpHKeKL6Gbzdg mcUJKu19CNhoxQcjjD9JRXW0iqTWQ/Vp3LgtYLuEbojz7ATpcGCdnYx1h9KeokQWVwcwK7Ngo mMabWq6GKlZQr2+PFX0LPKEacrBF91Ma4dBbAoIRKl5M3d4C83fV0UgZ200aOeAx6xfv8uZ/l Yif2MCQuouAc1bWdYjqD/YKIHZT75bDwNE3HZoNIVF+l4joUJGzWOA60i8kkBLOrey0Hx+IjL 9v8JbHl1sLCS/IBVw1/r67Xkg9JcPaOstWklpVqQ1jVwjcEilosKGOvTO4DsJNA+gXqBo5U6a HNt+ADaivhsoXIq1XkjpaecfZAZgefdpNW/dSympeh42UO7tRhh2ncEes4W3t2jckyAxMz1Lx U8hxX0qYC7xOH7jWZB3LAxTTEZujFBlx1hyfdSE3v4thMV5++/RtT/Mqg60CNwp6Rz0P0DGKF 0DubAXad6Vjt3hvNHYdxEJscihO5Ws+y0BMCAEjJgj6mPmfLMz3UbIvCSYQtpMvEZiaxv1zBj mk3eKfIBV89Ie2VvbyqKF8XbaB9dVriPkty1zvTHSqRadrVUI6/Ce1ThZ+Bnyb4iLlx3SopsV LPC/HjAs+slsBG/+EjQvLwXj/syeZczNX1eSRv7e0xAzXhC+vkbXZCBygph4zDBCli4gRx39d m4WtbjzhExMrGsUfA X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > No, not really, that=E2=80=99s my fault. Before I go in and change eve= ry word, > which one do you think I should use: configuration or layout? > Configuration is the conventional Emacs term but I felt that layout is= > easier to understand for a user. If you are find with both I guess I > will change all to configuration. While I agree with =C5=A0t=C4=9Bp=C3=A1n that we should use a unified nom= enclature wherever possible, most GDB users will probably prefer "layout" here. martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Fu Yuan Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 10 Mar 2020 18:07:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.1583863567319 (code B ref 39181); Tue, 10 Mar 2020 18:07:01 +0000 Received: (at 39181) by debbugs.gnu.org; 10 Mar 2020 18:06:07 +0000 Received: from localhost ([127.0.0.1]:53279 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBjGZ-000053-9t for submit@debbugs.gnu.org; Tue, 10 Mar 2020 14:06:07 -0400 Received: from mail-qt1-f174.google.com ([209.85.160.174]:35360) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBjGX-0008WB-Q4 for 39181@debbugs.gnu.org; Tue, 10 Mar 2020 14:06:06 -0400 Received: by mail-qt1-f174.google.com with SMTP id v15so10375390qto.2 for <39181@debbugs.gnu.org>; Tue, 10 Mar 2020 11:06:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=content-transfer-encoding:from:mime-version:subject:date:message-id :references:cc:in-reply-to:to; bh=kICDqZ1tOCS1kQMp27tQM+4uWZbxdf9lSuqVxWWFHmo=; b=f8Fc5TKyHmquNHDTni9ETY/I8Oz7O+iqXfJBJ6UqMtbRhhJFokVYde1B7qCMPeFT6t 18u0Jd+QZyErFIE/u9oaT3h/eSLbXQ7a2XBBwahg4hkQ1OXGfJPGij3xsagjmCO/rYxh X3J6OBicK5sWr29rr+XZE+HKzTIpfxSfprzYJh1j3A+gjfp+CmY/UFur/2xb6OokHQpE 5Fzkfg+Gps1wEEL+8+zrrifAuRwMyA/c4rmKgqcIFMoLLiC+F4DHmo2Im7jGMoAm8ZMt Fq92pAJVpWP/de6hg2gqqpUT/LkDtqvac7984KjZKff5ID1b21WzboZYtFOr/ezC32GG OPHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:content-transfer-encoding:from:mime-version :subject:date:message-id:references:cc:in-reply-to:to; bh=kICDqZ1tOCS1kQMp27tQM+4uWZbxdf9lSuqVxWWFHmo=; b=Y0/MnNnT6I8k2IpYsmHyyu1wUUjm6Z3Q2MeiHf+Iaj0ymIWL99iZ/uCrIgR7sS5DHB /qXeJCZ7inG+VsYHMk7nnTqLGoG7qayS3Q/IAEwqYNXylvSyoCsv+88Xwk9TFjU7KyMW NoMFc5fRKrjXLqh9kMw7NvrG7scsNjwowg3KkZj4Rx6qsOWV9g3Yoed0Wc+qs3sJvbNS Pvbs7e8FplfBubgPcAveD3IQmc+sTgwugSbfI0ZpVE0Z6yKLmBjyZ85ObYN1Ad3dB5TN 7hPtjcmYSshPgvB6lTlJI3jfZhk9nOq2sNlfg9d8E1nIOWovSJM6gWgfYm4XS5O6Xw7v KVSg== X-Gm-Message-State: ANhLgQ3+/nJklBlKhDwY27SlBArJinIpCNvPKq6vfvr8y+fpWqdPEol3 pa4CkOkUA7yC98S5i6ginvI= X-Google-Smtp-Source: ADFU+vvARKvmaygNKGiVRlkloTibHrx3G7WeSZvX7a2jL6C6/MkMUhB4vkLP94EXi2HmzcWMGui/NA== X-Received: by 2002:ac8:6f36:: with SMTP id i22mr6744972qtv.122.1583863560172; Tue, 10 Mar 2020 11:06:00 -0700 (PDT) Received: from ?IPv6:2601:98a:4102:3d80:7d0f:c28b:24d8:d501? ([2601:98a:4102:3d80:7d0f:c28b:24d8:d501]) by smtp.gmail.com with ESMTPSA id v126sm7243638qkb.107.2020.03.10.11.05.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 10 Mar 2020 11:05:59 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Fu Yuan Mime-Version: 1.0 (1.0) Date: Tue, 10 Mar 2020 14:05:56 -0400 Message-Id: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> References: In-Reply-To: X-Mailer: iPhone Mail (17D50) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hmmm, so what is the best approach here? Use layout in button names (in the m= enu bar) and configuration everywhere else? And maybe mention the equivalenc= e between layout and configuration in help echo? Yuan > =E5=9C=A8 2020=E5=B9=B43=E6=9C=8810=E6=97=A5=EF=BC=8C=E4=B8=8A=E5=8D=884:4= 9=EF=BC=8Cmartin rudalics =E5=86=99=E9=81=93=EF=BC=9A >=20 > =EF=BB=BF> No, not really, that=E2=80=99s my fault. Before I go in and cha= nge every word, > > which one do you think I should use: configuration or layout? > > Configuration is the conventional Emacs term but I felt that layout is > > easier to understand for a user. If you are find with both I guess I > > will change all to configuration. >=20 > While I agree with =C5=A0t=C4=9Bp=C3=A1n that we should use a unified nome= nclature > wherever possible, most GDB users will probably prefer "layout" here. >=20 > martin >=20 From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 11 Mar 2020 08:53:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Fu Yuan Cc: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158391676617338 (code B ref 39181); Wed, 11 Mar 2020 08:53:01 +0000 Received: (at 39181) by debbugs.gnu.org; 11 Mar 2020 08:52:46 +0000 Received: from localhost ([127.0.0.1]:53623 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBx6c-0004Va-Iw for submit@debbugs.gnu.org; Wed, 11 Mar 2020 04:52:46 -0400 Received: from mout.gmx.net ([212.227.17.21]:44283) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBx6b-0004VO-B2 for 39181@debbugs.gnu.org; Wed, 11 Mar 2020 04:52:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1583916758; bh=lEIDFXHqHLwp0OQ1kPW4AzY19nLjF9YX4srMZyWfKcU=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=DV8DkKPYA04HoTc2dYCfncdPAFJEsdUDYhf3na9Hjv/TTsmORGgyg8TLg0ScM5yXQ VudLhxHt6Ma2bEH/c8Ga/BvS7gmVUR03qgTDtxEAxstp74rofD9vGgagVvOkxqT2Px ammBtZNKDlFwouf6jS1Cfe7zSbCHkUjRXTaapd5Y= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([46.125.249.80]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N9dsb-1jQR7b2E7R-015d11; Wed, 11 Mar 2020 09:52:38 +0100 References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> From: martin rudalics Message-ID: Date: Wed, 11 Mar 2020 09:52:37 +0100 MIME-Version: 1.0 In-Reply-To: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:Aj4DgK6//CxupQw61PiTkkI3gTB13slP3SJ1MFfbGUsA0/gIxXp JJko1QbvoFmRvfcbvFG3QxqG7dPqGkFPvuSoTVL73fT+2yIZAJ2CP0oBHRuhpdKjnOgeaIP MDdlSOOu33tw1V7ELStG2t4Z/abd9RMAmXUajzepxfrU1wfeEwhb4zLzvB2PqjgEFBFBjrh RtnCKCMeu6SrWST8ho1gg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:L8KGL63numU=:wG8IDiwHy8QVuMGweujOho luxXxFQVE1mOztnxCrOjuiNXV0T+SKBywg+2rDdNZFC4lmjRsuV2fhpZGnFeyEoEiR9BXdvQJ +tOUr3F06Bn812Yj9H/0jQ4QR6P49UfQ8mvI5B5eRgrbUXsy2HqOo0L1lur6L5PC7PoP6C+Qn G7PvoLrcCvHh0B5pr6CcYbE/HRftDFv0Pj6u3XDV3xB79/J+W/qP0eJulNIibyj/mRjvGlQd0 yy6C545rzwq230zCp764XcDHbf7P3B+Wud48TyIKfcY3jRKzv8sTxeIv62vA6aD5Gna56sW0r SCBIVowSfG6f5fmjiwHKSzzxJfmj2AbvefAiPPt/BpyDZw7hUcIuCqk9nrdD3NF4+GYsvN023 YMVn73xAyHy+Cr4I1gg2FZwgzuxQFAf3xaEOaG6u6T7p4eczA8e0hCtw+aHQHXYPXYmKLa0du ajRzrQEGsTme6tsd3/bbMagZjVmvYKs1n6+x3tQfJsAcL8xHRrJ4Zh/7hVzQgWxH4x+mJr0GF yL4xA9YtyXQ3GyQKtqgHqVog2EmZo1oGB2+Itt1Lpm2mLOiLhgO8NIeI8X4dG9J1UolKW/QXT slquDYCdXSwFumzSGgVAsAxpsF71JzDBEHek72Y11oUojcuOM3ZrbG6+yoWkAvjta3ZtOSrzX /p11WJbKbRZKxV6ISp1p7rFvlqSbGYW+lNBjypLfQ0USJhCKZlLZSr0UPReOc2KxbZqXgohUQ EMz8eAcEWqNl3ao6LI/umROR17VeVx4VjneM6lD/Zlb3NNARrTrMY63cnzpm0pegiqCqLWdOZ RG+gr46ss8hCIzv3BpjCHmtV9YXJYcv5H8KAFiqX+NtU8T3gI6rqL+GYTKEWZrOdhrDyJmyEP b1Ty1IiElOFyDrG9ZcgKrq9t675sRLJAhlgf6WJga0V+G9hl9i8bLfbvzE2RvdlVcZgU6D6oP whDJr1LN03uIdUvHRVyzQSjuhYqGlAFQXJDX6j6qObzAQyoaiDXYBjX3ottoPAtsGSQrKd70m zj6gXD0QWJsoFsX7U+FP/EFrfavoavp0yEWgEr23s4H+vRgAZvI0FX3SMbIXNPf5fUlOU7yXe ijoK7aZ8zYjonpVZOQquIHPdG/RlVcPayuDs0lFgyanYxND8xyCAWaohy8q4sEZsJRuzCznjA mGEhlvSgOdDKv7+WZGfnWL9khmBqJj/FBG/v+rghE1fFLuI5FCEFv2kGFN2JlSuUGiLE9mNR9 ej7Ux5cRMNvE/CmlW X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Hmmm, so what is the best approach here? Use layout in button names > (in the menu bar) and configuration everywhere else? I think so. =C5=A0t=C4=9Bp=C3=A1n? > And maybe mention > the equivalence between layout and configuration in help echo? I'd mention it in section 27.6.5.1 GDB User Interface Layout of the Emacs manual. martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 11 Mar 2020 09:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics , Fu Yuan Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158391880420389 (code B ref 39181); Wed, 11 Mar 2020 09:27:02 +0000 Received: (at 39181) by debbugs.gnu.org; 11 Mar 2020 09:26:44 +0000 Received: from localhost ([127.0.0.1]:53637 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBxdT-0005In-PD for submit@debbugs.gnu.org; Wed, 11 Mar 2020 05:26:43 -0400 Received: from mail-lj1-f172.google.com ([209.85.208.172]:46092) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jBxdR-0005Ib-QY for 39181@debbugs.gnu.org; Wed, 11 Mar 2020 05:26:42 -0400 Received: by mail-lj1-f172.google.com with SMTP id d23so1445691ljg.13 for <39181@debbugs.gnu.org>; Wed, 11 Mar 2020 02:26:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=elAdcmGOiGoBBqFwRv7Aj+gXbKoWyKwCatoMnZ9ZzUQ=; b=sZRcB7OMNVtMa3yJ1Bc/zM7h1HZJ5gwm2e00x8DVME0w3wvYotdmF7Sbip0W42A4Sv Det6SK0n34Yygh9PDbs9OaDansUvajg/oaEHIbs3IF6tt3jFhqdMoSjcI0b/L2z/G8Zv KKtfr54aYJ7Cx6wyO5SXB0pO1nZksFr+ESp8E3gYEzv5AxJDm77AxyoCn+DTEJW5UJbQ VfRuBUbNroc9iYuxMs8yCQnZQqEriTka7Gx2mJT/7MnCV05I9CcgpZIFIrvVymuHhnbC 91RZMJIi/AfyKvykV17b1fwmNPGwKxj1JzD8begQMmaSN8Qni3rjbXN0HgA/uNk7jZBS 04+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=elAdcmGOiGoBBqFwRv7Aj+gXbKoWyKwCatoMnZ9ZzUQ=; b=lxUsmcI1ALkpqHsOJDoIkqttQCPHKOfJOJofBFf1XoXQfW0bZowi04UonYYweYrm17 ZBQ65JHFA/GZ1MhBSOHEEpalU0FzJsSxudPjmUrEv0e5b+HngMf6xGtmXWCDSX0jva2Q Lfe9nRyySWCU5qo4PQYAlsGXsF5EYFslrJWNr+rYYqVP9Sq4ywFZKem3x/dUCy8DBfP8 a0EfvdgALsPY9zhsxF/HOZ8x1DRnHi2LrnpOS54POyZ2BGwONmX9lVk3GXSW/tTTEQYJ t3MdNDdqpp5uQjYfSaqPWq0zOx8SViGek+ZApn26woKqNlDIbmJC48sLimpaEMs5MN8c 5zWQ== X-Gm-Message-State: ANhLgQ2jg1XgWmif4B2mwIG4EgetomWW2OclVTaWcr8eIwudqFmDmzP7 ruUDLSjdbSozBsAqrFufYB0= X-Google-Smtp-Source: ADFU+vvs+yNTGOR0onEf5PXo6nInDuwKtY8Gxw6P1PWaSgZdgq8onyhHdTxeKzkeT7B2vaRXgn22Ug== X-Received: by 2002:a2e:9a0e:: with SMTP id o14mr1557172lji.63.1583918795732; Wed, 11 Mar 2020 02:26:35 -0700 (PDT) Received: from localhost ([185.112.167.59]) by smtp.gmail.com with ESMTPSA id x13sm12034790lfq.97.2020.03.11.02.26.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2020 02:26:35 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Wed, 11 Mar 2020 10:26:53 +0100 Message-ID: <87d09jp7he.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Wed, 11 Mar 2020 09:52:37 +0100 martin rudalics wrote: > > Hmmm, so what is the best approach here? Use layout in button names > > (in the menu bar) and configuration everywhere else? > > I think so. =C5=A0t=C4=9Bp=C3=A1n? That certainly sounds better, thank you, although I'm still wondering if the "layout" gdb-mi speaks of really corresponds exactly to the usual window configuration (the object/data structure)? And if it does, it still seems to me that it would be better to just use the Emacs term, for the reasons I explained in my previous message, but as an only very occasional GDB user I don't feel I should be pushing for such a change. > > And maybe mention > > the equivalence between layout and configuration in help echo? > > I'd mention it in section 27.6.5.1 GDB User Interface Layout of the > Emacs manual. FWIW, I found that section confusing for other reasons as well, e.g. it seems to even mix "frame layout" and "window layout" in apparently the same sense? I think fixing _that_ at least should be uncontroversial. :-) --=20 =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 12 Mar 2020 08:23:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , Fu Yuan Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158400135324574 (code B ref 39181); Thu, 12 Mar 2020 08:23:01 +0000 Received: (at 39181) by debbugs.gnu.org; 12 Mar 2020 08:22:33 +0000 Received: from localhost ([127.0.0.1]:55899 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCJ6v-0006OH-01 for submit@debbugs.gnu.org; Thu, 12 Mar 2020 04:22:33 -0400 Received: from mout.gmx.net ([212.227.15.19]:35555) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCJ6t-0006O4-N4 for 39181@debbugs.gnu.org; Thu, 12 Mar 2020 04:22:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1584001344; bh=AKUuDEfYuvllYFcJqUgW43jtbgE7kFsab73aBbjXJvs=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=g7imCB84q9+kcumYZmQEAH8Hbqn0jPAfRPMuK4/3w6Cn4pVQVH5V2Kifs+sHwPtst 2D2AGGKTDH6l+rHnq8J0mm5ZLNNaRCxkPhU8XPTY89MTPvU3k3PIJmdShDE8bCECaB 3kbai4AGYAFGLmGKMkcrxWkXu2rparLzTBNjxWfQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([46.125.249.102]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N3KTo-1jLQ0o2Y5q-010MBW; Thu, 12 Mar 2020 09:22:24 +0100 References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> From: martin rudalics Message-ID: <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> Date: Thu, 12 Mar 2020 09:22:23 +0100 MIME-Version: 1.0 In-Reply-To: <87d09jp7he.fsf@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:9Xvms+Y7A+luOX5+gJ7tp/i4wbGK/K34dcJ4Y4f+bMsndmQhL9E ktYN/te40NVaeofWH4xlUEiBFC51LuM3ON3Z0VpqyAY9JaT5wVfikUj3Kif13CQsd/w/pr1 ZKi7ax2fFsxiMln0xPztlcgLy4cpz+dy32mD7XLCdU6Rnk95MF8V7VUO9Wr1rdYEKOK/hxa 8JHIx2uFwGm9u7D3uIBTQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:AXPK5Y+lY7E=:HCHTQSYmxILsBzHD0LiIZQ +Hzj0FYcjMSzMMv20ixf7jkqLIfXXJDOC7a9Ju+xV+s3uCOjnmks3e6iHpABfx5DOw0/iyxg/ OwUOaozm1bK/QUUvDmXNxF0wpDqaxrTuU9yP3RtBzIkG9+pGsnzsi31CNiYoERzMQijTBRjqR VTHlvLq/NwPdY8Qy0LTahMgTPgQvg0LE3JqP4IZu38K7nD4d2gMIH+MNhv3T7rmXydg78Ab84 n/wc1N6JM5nxG7aN9gLDV7B6NSoC6MX2mqylQ7ELE7LZQBlvZhFX+CD+bPNfKHh1PdaNKQY5B XyVBE5y84dRloUQrrWDBM8cDwj9z7GGWvj1i5EWTvzYGDxDWZA91aMd3dsh/uyJJip2pbuUkA RdO/VYkSSt1gM3t+FJ3aMHSyBeNtmaUaY41uPPZqetI/XFb46p5qnH5o03zyXwH8UijUAj04s ozsjmqFYrF6LZCu5o104nJTXo1V3sB65rhFvUQVfSty1d7kdImhhg8m60NttO2JhEz+sSuOms dpB5yjrl2Ig+hRubIOQBmcynhkWdqCl6wLc07OT4X4bZVl+YwYXZqD5mNP7bg7kwG7mFIjR55 dQX6/7okE17GR6zKlZMgkBr/r47y62i6yZp/fe/jwFx91u48NIO9/LOB62YIeMbPbe+Bd8Ino O2Ry1h9o54rzSLraJbbqTG3YUIK/AyQkxUqdMg7cMVTPmzioJDyXulbJTCMfbLfqqNAn3Nodw ABsF9BjxfI446i5Vpi6V60S1CM9fVEDxKh/rnl8e7GazFfsi6BuMqx7VOU0tC0AYShzHbxD3m jK7c2p79zXzP73KtF/OjK2ZB2PsXYr6Gz8zEk07Pzzz7cTvwY8/lRvAFkLL8gMeukQOCU8Qn2 I3xW0P9p7H5wZ8SkLOtOcicG0Lf91+QBsVMLbnOETittxoqcBWsKmg44YSrIZx5Zu6HEJErGZ 8lNeMtNCv/iduhj6ap7S8yILafQDvrzkyxpZv/VImkS7cx5uYDQ3pQRWi7tghcdhvIWxZ9kCV Hofi0KOXFPS5pzzPSw74yMPINQMyRgBnoEB/Irp4GCJXDsLp5QEZGeD2oNS/aaAKktZOSVTS2 fb21msM7IZ9VQ+L+T9vGwgvEGrhClCBaPzMr1fcQ0uQjT4Ui5xSK0FUd5ZVW8EStaLrvqk/MW JL+JFzEsoOxNjTH+zZVdc0WRfw3MhydrzJ3utQd6N2kafDRSbSTA1LSsDRfzlKFoiuAd1czJH bCj6hVjMejlcJ998n X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > That certainly sounds better, thank you, although I'm still wondering if > the "layout" gdb-mi speaks of really corresponds exactly to the usual > window configuration (the object/data structure)? And if it does, it > still seems to me that it would be better to just use the Emacs term, > for the reasons I explained in my previous message, but as an only very > occasional GDB user I don't feel I should be pushing for such a change. I would use the term "layout" for what is visible on screen and "configuration" for the underlying data structure. >> I'd mention it in section 27.6.5.1 GDB User Interface Layout of the >> Emacs manual. > > FWIW, I found that section confusing for other reasons as well, e.g. it > seems to even mix "frame layout" and "window layout" in apparently the > same sense? I think fixing _that_ at least should be uncontroversial. :-) Let alone the fact that "frame" in the context of GDB and Emacs has two quite different meanings ... martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 12 Mar 2020 08:49:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics , Fu Yuan Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158400292927425 (code B ref 39181); Thu, 12 Mar 2020 08:49:01 +0000 Received: (at 39181) by debbugs.gnu.org; 12 Mar 2020 08:48:49 +0000 Received: from localhost ([127.0.0.1]:55949 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCJWL-00078H-KL for submit@debbugs.gnu.org; Thu, 12 Mar 2020 04:48:49 -0400 Received: from mail-lf1-f50.google.com ([209.85.167.50]:45720) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCJWK-000783-10 for 39181@debbugs.gnu.org; Thu, 12 Mar 2020 04:48:48 -0400 Received: by mail-lf1-f50.google.com with SMTP id b13so4081617lfb.12 for <39181@debbugs.gnu.org>; Thu, 12 Mar 2020 01:48:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=e8xi7MKHNz+ktKktwVX41C1sYL87VajK8SEW35+LwB8=; b=F75lmPIw1n4OsUVfnZFjfX3dMI1SBICK7Vq9rwcOpefPVGDQDrjVNURJIXqlGhUgHx RyTWEjph5ZElSDE7jsBPrEwjRZYcNchNswDSKr5g4LWsBpfyaH3QqqGD6RJFSMo/FPNK dnn+fiCY4ve6FnV1GRIUuJuSfk/FLSo1VMm2nkZot36aoxwPvtSaFp3gqlgWKGAUV1ou oL/vv2B5AiFhLlaqVN7XWxXy+WZCzm/ZDxFMMYohcVgm5l20mhq/IWK4niFFojSUulJi W2Ia58Vb4dt/y+j1KVApR2QZzJXWZ1Cwbg9t337KPEyRdGn9QmypphMcerUMwRqTBsEo K/sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=e8xi7MKHNz+ktKktwVX41C1sYL87VajK8SEW35+LwB8=; b=F09rTmRbfi81xToQQZ/xqUcyy4BwjA2KQRo8ZxxNW1RESgnnCP1RScYqRXNrTLpLsD yAs9FNmfO89sgdUXvveoERMUj7qA0sgA9Rd0EGz4TMUxCzvytRi4LwIlNhmmWvCoq8Xw fv58dMPf7Vj0EL8n7DnXFhG/J2qw2OOfWyOAx6VsfMmH3VoaUgXLckAW8LHOQQHjwlZi kEQFc+3q/2zeXBubXQE2Jd5ZjbEd/jrKXnkmxr0wmYan/w1jux2CdFZt5Q19LV5OEI5c hMBO6dBdmZOrJtzRGMycvfAK4QuKb5Wcoi/nerK6S5oPddLl58ZNCGJu3wWBskl4ruB5 VCtQ== X-Gm-Message-State: ANhLgQ3cqcZB3hhd5W9ZnDDh4p1+CZnbn7m4MdYucD3hC8LB1GVP6+9e KWfCOFvccV16zz+u9R3iRJ0= X-Google-Smtp-Source: ADFU+vst8ieswW4iknr66eXVm+nXhL9mjuQL22otsyfgAR/qoIo22cURbzprLSLaKoHbDORoHvCXmQ== X-Received: by 2002:a05:6512:2031:: with SMTP id s17mr4100891lfs.151.1584002921895; Thu, 12 Mar 2020 01:48:41 -0700 (PDT) Received: from localhost ([185.112.167.59]) by smtp.gmail.com with ESMTPSA id o7sm28162712ljp.95.2020.03.12.01.48.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2020 01:48:41 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Thu, 12 Mar 2020 09:49:00 +0100 Message-ID: <878sk6ot4z.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 3.6 (+++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: On Thu, 12 Mar 2020 09:22:23 +0100 martin rudalics wrote: > > That certainly sounds better, thank you, although I'm still wondering if > > the "layout" gdb-mi speaks of really corresponds exactly to the usual > > window configuration (the object/data structu [...] Content analysis details: (3.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [185.112.167.59 listed in zen.spamhaus.org] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (stepnem[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.167.50 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.167.50 listed in wl.mailspike.net] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.6 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: On Thu, 12 Mar 2020 09:22:23 +0100 martin rudalics wrote: > > That certainly sounds better, thank you, although I'm still wondering if > > the "layout" gdb-mi speaks of really corresponds exactly to the usual > > window configuration (the object/data structu [...] Content analysis details: (2.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.167.50 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.167.50 listed in wl.mailspike.net] 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [185.112.167.59 listed in zen.spamhaus.org] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (stepnem[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager On Thu, 12 Mar 2020 09:22:23 +0100 martin rudalics wrote: > > That certainly sounds better, thank you, although I'm still wondering = if > > the "layout" gdb-mi speaks of really corresponds exactly to the usual > > window configuration (the object/data structure)? And if it does, it > > still seems to me that it would be better to just use the Emacs term, > > for the reasons I explained in my previous message, but as an only very > > occasional GDB user I don't feel I should be pushing for such a change. > > I would use the term "layout" for what is visible on screen and > "configuration" for the underlying data structure. Yes, I think I understood that, and would consider it an improvement. All I was trying to reiterate is that _if_ the layout means exactly the same as "window configuration", then I would prefer to call it just that even in the UI, to avoid cognitive overhead (AKA head scratching) for Emacs users used to that term, while not causing significant inconvenience for those not familiar with the Emacs term (it's consistently used and the documentation readily accessible). But of course I defer to your decision. > >> I'd mention it in section 27.6.5.1 GDB User Interface Layout of the > >> Emacs manual. > > > > FWIW, I found that section confusing for other reasons as well, e.g. it > > seems to even mix "frame layout" and "window layout" in apparently the > > same sense? I think fixing _that_ at least should be uncontroversial. = :-) > > Let alone the fact that "frame" in the context of GDB and Emacs has two > quite different meanings ... Yeah, I had double-checked the GDB docs and there is no evidence of "frame" being used in any non-stack-related sense. The confusion probably stems from the Info manual writer trying to use the Emacs terms while not being quite familiar with them themselves. --=20 =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 12 Mar 2020 19:22:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158404089931508 (code B ref 39181); Thu, 12 Mar 2020 19:22:01 +0000 Received: (at 39181) by debbugs.gnu.org; 12 Mar 2020 19:21:39 +0000 Received: from localhost ([127.0.0.1]:57811 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCTOl-0008C8-Am for submit@debbugs.gnu.org; Thu, 12 Mar 2020 15:21:39 -0400 Received: from mail-qv1-f41.google.com ([209.85.219.41]:39690) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCTOj-0008Bv-JI for 39181@debbugs.gnu.org; Thu, 12 Mar 2020 15:21:38 -0400 Received: by mail-qv1-f41.google.com with SMTP id fc12so3239843qvb.6 for <39181@debbugs.gnu.org>; Thu, 12 Mar 2020 12:21:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=CbGUgykyLQyQUnYxW5hAnyJ1zyJNM+j3d3cjik+/3gk=; b=A0NHgtsVR5GK916JIBwuAxeWXmzsxZzqQZ285lYETCNDCC/b2botPMQAbCFkpMLNHz upPS1SbMrd1UqeL+Bo3esALLWAxetlLDZe0wW4s80/edNkb5AnkFsWKCl9b5eXpnuAbZ KJ4kgVTmpRPj4cPtCCvm1ytkd9Qa7wb8rtDluWuZwnJzn7KlXFAP2PoBmR9hLIRPhYCk QhugRlkF+zJpWrYfub5GvSkIcWZB/SxDZdqtMP319u06DWXngUV/31b1E+buKAiFAoBy MuO/GzzKu6KfT48LvMi+cn16vVIrgjbVi8Ws/WU7V35P7i2YajfhYloT58Tb5GYFIbTL 88+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=CbGUgykyLQyQUnYxW5hAnyJ1zyJNM+j3d3cjik+/3gk=; b=NVfcR/a1nMg3hJiMAT9opqf5zmbAbNYs4BaSlggNlSSfOzZx/P2cQ0ONW0k1atiH2P l3DUGevK6w0MLhesXpWjfgaDW8TrwZhsEAel/N5omvuZl6FPC/V36HzCK6MpcSmMHhcE wdulh2N6qRPRu8XVXqD0UNnEc39u/IlDGBEZXSQzDb0jQRZ9PLlA4wjyrRlDa1JKiw9W VDQ159XSg3bRvhIxes6c1lF79bXR8TesEeTcz6xdKVCcamJGOD4qUCezfoRCUKA81Oxh Jij1HTcShcDlxDhYif9g9LKxa4XVlvpxX1h2Ug19DXHiG5MS482l1w2KdFF+5uIawCmL lbSA== X-Gm-Message-State: ANhLgQ1VJfUyMh51qx3lbaOR4uW8XcdOYMuIwHgwtz+4SBgLuyB1UMIo 7ebhBRgLEBVUeQ7/NL7uzrQ= X-Google-Smtp-Source: ADFU+vsdiAC2du3i8vQxz5gSlKwBWImj0ih0IGqfW6E4HaiXv7+6db9RqpGJzGOgMha/BdHGHbFygw== X-Received: by 2002:a05:6214:1853:: with SMTP id d19mr6132280qvy.90.1584040891984; Thu, 12 Mar 2020 12:21:31 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id b145sm7368089qkg.52.2020.03.12.12.21.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Mar 2020 12:21:31 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) From: Yuan Fu In-Reply-To: <878sk6ot4z.fsf@gmail.com> Date: Thu, 12 Mar 2020 15:21:26 -0400 Content-Transfer-Encoding: quoted-printable Message-Id: <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Then I=E2=80=99ll use =E2=80=9Clayout=E2=80=9D in the menu bar buttons = and =E2=80=9Cwindow configuration=E2=80=9D in other places. A plus for = =E2=80=9Clayout=E2=80=9D in UI is that it=E2=80=99s shorter.=20 Yuan= From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 13 Mar 2020 20:10:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158413015621436 (code B ref 39181); Fri, 13 Mar 2020 20:10:02 +0000 Received: (at 39181) by debbugs.gnu.org; 13 Mar 2020 20:09:16 +0000 Received: from localhost ([127.0.0.1]:60269 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCqcO-0005Zg-Dk for submit@debbugs.gnu.org; Fri, 13 Mar 2020 16:09:16 -0400 Received: from mail-qk1-f177.google.com ([209.85.222.177]:37504) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCqcM-0005ZO-BC for 39181@debbugs.gnu.org; Fri, 13 Mar 2020 16:09:14 -0400 Received: by mail-qk1-f177.google.com with SMTP id z25so9907248qkj.4 for <39181@debbugs.gnu.org>; Fri, 13 Mar 2020 13:09:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=hhC992VrgmYvF+v418x3RnbxjtN6hIwPyRZI8u5+6qQ=; b=lzIkQniQ3zor08tCZnVKJSEAlBzLRLy2zbmg5xjo3HSfFoL6E+dE3jLBzZuJ2gL47h t46f+WO5ajkDyDZ0V5Pr0/Z9TadXOQQKw0ozaLGTLjsPncunSo7Xt9N/AW/TkkXLv/Lk 2+UeP7kchObzhZJfXLv2IIDs8hpq6Ddg9vGvGXBrUcBu7vOdDXMazFTQyYKy9KvlodO0 7E5FB4f4JUw8R1OjDjlquoIrO9bFKZIAGjYaonOGu8jdkyzUN8VvzVNONT17LxN4yjTS Jn8lQchn+2s6vk0R5zjrTQPNFe8/mGMKvdBw5UKTs7pNVNu35avHQDMNO3Ro/PUecK1w WzmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=hhC992VrgmYvF+v418x3RnbxjtN6hIwPyRZI8u5+6qQ=; b=NhTB0ws/iU3/jpQEihxlSB9aMUEFn+KWp0bdySoCHvCsBRIMEIXtB/EOiBmN2qL+GV K3J25P86IF2Dy6qcuhfHxIijoVDvhrusGvujxZ6gVmRBk0+yu/o/41O+rkR+QMApo1pb Pp9+2cRcW/JC137mK/h2d1tBskR0E4y1O9Ia06ol+dL7fqg9QLIsvXc02puFeKTjBRrN ORCpr7+vB5dDydeeDGarHNFpyTcvalQCO1m69ZRFfXH5ysuGePZPZzjceDijL0PlP8O7 ZWy8PKpV3osAhaYngnsmJFuxnXXyqC+D3iQ+BWlzZJt6glM4qLigQ9Nm2dy//cg1RDCe WmrA== X-Gm-Message-State: ANhLgQ1dA4E9rOFIBUZaPQo7LCIhSE3LBE8I3Vmb9B9ttzzaI0G2kjXG uksLTrspSjxX1ZJDKkXZXvM= X-Google-Smtp-Source: ADFU+vtG+JaAipP8wKglhrI85Y3YQACuOz2qTPmAmlsMK8G2263gNewvNGGhlCRsSUKqShY65v0pGQ== X-Received: by 2002:a37:884:: with SMTP id 126mr14383979qki.72.1584130148820; Fri, 13 Mar 2020 13:09:08 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id m6sm5060997qkh.33.2020.03.13.13.09.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Mar 2020 13:09:07 -0700 (PDT) From: Yuan Fu Message-Id: <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_B0F56DFC-15AB-4638-BC9F-4D248EC1057C" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Fri, 13 Mar 2020 16:09:06 -0400 In-Reply-To: <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_B0F56DFC-15AB-4638-BC9F-4D248EC1057C Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Here=E2=80=99s the patch that addresses =C5=A0t=C4=9Bp=C3=A1n and = Martin=E2=80=99s review: Apart from fixing all the mentioned issues, I also moved =E2=80=9CRestore = Window Layout=E2=80=9D button from =E2=80=9CGDB-MI=E2=80=9D menu to = =E2=80=9CGDB-WINDOWS=E2=80=9D menu, since it fits there better; I also = mentioned that this button works for the new user-supplied default = layout, too, if a user sets `gdb-default-window-configuration-file=E2=80=99= .=20 As for the layout vs configuration, I used =E2=80=9Clayout=E2=80=9D in = UI buttons, and used =E2=80=9Cwindow configuration (i.e. window = layout)=E2=80=9D in help echos. Hopefully the user will understand that = we use =E2=80=9Cwindow configuration=E2=80=9D internally but it=E2=80=99s = (almost) the same as a window layout in gdb. This also plays well with = existing UI that uses =E2=80=9Clayout=E2=80=9D. The window layout that = we save to a file in gdb is a window configuration structure with some = small differences: simply loading that window configuration with = `window-state-put' doesn=E2=80=99t give back your gdb layout. (because = all the buffers (local, breakpoint, etc) are different from session to = session.) `gdb-load-window-configuration` does some trick to recreate = each buffers. Apart from that the layout and window configuration is the = same thing. Martin suggests to mention the layout vs window configuration in the = manual, should I also document this new feature in the same section? = (Let me learn texinfo first ;-) Yuan --Apple-Mail=_B0F56DFC-15AB-4638-BC9F-4D248EC1057C Content-Type: multipart/mixed; boundary="Apple-Mail=_BBA7F43D-DAB4-4458-A837-BCB492859B7F" --Apple-Mail=_BBA7F43D-DAB4-4458-A837-BCB492859B7F Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Here=E2=80=99s the = patch that addresses =C5=A0t=C4=9Bp=C3=A1n and Martin=E2=80=99s review:

Apart from fixing all = the mentioned issues, I also moved =E2=80=9CRestore Window Layout=E2=80=9D= button from =E2=80=9CGDB-MI=E2=80=9D menu to =E2=80=9CGDB-WINDOWS=E2=80=9D= menu, since it fits there better; I also mentioned that this button = works for the new user-supplied default layout, too, if a user sets = `gdb-default-window-configuration-file=E2=80=99. 

As for the layout vs = configuration, I used =E2=80=9Clayout=E2=80=9D in UI buttons, and used = =E2=80=9Cwindow configuration (i.e. window layout)=E2=80=9D in help = echos. Hopefully the user will understand that we use =E2=80=9Cwindow = configuration=E2=80=9D internally but it=E2=80=99s (almost) the same as = a window layout in gdb. This also plays well with existing UI that uses = =E2=80=9Clayout=E2=80=9D. The window layout that we save to a file in = gdb is a window configuration structure with some small differences: = simply loading that window configuration with `window-state-put' = doesn=E2=80=99t give back your gdb layout. (because all the buffers = (local, breakpoint, etc) are different from session to session.) = `gdb-load-window-configuration` does some trick to recreate each = buffers. Apart from that the layout and window configuration is the same = thing.

Martin = suggests to mention the layout vs window configuration in the manual, = should I also document this new feature in the same section? (Let me = learn texinfo first ;-)

Yuan

= --Apple-Mail=_BBA7F43D-DAB4-4458-A837-BCB492859B7F Content-Disposition: attachment; filename=new-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=2059590d8a8b21908cefc10787029a6db1ae5fdfef=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Tue,=20= 3=20Mar=202020=2018:30:03=20-0500=0ASubject:=20[PATCH]=20Add=20= store/restore=20window=20configuration=20feature=20for=20gdb-mi=0A=0AAdd=20= a=20feature=20that=20allows=20a=20user=20to=20save=20a=20gdb=20window=0A= configuration=20(window=20layout)=20to=20a=20file=20with=0A= 'gdb-save-window-configuration'=20and=20load=20it=20back=20with=0A= 'gdb-load-window-configuration'.=20=20Set=20a=20default=20window=20= configuration=0Aby=20setting=20'gdb-default-window-configuration-file'.=20= =20Note=20that=20for=20the=0Adefault=20window=20configuration=20to=20= take=20effect,=20'gdb-many-windows'=20needs=0Ato=20be=20t.=20=20Add=20an=20= option=20to=20make=20gdb=20preserve=20the=20window=20configuration=0A= that=20the=20user=20had=20before=20starting=20gdb.=20=20In=20window.el,=20= add=0A'with-selected-window-non-dedicated'.=0A*=20= lisp/progmodes/gdb-mi.el=20(require):=20add=20'pcase'=20and=20'cl-seq'.=0A= (gdb--window-configuration-before):=20New=20variable.=0A= (gdb-restore-window-configuration-after-quit):=20New=20custom=20= variable.=0A(gdb-window-configuration-directory,=0A= gdb-default-window-configuration-file):=20New=20variables.=0A(gdb):=20= Save=20configuration=20on=20startup.=0A(gud-menu-map):=20Add=20"Load=20= Layout"=20and=20"Save=20Layout"=20to=20menu.=20Add=0A"Restore=20Layout=20= After=20Quit"=20button=20to=20menu.=20=20Rename=20"Restore=20Window=0A= Layout"=20to=20"Restore=20Default=20Layout",=20add=20some=20help=20echo,=20= and=20move=20it=0Afrom=20"GDB-MI"=20menu=20to=20"GDB-WINDOWs"=20menu.=0A= (gdb-toggle-restore-window-configuration):=20New=20function.=0A= (gdb-get-source-buffer):=20New=20function,=20extracted=20out=20of=0A= 'gdb-restore-window'.=0A(gdb-setup-windows):=20Add=20a=20condition=20= branch=20that=20loads=20default=20window=0Aconfiguration=20when=20= available.=0A(gdb-buffer-p,=20gdb-function-buffer-p,=20gdb--buffer-type,=0A= gdb-save-window-configuration,=20gdb-load-window-configuration):=20New=0A= functions.=0A(gdb-restore-windows):=20Edit=20docstring=20to=20mention=0A= 'gdb-default-window-configuration-file'=20and=20add=20comments.=0A= (gdb-reset):=20Restore=20window=20configuration=20after=20quit.=0A= (gdb-get-source-file):=20Add=20comments.=0A*=20lisp/window.el=20= (with-window-non-dedicated):=20New=20macro.=0A---=0A=20= lisp/progmodes/gdb-mi.el=20|=20279=20= +++++++++++++++++++++++++++++++++------=0A=20lisp/window.el=20=20=20=20=20= =20=20=20=20=20=20|=20=2018=20+++=0A=202=20files=20changed,=20259=20= insertions(+),=2038=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= da5a2a503a..e1a2993b4e=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-92,6=20+92,8=20@@=0A=20(require=20= 'json)=0A=20(require=20'bindat)=0A=20(require=20'cl-lib)=0A+(require=20= 'cl-seq)=0A+(eval-when-compile=20(require=20'pcase))=0A=20=0A=20= (declare-function=20speedbar-change-initial-expansion-list=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A= @@=20-253,6=20+255,25=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20= disposition=20of=20output=20generated=20by=20commands=20that=0A=20=09=20=20= =20=20=20=20=20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20= behalf.")=0A=20=0A+(defvar=20gdb--window-configuration-before=20nil=0A+=20= =20"Stores=20the=20window=20configuration=20before=20starting=20gdb.")=0A= +=0A+(defcustom=20gdb-restore-window-configuration-after-quit=20nil=0A+=20= =20"Whether=20to=20restore=20the=20window=20configuration=20the=20user=20= had=20before=20gdb=20starts.=0A+=0A+Possible=20values=20are:=0A+=20=20=20= =20t=20--=20Always=20restore.=0A+=20=20=20=20nil=20--=20Don't=20restore.=0A= +=20=20=20=20`if-gdb-show-main'=20--=20Restore=20only=20if=20variable=20= `gdb-show-main'=20is=20non-nil=0A+=20=20=20=20`if-gdb-many-windows'=20--=20= Restore=20only=20if=20variable=20`gdb-many-windows'=20is=20non-nil."=0A+=20= =20:type=20'(choice=0A+=20=20=20=20=20=20=20=20=20=20(const=20:tag=20= "Always=20restore"=20t)=0A+=20=20=20=20=20=20=20=20=20=20(const=20:tag=20= "Don't=20restore"=20nil)=0A+=20=20=20=20=20=20=20=20=20=20(const=20:tag=20= "Depends=20on=20`gdb-show-main'"=20'if-gdb-show-main)=0A+=20=20=20=20=20=20= =20=20=20=20(const=20:tag=20"Depends=20on=20`gdb-many-windows'"=20= 'if-gdb-many-windows))=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-603,6=20+624,26=20@@=20gdb-show-main=0A=20=20=20= :group=20'gdb=0A=20=20=20:version=20"22.1")=0A=20=0A+(defcustom=20= gdb-window-configuration-directory=20user-emacs-directory=0A+=20=20"The=20= default=20directory=20where=20window=20configuration=20files=20are=20= stored.=0A+If=20nil,=20use=20`default-directory'."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A= +(defcustom=20gdb-default-window-configuration-file=20nil=0A+=20=20"If=20= non-nil,=20GDB=20loads=20this=20window=20configuration=20file=20on=20= startup.=0A+=0A+This=20should=20be=20the=20path=20to=20the=20window=20= configuration=20file.=20=20If=20the=20path=0A+is=20not=20an=20absolute=20= path,=20GDB=20treats=20it=20as=20a=20relative=20path=20and=0A+looks=20= under=20`gdb-window-configuration-directory'.=0A+=0A+Note=20that=20this=20= variable=20only=20takes=20effect=20when=20variable=0A+`gdb-many-windows'=20= is=20t."=0A+=20=20:type=20'string=0A+=20=20:group=20'gdb=0A+=20=20= :version=20"28.1")=0A+=0A=20(defvar=20gdbmi-debug-mode=20nil=0A=20=20=20= "When=20non-nil,=20print=20the=20messages=20sent/received=20from=20= GDB/MI=20in=20*Messages*.")=0A=20=0A@@=20-761,6=20+802,12=20@@=20gdb=0A=20= =20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20=20=20=20= =20"Multiple=20debugging=20requires=20restarting=20in=20text=20command=20= mode"))=0A+=0A+=20=20;;=20Save=20window=20configuration=20before=20= starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20after=20gdb=20= quits.=20Save=20it=20regardless=20of=20the=20value=20of=0A+=20=20;;=20= `gdb-restore-window-configuration-after-quit'.=0A+=20=20(setq=20= gdb--window-configuration-before=20(window-state-get))=0A+=0A=20=20=20;;=0A= =20=20=20(gud-common-init=20command-line=20nil=20= 'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4491,6=20+4538,15=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20(define-key=20= gud-menu-map=20[displays]=0A=20=20=20=20=20`(menu-item=20"GDB-Windows"=20= ,menu=0A=20=09=09:visible=20(eq=20gud-minor-mode=20'gdbmi)))=0A+=20=20= (define-key=20menu=20[gdb-restore-windows]=0A+=20=20=20=20'(menu-item=20= "Restore=20Default=20Layout"=20gdb-restore-windows=0A+=20=20=20=20=20=20= :help=20"Restore=20standard=20layout=20for=20debug=20session.=20I.e.,=20= the=20layout=20we=20get=20when=20session=20starts."))=0A+=20=20= (define-key=20menu=20[load-layout]=20'("Load=20Layout"=20"Load=20GDB=20= window=20configuration=20(i.e.=20window=20layout)=20from=20a=20file"=20.=20= gdb-load-window-configuration))=0A+=20=20(define-key=20menu=20= [save-layout]=20'("Save=20Layout"=20"Save=20current=20GDB=20window=20= configuration=20(i.e.=20window=20layout)=20to=20a=20file"=20.=20= gdb-save-window-configuration))=0A+=20=20(define-key=20menu=20= [restore-layout-after-quit]=0A+=20=20=20=20'(menu-item=20"Restore=20= Layout=20After=20Quit"=20gdb-toggle-restore-window-configuration=0A+=20=20= =20=20=20=20=20:button=20(:toggle=20.=20= gdb-restore-window-configuration-after-quit)=0A+=20=20=20=20=20=20=20= :help=20"Toggle=20between=20always=20restore=20the=20window=20= configuration=20(i.e.=20window=20layout)=20after=20GDB=20quits=20and=20= never=20restore.\n=20You=20can=20also=20change=20this=20setting=20in=20= Customize=20to=20conditionally=20restore."))=0A=20=20=20(define-key=20= menu=20[gdb]=20'("Gdb"=20.=20gdb-display-gdb-buffer))=0A=20=20=20= (define-key=20menu=20[threads]=20'("Threads"=20.=20= gdb-display-threads-buffer))=0A=20=20=20(define-key=20menu=20[memory]=20= '("Memory"=20.=20gdb-display-memory-buffer))=0A@@=20-4529,9=20+4585,6=20= @@=20gdb-preempt-existing-or-display-buffer=0A=20=20=20=20=20'(menu-item=20= "Display=20Other=20Windows"=20gdb-many-windows=0A=20=20=20=20=20=20=20= :help=20"Toggle=20display=20of=20locals,=20stack=20and=20breakpoint=20= information"=0A=20=20=20=20=20=20=20:button=20(:toggle=20.=20= gdb-many-windows)))=0A-=20=20(define-key=20menu=20[gdb-restore-windows]=0A= -=20=20=20=20'(menu-item=20"Restore=20Window=20Layout"=20= gdb-restore-windows=0A-=20=20=20=20=20=20:help=20"Restore=20standard=20= layout=20for=20debug=20session."))=0A=20=20=20(define-key=20menu=20= [sep1]=0A=20=20=20=20=20'(menu-item=20"--"))=0A=20=20=20(define-key=20= menu=20[all-threads]=0A@@=20-4606,41=20+4659,174=20@@=20= gdb-set-window-buffer=0A=20=20=20(set-window-buffer=20window=20= (get-buffer=20name))=0A=20=20=20(set-window-dedicated-p=20window=20t))=0A= =20=0A+(defun=20gdb-toggle-restore-window-configuration=20()=0A+=20=20= "Toggle=20whether=20to=20restore=20window=20configuration=20when=20GDB=20= quit."=0A+=20=20(interactive)=0A+=20=20(setq=20= gdb-restore-window-configuration-after-quit=0A+=20=20=20=20=20=20=20=20= (not=20gdb-restore-window-configuration-after-quit)))=0A+=0A+(defun=20= gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20displaying=20= source=20file=20or=20nil=20if=20we=20can't=20find=20one.=0A+=0A+The=20= source=20file=20is=20the=20file=20that=20contains=20the=20source=20= location=0A+where=20GDB=20stops.=20=20There=20could=20be=20multiple=20= source=20files=20during=20a=0A+debugging=20session,=20we=20get=20the=20= most=20recently=20showed=20one.=20=20If=0A+program=20hasn't=20start=20= running=20yet,=20the=20source=20file=20is=20the=20\"main=0A+file\"=20= where=20the=20GDB=20session=20starts=20(see=20`gdb-main-file')."=0A+=20=20= (if=20gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-configuration-file=0A+=20=20=20=20=20=20= (gdb-load-window-configuration=0A+=20=20=20=20=20=20=20(if=20= (file-name-absolute-p=20gdb-default-window-configuration-file)=0A+=20=20=20= =20=20=20=20=20=20=20=20gdb-default-window-configuration-file=0A+=20=20=20= =20=20=20=20=20=20(expand-file-name=20= gdb-default-window-configuration-file=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-window-configuration-directory)))=0A+=20=20=20=20;;=20Create=20= default=20layout=20as=20before.=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-stack-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-breakpoints-buffer)=0A+=20=20=20=20(set-window-dedicated-p=20= (selected-window)=20nil)=0A+=20=20=20=20(switch-to-buffer=20= gud-comint-buffer)=0A+=20=20=20=20(delete-other-windows)=0A+=20=20=20=20= (let=20((win0=20(selected-window))=0A+=20=20=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20= /=20(window-height)=203)))=0A+=20=20=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20=20=20=20=20= (select-window=20win2)=0A+=20=20=20=20=20=20(set-window-buffer=20win2=20= (or=20(gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect)))=0A+=20=20=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A+=20=20=20=20=20=20(let=20((win4=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=0A= +=20=20=20=20=20=20=20=20=20(gdb-get-buffer-create=20'gdb-inferior-io)=20= nil=20win4))=0A+=20=20=20=20=20=20(select-window=20win1)=0A+=20=20=20=20=20= =20(gdb-set-window-buffer=20(gdb-stack-buffer-name))=0A+=20=20=20=20=20=20= (let=20((win5=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=20(if=20gdb-show-threads-by-default=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20GDB-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20GDB=20function=20buffer.=0A+=0A= +Function=20buffers=20are=20locals=20buffer,=20registers=20buffer,=20= etc,=20but=0A+not=20including=20main=20command=20buffer=20(the=20one=20= where=20you=20type=20GDB=0A+commands)=20or=20source=20buffers=20(that=20= display=20program=20source=20code)."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(derived-mode-p=20'gdb-parent-mode=20= 'gdb-inferior-io-mode)))=0A+=0A+(defun=20gdb--buffer-type=20(buffer)=0A+=20= =20"Return=20the=20type=20of=20BUFFER=20if=20it=20is=20a=20function=20= buffer.=0A+=0A+Buffer=20type=20is=20like=20`gdb-registers-type',=20= `gdb-stack-buffer'.=0A+These=20symbols=20are=20used=20by=20= `gdb-get-buffer-create'.=0A+=0A+Return=20nil=20if=20BUFFER=20isn't=20a=20= GDB=20function=20buffer."=0A+=20=20(with-current-buffer=20buffer=0A+=20=20= =20=20(cl-loop=20for=20rule=20in=20gdb-buffer-rules=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20for=20mode-name=20=3D=20(gdb-rules-buffer-mode=20= rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20for=20type=20=3D=20(car=20= rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20if=20(eq=20mode-name=20= major-mode)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20return=20type=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20finally=20return=20nil)))=0A+=0A= +(defun=20gdb-save-window-configuration=20(file)=0A+=20=20"Save=20= current=20window=20configuration=20(i.e.=20window=20layout)=20to=20FILE.=0A= +=0A+You=20can=20later=20restore=20this=20configuration=20from=20that=20= file=20by=0A+`gdb-load-window-configuration'."=0A+=20=20(interactive=20= (list=20(read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20"Save=20window=20configuration=20to=20file:=20"=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-window-configuration-directory=20default-directory))))=0A+=20=20;;=20= We=20replace=20the=20buffer=20in=20each=20window=20with=20a=20= placeholder,=20store=0A+=20=20;;=20the=20buffer=20type=20(register,=20= breakpoint,=20etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20write=20= the=20window=20configuration=20to=20the=20file.=0A+=20=20= (save-window-excursion=0A+=20=20=20=20(let=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20=20=20=20=20=20=20=20= =20=20(window-persistent-parameters=0A+=20=20=20=20=20=20=20=20=20=20=20= (cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters)))=0A+=20=20=20=20=20=20(unwind-protect=0A+=20= =20=20=20=20=20=20=20=20=20(dolist=20(win=20(window-list=20nil=20= 'no-minibuffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(select-window=20= win)=0A+=20=20=20=20=20=20=20=20=20=20=20=20(when=20(gdb-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-parameter=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cond=20((gdb-function-buffer-p=20(current-buffer))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=201)=20If=20a=20user=20= arranged=20the=20window=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20configuration=20herself=20and=20saves=20it,=20= windows=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20are=20probably=20not=20dedicated.=20=202)=20We=20use=20the=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20same=20= dedication=20flag=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20`gdb-display-buffer'.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(set-window-dedicated-p=20= nil=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20We=20save=20this=20gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20can=20later=20= pass=20it=20to=20`gdb-get-buffer-create';=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20one=20example:=20= `gdb-registers-buffer'.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(or=20(gdb--buffer-type=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (error=20"Unrecognized=20gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Command=20= buffer.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ((derived-mode-p=20'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20((equal=20(selected-window)=20= gdb-source-window)=20'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(with-window-non-dedicated=20nil=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(set-window-prev-buffers=20= (selected-window)=20nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20= =20=20=20=20;;=20Save=20the=20window=20configuration=20to=20FILE.=0A+=20=20= =20=20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20= t)))=0A+=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20= =20=20=20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-load-window-configuration=20(file)=0A+=20=20"Restore=20window=20= configuration=20(i.e.=20window=20layout)=20from=20FILE.=0A+=0A+FILE=20= should=20be=20a=20window=20configuration=20file=20saved=20by=0A= +`gdb-save-window-configuration'."=0A+=20=20(interactive=20(list=20= (read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"Restore=20window=20configuration=20from=20file:=20"=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-window-configuration-directory=20default-directory))))=0A+=20=20;;=20= Basically,=20we=20restore=20window=20configuration=20and=20go=20through=20= each=0A+=20=20;;=20window=20and=20restore=20the=20function=20buffers.=0A= +=20=20(let*=20((placeholder=20(get-buffer-create=20"=20= *gdb-placeholder*")))=0A+=20=20=20=20(unwind-protect=20;=20Don't=20leak=20= buffer.=0A+=20=20=20=20=20=20=20=20(let=20((window-config=20= (with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(insert-file-contents=20file)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20We=20need=20to=20go=20to=20point-min=20because=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20`read'=20reads=20from=20point=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read=20= (current-buffer))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (source-buffer=20(or=20(gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20Do=20the=20same=20thing=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-setup-windows'=20if=20no=20source=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= buffer=20is=20found.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20(window-state-put=20= window-config=20(frame-root-window))=0A+=20=20=20=20=20=20=20=20=20=20= (dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20buffer-type=20(window-parameter=20nil=20= 'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pcase=20= buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('source=20= (when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20gdb-source-window=20(selected-window))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('command=20= (switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(_=20(let=20((buffer=20(gdb-get-buffer-create=20= buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(with-window-non-dedicated=20nil=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= buffer))))))))=0A+=20=20=20=20=20=20(kill-buffer=20placeholder))))=0A=20=0A= =20(define-minor-mode=20gdb-many-windows=0A=20=20=20"If=20nil=20just=20= pop=20up=20the=20GUD=20buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20= -4658,7=20+4844,12=20@@=20gdb-many-windows=0A=20=0A=20(defun=20= gdb-restore-windows=20()=0A=20=20=20"Restore=20the=20basic=20arrangement=20= of=20windows=20used=20by=20gdb.=0A-This=20arrangement=20depends=20on=20= the=20value=20of=20option=20`gdb-many-windows'."=0A+This=20arrangement=20= depends=20on=20the=20value=20of=20option=0A+`gdb-many-windows'=20and=20= `gdb-default-window-configuration-file'."=0A+=20=20;;=20This=20function=20= is=20used=20when=20the=20user=20messed=20up=20window=0A+=20=20;;=20= configuration=20and=20wants=20to=20"reset=20to=20default".=20=20The=20= function=20that=0A+=20=20;;=20sets=20up=20window=20configuration=20on=20= start=20up=20is=0A+=20=20;;=20`gdb-get-source-file'.=0A=20=20=20= (interactive)=0A=20=20=20(switch-to-buffer=20gud-comint-buffer)=20= ;Select=20the=20right=20window=20and=20frame.=0A=20=20=20= (delete-other-windows)=0A@@=20-4705,11=20+4896,23=20@@=20gdb-reset=0A=20=20= =20(if=20(boundp=20'speedbar-frame)=20(speedbar-timer-fn))=0A=20=20=20= (setq=20gud-running=20nil)=0A=20=20=20(setq=20gdb-active-process=20nil)=0A= -=20=20(remove-hook=20'after-save-hook=20'gdb-create-define-alist=20t))=0A= +=20=20(remove-hook=20'after-save-hook=20'gdb-create-define-alist=20t)=0A= +=20=20;;=20Recover=20window=20configuration.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-configuration-after-quit=20t)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(and=20(eq=20gdb-restore-window-configuration-after-quit=20= 'if-gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-configuration-after-quit=20'if-gdb-many-windows)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20= =20=20=20(when=20gdb--window-configuration-before=0A+=20=20=20=20=20=20= (window-state-put=20gdb--window-configuration-before)=0A+=20=20=20=20=20=20= ;;=20This=20way=20we=20don't=20accidentally=20restore=20an=20outdated=20= window=0A+=20=20=20=20=20=20;;=20configuration.=0A+=20=20=20=20=20=20= (setq=20gdb--window-configuration-before=20nil))))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A=20= buffers,=20if=20required."=0A+=20=20;;=20This=20function=20is=20called=20= only=20once=20on=20startup.=0A=20=20=20(goto-char=20(point-min))=0A=20=20= =20(if=20(re-search-forward=20gdb-source-file-regexp=20nil=20t)=0A=20=20=20= =20=20=20=20(setq=20gdb-main-file=20(read=20(match-string=201))))=0Adiff=20= --git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= bd825c09e1..d774d906cd=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,24=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-window-non-dedicated=20(window=20&rest=20body)=0A+=20=20= "Evaluate=20BODY=20with=20WINDOW=20selected=20and=20temporarily=20made=20= non-dedicated.=0A+=0A+If=20WINDOW=20is=20nil,=20use=20the=20selected=20= window.=20=20Return=20the=20value=20of=20the=20last=20form=20in=20BODY."=0A= +=20=20(declare=20(indent=201)=20(debug=20t))=0A+=20=20(let=20= ((window-dedicated-sym=20(gensym))=0A+=20=20=20=20=20=20=20=20= (window-sym=20(gensym)))=0A+=20=20=20=20`(let*=20((,window-sym=20= (window-normalize-window=20,window=20t))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(,window-dedicated-sym=20(window-dedicated-p=20,window-sym)))=0A+=20= =20=20=20=20=20=20(set-window-dedicated-p=20,window-sym=20nil)=0A+=20=20=20= =20=20=20=20(unwind-protect=0A+=20=20=20=20=20=20=20=20=20=20=20(progn=20= ,@body)=0A+=20=20=20=20=20=20=20=20=20;;=20`window-dedicated-p'=20= returns=20the=20value=20set=20by=0A+=20=20=20=20=20=20=20=20=20;;=20= `set-window-dedicated-p',=20which=20differentiates=20non-nil=20and=0A+=20= =20=20=20=20=20=20=20=20;;=20t,=20so=20we=20cannot=20simply=20use=20t=20= here.=20That's=20why=20we=20use=0A+=20=20=20=20=20=20=20=20=20;;=20= `window-dedicated-sym'.=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20,window-sym=20,window-dedicated-sym)))))=0A+=0A= =20;;=20The=20following=20two=20functions=20are=20like=20= `window-next-sibling'=20and=0A=20;;=20`window-prev-sibling'=20but=20the=20= WINDOW=20argument=20is=20_not_=20optional=20(so=0A=20;;=20they=20don't=20= substitute=20the=20selected=20window=20for=20nil),=20and=20they=20return=0A= --=20=0A2.25.1=0A=0A= --Apple-Mail=_BBA7F43D-DAB4-4458-A837-BCB492859B7F Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii
--Apple-Mail=_BBA7F43D-DAB4-4458-A837-BCB492859B7F-- --Apple-Mail=_B0F56DFC-15AB-4638-BC9F-4D248EC1057C-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 13 Mar 2020 21:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158413397427241 (code B ref 39181); Fri, 13 Mar 2020 21:13:01 +0000 Received: (at 39181) by debbugs.gnu.org; 13 Mar 2020 21:12:54 +0000 Received: from localhost ([127.0.0.1]:60289 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCrby-00075J-8K for submit@debbugs.gnu.org; Fri, 13 Mar 2020 17:12:54 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:38512) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCrbw-000756-9Q for 39181@debbugs.gnu.org; Fri, 13 Mar 2020 17:12:53 -0400 Received: by mail-wm1-f66.google.com with SMTP id t13so5387882wmi.3 for <39181@debbugs.gnu.org>; Fri, 13 Mar 2020 14:12:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=tsyJsC8i1kSTKRT8BVgU7mILFCUy6Tpq1gK/PYhhQJA=; b=otGaIbt5wJ9V7RamiOdx3jUxm9ENEsjAeYMzC4/h5T+b7D818c4thvRXGd9TNI5I23 /POrDKJNRgVmHdXvDN+fmjyAWVQEOpq9LGqvnfk4vyx+yPLryPxMsixMr5OvQWL8bwsW ZKGc6l6vyHauzujRDdfCmPylJua476FBdjEyYpy8sBhloAD+213feWWjsNQDDNwhnW+v TlbEbKJqNxMwUfnP8mtGfru1RcTqwyDW52KwqAVcjRUQpwtlsf+IrGhQ+7orv50p5wl3 OzP7YoQeTKfRvUnNFQ8sAJ/MKpZw4d56406h96AOT0wpmtDOkDK494/CAjPuffJ/wG2Y MkcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=tsyJsC8i1kSTKRT8BVgU7mILFCUy6Tpq1gK/PYhhQJA=; b=kW6ap8C+2rm83zXxoF0oOjAm1eGM+nRanC2yA2Q7mf1nx4Dl8sWvwftwHjCGegJlu1 y26Ge/65gbHUr54iSb5O5rfdJP+qrZ///og2/BhRuStIA/YCX2k6KmV/zePdbKs9APeY 00bRPswI6buK2HMWCENSKSffq8uWk0YVC/b37nCN6bKxDkPE/8x3OERAWZSODBXiV3gd 2wJeH/XLxn1f/IJqDJJMnf4exkcj8C1oHpiLlC+s5SWvXNfYy4XhO+S/naemMwihoSwE 55xjjVrm1TXmb4fCnBQceboCxuiUrcyBMaGzR+Ep0T0CKWpCzLx8CjFhwNWL0pTvj2gf quzw== X-Gm-Message-State: ANhLgQ35JOuY+SDK6PyP1N7isYFELwURqEEtSGFgef1vw3G2IqPSYF4Z Iw2cixL6slsKkp/nY6Kpc60= X-Google-Smtp-Source: ADFU+vsU4hHr6d/GU4AKsnr+7hfSsBSyLh+FsIukgah8GLpnizY7ey5g52ShKqJSm12Q/XtrO4Ga0Q== X-Received: by 2002:a1c:5505:: with SMTP id j5mr2305236wmb.170.1584133966334; Fri, 13 Mar 2020 14:12:46 -0700 (PDT) Received: from localhost ([185.112.167.59]) by smtp.gmail.com with ESMTPSA id i6sm17403183wru.40.2020.03.13.14.12.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2020 14:12:45 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: <87lfo4netg.fsf@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Fri, 13 Mar 2020 22:13:05 +0100 Message-ID: <87h7ysnela.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 3.6 (+++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: [resending to Cc: Martin and the bug list, sorry] On Fri, 13 Mar 2020 16:09:06 -0400 Yuan Fu wrote: > Apart from fixing all the mentioned issues, Content analysis details: (3.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [185.112.167.59 listed in zen.spamhaus.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (stepnem[at]gmail.com) -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.128.66 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.128.66 listed in wl.mailspike.net] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.6 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: [resending to Cc: Martin and the bug list, sorry] On Fri, 13 Mar 2020 16:09:06 -0400 Yuan Fu wrote: > Apart from fixing all the mentioned issues, Content analysis details: (2.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [185.112.167.59 listed in zen.spamhaus.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.128.66 listed in wl.mailspike.net] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.128.66 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (stepnem[at]gmail.com) -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager [resending to Cc: Martin and the bug list, sorry] On Fri, 13 Mar 2020 16:09:06 -0400 Yuan Fu wrote: > Apart from fixing all the mentioned issues, Almost... :-) > The window layout that we save to a file in gdb is a window > configuration structure with some small differences: simply loading > that window configuration with `window-state-put' doesn=E2=80=99t give ba= ck > your gdb layout. (because all the buffers (local, breakpoint, etc) are > different from session to session.) `gdb-load-window-configuration` > does some trick to recreate each buffers. Apart from that the layout > and window configuration is the same thing. Thank you for the clarification! It would be nice to have that in the documentation as well. > @@ -253,6 +255,25 @@ gdb-output-sink > disposition of output generated by commands that > gdb mode sends to gdb on its own behalf.") >=20 > +(defvar gdb--window-configuration-before nil > + "Stores the window configuration before starting gdb.") > + > +(defcustom gdb-restore-window-configuration-after-quit nil > + "Whether to restore the window configuration the user had before gdb s= tarts. Probably better stick to the standard "If non-nil, restore...". > @@ -4491,6 +4538,15 @@ gdb-preempt-existing-or-display-buffer > (define-key gud-menu-map [displays] > `(menu-item "GDB-Windows" ,menu > :visible (eq gud-minor-mode 'gdbmi))) > + (define-key menu [gdb-restore-windows] > + '(menu-item "Restore Default Layout" gdb-restore-windows > + :help "Restore standard layout for debug session. I.e., the layout= we get when session starts.")) How about just "Restore standard layout for debug session (the layout we get when session starts)." Or, even more concisely, "Restore the initial GDB window layout"? > + (define-key menu [load-layout] '("Load Layout" "Load GDB window config= uration (i.e. window layout) from a file" . gdb-load-window-configuration)) You can omit the "i.e.". Actually, even better perhaps just "window configuration (layout)"? Similarly below. > @@ -4606,41 +4659,174 @@ gdb-set-window-buffer > (set-window-buffer window (get-buffer name)) > (set-window-dedicated-p window t)) >=20 > +(defun gdb-toggle-restore-window-configuration () > + "Toggle whether to restore window configuration when GDB quit." ^^^^ quits > + (interactive) > + (setq gdb-restore-window-configuration-after-quit > + (not gdb-restore-window-configuration-after-quit))) > + > +(defun gdb-get-source-buffer () > + "Return a buffer displaying source file or nil if we can't find one. > + > +The source file is the file that contains the source location > +where GDB stops. There could be multiple source files during a > +debugging session, we get the most recently showed one. If > +program hasn't start running yet, the source file is the \"main ^^^^^ started > +file\" where the GDB session starts (see `gdb-main-file')." > + (if gud-last-last-frame > + (gud-find-file (car gud-last-last-frame)) > + (when gdb-main-file > + (gud-find-file gdb-main-file)))) > + > (defun gdb-setup-windows () > "Layout the window pattern for option `gdb-many-windows'." ^^^^^^ "Lay out" (verb) > @@ -4658,7 +4844,12 @@ gdb-many-windows >=20 > (defun gdb-restore-windows () > "Restore the basic arrangement of windows used by gdb. > -This arrangement depends on the value of option `gdb-many-windows'." > +This arrangement depends on the value of option > +`gdb-many-windows' and `gdb-default-window-configuration-file'." How about "This arrangement depends on the values of `gdb-many-windows' and `gdb-default-window-configuration-file'." > diff --git a/lisp/window.el b/lisp/window.el > index bd825c09e1..d774d906cd 100644 > --- a/lisp/window.el > +++ b/lisp/window.el > @@ -278,6 +278,24 @@ with-displayed-buffer-window > (funcall ,vquit-function ,window ,value) > ,value))))) >=20 > +(defmacro with-window-non-dedicated (window &rest body) > + "Evaluate BODY with WINDOW selected and temporarily made non-dedicated. ^^^^^^^^^^^^ This is now no longer true. Thank you, =C5=A0t=C4=9Bp=C3=A1n P.S.: This time your patch somehow ended up hidden as application/ocet-stream after the HTML part, instead of inline in plain text. From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 13 Mar 2020 21:41:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158413564029834 (code B ref 39181); Fri, 13 Mar 2020 21:41:01 +0000 Received: (at 39181) by debbugs.gnu.org; 13 Mar 2020 21:40:40 +0000 Received: from localhost ([127.0.0.1]:60315 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCs2p-0007l7-TO for submit@debbugs.gnu.org; Fri, 13 Mar 2020 17:40:40 -0400 Received: from mail-qk1-f182.google.com ([209.85.222.182]:44838) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCs2o-0007ku-0l for 39181@debbugs.gnu.org; Fri, 13 Mar 2020 17:40:38 -0400 Received: by mail-qk1-f182.google.com with SMTP id f198so15209122qke.11 for <39181@debbugs.gnu.org>; Fri, 13 Mar 2020 14:40:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=h1hNJGv4psvqyVIqpPA9sBkmsqOW+AWY8lsJii1//Eg=; b=dDkMSnolH34BIzGyik8lQ4Z0bp2epGqNLLMkOlr0Xv2+ugHoICevwQp5MR7MXIjU59 BouyVFxU7faytcJjQdjvqVip6mIWQA5SVVXe6+CtV9gApMzXHb/avLIh6tZm2ul4XYCS GtMLk5pL2t9z98Vl7ozNBr1clGytJAK0fGsWewC+RmZz00CK3XgOh/UdgJiM38W8Ov2V H3vO3H9unN4LLgdiqm4F9YYHv+3DCEjBk/TREfhk1ri127pKLCiFU5R6Q3z7marwv4/g 1wGstDfLrRt1+l9Y+Cxh9giSV2IkSoQKlEYIXmbD6zgOawQRBo+7t5kmf5cBL176dssa POaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=h1hNJGv4psvqyVIqpPA9sBkmsqOW+AWY8lsJii1//Eg=; b=r6cb8KuozrS33IoxQ+kDRTD3jBuiAVPcLVNkqib8tgiaSdPpkX2h5TOx9mJ2X59Q8I 9SFj87LiT+u1ulG43ZA4FnntsTxaZyBKSKhUMPTZB3rmdOzBnM56M28cItxtalYjPb+z iwQWx9YsycI2xw+XsgGl2I4u69FsglJzm35yClFBuk7MgIaHtyvptZlpuSXnv9XR7lgh E10Q+BVy+CCgHRDr6676VcTneXF8/4jO8LPwszECNuGaz0I9xMQjcuJHNjHjUbB6kIkP 92Zh1JrJNjIi7GIGGtxr+pxo6kBPNLBGaSufTZpicMFjD7qonpS5QNcOAdAPciOTXlA2 t5Fg== X-Gm-Message-State: ANhLgQ2Msr8C3BiAEEaqKORUSINUBx1UAlF3AxoVCj0r5z7uwqwdJR9U Qwikli8hF+Fo67QXI6mZKXM= X-Google-Smtp-Source: ADFU+vvh48IGuSC60/Rla+yYjwniEx4gre+L0LDkJ1ql8thBVKSDI3MONNOpICEzkcrKEvpTVRbrAw== X-Received: by 2002:a05:620a:219a:: with SMTP id g26mr14748772qka.118.1584135632351; Fri, 13 Mar 2020 14:40:32 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id 16sm10433511qkk.79.2020.03.13.14.40.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Mar 2020 14:40:31 -0700 (PDT) From: Yuan Fu Message-Id: Content-Type: multipart/mixed; boundary="Apple-Mail=_9629F9EB-298F-4520-A2A2-F7CA5EE269BA" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Fri, 13 Mar 2020 17:40:30 -0400 In-Reply-To: <87h7ysnela.fsf@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_9629F9EB-298F-4520-A2A2-F7CA5EE269BA Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 >=20 >> The window layout that we save to a file in gdb is a window >> configuration structure with some small differences: simply loading >> that window configuration with `window-state-put' doesn=E2=80=99t = give back >> your gdb layout. (because all the buffers (local, breakpoint, etc) = are >> different from session to session.) `gdb-load-window-configuration` >> does some trick to recreate each buffers. Apart from that the layout >> and window configuration is the same thing. >=20 > Thank you for the clarification! It would be nice to have that in the > documentation as well. I added some comments in the menu-map code. Hope that=E2=80=99s helps. >> @@ -253,6 +255,25 @@ gdb-output-sink >> disposition of output generated by commands that >> gdb mode sends to gdb on its own behalf.") >>=20 >> +(defvar gdb--window-configuration-before nil >> + "Stores the window configuration before starting gdb.") >> + >> +(defcustom gdb-restore-window-configuration-after-quit nil >> + "Whether to restore the window configuration the user had before = gdb starts. >=20 > Probably better stick to the standard "If non-nil, restore...". >=20 >> @@ -4491,6 +4538,15 @@ gdb-preempt-existing-or-display-buffer >> (define-key gud-menu-map [displays] >> `(menu-item "GDB-Windows" ,menu >> :visible (eq gud-minor-mode 'gdbmi))) >> + (define-key menu [gdb-restore-windows] >> + '(menu-item "Restore Default Layout" gdb-restore-windows >> + :help "Restore standard layout for debug session. I.e., the = layout we get when session starts.")) >=20 > How about just "Restore standard layout for debug session (the layout = we > get when session starts)." Or, even more concisely, "Restore the = initial > GDB window layout"? >=20 >> + (define-key menu [load-layout] '("Load Layout" "Load GDB window = configuration (i.e. window layout) from a file" . = gdb-load-window-configuration)) >=20 > You can omit the "i.e.". Actually, even better perhaps just "window > configuration (layout)"? Similarly below. >=20 >> @@ -4606,41 +4659,174 @@ gdb-set-window-buffer >> (set-window-buffer window (get-buffer name)) >> (set-window-dedicated-p window t)) >>=20 >> +(defun gdb-toggle-restore-window-configuration () >> + "Toggle whether to restore window configuration when GDB quit." > ^^^^ > quits >=20 >> + (interactive) >> + (setq gdb-restore-window-configuration-after-quit >> + (not gdb-restore-window-configuration-after-quit))) >> + >> +(defun gdb-get-source-buffer () >> + "Return a buffer displaying source file or nil if we can't find = one. >> + >> +The source file is the file that contains the source location >> +where GDB stops. There could be multiple source files during a >> +debugging session, we get the most recently showed one. If >> +program hasn't start running yet, the source file is the \"main > ^^^^^ > started >=20 >> +file\" where the GDB session starts (see `gdb-main-file')." >> + (if gud-last-last-frame >> + (gud-find-file (car gud-last-last-frame)) >> + (when gdb-main-file >> + (gud-find-file gdb-main-file)))) >> + >> (defun gdb-setup-windows () >> "Layout the window pattern for option `gdb-many-windows'." > ^^^^^^ > "Lay out" (verb) All fixed. >=20 >> @@ -4658,7 +4844,12 @@ gdb-many-windows >>=20 >> (defun gdb-restore-windows () >> "Restore the basic arrangement of windows used by gdb. >> -This arrangement depends on the value of option `gdb-many-windows'." >> +This arrangement depends on the value of option >> +`gdb-many-windows' and `gdb-default-window-configuration-file'." >=20 > How about "This arrangement depends on the values of = `gdb-many-windows' > and `gdb-default-window-configuration-file'." >=20 I changed =E2=80=9Coption=E2=80=9D to =E2=80=9Cvariable=E2=80=9D, I have = to keep =E2=80=9Cvariable=E2=80=9D otherwise the byte compiler complains = about there existing function and variable =E2=80=9Cgdb-many-windows=E2=80= =9D. >> diff --git a/lisp/window.el b/lisp/window.el >> index bd825c09e1..d774d906cd 100644 >> --- a/lisp/window.el >> +++ b/lisp/window.el >> @@ -278,6 +278,24 @@ with-displayed-buffer-window >> (funcall ,vquit-function ,window ,value) >> ,value))))) >>=20 >> +(defmacro with-window-non-dedicated (window &rest body) >> + "Evaluate BODY with WINDOW selected and temporarily made = non-dedicated. > ^^^^^^^^^^^^ > This is now no longer true. >=20 Fixed. > Thank you, >=20 > =C5=A0t=C4=9Bp=C3=A1n Thanks for catching all the issues. >=20 > P.S.: This time your patch somehow ended up hidden as > application/ocet-stream after the HTML part, instead of inline in = plain > text. I=E2=80=99m not sure what causes that. I=E2=80=99ve been using Apple = Mail and I just copy the patch file into my reply. It actually surprises = me that they showed up in plain text before. This time I made the mail = plain text, hopefully that makes the patch also in plain text. Yuan --Apple-Mail=_9629F9EB-298F-4520-A2A2-F7CA5EE269BA Content-Disposition: attachment; filename=new-window.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="new-window.patch" Content-Transfer-Encoding: quoted-printable =46rom=20baaae030b7ec76d91ba2798278ed06f92d4d8eec=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Tue,=20= 3=20Mar=202020=2018:30:03=20-0500=0ASubject:=20[PATCH]=20Add=20= store/restore=20window=20configuration=20feature=20for=20gdb-mi=0A=0AAdd=20= a=20feature=20that=20allows=20a=20user=20to=20save=20a=20gdb=20window=0A= configuration=20(window=20layout)=20to=20a=20file=20with=0A= 'gdb-save-window-configuration'=20and=20load=20it=20back=20with=0A= 'gdb-load-window-configuration'.=20=20Set=20a=20default=20window=20= configuration=0Aby=20setting=20'gdb-default-window-configuration-file'.=20= =20Note=20that=20for=20the=0Adefault=20window=20configuration=20to=20= take=20effect,=20'gdb-many-windows'=20needs=0Ato=20be=20t.=20=20Add=20an=20= option=20to=20make=20gdb=20preserve=20the=20window=20configuration=0A= that=20the=20user=20had=20before=20starting=20gdb.=20=20In=20window.el,=20= add=0A'with-selected-window-non-dedicated'.=0A*=20= lisp/progmodes/gdb-mi.el=20(require):=20add=20'pcase'=20and=20'cl-seq'.=0A= (gdb--window-configuration-before):=20New=20variable.=0A= (gdb-restore-window-configuration-after-quit):=20New=20custom=20= variable.=0A(gdb-window-configuration-directory,=0A= gdb-default-window-configuration-file):=20New=20variables.=0A(gdb):=20= Save=20configuration=20on=20startup.=0A(gud-menu-map):=20Add=20"Load=20= Layout"=20and=20"Save=20Layout"=20to=20menu.=20Add=0A"Restore=20Layout=20= After=20Quit"=20button=20to=20menu.=20=20Rename=20"Restore=20Window=0A= Layout"=20to=20"Restore=20Default=20Layout",=20add=20some=20help=20echo,=20= and=20move=20it=0Afrom=20"GDB-MI"=20menu=20to=20"GDB-WINDOWs"=20menu.=0A= (gdb-toggle-restore-window-configuration):=20New=20function.=0A= (gdb-get-source-buffer):=20New=20function,=20extracted=20out=20of=0A= 'gdb-restore-window'.=0A(gdb-setup-windows):=20Add=20a=20condition=20= branch=20that=20loads=20default=20window=0Aconfiguration=20when=20= available.=20=20Fix=20docstring.=0A(gdb-buffer-p,=20= gdb-function-buffer-p,=20gdb--buffer-type,=0A= gdb-save-window-configuration,=20gdb-load-window-configuration):=20New=0A= functions.=0A(gdb-restore-windows):=20Edit=20docstring=20to=20mention=0A= 'gdb-default-window-configuration-file'=20and=20add=20comments.=0A= (gdb-reset):=20Restore=20window=20configuration=20after=20quit.=0A= (gdb-get-source-file):=20Add=20comments.=0A*=20lisp/window.el=20= (with-window-non-dedicated):=20New=20macro.=0A---=0A=20= lisp/progmodes/gdb-mi.el=20|=20292=20= +++++++++++++++++++++++++++++++++------=0A=20lisp/window.el=20=20=20=20=20= =20=20=20=20=20=20|=20=2018=20+++=0A=202=20files=20changed,=20271=20= insertions(+),=2039=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= da5a2a503a..686c2e5206=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-92,6=20+92,8=20@@=0A=20(require=20= 'json)=0A=20(require=20'bindat)=0A=20(require=20'cl-lib)=0A+(require=20= 'cl-seq)=0A+(eval-when-compile=20(require=20'pcase))=0A=20=0A=20= (declare-function=20speedbar-change-initial-expansion-list=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A= @@=20-253,6=20+255,25=20@@=20gdb-output-sink=0A=20=09=20=20=20=20=20=20=20= disposition=20of=20output=20generated=20by=20commands=20that=0A=20=09=20=20= =20=20=20=20=20gdb=20mode=20sends=20to=20gdb=20on=20its=20own=20= behalf.")=0A=20=0A+(defvar=20gdb--window-configuration-before=20nil=0A+=20= =20"Stores=20the=20window=20configuration=20before=20starting=20gdb.")=0A= +=0A+(defcustom=20gdb-restore-window-configuration-after-quit=20nil=0A+=20= =20"If=20non-nil,=20restore=20the=20window=20configuration=20the=20user=20= had=20before=20gdb=20starts.=0A+=0A+Possible=20values=20are:=0A+=20=20=20= =20t=20--=20Always=20restore.=0A+=20=20=20=20nil=20--=20Don't=20restore.=0A= +=20=20=20=20`if-gdb-show-main'=20--=20Restore=20only=20if=20variable=20= `gdb-show-main'=20is=20non-nil=0A+=20=20=20=20`if-gdb-many-windows'=20--=20= Restore=20only=20if=20variable=20`gdb-many-windows'=20is=20non-nil."=0A+=20= =20:type=20'(choice=0A+=20=20=20=20=20=20=20=20=20=20(const=20:tag=20= "Always=20restore"=20t)=0A+=20=20=20=20=20=20=20=20=20=20(const=20:tag=20= "Don't=20restore"=20nil)=0A+=20=20=20=20=20=20=20=20=20=20(const=20:tag=20= "Depends=20on=20`gdb-show-main'"=20'if-gdb-show-main)=0A+=20=20=20=20=20=20= =20=20=20=20(const=20:tag=20"Depends=20on=20`gdb-many-windows'"=20= 'if-gdb-many-windows))=0A+=20=20:group=20'gdb=0A+=20=20:version=20= "28.1")=0A+=0A=20(defcustom=20gdb-discard-unordered-replies=20t=0A=20=20=20= "Non-nil=20means=20discard=20any=20out-of-order=20GDB=20replies.=0A=20= This=20protects=20against=20lost=20GDB=20replies,=20assuming=20that=20= GDB=20always=0A@@=20-603,6=20+624,26=20@@=20gdb-show-main=0A=20=20=20= :group=20'gdb=0A=20=20=20:version=20"22.1")=0A=20=0A+(defcustom=20= gdb-window-configuration-directory=20user-emacs-directory=0A+=20=20"The=20= default=20directory=20where=20window=20configuration=20files=20are=20= stored.=0A+If=20nil,=20use=20`default-directory'."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A= +(defcustom=20gdb-default-window-configuration-file=20nil=0A+=20=20"If=20= non-nil,=20GDB=20loads=20this=20window=20configuration=20(layout)=20file=20= on=20startup.=0A+=0A+This=20should=20be=20the=20path=20to=20the=20window=20= configuration=20file.=20=20If=20the=20path=0A+is=20not=20an=20absolute=20= path,=20GDB=20treats=20it=20as=20a=20relative=20path=20and=0A+looks=20= under=20`gdb-window-configuration-directory'.=0A+=0A+Note=20that=20this=20= variable=20only=20takes=20effect=20when=20variable=0A+`gdb-many-windows'=20= is=20t."=0A+=20=20:type=20'string=0A+=20=20:group=20'gdb=0A+=20=20= :version=20"28.1")=0A+=0A=20(defvar=20gdbmi-debug-mode=20nil=0A=20=20=20= "When=20non-nil,=20print=20the=20messages=20sent/received=20from=20= GDB/MI=20in=20*Messages*.")=0A=20=0A@@=20-761,6=20+802,12=20@@=20gdb=0A=20= =20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20(error=0A=20=20=20=20=20= =20"Multiple=20debugging=20requires=20restarting=20in=20text=20command=20= mode"))=0A+=0A+=20=20;;=20Save=20window=20configuration=20before=20= starting=20gdb=20so=20we=20can=20restore=0A+=20=20;;=20it=20after=20gdb=20= quits.=20Save=20it=20regardless=20of=20the=20value=20of=0A+=20=20;;=20= `gdb-restore-window-configuration-after-quit'.=0A+=20=20(setq=20= gdb--window-configuration-before=20(window-state-get))=0A+=0A=20=20=20;;=0A= =20=20=20(gud-common-init=20command-line=20nil=20= 'gud-gdbmi-marker-filter)=0A=20=0A@@=20-4491,6=20+4538,26=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20(define-key=20= gud-menu-map=20[displays]=0A=20=20=20=20=20`(menu-item=20"GDB-Windows"=20= ,menu=0A=20=09=09:visible=20(eq=20gud-minor-mode=20'gdbmi)))=0A+=20=20= (define-key=20menu=20[gdb-restore-windows]=0A+=20=20=20=20'(menu-item=20= "Restore=20Initial=20Layout"=20gdb-restore-windows=0A+=20=20=20=20=20=20= :help=20"Restore=20the=20initial=20GDB=20window=20layout."))=0A+=20=20;;=20= Window=20layout=20vs=20window=20configuration:=20We=20use=20"window=20= layout"=20in=0A+=20=20;;=20GDB=20UI.=20=20Internally=20we=20refer=20to=20= "window=20configuration"=20because=0A+=20=20;;=20that's=20the=20data=20= structure=20used=20to=20store=20window=20layouts.=20=20Though=0A+=20=20= ;;=20bare=20in=20mind=20that=20there=20is=20a=20small=20difference=20= between=20what=20we=0A+=20=20;;=20store=20and=20what=20normal=20window=20= configuration=20functions=0A+=20=20;;=20output.=20Because=20GDB=20= buffers=20(source,=20local,=20breakpoint,=20etc)=20are=0A+=20=20;;=20= different=20between=20each=20debugging=20sessions,=20simply=20save/load=0A= +=20=20;;=20window=20configurations=20doesn't=0A+=20=20;;=20work.=20= `gdb-save-window-configuration'=20and=0A+=20=20;;=20= `gdb-load-window-configuration'=20do=20some=20tricks=20to=20store=20and=0A= +=20=20;;=20recreate=20each=20buffer=20in=20the=20layout.=0A+=20=20= (define-key=20menu=20[load-layout]=20'("Load=20Layout"=20"Load=20GDB=20= window=20configuration=20(layout)=20from=20a=20file"=20.=20= gdb-load-window-configuration))=0A+=20=20(define-key=20menu=20= [save-layout]=20'("Save=20Layout"=20"Save=20current=20GDB=20window=20= configuration=20(layout)=20to=20a=20file"=20.=20= gdb-save-window-configuration))=0A+=20=20(define-key=20menu=20= [restore-layout-after-quit]=0A+=20=20=20=20'(menu-item=20"Restore=20= Layout=20After=20Quit"=20gdb-toggle-restore-window-configuration=0A+=20=20= =20=20=20=20=20:button=20(:toggle=20.=20= gdb-restore-window-configuration-after-quit)=0A+=20=20=20=20=20=20=20= :help=20"Toggle=20between=20always=20restore=20the=20window=20= configuration=20(layout)=20after=20GDB=20quits=20and=20never=20= restore.\n=20You=20can=20also=20change=20this=20setting=20in=20Customize=20= to=20conditionally=20restore."))=0A=20=20=20(define-key=20menu=20[gdb]=20= '("Gdb"=20.=20gdb-display-gdb-buffer))=0A=20=20=20(define-key=20menu=20= [threads]=20'("Threads"=20.=20gdb-display-threads-buffer))=0A=20=20=20= (define-key=20menu=20[memory]=20'("Memory"=20.=20= gdb-display-memory-buffer))=0A@@=20-4529,9=20+4596,6=20@@=20= gdb-preempt-existing-or-display-buffer=0A=20=20=20=20=20'(menu-item=20= "Display=20Other=20Windows"=20gdb-many-windows=0A=20=20=20=20=20=20=20= :help=20"Toggle=20display=20of=20locals,=20stack=20and=20breakpoint=20= information"=0A=20=20=20=20=20=20=20:button=20(:toggle=20.=20= gdb-many-windows)))=0A-=20=20(define-key=20menu=20[gdb-restore-windows]=0A= -=20=20=20=20'(menu-item=20"Restore=20Window=20Layout"=20= gdb-restore-windows=0A-=20=20=20=20=20=20:help=20"Restore=20standard=20= layout=20for=20debug=20session."))=0A=20=20=20(define-key=20menu=20= [sep1]=0A=20=20=20=20=20'(menu-item=20"--"))=0A=20=20=20(define-key=20= menu=20[all-threads]=0A@@=20-4606,41=20+4670,174=20@@=20= gdb-set-window-buffer=0A=20=20=20(set-window-buffer=20window=20= (get-buffer=20name))=0A=20=20=20(set-window-dedicated-p=20window=20t))=0A= =20=0A+(defun=20gdb-toggle-restore-window-configuration=20()=0A+=20=20= "Toggle=20whether=20to=20restore=20window=20configuration=20when=20GDB=20= quits."=0A+=20=20(interactive)=0A+=20=20(setq=20= gdb-restore-window-configuration-after-quit=0A+=20=20=20=20=20=20=20=20= (not=20gdb-restore-window-configuration-after-quit)))=0A+=0A+(defun=20= gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20displaying=20= source=20file=20or=20nil=20if=20we=20can't=20find=20one.=0A+=0A+The=20= source=20file=20is=20the=20file=20that=20contains=20the=20source=20= location=0A+where=20GDB=20stops.=20=20There=20could=20be=20multiple=20= source=20files=20during=20a=0A+debugging=20session,=20we=20get=20the=20= most=20recently=20showed=20one.=20=20If=0A+program=20hasn't=20started=20= running=20yet,=20the=20source=20file=20is=20the=20\"main=0A+file\"=20= where=20the=20GDB=20session=20starts=20(see=20`gdb-main-file')."=0A+=20=20= (if=20gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A-=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20"Lay=20out=20the=20window=20pattern=20= for=20option=20`gdb-many-windows'."=0A+=20=20(if=20= gdb-default-window-configuration-file=0A+=20=20=20=20=20=20= (gdb-load-window-configuration=0A+=20=20=20=20=20=20=20(if=20= (file-name-absolute-p=20gdb-default-window-configuration-file)=0A+=20=20=20= =20=20=20=20=20=20=20=20gdb-default-window-configuration-file=0A+=20=20=20= =20=20=20=20=20=20(expand-file-name=20= gdb-default-window-configuration-file=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-window-configuration-directory)))=0A+=20=20=20=20;;=20Create=20= efault=20layout=20as=20before.=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-stack-buffer)=0A+=20=20=20=20(gdb-get-buffer-create=20= 'gdb-breakpoints-buffer)=0A+=20=20=20=20(set-window-dedicated-p=20= (selected-window)=20nil)=0A+=20=20=20=20(switch-to-buffer=20= gud-comint-buffer)=0A+=20=20=20=20(delete-other-windows)=0A+=20=20=20=20= (let=20((win0=20(selected-window))=0A+=20=20=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20= /=20(window-height)=203)))=0A+=20=20=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A+=20=20=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20=20=20=20=20= (select-window=20win2)=0A+=20=20=20=20=20=20(set-window-buffer=20win2=20= (or=20(gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect)))=0A+=20=20=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A+=20=20=20=20=20=20(let=20((win4=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=0A= +=20=20=20=20=20=20=20=20=20(gdb-get-buffer-create=20'gdb-inferior-io)=20= nil=20win4))=0A+=20=20=20=20=20=20(select-window=20win1)=0A+=20=20=20=20=20= =20(gdb-set-window-buffer=20(gdb-stack-buffer-name))=0A+=20=20=20=20=20=20= (let=20((win5=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=20(if=20gdb-show-threads-by-default=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20GDB-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20GDB=20function=20buffer.=0A+=0A= +Function=20buffers=20are=20locals=20buffer,=20registers=20buffer,=20= etc,=20but=0A+not=20including=20main=20command=20buffer=20(the=20one=20= where=20you=20type=20GDB=0A+commands)=20or=20source=20buffers=20(that=20= display=20program=20source=20code)."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(derived-mode-p=20'gdb-parent-mode=20= 'gdb-inferior-io-mode)))=0A+=0A+(defun=20gdb--buffer-type=20(buffer)=0A+=20= =20"Return=20the=20type=20of=20BUFFER=20if=20it=20is=20a=20function=20= buffer.=0A+=0A+Buffer=20type=20is=20like=20`gdb-registers-type',=20= `gdb-stack-buffer'.=0A+These=20symbols=20are=20used=20by=20= `gdb-get-buffer-create'.=0A+=0A+Return=20nil=20if=20BUFFER=20isn't=20a=20= GDB=20function=20buffer."=0A+=20=20(with-current-buffer=20buffer=0A+=20=20= =20=20(cl-loop=20for=20rule=20in=20gdb-buffer-rules=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20for=20mode-name=20=3D=20(gdb-rules-buffer-mode=20= rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20for=20type=20=3D=20(car=20= rule)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20if=20(eq=20mode-name=20= major-mode)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20return=20type=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20finally=20return=20nil)))=0A+=0A= +(defun=20gdb-save-window-configuration=20(file)=0A+=20=20"Save=20= current=20window=20configuration=20(layout)=20to=20FILE.=0A+=0A+You=20= can=20later=20restore=20this=20configuration=20from=20that=20file=20by=0A= +`gdb-load-window-configuration'."=0A+=20=20(interactive=20(list=20= (read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"Save=20window=20configuration=20to=20file:=20"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-window-configuration-directory=20default-directory))))=0A+=20=20;;=20= We=20replace=20the=20buffer=20in=20each=20window=20with=20a=20= placeholder,=20store=0A+=20=20;;=20the=20buffer=20type=20(register,=20= breakpoint,=20etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20write=20= the=20window=20configuration=20to=20the=20file.=0A+=20=20= (save-window-excursion=0A+=20=20=20=20(let=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20=20=20=20=20=20=20=20= =20=20(window-persistent-parameters=0A+=20=20=20=20=20=20=20=20=20=20=20= (cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters)))=0A+=20=20=20=20=20=20(unwind-protect=0A+=20= =20=20=20=20=20=20=20=20=20(dolist=20(win=20(window-list=20nil=20= 'no-minibuffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(select-window=20= win)=0A+=20=20=20=20=20=20=20=20=20=20=20=20(when=20(gdb-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-parameter=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cond=20((gdb-function-buffer-p=20(current-buffer))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=201)=20If=20a=20user=20= arranged=20the=20window=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20configuration=20herself=20and=20saves=20it,=20= windows=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20are=20probably=20not=20dedicated.=20=202)=20We=20use=20the=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20same=20= dedication=20flag=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20`gdb-display-buffer'.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(set-window-dedicated-p=20= nil=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20We=20save=20this=20gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20can=20later=20= pass=20it=20to=20`gdb-get-buffer-create';=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20one=20example:=20= `gdb-registers-buffer'.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(or=20(gdb--buffer-type=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (error=20"Unrecognized=20gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Command=20= buffer.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ((derived-mode-p=20'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20((equal=20(selected-window)=20= gdb-source-window)=20'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(with-window-non-dedicated=20nil=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(set-window-prev-buffers=20= (selected-window)=20nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20= =20=20=20=20;;=20Save=20the=20window=20configuration=20to=20FILE.=0A+=20=20= =20=20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20= t)))=0A+=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20= =20=20=20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-load-window-configuration=20(file)=0A+=20=20"Restore=20window=20= configuration=20(layout)=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20= window=20configuration=20file=20saved=20by=0A= +`gdb-save-window-configuration'."=0A+=20=20(interactive=20(list=20= (read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"Restore=20window=20configuration=20from=20file:=20"=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-window-configuration-directory=20default-directory))))=0A+=20=20;;=20= Basically,=20we=20restore=20window=20configuration=20and=20go=20through=20= each=0A+=20=20;;=20window=20and=20restore=20the=20function=20buffers.=0A= +=20=20(let*=20((placeholder=20(get-buffer-create=20"=20= *gdb-placeholder*")))=0A+=20=20=20=20(unwind-protect=20;=20Don't=20leak=20= buffer.=0A+=20=20=20=20=20=20=20=20(let=20((window-config=20= (with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(insert-file-contents=20file)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20We=20need=20to=20go=20to=20point-min=20because=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20`read'=20reads=20from=20point=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read=20= (current-buffer))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (source-buffer=20(or=20(gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20Do=20the=20same=20thing=20as=20in=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-setup-windows'=20if=20no=20source=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= buffer=20is=20found.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20(window-state-put=20= window-config=20(frame-root-window))=0A+=20=20=20=20=20=20=20=20=20=20= (dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setq=20buffer-type=20(window-parameter=20nil=20= 'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pcase=20= buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('source=20= (when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(setq=20gdb-source-window=20(selected-window))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20('command=20= (switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(_=20(let=20((buffer=20(gdb-get-buffer-create=20= buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(with-window-non-dedicated=20nil=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20nil=20= buffer))))))))=0A+=20=20=20=20=20=20(kill-buffer=20placeholder))))=0A=20=0A= =20(define-minor-mode=20gdb-many-windows=0A=20=20=20"If=20nil=20just=20= pop=20up=20the=20GUD=20buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20= -4658,7=20+4855,12=20@@=20gdb-many-windows=0A=20=0A=20(defun=20= gdb-restore-windows=20()=0A=20=20=20"Restore=20the=20basic=20arrangement=20= of=20windows=20used=20by=20gdb.=0A-This=20arrangement=20depends=20on=20= the=20value=20of=20option=20`gdb-many-windows'."=0A+This=20arrangement=20= depends=20on=20the=20values=20of=20variable=0A+`gdb-many-windows'=20and=20= `gdb-default-window-configuration-file'."=0A+=20=20;;=20This=20function=20= is=20used=20when=20the=20user=20messed=20up=20window=0A+=20=20;;=20= configuration=20and=20wants=20to=20"reset=20to=20default".=20=20The=20= function=20that=0A+=20=20;;=20sets=20up=20window=20configuration=20on=20= start=20up=20is=0A+=20=20;;=20`gdb-get-source-file'.=0A=20=20=20= (interactive)=0A=20=20=20(switch-to-buffer=20gud-comint-buffer)=20= ;Select=20the=20right=20window=20and=20frame.=0A=20=20=20= (delete-other-windows)=0A@@=20-4705,11=20+4907,23=20@@=20gdb-reset=0A=20=20= =20(if=20(boundp=20'speedbar-frame)=20(speedbar-timer-fn))=0A=20=20=20= (setq=20gud-running=20nil)=0A=20=20=20(setq=20gdb-active-process=20nil)=0A= -=20=20(remove-hook=20'after-save-hook=20'gdb-create-define-alist=20t))=0A= +=20=20(remove-hook=20'after-save-hook=20'gdb-create-define-alist=20t)=0A= +=20=20;;=20Recover=20window=20configuration.=0A+=20=20(when=20(or=20(eq=20= gdb-restore-window-configuration-after-quit=20t)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(and=20(eq=20gdb-restore-window-configuration-after-quit=20= 'if-gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gdb-show-main)=0A+=20=20=20=20=20=20=20=20=20=20=20=20(and=20(eq=20= gdb-restore-window-configuration-after-quit=20'if-gdb-many-windows)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-many-windows))=0A+=20= =20=20=20(when=20gdb--window-configuration-before=0A+=20=20=20=20=20=20= (window-state-put=20gdb--window-configuration-before)=0A+=20=20=20=20=20=20= ;;=20This=20way=20we=20don't=20accidentally=20restore=20an=20outdated=20= window=0A+=20=20=20=20=20=20;;=20configuration.=0A+=20=20=20=20=20=20= (setq=20gdb--window-configuration-before=20nil))))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A=20= buffers,=20if=20required."=0A+=20=20;;=20This=20function=20is=20called=20= only=20once=20on=20startup.=0A=20=20=20(goto-char=20(point-min))=0A=20=20= =20(if=20(re-search-forward=20gdb-source-file-regexp=20nil=20t)=0A=20=20=20= =20=20=20=20(setq=20gdb-main-file=20(read=20(match-string=201))))=0Adiff=20= --git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= bd825c09e1..db552f4b4d=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,24=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-window-non-dedicated=20(window=20&rest=20body)=0A+=20=20= "Evaluate=20BODY=20with=20WINDOW=20temporarily=20made=20non-dedicated.=0A= +=0A+If=20WINDOW=20is=20nil,=20use=20the=20selected=20window.=20=20= Return=20the=20value=20of=20the=20last=20form=20in=20BODY."=0A+=20=20= (declare=20(indent=201)=20(debug=20t))=0A+=20=20(let=20= ((window-dedicated-sym=20(gensym))=0A+=20=20=20=20=20=20=20=20= (window-sym=20(gensym)))=0A+=20=20=20=20`(let*=20((,window-sym=20= (window-normalize-window=20,window=20t))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20(,window-dedicated-sym=20(window-dedicated-p=20,window-sym)))=0A+=20= =20=20=20=20=20=20(set-window-dedicated-p=20,window-sym=20nil)=0A+=20=20=20= =20=20=20=20(unwind-protect=0A+=20=20=20=20=20=20=20=20=20=20=20(progn=20= ,@body)=0A+=20=20=20=20=20=20=20=20=20;;=20`window-dedicated-p'=20= returns=20the=20value=20set=20by=0A+=20=20=20=20=20=20=20=20=20;;=20= `set-window-dedicated-p',=20which=20differentiates=20non-nil=20and=0A+=20= =20=20=20=20=20=20=20=20;;=20t,=20so=20we=20cannot=20simply=20use=20t=20= here.=20That's=20why=20we=20use=0A+=20=20=20=20=20=20=20=20=20;;=20= `window-dedicated-sym'.=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20,window-sym=20,window-dedicated-sym)))))=0A+=0A= =20;;=20The=20following=20two=20functions=20are=20like=20= `window-next-sibling'=20and=0A=20;;=20`window-prev-sibling'=20but=20the=20= WINDOW=20argument=20is=20_not_=20optional=20(so=0A=20;;=20they=20don't=20= substitute=20the=20selected=20window=20for=20nil),=20and=20they=20return=0A= --=20=0A2.25.1=0A=0A= --Apple-Mail=_9629F9EB-298F-4520-A2A2-F7CA5EE269BA Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_9629F9EB-298F-4520-A2A2-F7CA5EE269BA-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 13 Mar 2020 22:13:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158413755132669 (code B ref 39181); Fri, 13 Mar 2020 22:13:02 +0000 Received: (at 39181) by debbugs.gnu.org; 13 Mar 2020 22:12:31 +0000 Received: from localhost ([127.0.0.1]:60324 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCsXf-0008Ur-8u for submit@debbugs.gnu.org; Fri, 13 Mar 2020 18:12:31 -0400 Received: from mail-wr1-f50.google.com ([209.85.221.50]:42394) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCsXd-0008Ua-Jm for 39181@debbugs.gnu.org; Fri, 13 Mar 2020 18:12:30 -0400 Received: by mail-wr1-f50.google.com with SMTP id v11so14013925wrm.9 for <39181@debbugs.gnu.org>; Fri, 13 Mar 2020 15:12:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=LjBmjORczqKW57YmPgJAPvjcKYBW5vBNzgcBidl1sDE=; b=RBZVEd+1gXKY0/HamoheZCLnbu5lk2yuY1lnQdni79sePFZLLp4jZT2LIpdx1vR6DG ARV8AdQiWnk2BGe6D45neuOcEVrqk63Mr70jMSz7ut6HWXjT9584RJyBXHzxzdeYJOE7 vWaxHPyvr1f1mIY+04d9ZP/dsSMlgtiYQNnyuf6FKxkueW5eji+/wcs+VfqVYdbf9M0d YfmIwo8tCN34I79wYppTBroRcBPbXx0fFEz2CcBJQeJapwG2cZVSM6iKDdER/lz62dnL cv65uWj60o4hQHLCBPWvXyPpHURyMQ+hEXSnJ1Wpi5pNRuC4FTpKnCDjbeNtC68EJC4z EMKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=LjBmjORczqKW57YmPgJAPvjcKYBW5vBNzgcBidl1sDE=; b=GA8yx9hw+MsXb1OVBzeL/NV3v326xjMJ3YuJIvx+UEqO5bbit044Kb5eKf2wLyj9HW W2J+5iCtk6327a8Zlizi+OwhuKe2H+RIAPCPrxNsWMLabtuqxQGcfbHiF0QLC3y88k4w kRNBYN4MxuazWRDCwKvSx0+irjNWsCr3XfGN7pLSZ1hKJjdF7CQmVW/SSe+9r/zObkFZ BVAseiyghmxaOVHduzQrPNXQSlFErCbVeI6ioAJmOeiRLTgBc/GO61wsIAoj6TFZUjoN IyiGAXDPZ7QyNSy4AGjSaAavIGW8HOI0qQN0kE9sN980DE5+6QVH4oJ9ZfKJFSlK1Hhf HKgg== X-Gm-Message-State: ANhLgQ2IX2ymqNBzoclIcxOgzzKfn/y4CEBoS24CPFED4DhEQPpPXjXX N6vAUTsH9luD0a/9GyUB7Hc= X-Google-Smtp-Source: ADFU+vv3J8JKElt6g07I1ovuv/1CBRPCOSPey7ufx6b1eHQCkDJzqS7t6A/7VPkEwvGQoUxDCDQf7w== X-Received: by 2002:adf:f58f:: with SMTP id f15mr20910709wro.16.1584137543796; Fri, 13 Mar 2020 15:12:23 -0700 (PDT) Received: from localhost ([185.112.167.59]) by smtp.gmail.com with ESMTPSA id y3sm45296433wrm.46.2020.03.13.15.12.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2020 15:12:23 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Fri, 13 Mar 2020 23:12:42 +0100 Message-ID: <87d09foqed.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 3.6 (+++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: On Fri, 13 Mar 2020 17:40:30 -0400 Yuan Fu wrote: > I added some comments in the menu-map code. Hope =?UTF-8?Q?that=E2=80=99s?= helps. Thanks. Content analysis details: (3.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [185.112.167.59 listed in zen.spamhaus.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (stepnem[at]gmail.com) -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.221.50 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.221.50 listed in wl.mailspike.net] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.6 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: On Fri, 13 Mar 2020 17:40:30 -0400 Yuan Fu wrote: > I added some comments in the menu-map code. Hope =?UTF-8?Q?that=E2=80=99s?= helps. Thanks. Content analysis details: (2.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [185.112.167.59 listed in zen.spamhaus.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.221.50 listed in wl.mailspike.net] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.221.50 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (stepnem[at]gmail.com) -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager On Fri, 13 Mar 2020 17:40:30 -0400 Yuan Fu wrote: > I added some comments in the menu-map code. Hope that=E2=80=99s helps. Thanks. > All fixed. Confirmed, thank you. >> P.S.: This time your patch somehow ended up hidden as >> application/ocet-stream after the HTML part, instead of inline in plain >> text. > I=E2=80=99m not sure what causes that. I=E2=80=99ve been using Apple Mail= and I just > copy the patch file into my reply. It actually surprises me that they > showed up in plain text before. This time I made the mail plain text, > hopefully that makes the patch also in plain text. Yeah, actually the difference wasn't in the patch MIME type per se, but in the fact that it was included in a multipart/mixed section together with the HTML part (all that in one big multipart/alternative), so it wasn't visible in the text/plain part. This one is same as your previous e-mails again (text/plain), thanks. --=20 =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 15 Mar 2020 15:56:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu , =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158428775632513 (code B ref 39181); Sun, 15 Mar 2020 15:56:01 +0000 Received: (at 39181) by debbugs.gnu.org; 15 Mar 2020 15:55:56 +0000 Received: from localhost ([127.0.0.1]:35361 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jDVcK-0008SL-7M for submit@debbugs.gnu.org; Sun, 15 Mar 2020 11:55:56 -0400 Received: from mout.gmx.net ([212.227.15.18]:43131) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jDVcI-0008S3-CY for 39181@debbugs.gnu.org; Sun, 15 Mar 2020 11:55:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1584287747; bh=YoABbAb6PZBceDidtFrUYK5RecyOYw42W3GmCbWxyug=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=aaqvq/lCiCApjc91XE8A13pGmrM1d1jFe6Z+Jh9tyCXIZJW6/G5djNvFAFq0VdGJa WDAB9A8qX09Qo/l5MLmEQhw5QLuSKytSfK44Y4drfGzlgTjk8r4Ps7ImbO6L7pqA64 Lzv7quE5hi1k7FonuiS/UKu6K9s8im9bZ2k+s0tM= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.103] ([212.95.7.232]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MzQg6-1jZYmJ1Qh6-00vNOw; Sun, 15 Mar 2020 16:55:47 +0100 References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> From: martin rudalics Message-ID: <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> Date: Sun, 15 Mar 2020 16:55:46 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:Noqy0ykMKDpFmsFC8ME42lJkyCmEy7W5fVq+kDYGqPCLj5RoynB sfb9ETZjXAwfvmQGj1C+qM9UC3t6bfHRlFqFj+Zb7Vrqo8ettXH+bw8iRaZdE4idoL0fqhE RTEpcKJW1l3XXOIx1+B5QDPABJmKHLzfvwFq+ncJFR3vjor1yu/SBwq0SzliUJ+AbMLyiJw Gi97krGT7wK55rKdJErHw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:/fjCAG8miF8=:r9ENUHWSqBBks6wyvydWz6 tZAlNRv+opJ3XSTGP9diPIUmo2i1WTnfcJBA9+zabSep1b3Axw9B4jILLVRGQCjvkBm4m2rVn gD4ZiXseejfPuVegI2q1SHBade8MDE7jXnAOCGWdzTZ9Ac0kg5MgdtgcIhMdpiI6p77kpjREJ CaoVHVk6XRz8Cvm2ckgO7w+et2hQOYTwt5z8M9e3c+wDnjnm3UUok0HjXW8GPlf4tU2iTzEpz uoXGwZpejN1SjQePo5OE5cnU7S5+k9/aLJIO6DTjzcGjQOtClRWziUxw9elEsduMMlXZp9tkL OfLd6IVABDp+Q3dN2WvQtcCoMW3xtdO4FbDWs7jWWS8EkGonVpYM0Mg4GKf1ApBI9gjTBo6cn CRlrAfpwmCuR1fjQ8UNTJxjRfXuViaDDZa/4UKQrE1JWWxjxSRTTU3SBrvzDS92rW3yZex/jp 7a+0q262VC7Z73yoXbhr5uG2v73gtozR4lrd9v+Bv0dw2v3IHiychdOWpogfxEcsM8zYDrHCd YDSpWL0ajWd5Ukk34Bb+jK4Ppp+vUZ5g16dUXADBTOpCFt36RD21Ia1Z9vGO9nt+mEYjpwbRo hI+oDWZB3u50tVOeS0TuTvq2OB552PPmcg6fOnWkXUmCK45xaIWatHztjmb1uj4xMYoyq+Ck5 e0KDRgMrdhzlAkQZkMPR5Qlo3p+ct4Es12G0Js4L6TBEf1LGEmx6UQMB74aY7JfJYEhcr4BjN JQw5GS+jp3yEyU9SdBxdxZwKIlAkbWy5VE9YjOckc+t7aE4lSN7AI+lWda0sLqQRzoHW1U4gF +UrN++eEtNU2nGGVwpWzqlMKtiznKrFMOp7ZxzGwGpIKAOhxMLuDPXdwCe88PhemlESDWaxnV hBNX7eUwxLzuFRSJcYhoa/b3h7J4AJ++txlYzSqoR0ZoOlhSDMQHCbidBXAEN8Pn/5knXO9Tk SU9Yu0fjodqg76zEzRfAZ2KiBMf8dW6E5d0Z9I4RBpxuIUsOgd3nOXQWeocc+lnRdiZPtaVKj ZzJuFRt+Fz6W4oaRp9RSjvGKgbr+1sPRxAis2BG15xklUXp0yUFtat3LQcLo0NuksddFRwPD1 kbNArB93TcFZWdHaRTbtl19qR3iU6o8qZDZWEwVL61jSISL3YRbrISwzXNkcDZQU+WJ40SuBD ZynfcsWCybYPV7fgDeJQNQe5X1gdS5QHWkHckvVI2PiJPjMgNegR608ohqT1G+iPSlrNiw2jS stY1yXkk6D94C3V+b X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) I pushed your patch to master, tweaking the change log, some doc-strings and breaking a couple of lines so they fit into our line length limits. Please have a look at whether anything has been broken by these tweaks. We certainly need a few NEWS entries for this. Kindly supply them. Thanks again for your work and to =C5=A0t=C4=9Bp=C3=A1n for the comments,= martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 16 Mar 2020 00:14:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158431761619438 (code B ref 39181); Mon, 16 Mar 2020 00:14:02 +0000 Received: (at 39181) by debbugs.gnu.org; 16 Mar 2020 00:13:36 +0000 Received: from localhost ([127.0.0.1]:35827 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jDdNw-00053Q-78 for submit@debbugs.gnu.org; Sun, 15 Mar 2020 20:13:36 -0400 Received: from mail-qt1-f182.google.com ([209.85.160.182]:40076) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jDdNt-00053D-MY for 39181@debbugs.gnu.org; Sun, 15 Mar 2020 20:13:34 -0400 Received: by mail-qt1-f182.google.com with SMTP id n5so12754402qtv.7 for <39181@debbugs.gnu.org>; Sun, 15 Mar 2020 17:13:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=PkK/R7sFlvPus2ZJgf/Qk6SmcL1kdif53u6ZQ2Eace0=; b=KRjxF7Kf6DPhQT1ICh++bJfICUpwL7rvQSNUJeY+6m126eiaQU9ggLQ0oPdBn9ryXF j02Bmrof08W6K0mPxgjjQYBA5hscSFgPNPlGzkAERIocFNDdCP37VbHfEqp9ORWajCxB CTKuMy/ScvQuO0G14VWeps3psd84qGUBCXAPl+XsHIQOmLKaOuQA9CwBi5IIFVD+HVnq TXYUbOIfcr53xJdI/zbU9OO7OAaIQnQngKkT27FTTSpEcLxGPb/abYHndjD9yb8ZGp/j q3841yaJkmNPdi6cvItt01VbuxKrqwCvgZByM9VBvfFzVX05WlCKn2zK2qohTfg07pWe MXuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=PkK/R7sFlvPus2ZJgf/Qk6SmcL1kdif53u6ZQ2Eace0=; b=SCaVl/0rzaC17J8TvOFDcMxYPdg8v82uTc3btNETulJS8IQzG1msbQ4o4S14B6DkhA 4d9AAf6FfF1L7Z4wgWz7+/D0YQEMNFqedqk5RN9r/rkbBHo8WVliS2pEpBdPsbkH5Y+6 LsMe3KcBvPyGtZeMeZlg59qvuT3eiBLTBzFJb611zFW21d9zE+d2tTPcNHJ3q9XPQiZB lZtP2qpBuVn1bVjQpTafJLqHA8ykKFK8lKt9zvkOFjiu9fv40jtd5pvbJI63nDpf2RIt l0znYsnLEMDv6+Tb2lsWM6V12/Y4Y+VAxfU7tOdCR2TBhavB5g0ZuDDs4NgRgsxiNpRR WEpg== X-Gm-Message-State: ANhLgQ04rD/ibiGd+7XKM7GqIMJyhjvyrJoinGWFpvOMry1sefTRT9tJ E0cfo1JvO2abXrlZbyj6gn8= X-Google-Smtp-Source: ADFU+vv8gAI5uOS/Wc0iCAI4ixx7Dbd+z7br3U9WGwRc8slJn6ri0T+QjCtyebGIY5mS2RV504jGMg== X-Received: by 2002:ac8:51d6:: with SMTP id d22mr22696054qtn.11.1584317608083; Sun, 15 Mar 2020 17:13:28 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id d28sm8589346qkl.99.2020.03.15.17.13.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 Mar 2020 17:13:27 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) From: Yuan Fu In-Reply-To: <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> Date: Sun, 15 Mar 2020 20:13:25 -0400 Content-Transfer-Encoding: quoted-printable Message-Id: <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Mar 15, 2020, at 11:55 AM, martin rudalics wrote: >=20 > I pushed your patch to master, tweaking the change log, some = doc-strings > and breaking a couple of lines so they fit into our line length = limits. > Please have a look at whether anything has been broken by these = tweaks. >=20 > We certainly need a few NEWS entries for this. Kindly supply them. Thanks. I=E2=80=99ll prepare a patch for etc/news. Should I also update = the manual? Yuan From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 16 Mar 2020 09:25:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158435070217798 (code B ref 39181); Mon, 16 Mar 2020 09:25:03 +0000 Received: (at 39181) by debbugs.gnu.org; 16 Mar 2020 09:25:02 +0000 Received: from localhost ([127.0.0.1]:36060 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jDlzZ-0004cw-Sv for submit@debbugs.gnu.org; Mon, 16 Mar 2020 05:25:02 -0400 Received: from mout.gmx.net ([212.227.15.19]:56287) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jDlzW-0004cJ-WC for 39181@debbugs.gnu.org; Mon, 16 Mar 2020 05:24:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1584350692; bh=VCx8J4KvstFdsJM7bVjXPiiQDM0/UNhYt6IMCCsY2g8=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=OtfVgMCnYs9P+YVdt3MrAi7WjrLEHPV5g20U6j5BhfKg2pEQYGDqRAUurjz21I0R0 NpKB58zybgGzJc3LMwh0TKajrlglKkyaBmvyCIxNhIylJcRFmxynhU7osoo/6eu7lC zlnh/h9RhXAGJqxuEybgR6pc7EtqacoZxUO3vvaY= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.221]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MJmKh-1itdbp2Do9-00K7n4; Mon, 16 Mar 2020 10:24:52 +0100 References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> From: martin rudalics Message-ID: <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> Date: Mon, 16 Mar 2020 10:24:51 +0100 MIME-Version: 1.0 In-Reply-To: <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:+pog+phLwiQELxSgnD7aipUdgxobyoQIE6bFE11URZEygi3kioE fcOWfm4YQgOluSxt8IF8dkVEoOe3ffXpWCUgTifI5/X62HnFmC21GlKwgrqp6MQOqYUgF4C YbUELBxauR/wbtiNgOSI+Q2Xr+G5kcaqTkHuzspn/wE1WonUwQFzyjnMNvzGNUP8hxK8BJ7 0v3J9AtOvixTYGQnfsC6Q== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:1BfVpQFNwek=:V9wTUxyeXNFzFd7QKpfZ2e 8rX/oIqLMqzyrc3eHcDCK9Ij6f8OJXJj+S3phrqZv5IUp8QmJYKfrgmqJa8BTa6QGpc5irx0g Q9k9GAMNyBMmkYtHFsSMUOGxJQTQIpDb/jByWJtW07gy83QZxF25GEETn9REj17hC4yKyPzLn Djwv0DIbORPMHgF5d5jN4wOFl5B+FN0VHYnYy7WHEjyc98q1R/veyJhUCKr6gZucjRHUc1uBo 5ZtFQRPyH6Rv53LxjvPhxjm3oE0jjh1//QSOCNdQF+IZ3aJjT1SnRNQOBOQI02RXIn0ge+iqz Hj9hutdztvQeXJiKu8igi85cso8/7auMG8IS+/J/wBGE+xehKm9V2JKpLoEEDajlKEVjsN1Z9 ZRGRBxsHDL+IToXFtB+E2gWmOAsc3UGp9q1XDD3h1/pW8xS60+CbQXqUlSBvplppXu0wNm/mo EMFc6S07bpJKI0JCFzvY7jaPmz8D4mQ+5A2KuSTXnjoHu08wkgjCSxaurlie7TpYapZtntnvo UQ5Jbfh1XeLAsCbFVRKz33YJwIdEwoN76CdtcT7x34GUJcRiVeN1gTb66TRkEtnqw+eUyXtmr FcZDbEEakHxDyNhp+qBdCHaA2iNI0/ZzFYT5XJ8gCEAxWdZYj+8bCC00/XKRCnbDzrkkFqtIN tq+PHAUn7QLz2bRSkuWjg8fuZE+2bxAapWwUbCWE4oiqozdz5dCWUccmqZa27RC+XS/cdoz1L vNQY7L/k7MpKb1yq1ItbxR8ut5KOk7/BVgbwApFdXdchY/6Gsju4DrmZuggswaWMtsX87kr57 qFdZaHlQeWOVM5P2q2i1SSeQRMsS3Z6lr285I32II7dDe7AryiuBdnkkrGVYj7CnzqldNYl33 PNwgCt/TXVEKx7AGfbgVSWUjLNveSne0pr25tB55REGvmcnx2AyFnqQhIuYccTR33pFcNg891 Rw6MmsmgHbsUk28mObafHpYZmzCzpjYqNkxHylKirqVhDgCUdL5WikldageD2HpfYkSSr6LY0 4L4ejnlUmOiCemxt89khxo0EbdtUQhQJCRjmyzU3hEv9V3mK00LikJ2jfuKAujgKq7uLZ/M4j E8nJwtNSRoXSPd57g/9js8+D6VN53DcYpyDJewnCrbH5cYpnNvPYljEwJjIJJL0/U7XY3aQfP O6jeSu9Yo14Rs+QzHW8iQ4PYb7lLpuJSAlxJ5ruR2wPZ8FdQboVVTcVJEyYvPLmMszPHfvcvI MxIocmeEqj8Z1mNN0 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Thanks. I=E2=80=99ll prepare a patch for etc/news. Should I also updat= e the manual? Please do. Thanks, martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 20 Mar 2020 20:04:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15847346361432 (code B ref 39181); Fri, 20 Mar 2020 20:04:01 +0000 Received: (at 39181) by debbugs.gnu.org; 20 Mar 2020 20:03:56 +0000 Received: from localhost ([127.0.0.1]:45697 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFNs4-0000N2-8N for submit@debbugs.gnu.org; Fri, 20 Mar 2020 16:03:56 -0400 Received: from mail-qk1-f175.google.com ([209.85.222.175]:40631) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFNs1-0000Mp-O7 for 39181@debbugs.gnu.org; Fri, 20 Mar 2020 16:03:54 -0400 Received: by mail-qk1-f175.google.com with SMTP id l25so3432528qki.7 for <39181@debbugs.gnu.org>; Fri, 20 Mar 2020 13:03:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=obC3Iu0sqm461L3YfAxgQSHkVuh4yNFnkWCyGq/51eM=; b=k55qxUzOlPEEhx857rRIhyllAHKwaD1uB9Po2ZUCIGNocH5o4apAEuhghJV2Dxc8lV MPrY9prfbw/UaX2jiWoTjbf63Gk+0BcMwC94VCAKENyuQZPXjV5KpHtaKUZIgik/kdry NumJCL/MzMoljKAZugjzlf0BwPACN8tdb+uEdAFrp6jdqELPlYnz4o8h8wpv815s4Ih7 DA5hlWCW95Mi4LJL4rZgMrSkISY3TYlNWGcE4eC3YVg7CKs+EefVsizLXRXFQn70/2l2 PpVpjTfH0JYSMWXXijoFe7vrock1Tk9OlrhbgDAwlxhQ6JzObl3zoPhTH08o+gP5pVoD LAWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=obC3Iu0sqm461L3YfAxgQSHkVuh4yNFnkWCyGq/51eM=; b=YjiIVy45+43fKWFI+XtErKcMvcEFaQbPlrsyZNNGo67+N96lVfF9oXcYBuim57luTK Q/9SxWOEFPUxeJNPaiGuCOqLg/rJydjKmpojVm1vW+R7oO9eoNYN9skQqxWLVQ5TfAFo 5lBn/CYVqma3Vi7Y+X+fmcOEC34nTm43ji5sCsf67bTk+haLAS6G0GMMiRJszQXrd/nr 9zVFob9s/6UgSL1CnYKuAkKprnWnRidYLe5rWl8GEzCcI+f7tp9CgWmbRlw+6l4a2pZc lHDE6YzZ2U/noIBxvu+b0W9NiBvVg3KGcAQTinFN6eGsTUs/zz+WRa73Vy81AeoP/yCm c8Lw== X-Gm-Message-State: ANhLgQ12YGHqPw6O0dxWdsobzEf5HJwNLwSTyiLhIeIqPCRhM0kDAQkN 1VSEbDavKVzMTVKyIpoeevg= X-Google-Smtp-Source: ADFU+vty4fukZlTRajbg1//Xo/Ivdpz8ASLJME6WtfWWNAhK1+zfVNI9VvnICujPmmiLphnsK1+L5g== X-Received: by 2002:a37:8507:: with SMTP id h7mr5040962qkd.280.1584734628132; Fri, 20 Mar 2020 13:03:48 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id s11sm4643438qke.97.2020.03.20.13.03.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 20 Mar 2020 13:03:47 -0700 (PDT) From: Yuan Fu Message-Id: <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_CB34985C-BC56-4E5C-BCEE-1F0D88AAFE3E" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Fri, 20 Mar 2020 16:03:45 -0400 In-Reply-To: <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_CB34985C-BC56-4E5C-BCEE-1F0D88AAFE3E Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 16, 2020, at 5:24 AM, martin rudalics wrote: >=20 > > Thanks. I=E2=80=99ll prepare a patch for etc/news. Should I also = update the manual? >=20 > Please do. >=20 > Thanks, martin >=20 Here it is. Yuan --Apple-Mail=_CB34985C-BC56-4E5C-BCEE-1F0D88AAFE3E Content-Disposition: attachment; filename=news.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="news.patch" Content-Transfer-Encoding: quoted-printable =46rom=208becfc67a17700dec92b427bf10ef11e81615c12=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Sun,=20= 15=20Mar=202020=2021:02:14=20-0400=0ASubject:=20[PATCH]=20Add=20= documentation=20for=20previous=20commit=20by=20Yuan=20Fu=0A=0A*=20= etc/NEWS:=20Add=20news=20entry.=0A*=20doc/emacs/building.texi=20(GDB=20= User=20Interface=20Layout):=20Add=0Adocumentation=20for=20= 'gdb-save-window-configuration',=0A'gdb-load-window-configuration',=0A= 'gdb-default-window-configuration-file',=0A= 'gdb-window-configuration-directory',=0A= 'gdb-restore-window-configuration-after-quit'.=20=20Change=20= 'many-windows=0Alayout'=20to=20'default=20layout'=0A---=0A=20= doc/emacs/building.texi=20|=2029=20++++++++++++++++++++++++++---=0A=20= etc/NEWS=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=2016=20= ++++++++++++++++=0A=202=20files=20changed,=2042=20insertions(+),=203=20= deletions(-)=0A=0Adiff=20--git=20a/doc/emacs/building.texi=20= b/doc/emacs/building.texi=0Aindex=2038963f225c..130abc41e8=20100644=0A= ---=20a/doc/emacs/building.texi=0A+++=20b/doc/emacs/building.texi=0A@@=20= -568,7=20+568,7=20@@=20Starting=20GUD=0A=20=0A=20@item=20M-x=20gud-gdb=0A= =20@findex=20gud-gdb=0A-Run=20GDB,=20using=20a=20GUD=20interaction=20= buffer=20for=20input=20and=20output=20to=20the=0A+Run=20GDB,=20using=20a=20= GUD=20action=20buffer=20for=20input=20and=20output=20to=20the=0A=20GDB=20= subprocess=20(@pxref{Debugger=20Operation}).=20=20If=20such=20a=20buffer=20= already=0A=20exists,=20switch=20to=20it;=20otherwise,=20create=20the=20= buffer=20and=20switch=20to=20it.=0A=20=0A@@=20-975,9=20+975,26=20@@=20= GDB=20User=20Interface=20Layout=0A=20@end=20group=0A=20@end=20= smallexample=0A=20=0A+@findex=20gdb-save-window-configuration=0A+@findex=20= gdb-load-window-configuration=0A+@vindex=20= gdb-default-window-configuration-file=0A+@vindex=20= gdb-window-configuration-directory=0A+=20=20You=20can=20customize=20the=20= window=20layout=20bese=20on=20the=20one=20above,=20and=20save=0A+the=20= custom=20layout=20to=20a=20file=20by=20= @code{gdb-save-window-configuration}.=0A+Then=20you=20can=20later=20load=20= this=20layout=20back=20by=0A+@code{gdb-load-window-configuration}.=20=20= (Simply=20put,=20window=0A+configuration=20is=20the=20Emacs=20jargon=20= for=20window=20layout.)=20=20You=20can=20set=0A+your=20custom=20layout=20= file=20as=20the=20default=20one=20used=20by=0A+@code{gdb-many-windows}=20= by=20customizing=0A+@code{gdb-default-window-configuration-file}.=20=20= If=20it=20is=20not=20an=0A+absolute=20path,=20GDB=20looks=20under=0A= +@code{gdb-window-configuration-directory}=20(default=20to=0A= +@file{~/.emacs.d})=20for=20the=20file.=0A+=0A=20@findex=20= gdb-restore-windows=0A=20@findex=20gdb-many-windows=0A-=20=20If=20you=20= ever=20change=20the=20window=20layout,=20you=20can=20restore=20the=20= many-windows=0A+@vindex=20gdb-restore-window-configuration-after-quit=0A= +=20=20If=20you=20ever=20change=20the=20window=20layout,=20you=20can=20= restore=20the=20default=0A=20layout=20by=20typing=20@kbd{M-x=20= gdb-restore-windows}.=20=20To=20toggle=0A=20between=20the=20many=20= windows=20layout=20and=20a=20simple=20layout=20with=20just=20the=20GUD=0A= =20interaction=20buffer=20and=20a=20source=20file,=20type=20@kbd{M-x=20= gdb-many-windows}.=0A@@=20-988,7=20+1005,13=20@@=20GDB=20User=20= Interface=20Layout=0A=20of=20windows=20on=20your=20original=20frame=20= will=20not=20be=20affected.=20=20A=20separate=0A=20frame=20for=20GDB=20= sessions=20can=20come=20in=20especially=20handy=20if=20you=20work=20on=20= a=0A=20text-mode=20terminal,=20where=20the=20screen=20estate=20for=20= windows=20could=20be=20at=20a=0A-premium.=0A+premium.=20=20If=20you=20= choose=20to=20start=20GDB=20in=20the=20same=20frame,=20consider=0A= +setting=20@code{gdb-restore-window-configuration-after-quit}=20to=0A= +non-@code{nil}.=20=20Then=20GDB=20restores=20your=20original=20window=20= layout=20after=0A+it=20quits.=20=20Set=20to=20@code{t}=20to=20always=20= restore;=20set=20to=0A+@code{if-gdb-many-windows}=20to=20restore=20only=20= when=0A+@code{gdb-many-windows}=20is=20@code{t};=20set=20to=20= @code{if-gdb-show-main}=20to=0A+restore=20only=20when=20= @code{gdb-show-main}=20is=20@code{t}.=0A=20=0A=20=20=20You=20may=20also=20= specify=20additional=20GDB-related=20buffers=20to=20display,=0A=20either=20= in=20the=20same=20frame=20or=20a=20different=20one.=20=20Select=20the=20= buffers=20you=0Adiff=20--git=20a/etc/NEWS=20b/etc/NEWS=0Aindex=20= 87e634f2c1..692ecf7f0a=20100644=0A---=20a/etc/NEWS=0A+++=20b/etc/NEWS=0A= @@=20-174,6=20+174,22=20@@=20key=20=20=20=20=20=20=20=20=20=20=20=20=20= binding=0A=20/=20v=20=20=20=20=20=20=20=20=20=20=20=20=20= package-menu-filter-by-version=0A=20/=20/=20=20=20=20=20=20=20=20=20=20=20= =20=20package-menu-filter-clear=0A=20=0A+**=20gdb-mi=0A+=0A+***=20gdb-mi=20= can=20now=20store=20and=20restore=20window=20configurations.=0A+Use=20= 'gdb-save-window-configuration'=20to=20save=20window=20configuration=20= to=20a=0A+file,=20and=20'gdb-load-window-configuration'=20to=20load=20= from=20a=20file.=20=20They=0A+can=20also=20be=20accessed=20through=20= menu=20bar=20under=20Gud=20--=20GDB-Windows.=0A= +'gdb-default-window-configuration-file',=20when=20non-nil,=20is=20= loaded=20when=0A+GDB=20starts=20up.=0A+=0A+***=20gdb-mi=20can=20now=20= restore=20window=20configuration=20after=20finished.=0A+Set=20= 'gdb-restore-window-configuration-after-quit'=20to=20non-nil=20and=20GDB=0A= +will=20remember=20the=20window=20configuration=20before=20GDB=20= started,=20and=20restore=0A+it=20after=20it=20quits.=20=20Toggle=20= button=20is=20also=20provided=20under=20Gud=20--=0A+GDB-WINDOWS.=0A+=0A+=0A= =20=0C=0A=20*=20New=20Modes=20and=20Packages=20in=20Emacs=2028.1=0A=20=0A= --=20=0A2.25.1=0A=0A= --Apple-Mail=_CB34985C-BC56-4E5C-BCEE-1F0D88AAFE3E-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 20 Mar 2020 20:59:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu , martin rudalics Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158473790214539 (code B ref 39181); Fri, 20 Mar 2020 20:59:02 +0000 Received: (at 39181) by debbugs.gnu.org; 20 Mar 2020 20:58:22 +0000 Received: from localhost ([127.0.0.1]:45723 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFOik-0003mR-DQ for submit@debbugs.gnu.org; Fri, 20 Mar 2020 16:58:22 -0400 Received: from mail-lj1-f176.google.com ([209.85.208.176]:41278) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFOii-0003mD-83 for 39181@debbugs.gnu.org; Fri, 20 Mar 2020 16:58:20 -0400 Received: by mail-lj1-f176.google.com with SMTP id o10so7945261ljc.8 for <39181@debbugs.gnu.org>; Fri, 20 Mar 2020 13:58:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=PJD8tfSXfZvKaByvNmbLN/dy2tedqxs5C6andkYQFow=; b=Efk7u18/Lmc0ptDy0mZH0YOHN3bJZOJrsVbhtLPEloWmm577R6Bq8TSxGIPwug6Euo EO/lUnfbrKr+6OPwfWJonKfZua3WKFDanU/J4xb7E9zp9kqjyKjmfVbGDA0HmdqgG6Xz 3wPqw0Mohg75DDXYER7g53N7m8aiQDLzb2GMx4ZHbk+p0oXTsTnbld7hRiTmEMPXA8XM WIpouQnkGKPFBFPQXapPnCrpRFME/iKfiJEWHs+ahwwQU0BIH6ci149LAHvlNB3K+wp5 iflS24DHyCBCAPiARJGXhAwOvItcrsHS12cLPHJTL/0VLpZoEkwL5LLmoQhyEggM3yq8 j4Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=PJD8tfSXfZvKaByvNmbLN/dy2tedqxs5C6andkYQFow=; b=C2Qa9kDpI8xehWE7JKOpoeFnEXjYItJQSZ2gNFg3HLvpUr7OapfgIXCSpt8HsFUSLe 7OXGQRTBebKLmhNKEqFTe/rZcTCAmihcRFHCfnFpx4Lz8hrAJioQScZQrNA3mc7z9eSP BigA0ovNbCo7ARR+DD9BPitfPjyYlWxgj5Pi0lw67jPTemNbVort4pKgn+QbIBl+vamI h5jcOxTj8IBnbTzLnzu/+a8H0KHunIhWeKARpL2yt/7788A+0mASWS1384juECUov8g4 rlphrtTFIddaGokGlgNlAsNQhJTKNxyJSdO7yBedNpRKJP62ulNJNxvA+I2WoS52c07c NuvQ== X-Gm-Message-State: ANhLgQ3H4wwCZqri9QLuV5DJHK78nrzkB955ieVvUv7lo3jQPwP0xioX JK8iCMI+T5IATqh/Sq+VssY= X-Google-Smtp-Source: ADFU+vvYiD40aPgRvGePic1GmeSgIZzRAWt9j6o1EYgEhRTdBS4AyqtTZErcT4nfMphIrZaUdd9SXA== X-Received: by 2002:a2e:888a:: with SMTP id k10mr6417015lji.216.1584737893988; Fri, 20 Mar 2020 13:58:13 -0700 (PDT) Received: from localhost ([185.112.167.47]) by smtp.gmail.com with ESMTPSA id q4sm4814636lfp.18.2020.03.20.13.58.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2020 13:58:13 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Fri, 20 Mar 2020 21:58:34 +0100 Message-ID: <87v9mypwud.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Fri, 20 Mar 2020 16:03:45 -0400 Yuan Fu wrote: > Here it is. Thank you! A few comments: > diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi > index 38963f225c..130abc41e8 100644 > --- a/doc/emacs/building.texi > +++ b/doc/emacs/building.texi > @@ -568,7 +568,7 @@ Starting GUD >=20=20 > @item M-x gud-gdb > @findex gud-gdb > -Run GDB, using a GUD interaction buffer for input and output to the > +Run GDB, using a GUD action buffer for input and output to the ^^^^^^ Is there really any reason for this change? If the buffer is "for input and output", isn't "interaction" more fitting than "action"? [...] > + You can customize the window layout bese on the one above, and save ^^^^ "based"? > +the custom layout to a file by @code{gdb-save-window-configuration}. ^^ I think "using" would be better here. > +Then you can later load this layout back by ^^ same here > +@code{gdb-load-window-configuration}. (Simply put, window [...] > +@code{gdb-default-window-configuration-file}. If it is not an > +absolute path, GDB looks under > +@code{gdb-window-configuration-directory} (default to > +@file{~/.emacs.d}) for the file. "(which defaults to user-emacs-directory)" (ideally with a proper reference to that variable). [...] > +premium. If you choose to start GDB in the same frame, consider > +setting @code{gdb-restore-window-configuration-after-quit} to > +non-@code{nil}. Then GDB restores your original window layout after "to a non-nil value. Your original window layout will then be restored after GDB quits." > +it quits. Set to @code{t} to always restore; set to ^^^^^^ "Set it to" or "Use", similarly for the following ones. > +@code{if-gdb-many-windows} to restore only when > +@code{gdb-many-windows} is @code{t}; set to @code{if-gdb-show-main} to > +restore only when @code{gdb-show-main} is @code{t}. IIUC, these two `t's for gdb-show-main and gdb-many-windows should really be "non-nil"s, i.e., there is no special treatment of the symbol `t' as opposed to generalized boolean. > diff --git a/etc/NEWS b/etc/NEWS > index 87e634f2c1..692ecf7f0a 100644 > --- a/etc/NEWS > +++ b/etc/NEWS > @@ -174,6 +174,22 @@ key binding > / v package-menu-filter-by-version > / / package-menu-filter-clear >=20=20 > +** gdb-mi > + > +*** gdb-mi can now store and restore window configurations. > +Use 'gdb-save-window-configuration' to save window configuration to a > +file, and 'gdb-load-window-configuration' to load from a file. They ^^^^ "These commands"? > +can also be accessed through menu bar under Gud -- GDB-Windows. [...] > +*** gdb-mi can now restore window configuration after finished. ^^^^^^^^^^^^^^ "when finished" or "after quit" > +Set 'gdb-restore-window-configuration-after-quit' to non-nil and GDB ^^^ Better say "Emacs": at that point GDB is gone. :-) --=20 =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 21 Mar 2020 18:02:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158481366611277 (code B ref 39181); Sat, 21 Mar 2020 18:02:01 +0000 Received: (at 39181) by debbugs.gnu.org; 21 Mar 2020 18:01:06 +0000 Received: from localhost ([127.0.0.1]:47968 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFiQk-0002vp-4g for submit@debbugs.gnu.org; Sat, 21 Mar 2020 14:01:06 -0400 Received: from mail-qk1-f171.google.com ([209.85.222.171]:35939) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFiQi-0002vB-Ug for 39181@debbugs.gnu.org; Sat, 21 Mar 2020 14:01:05 -0400 Received: by mail-qk1-f171.google.com with SMTP id d11so10788162qko.3 for <39181@debbugs.gnu.org>; Sat, 21 Mar 2020 11:01:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=8IQmcvjm0CWePuNiFpLMEzrleDjq5/eErCM2lqjpQnI=; b=SaOLXp/oT556YjsCvC++HJ2IhLE+EyMmE6tFnAGlnSX1Ob9vYbJniMP1k18IA5rdi7 Utah3uQW7illgGiFW1B7bpOUsn6zP3vyepIJas7+xZF/fp1VeVTkYaWIXdN+FZQrV4sd V7hvaSgaq/nA+GPpOvVRwY8CNsgzCMcKYfSpYVdbEFwy5BiFlpi+2szUPKePVh1TwhIJ eVlJyqziA6D/VQ7oseb3L7vxhClx+HBYLfdsza5WVONMLJY6T1CAL92D+jG6zrREn1iY rXYnBW0r93CtdavIwsnw8yfta4jlmbX9izgNh73PQQel5qPZuE1891Bc5VPHsFCTmec+ pgWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=8IQmcvjm0CWePuNiFpLMEzrleDjq5/eErCM2lqjpQnI=; b=nrvX7Cbnp1KblxxR4mowIkFG6ovFJmJpanzjknlDsBPrfrS3xEE0D/1kX+tsaCsXhS 8PsgNDKZe+f78iH6hU62X/0/r00BthLQw3SR0dyYIIPuQHYmUcYT81gr1TiawQy/vFIh S2kykcY9Mh2c8W5M/+I/91bdz98jcsKCXnCpKv0Lu99TyJheB8bPtJCsp2U0cvP1MPXc trhj7yI3aSmwFOEOf16YDMgDeXJ/QDMdtbwDe/+LmloO+3tfEcsxjGJZlkQYnSBv7XNL tetYePmgEiQfY6Mwr8nhJXgce8apvzufk8xCXm2NLAmkw9CDWq6HnMNv7W/77vt55faO HRbw== X-Gm-Message-State: ANhLgQ1TRjWCtvRHdisyOPFRM0z5/Ld4UfyrdrnvbPSbd5EM6pJPzXHi Aq32GshoKGgXJJqvkeH7xSA= X-Google-Smtp-Source: ADFU+vtaKvN+Bm4xs1Rr4PrRcnRek92qxaZOiAsuIye7v2mXSdqHqi1izATdNXTgDYzMhxTuWJiq/Q== X-Received: by 2002:a37:a7cd:: with SMTP id q196mr12865926qke.447.1584813659230; Sat, 21 Mar 2020 11:00:59 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id c190sm7366975qkb.80.2020.03.21.11.00.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 21 Mar 2020 11:00:58 -0700 (PDT) From: Yuan Fu Message-Id: <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_EF3CB95F-FEEC-4FD6-96B3-8E0E4C941593" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Sat, 21 Mar 2020 14:00:56 -0400 In-Reply-To: <87v9mypwud.fsf@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> <87v9mypwud.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_EF3CB95F-FEEC-4FD6-96B3-8E0E4C941593 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Thanks for reviewing! Almost all fixed with some comments: >> +@code{gdb-default-window-configuration-file}. If it is not an >> +absolute path, GDB looks under >> +@code{gdb-window-configuration-directory} (default to >> +@file{~/.emacs.d}) for the file. >=20 > "(which defaults to user-emacs-directory)" (ideally with a proper > reference to that variable). The whole Emacs user manual only referenced user-emacs-directory once = when talking about ~/.emacs.d. OTOH ~/.emacs.d is used across the = manual. I think ~/.emacs.d is better. >> +premium. If you choose to start GDB in the same frame, consider >> +setting @code{gdb-restore-window-configuration-after-quit} to >> +non-@code{nil}. Then GDB restores your original window layout after >=20 > "to a non-nil value. Your original window layout will then be = restored > after GDB quits." I prefer active voice than passive voice but don=E2=80=99t object the = latter. So I changed it accordingly. Yuan --Apple-Mail=_EF3CB95F-FEEC-4FD6-96B3-8E0E4C941593 Content-Disposition: attachment; filename=news.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="news.patch" Content-Transfer-Encoding: quoted-printable =46rom=205f6f35712c069b031e3ac7e28c413b206adffd0c=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Sun,=20= 15=20Mar=202020=2021:02:14=20-0400=0ASubject:=20[PATCH]=20Add=20= documentation=20for=20previous=20commit=20by=20Yuan=20Fu=0A=0A*=20= etc/NEWS:=20Add=20news=20entry.=0A*=20doc/emacs/building.texi=20(GDB=20= User=20Interface=20Layout):=20Add=0Adocumentation=20for=20= 'gdb-save-window-configuration',=0A'gdb-load-window-configuration',=0A= 'gdb-default-window-configuration-file',=0A= 'gdb-window-configuration-directory',=0A= 'gdb-restore-window-configuration-after-quit'.=20=20Change=20= 'many-windows=0Alayout'=20to=20'default=20layout'=0A---=0A=20= doc/emacs/building.texi=20|=2027=20+++++++++++++++++++++++++--=0A=20= etc/NEWS=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=2016=20= ++++++++++++++++=0A=202=20files=20changed,=2041=20insertions(+),=202=20= deletions(-)=0A=0Adiff=20--git=20a/doc/emacs/building.texi=20= b/doc/emacs/building.texi=0Aindex=2038963f225c..a9d2a21d76=20100644=0A= ---=20a/doc/emacs/building.texi=0A+++=20b/doc/emacs/building.texi=0A@@=20= -975,9=20+975,26=20@@=20GDB=20User=20Interface=20Layout=0A=20@end=20= group=0A=20@end=20smallexample=0A=20=0A+@findex=20= gdb-save-window-configuration=0A+@findex=20gdb-load-window-configuration=0A= +@vindex=20gdb-default-window-configuration-file=0A+@vindex=20= gdb-window-configuration-directory=0A+=20=20You=20can=20customize=20the=20= window=20layout=20based=20on=20the=20one=20above,=20and=20save=0A+the=20= custom=20layout=20to=20a=20file=20using=0A= +@code{gdb-save-window-configuration}.=20=20Then=20you=20can=20later=20= load=20this=0A+layout=20back=20using=20= @code{gdb-load-window-configuration}.=20=20(Simply=20put,=0A+window=20= configuration=20is=20the=20Emacs=20jargon=20for=20window=20layout.)=20=20= You=20can=0A+set=20your=20custom=20layout=20file=20as=20the=20default=20= one=20used=20by=0A+@code{gdb-many-windows}=20by=20customizing=0A= +@code{gdb-default-window-configuration-file}.=20=20If=20it=20is=20not=20= an=0A+absolute=20path,=20GDB=20looks=20under=0A= +@code{gdb-window-configuration-directory}=20(which=20defaults=20to=0A= +@file{~/.emacs.d})=20for=20the=20file.=0A+=0A=20@findex=20= gdb-restore-windows=0A=20@findex=20gdb-many-windows=0A-=20=20If=20you=20= ever=20change=20the=20window=20layout,=20you=20can=20restore=20the=20= many-windows=0A+@vindex=20gdb-restore-window-configuration-after-quit=0A= +=20=20If=20you=20ever=20change=20the=20window=20layout,=20you=20can=20= restore=20the=20default=0A=20layout=20by=20typing=20@kbd{M-x=20= gdb-restore-windows}.=20=20To=20toggle=0A=20between=20the=20many=20= windows=20layout=20and=20a=20simple=20layout=20with=20just=20the=20GUD=0A= =20interaction=20buffer=20and=20a=20source=20file,=20type=20@kbd{M-x=20= gdb-many-windows}.=0A@@=20-988,7=20+1005,13=20@@=20GDB=20User=20= Interface=20Layout=0A=20of=20windows=20on=20your=20original=20frame=20= will=20not=20be=20affected.=20=20A=20separate=0A=20frame=20for=20GDB=20= sessions=20can=20come=20in=20especially=20handy=20if=20you=20work=20on=20= a=0A=20text-mode=20terminal,=20where=20the=20screen=20estate=20for=20= windows=20could=20be=20at=20a=0A-premium.=0A+premium.=20=20If=20you=20= choose=20to=20start=20GDB=20in=20the=20same=20frame,=20consider=0A= +setting=20@code{gdb-restore-window-configuration-after-quit}=20to=20a=0A= +non-@code{nil}=20value.=20=20Your=20original=20layout=20will=20then=20= be=20restored=0A+after=20GDB=20quits.=20=20Use=20@code{t}=20to=20always=20= restore;=20use=0A+@code{if-gdb-many-windows}=20to=20restore=20only=20= when=0A+@code{gdb-many-windows}=20is=20non-@code{nil};=20use=20= @code{if-gdb-show-main}=0A+to=20restore=20only=20when=20= @code{gdb-show-main}=20is=20non-@code{nil}.=0A=20=0A=20=20=20You=20may=20= also=20specify=20additional=20GDB-related=20buffers=20to=20display,=0A=20= either=20in=20the=20same=20frame=20or=20a=20different=20one.=20=20Select=20= the=20buffers=20you=0Adiff=20--git=20a/etc/NEWS=20b/etc/NEWS=0Aindex=20= 87e634f2c1..f61bff6a4f=20100644=0A---=20a/etc/NEWS=0A+++=20b/etc/NEWS=0A= @@=20-174,6=20+174,22=20@@=20key=20=20=20=20=20=20=20=20=20=20=20=20=20= binding=0A=20/=20v=20=20=20=20=20=20=20=20=20=20=20=20=20= package-menu-filter-by-version=0A=20/=20/=20=20=20=20=20=20=20=20=20=20=20= =20=20package-menu-filter-clear=0A=20=0A+**=20gdb-mi=0A+=0A+***=20gdb-mi=20= can=20now=20store=20and=20restore=20window=20configurations.=0A+Use=20= 'gdb-save-window-configuration'=20to=20save=20window=20configuration=20= to=20a=0A+file,=20and=20'gdb-load-window-configuration'=20to=20load=20= from=20a=20file.=20=20These=0A+commands=20can=20also=20be=20accessed=20= through=20menu=20bar=20under=20Gud=20--=0A+GDB-Windows.=20=20= 'gdb-default-window-configuration-file',=20when=20non-nil,=0A+is=20= loaded=20when=20GDB=20starts=20up.=0A+=0A+***=20gdb-mi=20can=20now=20= restore=20window=20configuration=20after=20quit.=0A+Set=20= 'gdb-restore-window-configuration-after-quit'=20to=20non-nil=20and=20= Emacs=0A+will=20remember=20the=20window=20configuration=20before=20GDB=20= started,=20and=20restore=0A+it=20after=20GDB=20quits.=20=20Toggle=20= button=20is=20also=20provided=20under=20Gud=20--=0A+GDB-Windows.=0A+=0A+=0A= =20=0C=0A=20*=20New=20Modes=20and=20Packages=20in=20Emacs=2028.1=0A=20=0A= --=20=0A2.25.1=0A=0A= --Apple-Mail=_EF3CB95F-FEEC-4FD6-96B3-8E0E4C941593-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 21 Mar 2020 18:39:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158481593523310 (code B ref 39181); Sat, 21 Mar 2020 18:39:02 +0000 Received: (at 39181) by debbugs.gnu.org; 21 Mar 2020 18:38:55 +0000 Received: from localhost ([127.0.0.1]:47994 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFj1K-00063t-U3 for submit@debbugs.gnu.org; Sat, 21 Mar 2020 14:38:55 -0400 Received: from mail-lj1-f176.google.com ([209.85.208.176]:45870) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFj1I-00063R-Vs for 39181@debbugs.gnu.org; Sat, 21 Mar 2020 14:38:53 -0400 Received: by mail-lj1-f176.google.com with SMTP id y17so10038395ljk.12 for <39181@debbugs.gnu.org>; Sat, 21 Mar 2020 11:38:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=BzGlwv3psJwp+H9zI3Rue8/3wU/DaLTVzG/u5m/5J1w=; b=hY7VKd+mJAKEHRG85Pgo9xWN4NfpHeNfU307TLYy8/5HzsuYKvjyEStrfMIpxyqnYs EvOFyR+svDM2ZRJ7RwAYSNk5p0h4JpguPP6hPzaCi5RIlgXm0tMFSdcBcPMlasxMA0Ad Xc6ILeJi2io1IqSEpID5y0eb1UK3zKjwJk0xg+EquNCXA2Hl4mPAgiJF6FifuM3HpWLR f3df18qsy5L0b4REJ3yF14c0iHX4UFMrCxO9oH6fQa3n8QB+FPSfF8CUQ9nxONGAQOug EdpukDlqnqnKc+xUI/iJF8TI0y0zFsk/DpFnxGaxDc/eNS16heQQbS86U1rwZ1fH4QEe rH1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=BzGlwv3psJwp+H9zI3Rue8/3wU/DaLTVzG/u5m/5J1w=; b=Te929oY9aOnCMxv3w9gWjuGbAiJtg+DPTBe8Ab1xha7rfDLZlzqHMt7X9FfPDvUPOw V0zONhUkb8B9pMnZpFWxi9lu7Ga9+EiepjZSMtfS877xXwSsOivgYxioKwWrFh+TqMt+ lYynExDQHEmaVqL8ZX496G6bqi7udRH9BY4836SZZSyGUZIatxJ+mmtUFDWi5Y9rPdRh /XYYc+226imuJAOvohUFsD/nm71JM1auFjpAXGaaYGbJRnZgAYH1gEBitq2fzsuXWQPX byWEmGo9hiR52M4/Xobs/FPjtSh1CyM+NewAB76v+eYhcXL08DStv+a91sIWwTIDJYi2 1DAw== X-Gm-Message-State: ANhLgQ1+pfvszaBfmmQ8r2K+fK7ekiIA/GyGjWZZBziPyCi/7vAIMmzD kx/MCXVXDX895QGf+6lJdrc= X-Google-Smtp-Source: ADFU+vuOTcY7XxFjZ4fanwXcIQPC5dT8P899gherbvVdxWND3IjJDIu0tonOp9/Zp+2JC1X1Ka8KeQ== X-Received: by 2002:a2e:94c8:: with SMTP id r8mr9155674ljh.28.1584815926875; Sat, 21 Mar 2020 11:38:46 -0700 (PDT) Received: from localhost ([185.112.167.47]) by smtp.gmail.com with ESMTPSA id k2sm5700511lfc.95.2020.03.21.11.38.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Mar 2020 11:38:46 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> <87v9mypwud.fsf@gmail.com> <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Sat, 21 Mar 2020 19:39:09 +0100 Message-ID: <87imix7dte.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Sat, 21 Mar 2020 14:00:56 -0400 Yuan Fu wrote: >>> +@code{gdb-default-window-configuration-file}. If it is not an >>> +absolute path, GDB looks under >>> +@code{gdb-window-configuration-directory} (default to >>> +@file{~/.emacs.d}) for the file. >>=20 >> "(which defaults to user-emacs-directory)" (ideally with a proper >> reference to that variable). > > The whole Emacs user manual only referenced user-emacs-directory once whe= n talking about ~/.emacs.d. OTOH ~/.emacs.d is used across the manual. I th= ink ~/.emacs.d is better. Saying "defaults to ~/.emacs.d" is strictly speaking incorrect, because it really defaults to user-emacs-directory, which might or might not be "~/.emacs.d". It is true that the same could probably be argued about some other occurences in the manuals (most of which probably go back even before the introduction of user-emacs-directory in Emacs 23, let alone the recent XDG-compliance efforts), though, so if you insist, at least it will be incorrect somewhat _consistently_ (and can be fixed later together with the other places) :-D. >>> +premium. If you choose to start GDB in the same frame, consider >>> +setting @code{gdb-restore-window-configuration-after-quit} to >>> +non-@code{nil}. Then GDB restores your original window layout after >>=20 >> "to a non-nil value. Your original window layout will then be restored >> after GDB quits." > > I prefer active voice than passive voice but don=E2=80=99t object the lat= ter. So I changed it accordingly. The real issue here was more the semantics than the grammar, similarly to the NEWS correction: it's really Emacs, not GDB, that restores the windows after GDB quits. Thanks! --=20 =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 21 Mar 2020 21:04:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158482460124386 (code B ref 39181); Sat, 21 Mar 2020 21:04:02 +0000 Received: (at 39181) by debbugs.gnu.org; 21 Mar 2020 21:03:21 +0000 Received: from localhost ([127.0.0.1]:48286 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFlH7-0006LG-D6 for submit@debbugs.gnu.org; Sat, 21 Mar 2020 17:03:21 -0400 Received: from mail-qv1-f67.google.com ([209.85.219.67]:41717) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFlH4-0006L3-TU for 39181@debbugs.gnu.org; Sat, 21 Mar 2020 17:03:19 -0400 Received: by mail-qv1-f67.google.com with SMTP id o7so2620364qvq.8 for <39181@debbugs.gnu.org>; Sat, 21 Mar 2020 14:03:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=pKfyagFcW+EkcmVX2Zhy5L/MHAQ7IJsnNufpLOvEzDE=; b=X3ztfZhHKUjm/0wDG7ELNb+DuWUyiGh85R831JgosyKMKeF1l3OK9Ro8PuDiQkFlc/ rUq3h/xKWUqTLdFqlKeolzv6yQbE7JPHFwlaU68GfPhly9cC10HCIcvqu24gBs3rCKoa iGoKlJQWNgtt+tXsJfU1oY3mZ75cZKTcrnKunxc+rQb8B6o/JSgy2VNszFVw1wB9CBxZ Khmvv5dlEDISN/4b0FkpqvXB9ueMFDoOLwsrUABUFtz6074aaefjUgVOWMwhJLY01ccz XR/tIZT9XtyII0Vqk8RH9Hqi3F1BPB9dWLEIOAVBW4QEcLZf78PzBtGoO8eArrJ2ilvk 6Xkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=pKfyagFcW+EkcmVX2Zhy5L/MHAQ7IJsnNufpLOvEzDE=; b=rX/o5a7g/MclXXqFZruqUuTWShcrpFsKM+ZhsHfja8oklwF7os0z5aBUrtzgaeICM8 6Htgug4OjXjwceCEy4QHLCgx1k1ZbqNxTvQMuRsF5uTm7pLkKBqdnxz3ofgA95AcDnpc CFUjvixZVibbG5YDAfp4CEEEPkY2tfRJ5L38Sn08vWFvkxol9KZEhgoqwMoyVPPSAkga 78eAelUEJStlDyN/67lpyjHI4CsCc+C9yNdicTj84smDVhhlJABD2x0MbNM0urprxTs/ +xZT3LWbyISuke9RMj6LMBe52sLY2L6MYACYJb515pua6zV1AYPqAjFG20YnWWXqgZ1t A0aw== X-Gm-Message-State: ANhLgQ3YMLF3sD0Ec/9ugf3RP50kzjIo+t12DuToMZBw2dH8woDb/qji kMX0PhFVN70yonqtZwU9Z40= X-Google-Smtp-Source: ADFU+vt9kBSMl007jdoTl5NqNm01qxHlYEz8g0reKGcaecxk/3u2aM+jFZH+WiVu+I3U/FN1qwSZBw== X-Received: by 2002:ad4:4b67:: with SMTP id m7mr14505979qvx.73.1584824593205; Sat, 21 Mar 2020 14:03:13 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id z1sm8305371qtc.51.2020.03.21.14.03.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 21 Mar 2020 14:03:12 -0700 (PDT) From: Yuan Fu Message-Id: <1A34AFCE-F3E9-4CBD-BD24-C5B008C6B1D0@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_401ED910-5DE8-400E-BB81-FF7D8E5B1F0E" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Sat, 21 Mar 2020 17:03:11 -0400 In-Reply-To: <87imix7dte.fsf@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> <87v9mypwud.fsf@gmail.com> <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> <87imix7dte.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_401ED910-5DE8-400E-BB81-FF7D8E5B1F0E Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 21, 2020, at 2:39 PM, =C5=A0t=C4=9Bp=C3=A1n N=C4=9Bmec = wrote: >=20 > On Sat, 21 Mar 2020 14:00:56 -0400 > Yuan Fu wrote: >=20 >>>> +@code{gdb-default-window-configuration-file}. If it is not an >>>> +absolute path, GDB looks under >>>> +@code{gdb-window-configuration-directory} (default to >>>> +@file{~/.emacs.d}) for the file. >>>=20 >>> "(which defaults to user-emacs-directory)" (ideally with a proper >>> reference to that variable). >>=20 >> The whole Emacs user manual only referenced user-emacs-directory once = when talking about ~/.emacs.d. OTOH ~/.emacs.d is used across the = manual. I think ~/.emacs.d is better. >=20 > Saying "defaults to ~/.emacs.d" is strictly speaking incorrect, = because > it really defaults to user-emacs-directory, which might or might not = be > "~/.emacs.d". It is true that the same could probably be argued about > some other occurences in the manuals (most of which probably go back > even before the introduction of user-emacs-directory in Emacs 23, let > alone the recent XDG-compliance efforts), though, so if you insist, at > least it will be incorrect somewhat _consistently_ (and can be fixed > later together with the other places) :-D. >=20 >>>> +premium. If you choose to start GDB in the same frame, consider >>>> +setting @code{gdb-restore-window-configuration-after-quit} to >>>> +non-@code{nil}. Then GDB restores your original window layout = after >>>=20 >>> "to a non-nil value. Your original window layout will then be = restored >>> after GDB quits." >>=20 >> I prefer active voice than passive voice but don=E2=80=99t object the = latter. So I changed it accordingly. >=20 > The real issue here was more the semantics than the grammar, similarly > to the NEWS correction: it's really Emacs, not GDB, that restores the > windows after GDB quits. >=20 >=20 I changed to user-emacs-directory. I hope I get the xref right :-) Yuan --Apple-Mail=_401ED910-5DE8-400E-BB81-FF7D8E5B1F0E Content-Disposition: attachment; filename=news.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="news.patch" Content-Transfer-Encoding: quoted-printable =46rom=20c75dd5f5ad5bddc323e57844dcdd45239734aa8a=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Sun,=20= 15=20Mar=202020=2021:02:14=20-0400=0ASubject:=20[PATCH]=20Add=20= documentation=20for=20previous=20commit=20by=20Yuan=20Fu=0A=0A*=20= etc/NEWS:=20Add=20news=20entry.=0A*=20doc/emacs/building.texi=20(GDB=20= User=20Interface=20Layout):=20Add=0Adocumentation=20for=20= 'gdb-save-window-configuration',=0A'gdb-load-window-configuration',=0A= 'gdb-default-window-configuration-file',=0A= 'gdb-window-configuration-directory',=0A= 'gdb-restore-window-configuration-after-quit'.=20=20Change=20= 'many-windows=0Alayout'=20to=20'default=20layout'=0A---=0A=20= doc/emacs/building.texi=20|=2030=20++++++++++++++++++++++++++++--=0A=20= etc/NEWS=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=2016=20= ++++++++++++++++=0A=202=20files=20changed,=2044=20insertions(+),=202=20= deletions(-)=0A=0Adiff=20--git=20a/doc/emacs/building.texi=20= b/doc/emacs/building.texi=0Aindex=2038963f225c..11bc239012=20100644=0A= ---=20a/doc/emacs/building.texi=0A+++=20b/doc/emacs/building.texi=0A@@=20= -975,9=20+975,29=20@@=20GDB=20User=20Interface=20Layout=0A=20@end=20= group=0A=20@end=20smallexample=0A=20=0A+@findex=20= gdb-save-window-configuration=0A+@findex=20gdb-load-window-configuration=0A= +@vindex=20gdb-default-window-configuration-file=0A+@vindex=20= gdb-window-configuration-directory=0A+=20=20You=20can=20customize=20the=20= window=20layout=20based=20on=20the=20one=20above,=20and=20save=0A+the=20= custom=20layout=20to=20a=20file=20using=0A= +@code{gdb-save-window-configuration}.=20=20Then=20you=20can=20later=20= load=20this=0A+layout=20back=20using=20= @code{gdb-load-window-configuration}.=20=20(Simply=20put,=0A+window=20= configuration=20is=20the=20Emacs=20jargon=20for=20window=20layout.)=20=20= You=20can=0A+set=20your=20custom=20layout=20file=20as=20the=20default=20= one=20used=20by=0A+@code{gdb-many-windows}=20by=20customizing=0A= +@code{gdb-default-window-configuration-file}.=20=20If=20it=20is=20not=20= an=0A+absolute=20path,=20GDB=20looks=20under=0A= +@code{gdb-window-configuration-directory}=20for=20the=20file.=0A= +@code{gdb-window-configuration-directory}=20defaults=20to=0A= +@code{user-emacs-directory}=20(@pxref{How=20Emacs=20Finds=20Your=20Init=20= File,,,=0A+custom.texi,=20Customization}).=0A+=0A+=0A=20@findex=20= gdb-restore-windows=0A=20@findex=20gdb-many-windows=0A-=20=20If=20you=20= ever=20change=20the=20window=20layout,=20you=20can=20restore=20the=20= many-windows=0A+@vindex=20gdb-restore-window-configuration-after-quit=0A= +=20=20If=20you=20ever=20change=20the=20window=20layout,=20you=20can=20= restore=20the=20default=0A=20layout=20by=20typing=20@kbd{M-x=20= gdb-restore-windows}.=20=20To=20toggle=0A=20between=20the=20many=20= windows=20layout=20and=20a=20simple=20layout=20with=20just=20the=20GUD=0A= =20interaction=20buffer=20and=20a=20source=20file,=20type=20@kbd{M-x=20= gdb-many-windows}.=0A@@=20-988,7=20+1008,13=20@@=20GDB=20User=20= Interface=20Layout=0A=20of=20windows=20on=20your=20original=20frame=20= will=20not=20be=20affected.=20=20A=20separate=0A=20frame=20for=20GDB=20= sessions=20can=20come=20in=20especially=20handy=20if=20you=20work=20on=20= a=0A=20text-mode=20terminal,=20where=20the=20screen=20estate=20for=20= windows=20could=20be=20at=20a=0A-premium.=0A+premium.=20=20If=20you=20= choose=20to=20start=20GDB=20in=20the=20same=20frame,=20consider=0A= +setting=20@code{gdb-restore-window-configuration-after-quit}=20to=20a=0A= +non-@code{nil}=20value.=20=20Your=20original=20layout=20will=20then=20= be=20restored=0A+after=20GDB=20quits.=20=20Use=20@code{t}=20to=20always=20= restore;=20use=0A+@code{if-gdb-many-windows}=20to=20restore=20only=20= when=0A+@code{gdb-many-windows}=20is=20non-@code{nil};=20use=20= @code{if-gdb-show-main}=0A+to=20restore=20only=20when=20= @code{gdb-show-main}=20is=20non-@code{nil}.=0A=20=0A=20=20=20You=20may=20= also=20specify=20additional=20GDB-related=20buffers=20to=20display,=0A=20= either=20in=20the=20same=20frame=20or=20a=20different=20one.=20=20Select=20= the=20buffers=20you=0Adiff=20--git=20a/etc/NEWS=20b/etc/NEWS=0Aindex=20= 87e634f2c1..f61bff6a4f=20100644=0A---=20a/etc/NEWS=0A+++=20b/etc/NEWS=0A= @@=20-174,6=20+174,22=20@@=20key=20=20=20=20=20=20=20=20=20=20=20=20=20= binding=0A=20/=20v=20=20=20=20=20=20=20=20=20=20=20=20=20= package-menu-filter-by-version=0A=20/=20/=20=20=20=20=20=20=20=20=20=20=20= =20=20package-menu-filter-clear=0A=20=0A+**=20gdb-mi=0A+=0A+***=20gdb-mi=20= can=20now=20store=20and=20restore=20window=20configurations.=0A+Use=20= 'gdb-save-window-configuration'=20to=20save=20window=20configuration=20= to=20a=0A+file,=20and=20'gdb-load-window-configuration'=20to=20load=20= from=20a=20file.=20=20These=0A+commands=20can=20also=20be=20accessed=20= through=20menu=20bar=20under=20Gud=20--=0A+GDB-Windows.=20=20= 'gdb-default-window-configuration-file',=20when=20non-nil,=0A+is=20= loaded=20when=20GDB=20starts=20up.=0A+=0A+***=20gdb-mi=20can=20now=20= restore=20window=20configuration=20after=20quit.=0A+Set=20= 'gdb-restore-window-configuration-after-quit'=20to=20non-nil=20and=20= Emacs=0A+will=20remember=20the=20window=20configuration=20before=20GDB=20= started,=20and=20restore=0A+it=20after=20GDB=20quits.=20=20Toggle=20= button=20is=20also=20provided=20under=20Gud=20--=0A+GDB-Windows.=0A+=0A+=0A= =20=0C=0A=20*=20New=20Modes=20and=20Packages=20in=20Emacs=2028.1=0A=20=0A= --=20=0A2.25.1=0A=0A= --Apple-Mail=_401ED910-5DE8-400E-BB81-FF7D8E5B1F0E Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_401ED910-5DE8-400E-BB81-FF7D8E5B1F0E-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 21 Mar 2020 21:50:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.158482734729588 (code B ref 39181); Sat, 21 Mar 2020 21:50:01 +0000 Received: (at 39181) by debbugs.gnu.org; 21 Mar 2020 21:49:07 +0000 Received: from localhost ([127.0.0.1]:48316 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFlzP-0007h9-1p for submit@debbugs.gnu.org; Sat, 21 Mar 2020 17:49:07 -0400 Received: from mail-lj1-f180.google.com ([209.85.208.180]:38609) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFlzM-0007gd-CG for 39181@debbugs.gnu.org; Sat, 21 Mar 2020 17:49:05 -0400 Received: by mail-lj1-f180.google.com with SMTP id w1so10404305ljh.5 for <39181@debbugs.gnu.org>; Sat, 21 Mar 2020 14:49:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-transfer-encoding; bh=yPfmiQmEIdH0zaQ+81YaF++PfJyzrl9FqMSAYmT5HJk=; b=NyYxCeKKkLr583A+7cZFgXfT5/NJ/Ixchb4pgSJK91kBl6T2xfABCccaowahx1Ltyb Bz4fop764jeYRT43b6r+uiaUNCvktzMTY8v51vGf4S3pMRzAtSf1QQO0V+VUZl0KXlhx FRwSUVAh6M6hkmShHbUXds5hHVAhlNw/fbShc0276Q9z0MeBbRHadBVwVBImHCsEpgFN EYs8JEJBJOYfR+Gn56RU7NXyxwAddi9Rw7JktU3uoJkUDU0AoZTjlCVqFT74WzJUTv/g AAuLdbCwHO6c5lpw7wp2cLmkiJGGpRkeer/XkaGBQGhnBepMMhNrIj67vDQheKwhbpLz ZNaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-transfer-encoding; bh=yPfmiQmEIdH0zaQ+81YaF++PfJyzrl9FqMSAYmT5HJk=; b=B9Z1Kb8LsgFcrBEsaZvGxF7oalFYF8eJIzM6Z94fogKDT19fgTlEvOqqiUE9sERH8U m4tju8Xkh8djXygjTzbNP48eNqVSXGES7eMFr+EMZDHnyHMwzApbKNIRJnPd7AAIJP+Z qDRyemnN0NWXd+4M5K92qBlNn/M0YWU25ZSDiaK9OdThDE+ItHqQI+5nD9ir8Icb4CJW 8kT67RhtGvCG3FVEbqlRuQsJNMvozrIpi9uB1SNfcrUz8roR8rU02pb4Dz4WAH/vxXBZ 1vphGxNBXlJiGS6TsAzqfjjTafjpbkEPoptVIE5ZmvMzPqTJ8swNsJ2luNmyIp0b6/Wa XkdQ== X-Gm-Message-State: ANhLgQ0GvoAXFBfbHhgqzInNiP27dFsNBg3wU4K4Ciwjb3GWaaCdZIVY EKfXtJjUxUcNIKh2LzyV6aA= X-Google-Smtp-Source: ADFU+vvm+u/L61O3dng3ZDXEplpLbPD1EjMp+l7zFDZnAhR32GSSNoE6tYCd7QutNBJyHTMZO0AARQ== X-Received: by 2002:a2e:88d9:: with SMTP id a25mr9822884ljk.267.1584827338257; Sat, 21 Mar 2020 14:48:58 -0700 (PDT) Received: from localhost ([185.112.167.47]) by smtp.gmail.com with ESMTPSA id u5sm5932008lfu.69.2020.03.21.14.48.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Mar 2020 14:48:57 -0700 (PDT) From: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= In-Reply-To: <1A34AFCE-F3E9-4CBD-BD24-C5B008C6B1D0@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> <87v9mypwud.fsf@gmail.com> <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> <87imix7dte.fsf@gmail.com> <1A34AFCE-F3E9-4CBD-BD24-C5B008C6B1D0@gmail.com> User-Agent: Notmuch/0.29.3 (https://notmuchmail.org) Emacs/28.0.50 (x86_64-pc-linux-gnu) Date: Sat, 21 Mar 2020 22:49:20 +0100 Message-ID: <87wo7d5qfz.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Sat, 21 Mar 2020 17:03:11 -0400 Yuan Fu wrote: > I changed to user-emacs-directory. I hope I get the xref right :-) Well, you could have just tested it, like I did, and... turns out you didn't. :-D > +@code{gdb-window-configuration-directory} defaults to > +@code{user-emacs-directory} (@pxref{How Emacs Finds Your Init File,,, > +custom.texi, Customization}). It's actually the same manual, albeit compiled from multiple files, so, just @pxref{Find Init} appears to work. Thanks, =C5=A0t=C4=9Bp=C3=A1n From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 24 Mar 2020 16:15:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: martin rudalics , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15850664677051 (code B ref 39181); Tue, 24 Mar 2020 16:15:01 +0000 Received: (at 39181) by debbugs.gnu.org; 24 Mar 2020 16:14:27 +0000 Received: from localhost ([127.0.0.1]:55490 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jGmCB-0001pe-5s for submit@debbugs.gnu.org; Tue, 24 Mar 2020 12:14:27 -0400 Received: from mail-qv1-f43.google.com ([209.85.219.43]:41752) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jGmC9-0001pT-LN for 39181@debbugs.gnu.org; Tue, 24 Mar 2020 12:14:26 -0400 Received: by mail-qv1-f43.google.com with SMTP id o7so6999176qvq.8 for <39181@debbugs.gnu.org>; Tue, 24 Mar 2020 09:14:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=i3l14AHiz7S4BruoSCsyJLTizuOvwpFTW4jqrhoLRng=; b=mlctxRvPbYABqMFdVh4ONubfJOFHhZWiVw5UzuUOlh3ZGdbO2ja9ozN2NmXeQZvrRc t9A1v8Ff3JvJyd5Sd2PoJVYqH5PFiVUp8akjTixPaurYrG0IRpeiphaQ8Ndiapb4q/GZ IHNoXRudNTD3zKiXJZiuO4KeM0xcaa6pYrmDAWw93e6IFs4t5b4alie7cujIrvhgAK0U i8jC0OxFZVmWcES1BFKmroZO7mbOdJNrQcz+HUnY78wc9DvBnNvIy/ptD/64SlDIf+w8 mUviRhuCZUVVp2ptLD1TtdhGnHzGuAod9Yyw+gUqQK1lrInqrjETR57ScSSPfsLLhG8H RzEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=i3l14AHiz7S4BruoSCsyJLTizuOvwpFTW4jqrhoLRng=; b=Q9K5sRVSBXPLzhcK+Pj4w5+hVBWN0jzCiWjDzbczkJ2ZiPiZfNqkr2hasBYcxOLvDw Ba3LuP2n33WgJtqj9DveScAN5Z35flVFQzPDo/1srb/+q7bGVaVDOTq3UWJL87AhUcOY +3MINdE5AQtqww/wfZ0HKShLnrbmnw7wfIWfKZJslgQHuGzamr5CDDrMSKLarbu5/94F 3dmsvSzhpdQPuHIdS8dMEd5hCMSafqIQRI8f7wfdcuMapsjBWH+xvZ413dYjkVBFPv3r 78b1xf+cJsAAZC5eASBpSNSsC8a8eHV1MSrwRrsTMQuCm2zb2a/TOnrIEpL2tvrNrqaI aZsA== X-Gm-Message-State: ANhLgQ2jrxIgcc9Ppo7O2L91ueABWE5cM23g13Glh5qCGgzBWCBenRy9 Fb2y2GZcH1WVTXKnvV7/H2A= X-Google-Smtp-Source: ADFU+vv2CKcFU7QeN+J439AjsIyme3jgoGJqv2/COOmhGToQW9cXYwKH/8QXbUvCrqpIZQ5RY2XNYw== X-Received: by 2002:a05:6214:56c:: with SMTP id cj12mr26341008qvb.29.1585066459989; Tue, 24 Mar 2020 09:14:19 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id y15sm13729293qky.33.2020.03.24.09.14.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Mar 2020 09:14:19 -0700 (PDT) From: Yuan Fu Message-Id: <3070D489-A42E-4F72-904D-1179AD59638C@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_D6397ED5-87AC-460D-ABEB-2BA8E3C9E877" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Date: Tue, 24 Mar 2020 12:14:16 -0400 In-Reply-To: <87wo7d5qfz.fsf@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> <87v9mypwud.fsf@gmail.com> <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> <87imix7dte.fsf@gmail.com> <1A34AFCE-F3E9-4CBD-BD24-C5B008C6B1D0@gmail.com> <87wo7d5qfz.fsf@gmail.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_D6397ED5-87AC-460D-ABEB-2BA8E3C9E877 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 21, 2020, at 5:49 PM, =C5=A0t=C4=9Bp=C3=A1n N=C4=9Bmec = wrote: >=20 > On Sat, 21 Mar 2020 17:03:11 -0400 > Yuan Fu wrote: >=20 >> I changed to user-emacs-directory. I hope I get the xref right :-) >=20 > Well, you could have just tested it, like I did, and... turns out you > didn't. :-D >=20 >> +@code{gdb-window-configuration-directory} defaults to >> +@code{user-emacs-directory} (@pxref{How Emacs Finds Your Init = File,,, >> +custom.texi, Customization}). >=20 > It's actually the same manual, albeit compiled from multiple files, = so, > just @pxref{Find Init} appears to work. Didn=E2=80=99t thought of that, sorry. I=E2=80=99ll remember to test it = next time. Here=E2=80=99s the new patch. Thanks. Yuan --Apple-Mail=_D6397ED5-87AC-460D-ABEB-2BA8E3C9E877 Content-Disposition: attachment; filename=news.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="news.patch" Content-Transfer-Encoding: quoted-printable =46rom=200ad6b9579383e36334084f59ffcf389611f9ca19=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Sun,=20= 15=20Mar=202020=2021:02:14=20-0400=0ASubject:=20[PATCH]=20Add=20= documentation=20for=20previous=20commit=20by=20Yuan=20Fu=0A=0A*=20= etc/NEWS:=20Add=20news=20entry.=0A*=20doc/emacs/building.texi=20(GDB=20= User=20Interface=20Layout):=20Add=0Adocumentation=20for=20= 'gdb-save-window-configuration',=0A'gdb-load-window-configuration',=0A= 'gdb-default-window-configuration-file',=0A= 'gdb-window-configuration-directory',=0A= 'gdb-restore-window-configuration-after-quit'.=20=20Change=20= 'many-windows=0Alayout'=20to=20'default=20layout'=0A---=0A=20= doc/emacs/building.texi=20|=2029=20+++++++++++++++++++++++++++--=0A=20= etc/NEWS=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=2016=20= ++++++++++++++++=0A=202=20files=20changed,=2043=20insertions(+),=202=20= deletions(-)=0A=0Adiff=20--git=20a/doc/emacs/building.texi=20= b/doc/emacs/building.texi=0Aindex=2038963f225c..fc69cdcc8f=20100644=0A= ---=20a/doc/emacs/building.texi=0A+++=20b/doc/emacs/building.texi=0A@@=20= -975,9=20+975,28=20@@=20GDB=20User=20Interface=20Layout=0A=20@end=20= group=0A=20@end=20smallexample=0A=20=0A+@findex=20= gdb-save-window-configuration=0A+@findex=20gdb-load-window-configuration=0A= +@vindex=20gdb-default-window-configuration-file=0A+@vindex=20= gdb-window-configuration-directory=0A+=20=20You=20can=20customize=20the=20= window=20layout=20based=20on=20the=20one=20above,=20and=20save=0A+the=20= custom=20layout=20to=20a=20file=20using=0A= +@code{gdb-save-window-configuration}.=20=20Then=20you=20can=20later=20= load=20this=0A+layout=20back=20using=20= @code{gdb-load-window-configuration}.=20=20(Simply=20put,=0A+window=20= configuration=20is=20the=20Emacs=20jargon=20for=20window=20layout.)=20=20= You=20can=0A+set=20your=20custom=20layout=20file=20as=20the=20default=20= one=20used=20by=0A+@code{gdb-many-windows}=20by=20customizing=0A= +@code{gdb-default-window-configuration-file}.=20=20If=20it=20is=20not=20= an=0A+absolute=20path,=20GDB=20looks=20under=0A= +@code{gdb-window-configuration-directory}=20for=20the=20file.=0A= +@code{gdb-window-configuration-directory}=20defaults=20to=0A= +@code{user-emacs-directory}=20(@pxref{Find=20Init}).=0A+=0A+=0A=20= @findex=20gdb-restore-windows=0A=20@findex=20gdb-many-windows=0A-=20=20= If=20you=20ever=20change=20the=20window=20layout,=20you=20can=20restore=20= the=20many-windows=0A+@vindex=20= gdb-restore-window-configuration-after-quit=0A+=20=20If=20you=20ever=20= change=20the=20window=20layout,=20you=20can=20restore=20the=20default=0A=20= layout=20by=20typing=20@kbd{M-x=20gdb-restore-windows}.=20=20To=20toggle=0A= =20between=20the=20many=20windows=20layout=20and=20a=20simple=20layout=20= with=20just=20the=20GUD=0A=20interaction=20buffer=20and=20a=20source=20= file,=20type=20@kbd{M-x=20gdb-many-windows}.=0A@@=20-988,7=20+1007,13=20= @@=20GDB=20User=20Interface=20Layout=0A=20of=20windows=20on=20your=20= original=20frame=20will=20not=20be=20affected.=20=20A=20separate=0A=20= frame=20for=20GDB=20sessions=20can=20come=20in=20especially=20handy=20if=20= you=20work=20on=20a=0A=20text-mode=20terminal,=20where=20the=20screen=20= estate=20for=20windows=20could=20be=20at=20a=0A-premium.=0A+premium.=20=20= If=20you=20choose=20to=20start=20GDB=20in=20the=20same=20frame,=20= consider=0A+setting=20@code{gdb-restore-window-configuration-after-quit}=20= to=20a=0A+non-@code{nil}=20value.=20=20Your=20original=20layout=20will=20= then=20be=20restored=0A+after=20GDB=20quits.=20=20Use=20@code{t}=20to=20= always=20restore;=20use=0A+@code{if-gdb-many-windows}=20to=20restore=20= only=20when=0A+@code{gdb-many-windows}=20is=20non-@code{nil};=20use=20= @code{if-gdb-show-main}=0A+to=20restore=20only=20when=20= @code{gdb-show-main}=20is=20non-@code{nil}.=0A=20=0A=20=20=20You=20may=20= also=20specify=20additional=20GDB-related=20buffers=20to=20display,=0A=20= either=20in=20the=20same=20frame=20or=20a=20different=20one.=20=20Select=20= the=20buffers=20you=0Adiff=20--git=20a/etc/NEWS=20b/etc/NEWS=0Aindex=20= 87e634f2c1..f61bff6a4f=20100644=0A---=20a/etc/NEWS=0A+++=20b/etc/NEWS=0A= @@=20-174,6=20+174,22=20@@=20key=20=20=20=20=20=20=20=20=20=20=20=20=20= binding=0A=20/=20v=20=20=20=20=20=20=20=20=20=20=20=20=20= package-menu-filter-by-version=0A=20/=20/=20=20=20=20=20=20=20=20=20=20=20= =20=20package-menu-filter-clear=0A=20=0A+**=20gdb-mi=0A+=0A+***=20gdb-mi=20= can=20now=20store=20and=20restore=20window=20configurations.=0A+Use=20= 'gdb-save-window-configuration'=20to=20save=20window=20configuration=20= to=20a=0A+file,=20and=20'gdb-load-window-configuration'=20to=20load=20= from=20a=20file.=20=20These=0A+commands=20can=20also=20be=20accessed=20= through=20menu=20bar=20under=20Gud=20--=0A+GDB-Windows.=20=20= 'gdb-default-window-configuration-file',=20when=20non-nil,=0A+is=20= loaded=20when=20GDB=20starts=20up.=0A+=0A+***=20gdb-mi=20can=20now=20= restore=20window=20configuration=20after=20quit.=0A+Set=20= 'gdb-restore-window-configuration-after-quit'=20to=20non-nil=20and=20= Emacs=0A+will=20remember=20the=20window=20configuration=20before=20GDB=20= started,=20and=20restore=0A+it=20after=20GDB=20quits.=20=20Toggle=20= button=20is=20also=20provided=20under=20Gud=20--=0A+GDB-Windows.=0A+=0A+=0A= =20=0C=0A=20*=20New=20Modes=20and=20Packages=20in=20Emacs=2028.1=0A=20=0A= --=20=0A2.25.1=0A=0A= --Apple-Mail=_D6397ED5-87AC-460D-ABEB-2BA8E3C9E877-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 27 Mar 2020 09:02:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu , =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Cc: 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15852996714760 (code B ref 39181); Fri, 27 Mar 2020 09:02:01 +0000 Received: (at 39181) by debbugs.gnu.org; 27 Mar 2020 09:01:11 +0000 Received: from localhost ([127.0.0.1]:60517 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jHkrX-0001Ei-0P for submit@debbugs.gnu.org; Fri, 27 Mar 2020 05:01:11 -0400 Received: from mout.gmx.net ([212.227.15.15]:47675) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jHkrV-0001EU-G0 for 39181@debbugs.gnu.org; Fri, 27 Mar 2020 05:01:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1585299662; bh=6Vqtk5hb/gVcxvUUGBToip/8KMkjd4YxpNkhm+VKh0U=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=NYeMPMZO+LteFDOQWWYyE8iqW8mVEro8gxJPY1eZgT8eu1Ehaj20DSEGfZ44RCmnL eK1zPB0MGQiZn/SmU0XEG9iUSobO/6T9i31MOHSpDY6OfFZ+z4Tv1iQoIvJ1PoeXW6 KoJrryWZ8de2kxCbhbeOOOxfDkbM5cyxOld3S3D4= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.197]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Ma24s-1ilqNm1Wrc-00W1gQ; Fri, 27 Mar 2020 10:01:02 +0100 References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> <87v9mypwud.fsf@gmail.com> <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> <87imix7dte.fsf@gmail.com> <1A34AFCE-F3E9-4CBD-BD24-C5B008C6B1D0@gmail.com> <87wo7d5qfz.fsf@gmail.com> <3070D489-A42E-4F72-904D-1179AD59638C@gmail.com> From: martin rudalics Message-ID: Date: Fri, 27 Mar 2020 10:01:00 +0100 MIME-Version: 1.0 In-Reply-To: <3070D489-A42E-4F72-904D-1179AD59638C@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:/8jG/gHleGC38CRn7RAsL+vB88zJwjoceWUZUhayzCG9WX07V1k qvDxAePqCtqZBnnO2PJGILJLswgMybMAwAFjvJ8pkSh0sKvjSIbWs9GRhY+G8/uFiHjc8ZF k2Lm9t9xnNkzc4YxCXn+Rsi1oSnAIcBIQ+jD43Z330VPgJYUf6DP0qYFh9PFpmshBkkYVGF leaOVnzyu+fZHiDXpfXhA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:MJuGPOXnTAA=:RRUDeVnJ+S5aVod2NOE8ZC fGIh8hCLBtR1rw45eu2yNV0PIHqef5kLLqrqSa3NzO5uMyVei1mR9OMlSBj9bpBp0s68aV465 D3qLploLaOP+MJ5SRee+VNobIUVd3lVS77//LHxpSnntJJTlmcgMB4WdXyDA6ArX07NEMqBeu nW9ZfNtWvnuFPoZXS1er1uWqn3cpab+8TO9Ae3JCgEYDvuG+3le74+aC213lD15ktBh9YiRd5 QwsIKEfAn/pyrrzWHrFovAMnGY8qM736a7XudYekBP9ls69+MW2Wg5mT9ShZMM3Io2SmipQaX SLxIXXcy6uz9yl4t4bnHGaqFJ+BMvWcVcsstGHOeztY5Y+qqdB1Xccq9Q9Sw1ujNGyE7Vr9hJ ToXg9uE9kPd3ySI6HRlZlg98f3YcQdJ1aL230zqDtQKy7OAyOKlsunO3q24v/OsR7f9/S775V JZK54baHGMj/5j9zZM0CF12QHgPVYZMqBcNGpk7BDhoL91M5gpILU3DMJ57g/nAue8YqxbEBk BT0UtSY7r285I/ycQUU+Sapx4M/kTWeq64AdmGi1LsCvIxf43x027g9f9INF4OvdDlBXW+C6s pjCvojQeQqoXAepJ/H5X9X61Y3XA9rGaEuLx8cqZGqHcu2nqC2e5yql1BqzkWsbEZ7D3NHG+f YqMNFK4z0nxVZvEjexfradUlGMAAqk06N2awsqNW0W67VVVTHDkyW6rv+sB4ALH8JzTjMVm64 Vv+3F9GtH1FHqQdP7Rd7CcWJdEUE9XYBIuiqtZlk7AcpB99LercCBzpxceg4dVWm3Lak3yMUc lnEFiwxlV7+z8orc/QXm+hsbm4kbTJplM6Wv1qDXnkwYw/L8onlomARoIqUUBB0h3UVb/rJX7 wY42wbh+iEewRMXPqbIXAVqK6w5libnx+LgH0x8PXtr+FoptWkhs/jG/xNp+FJ88h67YZY5sh jUs6xnnjHOwUXdezzWzk79ehSauz8HcqJT+mXAlPto8x7mqsQ5MJmvV6+Y2v4bFf5gfRSWGXx tyL9zsh3yIGSqoo8zlylauLlAONZvJxt1htIHlT0jj+Sx6IWblcletehwWEhGK4S/NwjDldn0 gstOlF1r/UjbaD/hxQkJPQxo5Ab43RANi3G/qPflyVehUnhuhycfiYB3bw2D38KkQJ7B5HK/o eoozyDLJhvooWrMuHlTmdT4P73gioqehvVA8CEkWBsieYrUPSl1OAPgay1Z83SgJ0xBH17hBl PtI60o/pN2jADBeiC X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Here=E2=80=99s the new patch. Installed now with a few tweaks. Please have a look. Thanks, martin From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 27 Mar 2020 16:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: martin rudalics Cc: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= , 39181@debbugs.gnu.org Received: via spool by 39181-submit@debbugs.gnu.org id=B39181.15853265302140 (code B ref 39181); Fri, 27 Mar 2020 16:29:02 +0000 Received: (at 39181) by debbugs.gnu.org; 27 Mar 2020 16:28:50 +0000 Received: from localhost ([127.0.0.1]:33295 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jHrqk-0000YS-F7 for submit@debbugs.gnu.org; Fri, 27 Mar 2020 12:28:50 -0400 Received: from mail-qt1-f182.google.com ([209.85.160.182]:41916) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jHrqi-0000YF-LN for 39181@debbugs.gnu.org; Fri, 27 Mar 2020 12:28:49 -0400 Received: by mail-qt1-f182.google.com with SMTP id i3so9020004qtv.8 for <39181@debbugs.gnu.org>; Fri, 27 Mar 2020 09:28:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=fyupUf+uPa9XIFRYgORtnvz+iEhUXk5nN75VIhMdeIk=; b=OuSY/+hcw/pMBREpPJFn28BURoLrSWCpMRbb5+qEGaitF8f4dnLgeFQtVK4NE/fCj9 6Yon+uHTZJSidbsgZASNMXZOWJoTRj1iPpj7F8bXSz0LpqP7eyXz4BMkw6l8vlA/tIdn CM447+88zKy+x1lBy8xV/tmc5DWpfbxTV99V22hzkOGN209XsK2Hz5YBrALxHTroaf42 umvWKZ/nvRict0OEcZ9UHJyRAMPWDmMNIWqUsLkKdkioTnNmm0hGnLy73/FfE/BkqaAu jP2XaJhn+nn1u7/oFhZZOwpPFAjOeWvWRxxIFLzFRqzpRP47A/DqANr/IzI5XJh69aiB am5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=fyupUf+uPa9XIFRYgORtnvz+iEhUXk5nN75VIhMdeIk=; b=eshqgqGZFDYgYM5jVEobwsRFzPlTN4/9tZqPn1Z6LdYdNWXZB1TuFTDXo+U5h2xAzh SFY5qMKgBkn3MPxugAgUzqtTyzjXmTHnaxj9PQR4vbQY1H5I8W5YgFKCNs15b73bvI7h oAzdeOcndH/vXGaTC2jvABiH97rLe5Z9AXDThnUdyoYWVtNEfbkdZc8ckyLh6Qkd6SNt IbdtuJMcZ8X+v3GrQDivFpFD3ZfTuTizPD8XcnOotQhxCilyhyzVrRGsrXEoYQXEOzpi 3Tr54CLewBsU2O30crf4/52ET96ZDxXByNSb59jxkFD2FVftzXHetkfj3+tGzzgtg5NI kE3w== X-Gm-Message-State: ANhLgQ2aa06lBF4d5/r+ziCKolyiVWjzoD2LfpCPNx2BxHs/jmJDb7hX PBHQsjxTaBr2Fy/B4GtuqwM= X-Google-Smtp-Source: ADFU+vucCG/wVFuZ42JueCVPvx/6RJ/gBMGJ+2oAO1K7R4wrn8AmhSY2SXc7P5x/HgILMBrtfI6F5w== X-Received: by 2002:ac8:3141:: with SMTP id h1mr52365qtb.108.1585326523037; Fri, 27 Mar 2020 09:28:43 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id e19sm4045317qkl.33.2020.03.27.09.28.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Mar 2020 09:28:42 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) From: Yuan Fu In-Reply-To: Date: Fri, 27 Mar 2020 12:28:41 -0400 Content-Transfer-Encoding: quoted-printable Message-Id: <391F1058-3E10-4524-8BF7-2077DD24769A@gmail.com> References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> <87v9mypwud.fsf@gmail.com> <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> <87imix7dte.fsf@gmail.com> <1A34AFCE-F3E9-4CBD-BD24-C5B008C6B1D0@gmail.com> <87wo7d5qfz.fsf@gmail.com> <3070D489-A42E-4F72-904D-1179AD59638C@gmail.com> X-Mailer: Apple Mail (2.3608.80.23.2.2) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Mar 27, 2020, at 5:01 AM, martin rudalics wrote: >=20 > > Here=E2=80=99s the new patch. >=20 > Installed now with a few tweaks. Please have a look. >=20 > Thanks, martin >=20 Thanks. Yuan= From unknown Wed Sep 10 13:55:59 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Yuan Fu Subject: bug#39181: closed (Fwd: Delivery Status Notification (Failure)) Message-ID: References: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> X-Gnu-PR-Message: they-closed 39181 X-Gnu-PR-Package: emacs X-Gnu-PR-Keywords: patch Reply-To: 39181@debbugs.gnu.org Date: Tue, 14 Apr 2020 01:19:01 +0000 Content-Type: multipart/mixed; boundary="----------=_1586827141-5265-1" This is a multi-part message in MIME format... ------------=_1586827141-5265-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 39181@debbugs.gnu.org. --=20 39181: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D39181 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1586827141-5265-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 39181-done) by debbugs.gnu.org; 14 Apr 2020 01:18:09 +0000 Received: from localhost ([127.0.0.1]:32913 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOADJ-0001Lm-BO for submit@debbugs.gnu.org; Mon, 13 Apr 2020 21:18:09 -0400 Received: from mail-qv1-f45.google.com ([209.85.219.45]:41778) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOADH-0001LW-8s for 39181-done@debbugs.gnu.org; Mon, 13 Apr 2020 21:18:07 -0400 Received: by mail-qv1-f45.google.com with SMTP id 37so3032697qvc.8 for <39181-done@debbugs.gnu.org>; Mon, 13 Apr 2020 18:18:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:subject:message-id:references:to:date; bh=drmz7GcqS8H3f0KnwDNXRyNxryKI10U/TyE12ExbzFI=; b=PVygATnJDF3aPr862ofLG8ppv9x3tStiddBsY4wt9Lc3jMMBjgemVQKFO1fTL0hQkL QOXbLPkDgqlmLL194nFepk/Kqw8jdaEarqA8i+vGFXw3bHWck+stZQ4UJjPAqrDN0wRV bt88c+QPApkvB5K3yRorEjoBbLVArTDnBrEExGkq4ys9I87In4WlRsooxkIrxfUz4oSe K3jt3LHteY6O4FFDeripLBLbTy8emH048hdGCnH2V2BmjPdV+YMdzyxLSs5XIrMyeeyw 37q68br+fYwq6WrPBxOWPWoILsziEhOiwKX/AqESVq3I4ObqZiB8qQCZNKrG98JoMKfz gc2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:subject:message-id:references :to:date; bh=drmz7GcqS8H3f0KnwDNXRyNxryKI10U/TyE12ExbzFI=; b=YAeT59u0xDLVTc45sKYHCEeMddkHKdR6sI94nZlucituRHIN4n67myakujytAAlM12 InM61rozU3DdqnU7ZGkJ+jYQe7/MvXWz2ieXOVgmizAaDM7LwaB529vjhAdc5UViSkcP NUK5VOmoUWWmO5GiDktXUTzv3q64Q+3pcFOW1VykRX2sfpDtGk3qmKxQdv7/prXTRAqP C7XvuT57/TdbVzeBl3KRcGVgbJnS+bkjgvT/nnyV7ps0HDn0DAtTE5sp06acA/+GdaAe areRinv3JwhZL3WL45YaAavnmgVMQDmDVywIt3Ge8VhYP5k06BCcZsxSreGp5+wnsX8n sXRg== X-Gm-Message-State: AGi0PuZ5tq6C8t9KL4ebP1E7RySzjZPQZS0kTm5o8I4dBAjWSd5oaYXV a7/GdEizUFYb4wVoAWu5IEUK/32/o17R9A== X-Google-Smtp-Source: APiQypLVfXojseS/y7pXR2vA6/PTJ8pBgTvYqZGqk93OhWHTjrkvQZ7FdCuS2uDJFBkSibdiqf8rew== X-Received: by 2002:a05:6214:150e:: with SMTP id e14mr8119025qvy.65.1586827080765; Mon, 13 Apr 2020 18:18:00 -0700 (PDT) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id 207sm9626284qkf.69.2020.04.13.18.18.00 for <39181-done@debbugs.gnu.org> (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 18:18:00 -0700 (PDT) From: Yuan Fu Content-Type: multipart/alternative; boundary="Apple-Mail=_F1D0F413-518C-4AAD-AAF2-037F446FCEC8" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Fwd: Delivery Status Notification (Failure) Message-Id: References: <5e950f28.1c69fb81.61726.5731.GMR@mx.google.com> To: 39181-done@debbugs.gnu.org Date: Mon, 13 Apr 2020 21:17:59 -0400 X-Mailer: Apple Mail (2.3608.80.23.2.2) X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 39181-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_F1D0F413-518C-4AAD-AAF2-037F446FCEC8 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > Begin forwarded message: >=20 > From: Mail Delivery Subsystem > Subject: Delivery Status Notification (Failure) > Date: April 13, 2020 at 9:17:28 PM GMT-4 > To: casouri@gmail.com >=20 >=20 > Address not found > Your message wasn't delivered to <>39181-done@debuggs.gnu.org = because the domain debuggs.gnu.org = couldn't be found. Check for typos or = unnecessary spaces and try again. > The response was: > DNS Error: 11672847 DNS type 'mx' lookup of debuggs.gnu.org = responded with code NXDOMAIN Domain name not = found: debuggs.gnu.org Reporting-MTA: dns; = googlemail.com > Received-From-MTA: dns; casouri@gmail.com > Arrival-Date: Mon, 13 Apr 2020 18:17:26 -0700 (PDT) > X-Original-Message-ID: <27D34924-67A4-4C59-8DD4-160465E9CC4D@gmail.com = > >=20 > Final-Recipient: rfc822; 39181-done@debuggs.gnu.org = > Action: failed > Status: 4.0.0 > Diagnostic-Code: smtp; DNS Error: 11672847 DNS type 'mx' lookup of = debuggs.gnu.org responded with code NXDOMAIN > Domain name not found: debuggs.gnu.org > Last-Attempt-Date: Mon, 13 Apr 2020 18:17:28 -0700 (PDT) >=20 > From: Yuan Fu > > Subject: Fwd: Delivery Status Notification (Failure) > Date: April 13, 2020 at 9:17:25 PM GMT-4 > To: 39181-done@debuggs.gnu.org >=20 >=20 >=20 > --Apple-Mail=3D_04B0AE11-8C4E-4FBB-9A28-93028C1DEC54 > Content-Transfer-Encoding: quoted-printable > Content-Type: text/html; > charset=3Dutf-8 >=20 > charset=3D3Dutf-8"> -webkit-nbsp-mode: space; line-break: after-white-space;" = class=3D3D"">
class=3D3D"">

class=3D3D"">Begin forwarded message:

class=3D3D"Apple-interchange-newline">
margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" = class=3D3D""> style=3D3D"font-family: -webkit-system-font, Helvetica Neue, = Helvetica, =3D > sans-serif; color:rgba(0, 0, 0, 1.0);" class=3D3D"">From: =3D > Neue, Helvetica, sans-serif;" class=3D3D"">Mail Delivery Subsystem = < href=3D3D"mailto:mailer-daemon@googlemail.com = " =3D > class=3D3D"">mailer-daemon@googlemail.com = >
class=3D3D"">
0px; margin-bottom: 0px; margin-left: 0px;" class=3D3D""> style=3D3D"font-family: -webkit-system-font, Helvetica Neue, = Helvetica, =3D > sans-serif; color:rgba(0, 0, 0, 1.0);" class=3D3D"">Subject: =3D > Neue, Helvetica, sans-serif;" class=3D3D"">Delivery = Status =3D > Notification (Failure) > ----- Message truncated ----- --Apple-Mail=_F1D0F413-518C-4AAD-AAF2-037F446FCEC8 Content-Type: multipart/related; type="text/html"; boundary="Apple-Mail=_331F0496-E9D1-47B1-93BC-2E87BFFDEB7B" --Apple-Mail=_331F0496-E9D1-47B1-93BC-2E87BFFDEB7B Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii

Begin forwarded message:

From: = Mail Delivery Subsystem <mailer-daemon@googlemail.com>
Subject: = Delivery Status = Notification (Failure)
Date: = April 13, 2020 at 9:17:28 PM = GMT-4

3D"Error

Address not found

Your message wasn't delivered to 39181-done@debuggs.gnu.org because the domain debuggs.gnu.orgcouldn't be found. Check for typos or = unnecessary spaces and try = again.
The response was:

DNS Error: 11672847 DNS type 'mx' lookup of debuggs.gnu.org responded with code = NXDOMAIN Domain name not found: debuggs.gnu.org

Reporting-MTA: dns; googlemail.com
Received-From-MTA: dns; casouri@gmail.com
Arrival-Date: Mon, 13 Apr 2020 18:17:26 -0700 (PDT)
X-Original-Message-ID: <27D34924-67A4-4C59-8DD4-160465E9CC4D@gmail.com>

Final-Recipient: rfc822; 39181-done@debuggs.gnu.org
Action: = failed
Status: = 4.0.0
Diagnostic-Code: smtp; DNS Error: 11672847 DNS type 'mx' = lookup of debuggs.gnu.org responded = with code NXDOMAIN
Domain name = not found: debuggs.gnu.org
Last-Attempt-Date: Mon, 13 Apr 2020 18:17:28 -0700 = (PDT)

From: Yuan Fu <casouri@gmail.com>
Subject: Fwd:= Delivery Status Notification (Failure)
Date: April 13, 2020 at 9:17:25 PM GMT-4



--Apple-Mail=3D_04B0AE11-8C4E-4FBB-9A28-93028C1DEC54
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
= charset=3Dutf-8

<html><head><meta http-equiv=3D3D"Content-Type" = content=3D3D"text/html; =3D
charset=3D3Dutf-8"></head><body = style=3D3D"word-wrap: break-word; =3D
-webkit-nbsp-mode: space; line-break: after-white-space;" = class=3D3D""><br =3D
class=3D3D""><div><br = class=3D3D""><blockquote type=3D3D"cite" class=3D3D""><div = =3D
class=3D3D"">Begin forwarded message:</div><br = =3D
class=3D3D"Apple-interchange-newline"><div = style=3D3D"margin-top: 0px; =3D
margin-right: = 0px; margin-bottom: 0px; margin-left: 0px;" = class=3D3D""><span=3D
style=3D3D"font-family: -webkit-system-font, Helvetica Neue, = Helvetica, =3D
sans-serif; = color:rgba(0, 0, 0, 1.0);" class=3D3D""><b class=3D3D"">From: = =3D
</b></span><span style=3D3D"font-family: = -webkit-system-font, Helvetica =3D
Neue, = Helvetica, sans-serif;" class=3D3D"">Mail Delivery Subsystem = &lt;<a =3D
href=3D3D"mailto:mailer-daemon@googlemail.com" =3D
class=3D3D"">mailer-daemon@googlemail.com</a>&gt;<br =3D
class=3D3D""></span></div><div = style=3D3D"margin-top: 0px; margin-right: =3D
0px; margin-bottom: 0px; margin-left: 0px;" = class=3D3D""><span =3D
style=3D3D"font-family: -webkit-system-font, Helvetica Neue, = Helvetica, =3D
sans-serif; = color:rgba(0, 0, 0, 1.0);" class=3D3D""><b class=3D3D"">Subject: = =3D
</b></span><span style=3D3D"font-family: = -webkit-system-font, Helvetica =3D
Neue, = Helvetica, sans-serif;" class=3D3D""><b class=3D3D"">Delivery = Status =3D
Notification = (Failure)
----- Message = truncated -----

= --Apple-Mail=_331F0496-E9D1-47B1-93BC-2E87BFFDEB7B Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=icon.png Content-Type: image/png; x-unix-mode=0644; name="icon.png" Content-Id: iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAACXBIWXMAABYlAAAWJQFJUiTwAAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABTdJREFUeNrsnD9sFEcUh5+PRMqZ yA0SPhAUQAQFUkyTgiBASARo6QApqVIkfdxGFJFSgGhJAUIiBaQB0ZIOKVCkwUgURjIg2fxL4kS+ YDvkbC/388bi8N16Z4/d7J/5PsniuD3fyePP772ZeTsDQRAYQL/UGAJAIEAgQCBAIAAEAgQCBAIE AkAgyJT3Mv+Eq7vYK8mTE+MDRCAghQECAeRQA5V2ZOpmg5vDx3NPzRbmGRMEcmTrEbNNB8zWfRD+ f/Efs2e3zCZvMjaksBg27TfbcuSNPEKP9ZyuAQKtHX2O9ncNgWC57umMPKvRNb0GEKgnLoUyxTQC rcns0/6uIRAs8/hGf9cQCJZpTpjdO2f25/03z+mxntM1eLtsZAgiUtX4JcaBCAQIBAgECARQ8CJa G5jab4J4pm4WZmO3OALVh802fIwcLkyPkcKAGggAgQCBAIEAgQCBABAIEAjKA/1AnahhbO5FdOOY VsrrDbPBYcYKgf5D2wLaV3p+22xh1u17tO3S+DTcvxvagUDeivPgx/a/95J/73w7Sj26Hn4pKo2M ehuV/KyBJM6d0f7k6RKx/R63vvL2tmf/ItDdM2ZTP6f7nkp9Y2fDx1v9akmpIU+KSCLVUghUQfSL zVKeTklbLxGoctw/nzC5rw8L5KRNbkpnKq6pgSqEClzNnFzY+XnYWrt6VpVk1vbwWvg+RKCKMOUw Q1LEOXA+/MX3mpJvGDHb265xtnzmFoUK1HaKQGlMtePYM+q2KKjXuaS1NJYIEKgI8jhEgqHt4cqy Ky53j3hyHz2bqSLp2o2LbJ7MxKovkGqXteoWpaOk96O9/yF/dF7NwlS36AuIQIBA5celQK4PIxBE 4LLzrtoLgaALdSy6CJRkWQCBPGLsTHznomZ9nszUECgJ2ml3WWHe+QVFNPSQx6UdZNtxr9pbEShN eTTz8mQXHoHSlke7+Z+c9m6VGoHSkEfs/trLW3wQKApN1V3lGfnGu2Z6BFoLtYCs3GWBPAiUCLVh /HoaeRCoT9R873KLM/IgUBfapnCpe5AHgXry4pf412ihEHkQqCdxd5VqrcezhUIESsJMTJ+Pdthp Z0WgyNlXXPHc2Mc4IVAELl2Gnh8mhUDvCkfbIVAkcbf/aOoO3fMKhqAD3frTa4quwpn0hUDOkQhI YYBAgECAQAAU0QlYObl+5Ug8NcprZkZxjUCxRPVA6zmtEXHCBykskrhjgHXN09PoEcgFl4M4H11j nBAoApcj6ZoPGScEAgTKApcDoTw5sgWB+sGlz1n90IBAPdE6j1o21PfcC11jLagL1oFWRyGlKU3p OxcSJQ7NZAjkhHp/uG2HFAYIBAgECASAQIBAgECAQAAIBOkxEARBtp9wdVfAMOfIifEBIhCQwgCB ABAI0oV2jhxZ+nfBatuPZfgBCy0Eqqo8c01b+uu51XZvzOgDWoHNTGR+pCwpLEd5svuAZXlO2uEr PyEQ8hRWHgRCHmqg0sjTnLalv6crJQ8C/U8stqNO0I4+VZOHFIY8COS1PGL2ybd5yUMKK7s8zYmL dujyd3n+nESgcsvzZd4/KwIhDwIhT35QA6UyE1qyxZnfvJMHgdKS549JC1qvvJOHFIY8CFR5eV5O XimqPAhUdHnmfx+zgxdOFXkoqIGKKs/cswnb/8Oeog8HEai48nxUhiFBIORBIOShBioskkbySCLk IQIhDwIhj28p7FApR6b1qlEbHGpkO/rr6215vi/zH1r2x7tApSGFAQIBAgECAQIBIBAgECAQIBBA LK8FGADCTxYrr+EVJgAAAABJRU5ErkJggg== --Apple-Mail=_331F0496-E9D1-47B1-93BC-2E87BFFDEB7B-- --Apple-Mail=_F1D0F413-518C-4AAD-AAF2-037F446FCEC8-- ------------=_1586827141-5265-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 18 Jan 2020 20:57:42 +0000 Received: from localhost ([127.0.0.1]:42293 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1isvA5-0007uc-Nf for submit@debbugs.gnu.org; Sat, 18 Jan 2020 15:57:42 -0500 Received: from lists.gnu.org ([209.51.188.17]:44260) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1isvA4-0007uU-1L for submit@debbugs.gnu.org; Sat, 18 Jan 2020 15:57:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58678) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1isvA1-0007Iz-Sh for bug-gnu-emacs@gnu.org; Sat, 18 Jan 2020 15:57:39 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, URIBL_BLOCKED autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1isv9z-0001ZT-Q2 for bug-gnu-emacs@gnu.org; Sat, 18 Jan 2020 15:57:37 -0500 Received: from mail-qt1-x82d.google.com ([2607:f8b0:4864:20::82d]:33805) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1isv9z-0001Z6-Cd for bug-gnu-emacs@gnu.org; Sat, 18 Jan 2020 15:57:35 -0500 Received: by mail-qt1-x82d.google.com with SMTP id 5so24686131qtz.1 for ; Sat, 18 Jan 2020 12:57:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:subject:message-id:date:to; bh=Zg6/XbgLkKraz85xrOhWGZzAywZpoVTrm56NYZM48sU=; b=gMubT6zRtrh2a7N5jw6VSUo2ovDwDk+iMPijkkSTWVtkK3r70c1MBS41l+OyUfr19A BFwVOhLS7+My4sOvLIrg47FtYILtaDf6KK/sboBsy/Kkn1rkcsG9shl4ZEFDTc/ANw7x fV6UCzV/dulC5UJgUvnu2W/05Wp8DnL3EuUZX7bis0Pe0rj+n2J+pHvgQtOfFZ1kr28N VZrz8fe+ttfj+Ujhav/qqB2M/X0hhbpF4abhO1QTrN2rGO/OzuYXCrhk5574WoymYyBk CadYtzMtLA7/WXcuAZBJ6oFLXrXC6YnDKvexBs3kB1lJuzWq6ArFCGBxU9f1m77icrqh o+/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:subject:message-id:date:to; bh=Zg6/XbgLkKraz85xrOhWGZzAywZpoVTrm56NYZM48sU=; b=LKiAKFYF4jGT5Hw4Gad9jKJUIysoEfQKzZqwO3pP06ot1e86QcVmnwM6bNLEe90MFe qYHmMKfP8PsyR/NUPL0//DGN2xKVHp88PE+C89vc8WV/Z8xFs+yBXLqJQsHEwypFgOq5 Jy8eLjWO7Z78v8GEZcVdDfwEbFeWKZ5prTBvmi63vdpcNfCzsBEspJg6UlgImOMgnn+q ofwKpjhLnosxAR9BcEtoNmV7gFkDTtVhusDBSwNN7lhSrRkcydN2QXNxsyVA8gN+mZiv h+nVrVBOuP98itzDrGVzErEm0d7EnhLb15yANpDLCKBIIhW8B0YD2XnfZdKgt9VwOnDm MzLQ== X-Gm-Message-State: APjAAAXX9ZZvQY6K4jmVUZBRIa+eagp1/KP5dSuUuyUphwJ/XC3ghD8n mueqRn2OVLPDOPx77Um0fs0izlkKjLfrjk00 X-Google-Smtp-Source: APXvYqwXCJEnf4Yol7fgdjWWtZRi9+KAGNWUNGamW064sRj0a9XzAiV51gQs6eNnz5WMT9TTfZfHvw== X-Received: by 2002:ac8:71cf:: with SMTP id i15mr13728900qtp.383.1579381054344; Sat, 18 Jan 2020 12:57:34 -0800 (PST) Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id d5sm13813257qke.130.2020.01.18.12.57.33 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Jan 2020 12:57:33 -0800 (PST) From: Yuan Fu Content-Type: multipart/mixed; boundary="Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9" Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.40.2.2.4\)) Subject: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Message-Id: <55EA8238-880A-420D-A880-CD33B7E1DA85@gmail.com> Date: Sat, 18 Jan 2020 15:57:32 -0500 To: Bug Report Emacs X-Mailer: Apple Mail (2.3608.40.2.2.4) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::82d X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Right now if a user wants to use gdb with many windows, the only layout = option is the default 6-window layout. This patch allows a user to save = her own layout, and use this layout in gdb-mi sessions. I also included = my layout (`default-rearrange`) Maybe we can even ship with some default = layouts that a user can choose from? --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Disposition: inline; filename=default-rearrange.png Content-Type: image/png; name="default-rearrange.png" Content-Transfer-Encoding: base64 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 --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Disposition: attachment; filename=store-window-new.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="store-window-new.patch" Content-Transfer-Encoding: quoted-printable =46rom=206db5201e418bc15ff51a170124a84182093c64db=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Thu,=20= 17=20Oct=202019=2017:35:48=20-0400=0ASubject:=20[PATCH=201/3]=20Add=20= with-selected-window-undedicated=0A=0A*=20lisp/window.el=20= (with-selected-window-undedicated):=20new=0A---=0A=20lisp/window.el=20|=20= 13=20+++++++++++++=0A=201=20file=20changed,=2013=20insertions(+)=0A=0A= diff=20--git=20a/lisp/window.el=20b/lisp/window.el=0Aindex=20= 433486385d..98b8b21f8a=20100644=0A---=20a/lisp/window.el=0A+++=20= b/lisp/window.el=0A@@=20-278,6=20+278,19=20@@=20= with-displayed-buffer-window=0A=20=09=20=20=20=20=20(funcall=20= ,vquit-function=20,window=20,value)=0A=20=09=20=20=20,value)))))=0A=20=0A= +(defmacro=20with-selected-window-undedicated=20(&rest=20body)=0A+=20=20= "Run=20BODY=20in=20the=20selected=20window=20temporarily=20undedicated."=0A= +=20=20(let=20((window-dedicated-sym=20(gensym)))=0A+=20=20=20=20`(let=20= ((,window-dedicated-sym=20(window-dedicated-p)))=0A+=20=20=20=20=20=20=20= (when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20nil))=0A+=20=20=20=20=20=20=20,@body=0A+=20= =20=20=20=20=20=20(when=20,window-dedicated-sym=0A+=20=20=20=20=20=20=20=20= =20;;=20`window-dedicated-p'=20returns=20the=20value=20set=20by=0A+=20=20= =20=20=20=20=20=20=20;;=20`set-window-dedicated-p',=20which=20= differentiates=0A+=20=20=20=20=20=20=20=20=20;;=20non-nil=20and=20t,=20= so=20we=20cannot=20simply=20set=20to=20t=0A+=20=20=20=20=20=20=20=20=20= (set-window-dedicated-p=20nil=20,window-dedicated-sym)))))=0A+=0A=20;;=20= The=20following=20two=20functions=20are=20like=20`window-next-sibling'=20= and=0A=20;;=20`window-prev-sibling'=20but=20the=20WINDOW=20argument=20is=20= _not_=20optional=20(so=0A=20;;=20they=20don't=20substitute=20the=20= selected=20window=20for=20nil),=20and=20they=20return=0A--=20=0A2.24.1=0A= =0A=0A=46rom=20bb5e41e230a8452b41a569386131648eb2599501=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Mon,=20= 14=20Oct=202019=2021:11:43=20-0400=0ASubject:=20[PATCH=202/3]=20Add=20= window=20configuration=20save/restore=20feature=20for=20gdb-mi=0A= MIME-Version:=201.0=0AContent-Type:=20text/plain;=20charset=3DUTF-8=0A= Content-Transfer-Encoding:=208bit=0A=0ANow=20you=20can=20save=20a=20gdb=20= window=20configuration=20to=20a=20file=20with=0A= =E2=80=98gdb-store-window-configuration=E2=80=99=20and=20restore=20it=20= from=20a=20file=0Awith=20=E2=80=98gdb-restore-window-configuration=E2=80=99= .=20Set=20a=20default=20window=0Aconfiguration=20by=20setting=20= gdb-default-window-configuration-file.=0ANote=20that=20for=20the=20= default=20window=20configuration=20to=20take=20effect,=0A= gdb-many-windows=20needs=20to=20be=20t.=0A=0A*=20= lisp/progmodes/gdb-mi.el=20(require):=20add=20pcase,=20wrap=20inside=0A= =E2=80=98eval-when-compile=E2=80=99=0A=0A(gdb-get-source-buffer):=20new,=20= extracted=20out=20of=20gdb-restore-window=0A(gdb-restore-window):=20= extract=20out=20gdb-get-source-buffer=0A=0A(gdb-store-window-directory,=20= gdb-buffer-p,=20gdb-function-buffer-p,=0Agdb--buffer-type,=20= gdb--inhibit-window-dedicated,=0Agdb-store-window-configuration,=20= gdb-restore-window-configuration):=20new=0A=0A= (gdb-default-window-configuration-file):=20new=0A(gdb-setup-windows):=20= Add=20a=20condition=20branch=20that=20loads=20default=20window=0Aconfig=20= when=20available=0A=0A(gdb-many-windows,=20gdb-get-source-file):=20add=20= comments=0A---=0A=20lisp/progmodes/gdb-mi.el=20|=20210=20= ++++++++++++++++++++++++++++++++-------=0A=201=20file=20changed,=20176=20= insertions(+),=2034=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= b08d487af3..cf0c8f29a9=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-91,7=20+91,8=20@@=0A=20(require=20= 'gud)=0A=20(require=20'json)=0A=20(require=20'bindat)=0A-(require=20= 'cl-lib)=0A+(eval-when-compile=20(require=20'cl-lib))=0A= +(eval-when-compile=20(require=20'pcase))=0A=20=0A=20(declare-function=20= speedbar-change-initial-expansion-list=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"speedbar"=20(new-default))=0A@@=20-589,6=20= +590,20=20@@=20gdb-show-main=0A=20=20=20:group=20'gdb=0A=20=20=20= :version=20"22.1")=0A=20=0A+(defcustom=20gdb-store-window-directory=20= user-emacs-directory=0A+=20=20"The=20default=20directory=20where=20= window=20configuration=20files=20are=20stored.=0A+If=20nil,=20use=20= `default-directory'."=0A+=20=20:type=20'string=0A+=20=20:group=20'gdb=0A= +=20=20:version=20"28.1")=0A+=0A+(defcustom=20= gdb-default-window-configuration-file=20nil=0A+=20=20"If=20non-nil,=20= gdb=20loads=20this=20window=20configuration=20file=20on=20startup.=0A= +This=20should=20be=20an=20absolute=20file=20path."=0A+=20=20:type=20= 'string=0A+=20=20:group=20'gdb=0A+=20=20:version=20"28.1")=0A+=0A=20= (defvar=20gdbmi-debug-mode=20nil=0A=20=20=20"When=20non-nil,=20print=20= the=20messages=20sent/received=20from=20GDB/MI=20in=20*Messages*.")=0A=20= =0A@@=20-4574,41=20+4589,164=20@@=20gdb-set-window-buffer=0A=20=20=20= (set-window-buffer=20window=20(get-buffer=20name))=0A=20=20=20= (set-window-dedicated-p=20window=20t))=0A=20=0A+(defun=20= gdb-get-source-buffer=20()=0A+=20=20"Return=20a=20buffer=20displaying=20= source=20file=20or=20nil.=0A+=0A+The=20source=20file=20would=20be=20the=20= most=20relevant=20file=20or=20the=20main=20file."=0A+=20=20(if=20= gud-last-last-frame=0A+=20=20=20=20=20=20(gud-find-file=20(car=20= gud-last-last-frame))=0A+=20=20=20=20(when=20gdb-main-file=0A+=20=20=20=20= =20=20(gud-find-file=20gdb-main-file))))=0A+=0A=20(defun=20= gdb-setup-windows=20()=0A=20=20=20"Layout=20the=20window=20pattern=20for=20= option=20`gdb-many-windows'."=0A-=20=20(gdb-get-buffer-create=20= 'gdb-locals-buffer)=0A-=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A= -=20=20(gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A-=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A-=20=20= (switch-to-buffer=20gud-comint-buffer)=0A-=20=20(delete-other-windows)=0A= -=20=20(let=20((win0=20(selected-window))=0A-=20=20=20=20=20=20=20=20= (win1=20(split-window=20nil=20(=20/=20(=20*=20(window-height)=203)=20= 4)))=0A-=20=20=20=20=20=20=20=20(win2=20(split-window=20nil=20(=20/=20= (window-height)=203)))=0A-=20=20=20=20=20=20=20=20(win3=20= (split-window-right)))=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-locals-buffer-name)=20nil=20win3)=0A-=20=20=20=20(select-window=20= win2)=0A-=20=20=20=20(set-window-buffer=0A-=20=20=20=20=20win2=0A-=20=20=20= =20=20(if=20gud-last-last-frame=0A-=20=20=20=20=20=20=20=20=20= (gud-find-file=20(car=20gud-last-last-frame))=0A-=20=20=20=20=20=20=20= (if=20gdb-main-file=0A-=20=20=20=20=20=20=20=20=20=20=20(gud-find-file=20= gdb-main-file)=0A-=20=20=20=20=20=20=20=20=20;;=20Put=20buffer=20list=20= in=20window=20if=20we=0A-=20=20=20=20=20=20=20=20=20;;=20can't=20find=20= a=20source=20file.=0A-=20=20=20=20=20=20=20=20=20= (list-buffers-noselect))))=0A-=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A-=20=20=20=20(let=20((win4=20(split-window-right)))=0A= -=20=20=20=20=20=20(gdb-set-window-buffer=0A-=20=20=20=20=20=20=20= (gdb-get-buffer-create=20'gdb-inferior-io)=20nil=20win4))=0A-=20=20=20=20= (select-window=20win1)=0A-=20=20=20=20(gdb-set-window-buffer=20= (gdb-stack-buffer-name))=0A-=20=20=20=20(let=20((win5=20= (split-window-right)))=0A-=20=20=20=20=20=20(gdb-set-window-buffer=20(if=20= gdb-show-threads-by-default=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-threads-buffer-name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A-=20=20=20= =20(select-window=20win0)))=0A+=20=20(if=20= gdb-default-window-configuration-file=0A+=20=20=20=20=20=20= (gdb-restore-window-configuration=0A+=20=20=20=20=20=20=20= gdb-default-window-configuration-file)=0A+=20=20=20=20;;=20default=20= layout=0A+=20=20=20=20(gdb-get-buffer-create=20'gdb-locals-buffer)=0A+=20= =20=20=20(gdb-get-buffer-create=20'gdb-stack-buffer)=0A+=20=20=20=20= (gdb-get-buffer-create=20'gdb-breakpoints-buffer)=0A+=20=20=20=20= (set-window-dedicated-p=20(selected-window)=20nil)=0A+=20=20=20=20= (switch-to-buffer=20gud-comint-buffer)=0A+=20=20=20=20= (delete-other-windows)=0A+=20=20=20=20(let=20((win0=20(selected-window))=0A= +=20=20=20=20=20=20=20=20=20=20(win1=20(split-window=20nil=20(=20/=20(=20= *=20(window-height)=203)=204)))=0A+=20=20=20=20=20=20=20=20=20=20(win2=20= (split-window=20nil=20(=20/=20(window-height)=203)))=0A+=20=20=20=20=20=20= =20=20=20=20(win3=20(split-window-right)))=0A+=20=20=20=20=20=20= (gdb-set-window-buffer=20(gdb-locals-buffer-name)=20nil=20win3)=0A+=20=20= =20=20=20=20(select-window=20win2)=0A+=20=20=20=20=20=20= (set-window-buffer=0A+=20=20=20=20=20=20=20win2=0A+=20=20=20=20=20=20=20= (or=20(gdb-get-source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20= (list-buffers-noselect)))=0A+=20=20=20=20=20=20(setq=20gdb-source-window=20= (selected-window))=0A+=20=20=20=20=20=20(let=20((win4=20= (split-window-right)))=0A+=20=20=20=20=20=20=20=20(gdb-set-window-buffer=0A= +=20=20=20=20=20=20=20=20=20(gdb-get-buffer-create=20'gdb-inferior-io)=20= nil=20win4))=0A+=20=20=20=20=20=20(select-window=20win1)=0A+=20=20=20=20=20= =20(gdb-set-window-buffer=20(gdb-stack-buffer-name))=0A+=20=20=20=20=20=20= (let=20((win5=20(split-window-right)))=0A+=20=20=20=20=20=20=20=20= (gdb-set-window-buffer=20(if=20gdb-show-threads-by-default=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(gdb-threads-buffer-name)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (gdb-breakpoints-buffer-name))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20win5))=0A+=20= =20=20=20=20=20(select-window=20win0))))=0A+=0A+(defun=20gdb-buffer-p=20= (buffer)=0A+=20=20"Return=20t=20if=20BUFFER=20is=20gdb-related."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(eq=20gud-minor-mode=20= 'gdbmi)))=0A+=0A+(defun=20gdb-function-buffer-p=20(buffer)=0A+=20=20= "Return=20t=20if=20BUFFER=20is=20a=20gdb=20function=20buffer.=0A+=0A= +E.g.,=20locals=20buffer,=20registers=20buffer,=20but=20don't=20include=20= the=20main=0A+command=20buffer=20(the=20one=20in=20where=20you=20type=20= gdb=20commands)=20or=20source=0A+buffers."=0A+=20=20(with-current-buffer=20= buffer=0A+=20=20=20=20(derived-mode-p=20'gdb-parent-mode=20= 'gdb-inferior-io-mode)))=0A+=0A+(defun=20gdb--buffer-type=20(buffer)=0A+=20= =20"Return=20the=20buffer=20type=20of=20BUFFER=20or=20nil.=0A+=0A+Buffer=20= type=20is=20like=20`gdb-registers-type',=20`gdb-stack-buffer'.=0A+This=20= symbol=20can=20be=20passed=20to=20`gdb-get-buffer-create'.=0A+=0A+Return=20= nil=20if=20BUFFER=20isn't=20a=20gdb=20function=20buffer."=0A+=20=20= (with-current-buffer=20buffer=0A+=20=20=20=20(cl-loop=20for=20rule=20in=20= gdb-buffer-rules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20for=20= mode-name=20=3D=20(gdb-rules-buffer-mode=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20for=20type=20=3D=20(car=20rule)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20if=20(eq=20mode-name=20major-mode)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20return=20type=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20finally=20return=20nil)))=0A+=0A+(defun=20= gdb-store-window-configuration=20(file)=0A+=20=20"Save=20current=20= window=20configuration=20to=20FILE.=0A+=0A+You=20can=20later=20restore=20= this=20configuration=20from=20that=20file=20by=0A= +`gdb-restore-window-configuration'."=0A+=20=20(interactive=20(list=20= (read-file-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"Save=20window=20configuration=20to=20file:=20"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= gdb-store-window-directory=20default-directory))))=0A+=20=20;;=20we=20= replace=20the=20buffer=20in=20each=20window=20with=20a=20placeholder,=20= store=0A+=20=20;;=20the=20buffer=20type=20(register,=20breakpoint,=20= etc)=20in=20window=20parameters,=0A+=20=20;;=20and=20store=20the=20= window=20configuration=0A+=20=20(save-window-excursion=0A+=20=20=20=20= (let=20((placeholder=20(get-buffer-create=20"=20*gdb-placeholder*"))=0A+=20= =20=20=20=20=20=20=20=20=20(window-persistent-parameters=0A+=20=20=20=20=20= =20=20=20=20=20=20(cons=20'(gdb-buffer-type=20.=20writable)=20= window-persistent-parameters))=0A+=20=20=20=20=20=20=20=20=20=20= window-config)=0A+=20=20=20=20=20=20(unwind-protect=0A+=20=20=20=20=20=20= =20=20=20=20(dolist=20(win=20(window-list=20nil=20'no-minibuffer))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(select-window=20win)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(when=20(gdb-buffer-p=20(current-buffer))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(set-window-parameter=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20nil=20'gdb-buffer-type=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(cond=20((gdb-function-buffer-p=20= (current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=201)=20if=20a=20user=20arranged=20the=20window=20= configuration=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20herself=20and=20saves=20it,=20windows=20are=20probably=20= not=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20dedicated=202)=20we=20use=20the=20same=20dedication=20flag=20as=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20in=20= `gdb-display-buffer'=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(set-window-dedicated-p=20nil=20t)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20save=20this=20= gdb-buffer-type=20symbol=20so=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20we=20can=20later=20pass=20it=20to=20= `gdb-get-buffer-create'=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20one=20example:=20`gdb-registers-buffer'=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (gdb--buffer-type=20(current-buffer))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(error=20"Unrecognized=20= gdb=20buffer=20mode:=20%s"=20major-mode)))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20command=20buffer=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((derived-mode-p=20= 'gud-mode)=20'command)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20((equal=20(selected-window)=20gdb-source-window)=20= 'source)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-selected-window-undedicated=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(set-window-buffer=20nil=20placeholder)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(set-window-prev-buffers=20(selected-window)=20= nil)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-next-buffers=20(selected-window)=20nil))))=0A+=20=20=20=20=20= =20=20=20;;=20save=20the=20window=20configuration=20to=20FILE=0A+=20=20=20= =20=20=20=20=20(let=20((window-config=20(window-state-get=20nil=20t)))=0A= +=20=20=20=20=20=20=20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(prin1=20window-config=20(current-buffer))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(write-file=20file=20t)))=0A+=20=20=20=20=20=20=20= =20(kill-buffer=20placeholder)))))=0A+=0A+(defun=20= gdb-restore-window-configuration=20(file)=0A+=20=20"Restore=20window=20= configuration=20from=20FILE.=0A+=0A+FILE=20should=20be=20a=20window=20= configuration=20file=20saved=20by=0A+`gdb-store-window-configuration'."=0A= +=20=20(interactive=20(list=20(read-file-name=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"Restore=20window=20= configuration=20from=20file:=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(or=20gdb-store-window-directory=20= default-directory))))=0A+=20=20;;=20basically=20we=20restore=20window=20= configuration=20and=20go=20through=20each=0A+=20=20;;=20window=20and=20= restore=20the=20function=20buffers=0A+=20=20(let*=20((placeholder=20= (get-buffer-create=20"=20*gdb-placeholder*")))=0A+=20=20=20=20= (unwind-protect=20;=20don't=20leak=20buffer=0A+=20=20=20=20=20=20=20=20= (let=20((window-config=20(with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (insert-file-contents=20file)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(goto-char=20= (point-min))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20we=20need=20to=20go=20to=20= point-min=20even=20we=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20are=20reading=20the=20= whole=20buffer=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(read=20(current-buffer))))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(source-buffer=20(if=20= gdb-source-window=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(window-buffer=20= gdb-source-window)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20(gdb-get-source-buffer)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20do=20the=20same=20thing=20as=20in=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20`gdb-setup-windows'=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(list-buffers-noselect))))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20buffer-type)=0A+=20=20=20=20=20=20=20=20=20=20= (window-state-put=20window-config=20(frame-root-window))=0A+=20=20=20=20=20= =20=20=20=20=20(dolist=20(window=20(window-list=20nil=20'no-minibuffer))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(with-selected-window=20window=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(setq=20buffer-type=20= (window-parameter=20nil=20'gdb-buffer-type))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(pcase=20buffer-type=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20('source=20(when=20source-buffer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(set-window-buffer=20= nil=20source-buffer)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(setq=20gdb-source-window=20= (selected-window))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ('command=20(switch-to-buffer=20gud-comint-buffer))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(_=20(let=20((buffer=20= (gdb-get-buffer-create=20buffer-type)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(with-selected-window-undedicated=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (set-window-buffer=20nil=20buffer))))))))=0A+=20=20=20=20=20=20= (kill-buffer=20placeholder))))=0A=20=0A=20(define-minor-mode=20= gdb-many-windows=0A=20=20=20"If=20nil=20just=20pop=20up=20the=20GUD=20= buffer=20unless=20`gdb-show-main'=20is=20t.=0A@@=20-4627,6=20+4765,9=20= @@=20gdb-many-windows=0A=20(defun=20gdb-restore-windows=20()=0A=20=20=20= "Restore=20the=20basic=20arrangement=20of=20windows=20used=20by=20gdb.=0A= =20This=20arrangement=20depends=20on=20the=20value=20of=20option=20= `gdb-many-windows'."=0A+=20=20;;=20this=20function=20is=20used=20when=20= the=20user=20messed=20up=20window=0A+=20=20;;=20configuration=20and=20= want=20to=20"reset=20to=20default".=20the=20function=20that=0A+=20=20;;=20= sets=20up=20window=20configuration=20on=20start=20up=20is=20= `gdb-get-source-file'=0A=20=20=20(interactive)=0A=20=20=20= (switch-to-buffer=20gud-comint-buffer)=20;Select=20the=20right=20window=20= and=20frame.=0A=20=20=20(delete-other-windows)=0A@@=20-4678,6=20+4819,7=20= @@=20gdb-reset=0A=20(defun=20gdb-get-source-file=20()=0A=20=20=20"Find=20= the=20source=20file=20where=20the=20program=20starts=20and=20display=20= it=20with=20related=0A=20buffers,=20if=20required."=0A+=20=20;;=20this=20= function=20is=20called=20only=20once=20on=20startup=0A=20=20=20= (goto-char=20(point-min))=0A=20=20=20(if=20(re-search-forward=20= gdb-source-file-regexp=20nil=20t)=0A=20=20=20=20=20=20=20(setq=20= gdb-main-file=20(read=20(match-string=201))))=0A--=20=0A2.24.1=0A=0A=0A= =46rom=20c7ac67ec759d16e1f5d212b6fadf93d4ec853ace=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Thu,=20= 16=20Jan=202020=2018:52:17=20-0500=0ASubject:=20[PATCH=203/3]=20Restore=20= window=20configuration=20when=20gdb=20quits=0A=0AMake=20gdb=20preserve=20= the=20window=20configuration=20that=20the=20user=20had=20before=0A= starting=20gdb.=0A=0A*=20lisp/progmodes/gdb-mi.el=20= (gdb--window-configuration-before):=20new=0A(gdb):=20save=20= configuration=20before=20start=0A(gdb-reset):=20restore=20window=20= configuration=0A---=0A=20lisp/progmodes/gdb-mi.el=20|=2011=20++++++++++-=0A= =201=20file=20changed,=2010=20insertions(+),=201=20deletion(-)=0A=0Adiff=20= --git=20a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= cf0c8f29a9..582ccf9562=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-243,6=20+243,9=20@@=20gdb-output-sink=0A= =20=09=20=20=20=20=20=20=20disposition=20of=20output=20generated=20by=20= commands=20that=0A=20=09=20=20=20=20=20=20=20gdb=20mode=20sends=20to=20= gdb=20on=20its=20own=20behalf.")=0A=20=0A+(defvar=20= gdb--window-configuration-before=20nil=0A+=20=20"Stores=20the=20window=20= configuration=20before=20starting=20gdb.")=0A+=0A=20(defcustom=20= gdb-discard-unordered-replies=20t=0A=20=20=20"Non-nil=20means=20discard=20= any=20out-of-order=20GDB=20replies.=0A=20This=20protects=20against=20= lost=20GDB=20replies,=20assuming=20that=20GDB=20always=0A@@=20-762,6=20= +765,10=20@@=20gdb=0A=20=20=20=20=20(gdb-restore-windows)=0A=20=20=20=20=20= (error=0A=20=20=20=20=20=20"Multiple=20debugging=20requires=20restarting=20= in=20text=20command=20mode"))=0A+=0A+=20=20;;=20save=20window=20= configuration=20before=20starting=20gdb=20so=20we=20can=20restore=0A+=20=20= ;;=20it=20after=20gdb=20quits=0A+=20=20(setq=20= gdb--window-configuration-before=20(window-state-get))=0A=20=20=20;;=0A=20= =20=20(gud-common-init=20command-line=20nil=20'gud-gdbmi-marker-filter)=0A= =20=0A@@=20-4814,7=20+4821,9=20@@=20gdb-reset=0A=20=20=20(if=20(boundp=20= 'speedbar-frame)=20(speedbar-timer-fn))=0A=20=20=20(setq=20gud-running=20= nil)=0A=20=20=20(setq=20gdb-active-process=20nil)=0A-=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t))=0A+=20=20(remove-hook=20= 'after-save-hook=20'gdb-create-define-alist=20t)=0A+=20=20;;=20recover=20= window=20configuration=0A+=20=20(window-state-put=20= gdb--window-configuration-before))=0A=20=0A=20(defun=20= gdb-get-source-file=20()=0A=20=20=20"Find=20the=20source=20file=20where=20= the=20program=20starts=20and=20display=20it=20with=20related=0A--=20=0A= 2.24.1=0A=0A= --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Disposition: attachment; filename=default-rearrange Content-Type: application/octet-stream; x-unix-mode=0700; name="default-rearrange" Content-Transfer-Encoding: quoted-printable (((min-height=20.=2012)=20(min-width=20.=2030)=20(min-height-ignore=20.=20= 9)=20(min-width-ignore=20.=2012)=20(min-height-safe=20.=203)=20= (min-width-safe=20.=206)=20(min-pixel-height=20.=20204)=20= (min-pixel-width=20.=20240)=20(min-pixel-height-ignore=20.=20153)=20= (min-pixel-width-ignore=20.=2096)=20(min-pixel-height-safe=20.=2051)=20= (min-pixel-width-safe=20.=2048))=20hc=20(pixel-width=20.=201920)=20= (pixel-height=20.=20992)=20(total-width=20.=20240)=20(total-height=20.=20= 58)=20(normal-height=20.=201.0)=20(normal-width=20.=201.0)=20= (combination-limit)=20(leaf=20(pixel-width=20.=20783)=20(pixel-height=20= .=20992)=20(total-width=20.=2098)=20(total-height=20.=2058)=20= (normal-height=20.=201.0)=20(normal-width=20.=200.4059618986693193)=20= (parameters=20(gdb-buffer-type=20.=20source))=20(buffer=20"=20= *gdb-placeholder*"=20(selected=20.=20t)=20(hscroll=20.=200)=20(fringes=20= 8=208=20nil=20nil)=20(margins=20nil)=20(scroll-bars=20nil=200=20t=20nil=20= 0=20t=20nil)=20(vscroll=20.=200)=20(dedicated)=20(point=20.=201)=20= (start=20.=201)))=20(vc=20(pixel-width=20.=20847)=20(pixel-height=20.=20= 992)=20(total-width=20.=20106)=20(total-height=20.=2058)=20= (normal-height=20.=201.0)=20(normal-width=20.=200.4427600627286984)=20= (combination-limit)=20(leaf=20(pixel-width=20.=20847)=20(pixel-height=20= .=20483)=20(total-width=20.=20106)=20(total-height=20.=2028)=20= (normal-height=20.=200.4829123497015181)=20(normal-width=20.=201.0)=20= (parameters=20(gdb-buffer-type=20.=20command))=20(buffer=20"=20= *gdb-placeholder*"=20(selected)=20(hscroll=20.=200)=20(fringes=208=208=20= nil=20nil)=20(margins=20nil)=20(scroll-bars=20nil=200=20t=20nil=200=20t=20= nil)=20(vscroll=20.=200)=20(dedicated)=20(point=20.=201)=20(start=20.=20= 1)))=20(leaf=20(pixel-width=20.=20847)=20(pixel-height=20.=20278)=20= (total-width=20.=20106)=20(total-height=20.=2016)=20(normal-height=20.=20= 0.28280773143438453)=20(normal-width=20.=201.0)=20(parameters=20= (gdb-buffer-type=20.=20gdb-inferior-io))=20(buffer=20"=20= *gdb-placeholder*"=20(selected)=20(hscroll=20.=200)=20(fringes=208=208=20= nil=20nil)=20(margins=20nil)=20(scroll-bars=20nil=200=20t=20nil=200=20t=20= nil)=20(vscroll=20.=200)=20(dedicated=20.=20t)=20(point=20.=201)=20= (start=20.=201)))=20(leaf=20(last=20.=20t)=20(pixel-width=20.=20847)=20= (pixel-height=20.=20231)=20(total-width=20.=20106)=20(total-height=20.=20= 14)=20(normal-height=20.=200.23427991886409735)=20(normal-width=20.=20= 1.0)=20(parameters=20(gdb-buffer-type=20.=20gdb-breakpoints-buffer))=20= (buffer=20"=20*gdb-placeholder*"=20(selected)=20(hscroll=20.=200)=20= (fringes=208=208=20nil=20nil)=20(margins=20nil)=20(scroll-bars=20nil=200=20= t=20nil=200=20t=20nil)=20(vscroll=20.=200)=20(dedicated=20.=20t)=20= (point=20.=201)=20(start=20.=201))))=20(vc=20(last=20.=20t)=20= (pixel-width=20.=20290)=20(pixel-height=20.=20992)=20(total-width=20.=20= 36)=20(total-height=20.=2058)=20(normal-height=20.=201.0)=20= (normal-width=20.=200.15127803860198227)=20(combination-limit)=20(leaf=20= (pixel-width=20.=20290)=20(pixel-height=20.=20499)=20(total-width=20.=20= 36)=20(total-height=20.=2029)=20(normal-height=20.=200.5)=20= (normal-width=20.=201.0)=20(parameters=20(gdb-buffer-type=20.=20= gdb-locals-buffer))=20(buffer=20"=20*gdb-placeholder*"=20(selected)=20= (hscroll=20.=200)=20(fringes=208=208=20nil=20nil)=20(margins=20nil)=20= (scroll-bars=20nil=200=20t=20nil=200=20t=20nil)=20(vscroll=20.=200)=20= (dedicated=20.=20t)=20(point=20.=201)=20(start=20.=201)))=20(leaf=20= (last=20.=20t)=20(pixel-width=20.=20290)=20(pixel-height=20.=20493)=20= (total-width=20.=2036)=20(total-height=20.=2029)=20(normal-height=20.=20= 0.5)=20(normal-width=20.=201.0)=20(parameters=20(gdb-buffer-type=20.=20= gdb-stack-buffer))=20(buffer=20"=20*gdb-placeholder*"=20(selected)=20= (hscroll=20.=200)=20(fringes=208=208=20nil=20nil)=20(margins=20nil)=20= (scroll-bars=20nil=200=20t=20nil=200=20t=20nil)=20(vscroll=20.=200)=20= (dedicated=20.=20t)=20(point=20.=201)=20(start=20.=201)))))= --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii In GNU Emacs 27.0.50 (build 3, x86_64-apple-darwin19.0.0, NS = appkit-1894.10 Version 10.15.1 (Build 19B88)) of 2019-11-30 built on missSilver Repository revision: e2828795d73637577c7726965974a047fe2d7119 Repository branch: master Windowing system distributor 'Apple', version 10.3.1894 System Description: Mac OS X 10.15.2 Recent messages: Checking 71 files in /Users/yuan/attic/emacs/lisp/erc... Checking 34 files in /Users/yuan/attic/emacs/lisp/emulation... Checking 180 files in /Users/yuan/attic/emacs/lisp/emacs-lisp... Checking 24 files in /Users/yuan/attic/emacs/lisp/cedet... Checking 59 files in /Users/yuan/attic/emacs/lisp/calendar... Checking 87 files in /Users/yuan/attic/emacs/lisp/calc... Checking 113 files in /Users/yuan/attic/emacs/lisp/obsolete... Checking for load-path shadows...done Auto-saving... Buffer *unsent mail to bug-gnu-emacs@gnu.org*<2> modified; kill anyway? = (y or n) y Configured using: 'configure --with-modules --with-pdumper=3Dyes = --oldincludedir=3D/Applications/Xcode.app/Contents/Developer/Platforms/Mac= OSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2/' Configured features: NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES THREADS PDUMPER LCMS2 Important settings: value of $LC_CTYPE: UTF-8 value of $LANG: en_CN.UTF-8 locale-coding-system: utf-8-unix Major mode: Emacs-Lisp Minor modes in effect: magit-todos-mode: t bug-reference-prog-mode: t desktop-save-mode: t ghelp-global-minor-mode: t minibuffer-electric-default-mode: t flymake-mode: t global-magit-file-mode: t magit-file-mode: t global-git-commit-mode: t async-bytecomp-package-mode: t shell-dirtrack-mode: t flyspell-mode: t outshine-mode: t ws-butler-global-mode: t ws-butler-mode: t minions-mode: t eyebrowse-mode: t savehist-mode: t global-hl-todo-mode: t hl-todo-mode: t global-highlight-parentheses-mode: t highlight-parentheses-mode: t rainbow-delimiters-mode: t global-undo-tree-mode: t undo-tree-mode: t electric-pair-mode: t winner-mode: t aggressive-indent-mode: t ivy-prescient-mode: t prescient-persist-mode: t recentf-mode: t which-key-mode: t general-override-mode: t outline-minor-mode: t ivy-mode: t company-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-quote-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t transient-mark-mode: t hs-minor-mode: t Load-path shadows: /Users/yuan/.emacs.d/ranch/winman/windman hides = /Users/yuan/.emacs.d/ranch/windman/windman /Users/yuan/.emacs.d/ranch/nerd-font/test/test-helper hides = /Users/yuan/.emacs.d/ranch/doom-themes/test/test-helper /Users/yuan/.emacs.d/ranch/julia-mode/julia-mode hides = /Users/yuan/.emacs.d/package/julia-mode-20190813.1326/julia-mode /Users/yuan/.emacs.d/ranch/julia-mode/julia-latexsubs hides = /Users/yuan/.emacs.d/package/julia-mode-20190813.1326/julia-latexsubs /Users/yuan/.emacs.d/ranch/matlab-emacs/mlint hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/mlint /Users/yuan/.emacs.d/ranch/matlab-emacs/company-matlab-shell hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/company-matlab-shel= l /Users/yuan/.emacs.d/ranch/matlab-emacs/linemark hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/linemark /Users/yuan/.emacs.d/ranch/matlab-emacs/semanticdb-matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/semanticdb-matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/semantic-matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/semantic-matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/srecode-matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/srecode-matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/cedet-matlab hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/cedet-matlab /Users/yuan/.emacs.d/ranch/matlab-emacs/tlc hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/tlc /Users/yuan/.emacs.d/ranch/matlab-emacs/matlab-publish hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/matlab-publish /Users/yuan/.emacs.d/ranch/matlab-emacs/matlab-mode-pkg hides = /Users/yuan/.emacs.d/package/matlab-mode-20180928.1526/matlab-mode-pkg /Users/yuan/.emacs.d/package/faceup-20170925.1946/faceup hides = /Users/yuan/attic/emacs/lisp/emacs-lisp/faceup Features: (magit-todos pcre2el rxt re-builder grep checkdoc lisp-mnt bug-reference vc-mtn vc-hg ffap tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat parse-time iso8601 ls-lisp shadow sort mail-extr emacsbug sendmail vc-git vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs vc vc-dispatcher magit-bookmark bookmark company-oddmuse company-keywords company-etags etags fileloop company-gtags company-dabbrev-code company-dabbrev company-files company-capf company-cmake company-xcode company-clang company-semantic company-eclim company-template company-bbdb hideshow desktop frameset trivial-copy ghelp-eglot ghelp-helpful ghelp-builtin ghelp cus-edit cus-start cus-load luna-publish utility pause luna-general-config minibuf-eldef eglot array jsonrpc ert pp ewoc debug flymake-proc flymake warnings url-util magit-submodule magit-obsolete magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func magit-diff smerge-mode diff-mode magit-core magit-autorevert autorevert filenotify magit-margin magit-transient magit-process magit-mode transient git-commit magit-git magit-section magit-utils crm log-edit message rmc puny rfc822 mml mml-sec epa derived epg epg-config gnus-util rmail rmail-loaddefs text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log with-editor async-bytecomp async shell server flyspell ispell outshine outshine-org-cmds outorg isolate inline expand-region text-mode-expansions the-org-mode-expansions er-basic-expansions thingatpt expand-region-core expand-region-custom ws-butler minions eyebrowse savehist buffer-move windmove hl-todo highlight-parentheses rainbow-delimiters doom-cyberpunk-theme undo-tree diff doom-one-light-theme elec-pair winner doom-themes doom-themes-base windman aggressive-indent find-char ivy-prescient prescient recentf-ext recentf tree-widget wid-edit which-key general helpful imenu trace edebug backtrace info-look f dash-functional help-fns radix-tree elisp-refs s loop dash org-element avl-tree generator org advice org-macro org-footnote org-pcomplete pcomplete org-list org-faces org-entities time-date noutline outline org-version ob-emacs-lisp ob ob-tangle org-src ob-ref ob-lob ob-table ob-keys ob-exp ob-comint ob-core ob-eval org-compat org-macs org-loaddefs format-spec find-func cal-menu calendar cal-loaddefs counsel xdg xref project dired dired-loaddefs compile comint ansi-color swiper cl-extra help-mode ivy delsel ring colir color ivy-overlay company edmacro kmacro pcase use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core finder-inf tex-site info cowboy package easymenu browse-url url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map url-vars cl-loaddefs cl-lib lunary lunary-ui luna-f rx seq byte-opt gv bytecomp byte-compile cconv tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads kqueue cocoa ns lcms2 multi-tty make-network-process emacs) Memory information: ((conses 16 198008 22858) (symbols 48 9376 47) (strings 32 38332 2464) (string-bytes 1 1117094) (vectors 16 24687) (vector-slots 8 290292 27848) (floats 8 516 434) (intervals 56 14668 1334) (buffers 1000 28)) --Apple-Mail=_D6E2388E-299D-4A04-B073-051589D1C5C9-- ------------=_1586827141-5265-1-- From unknown Wed Sep 10 13:55:59 2025 X-Loop: help-debbugs@gnu.org Subject: bug#39181: 27.0.50; [PATCH] Allow users to store & restore gdb-mi layout Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 14 Apr 2020 08:06:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39181 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Yuan Fu Cc: 39181-done@debbugs.gnu.org, =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= Received: via spool by 39181-done@debbugs.gnu.org id=D39181.158685154212019 (code D ref 39181); Tue, 14 Apr 2020 08:06:02 +0000 Received: (at 39181-done) by debbugs.gnu.org; 14 Apr 2020 08:05:42 +0000 Received: from localhost ([127.0.0.1]:33185 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOGZi-00037m-IG for submit@debbugs.gnu.org; Tue, 14 Apr 2020 04:05:42 -0400 Received: from mout.gmx.net ([212.227.15.15]:37873) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOGZf-00037Y-5N for 39181-done@debbugs.gnu.org; Tue, 14 Apr 2020 04:05:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1586851531; bh=SCiAj/lrBJ6f3HLnOkS/19x4Txdm1InNtMB+OdEs87U=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=hYYhucFwv4nuhZ7IQxoYKig8YcO8dh8l0kk0uKdvg4mFKFafF/m2JtGYyZEzMSgP2 kAWhUMUWV+U1dZS2ZlDzuHHbKYNVdO5yUeyAv8oWn/tkETsDTE79haQWxdn37zBrfP OObVi94BHYkBwVUL0bmcxUvjpxFpg8LMJeAb83uo= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([46.125.249.34]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MPGW7-1jcE7i0hZt-00PdcP; Tue, 14 Apr 2020 10:05:31 +0200 References: <91E91E25-9956-4D10-BD99-DC028156731C@gmail.com> <87d09jp7he.fsf@gmail.com> <916b2fef-b1bb-1c0c-1b43-4609cd768a79@gmx.at> <878sk6ot4z.fsf@gmail.com> <0EF37881-F1DA-48AD-8F4E-05A37041BD98@gmail.com> <301E3A87-7ED6-4E0A-A6DA-ABF84EB85B2F@gmail.com> <87lfo4netg.fsf@gmail.com> <87h7ysnela.fsf@gmail.com> <023deed5-98f5-c0d5-c144-27156a9a7e0b@gmx.at> <4186025A-58B4-45DE-B64A-E00AD2F85637@gmail.com> <07cbd454-4885-9875-edaf-168f26ae828a@gmx.at> <7234DEAE-00EA-4576-B580-C50218E0300F@gmail.com> <87v9mypwud.fsf@gmail.com> <076B0EFC-C9CE-4B74-B460-FE70251A3A8B@gmail.com> <87imix7dte.fsf@gmail.com> <1A34AFCE-F3E9-4CBD-BD24-C5B008C6B1D0@gmail.com> <87wo7d5qfz.fsf@gmail.com> <3070D489-A42E-4F72-904D-1179AD59638C@gmail.com> <391F1058-3E10-4524-8BF7-2077DD24769A@gmail.com> From: martin rudalics Message-ID: <31f516ce-f89e-7d78-9012-c95d3868c8a9@gmx.at> Date: Tue, 14 Apr 2020 10:05:29 +0200 MIME-Version: 1.0 In-Reply-To: <391F1058-3E10-4524-8BF7-2077DD24769A@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:bOhdc6f4pwoIu/upuNKIQ/z4FXEVs0zpu9VRecTR5/VdJ3QGzIw Qd8/v7kGZUo27GNpXw0l2Syejnk8TBzqYX3ppHMNa4UxAQE1Nuz0JTxUyvDm2PffLSucDdK KKsebJOcjJK1Ygmz+MlE48saTEasJFT3XmKQmJr6K5y0IbgZseiqn8hxxrGALQjr2ZQyg/D hxuwxLdBNRLnD5wBY00ug== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:2QKc9WIq4FM=:VaMuaTpNbVIHzEaxLWNI9k L++c1LtiSmJa1o2DbTTPeS/gWUxhFYKjNvoPe6DEX3Oa+t0XCZix8x7E7v986u/FLGsTukpDi QQhDwNXHn9NBjHJbYdXdgn+pDjW5baomRq9gXUkJTJECDiuVRRCqaHyVIlrf27/DDG0GYIIF0 lpbKXqpPNNTVPJkeaAlKHR1WyLgo2UtkQYwfey+ezNLdH7yn0aL2v1RXiEiYI0dRwrpeSTRRP CzZj24XtHzzEf64RI02wBvk5uiEYuiDHIVsPnBcIhTun0iwYC6nJM1dMbBZReDHGhnEcytoNQ F3WCh4cLL56P7Lb2SNHmmbVkmdrHAFhsCjBZ9O35Jqy3dd8Uf4tP6M0Vae9KNAY9UKDD3iYES 9ywv6MWjda9LtQ2w5Uu4VzpsbKO/IiT4Qulo/d4s/B4+UUXyKpwTLd24Y3Su28xUMQRS2uzf9 OHk/tyW8eikbhD4649rfpdoJWLIVNuHRVkqYXuM0uJde9bqX5DU+U/VfFYXAHMiRSYx7xA9WG CrGaPMjwJWwuNRg9yCOLvUYul0GhxEcV9tZ2Dej8q3k+vqH8oopgjwc1meC1xnHKtzrShOOG6 owrG79+jGfCaqegQRONC3vVbTqG3SRqe+77xoEXTxk6Hi/RcLoShI4jwqIEDM/i85OQanoiuQ kSv8yexMq8EgGiwmdWTTyn1zet1RV8Hslir1ddQD45ZnXitxoJEAq6Q9KHIVEiRJBFavJiVI6 0nmyOw9cwZQxX95kGO4owv7I/TZhXXq7q9KsaUtShsCL3lm/jEMeSFDNRWA0p84RnzrdYX/Qk 4ES2t8J0XXD0BFzxpfkPFfFBAOlzyGTGPC1NIMwjNywCylHyRpzI+yBA2+jYTvs2GvpH0qlW/ gj6p3uVtxkiZ8tOdk5sKQ4UHOno8XaInDjt1lsdEhR+E9w6MlSIdWY7UHNmisx1YHNFqjDzq7 hfWv/wy2mTrpomWv75zHXQ3z6qIAd/rKoTdKEaw8A6OwFjoA0fIqRIFXJL8kk6E1wCzP7Xr+R JM//XxCkph/V1o432k/cZtGcWtrre1t3j2P20v/WYZQP2si3iNXXdt5xiSb8K11OIpQ9KxE9K vctAN9Vqan1y26nDL2dsxJVMCJworFKzm8MUhMZCp2nUiLsvv3wQYv7j/TkrCJMoft5OZg96s P32hcHv8hErhXEHfvkKk3cCGgRg/mAYUiqZLTSOvvTWlAstI8toZ08erC2N6+TcJn91m5Nvjl fWJ7sHOTMnu+vgmLU X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) tags 39181 fixed close 39181 28.1 quit Hopefully marked as done now. martin