bug#40268: 27.0.60; [PATCH] Unify and improve gdb-mi source window display

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

bug#40268: 27.0.60; [PATCH] Unify and improve gdb-mi source window display

Fu Yuan
Before this change, stepping and other gdb command handlers use 'gud-display-line’ and 'gdb-goto-breakpoint' uses 'gdb-display-source-buffer'.  Now whenever gdb-mi code tries to open a source buffer, 'gdb-display-source-buffer’ is used.  Also, we simplify the logic in 'gdb-display-source-buffer’ and add a feature to limit the maximum number of source windows.

From a user’s perspective, this change solves two problems: 1. The behavior difference between jumping to break point and stepping (and other command) 2. Gdb-mi opening more windows than I wanted for displaying source files.

Yuan





In GNU Emacs 27.0.60 (build 1, x86_64-apple-darwin19.3.0, NS appkit-1894.30 Version 10.15.3 (Build 19D76))
of 2020-02-25 built on missSilver
Repository revision: f27187f963e9e36435b508e29256e048799e0ff2
Repository branch: emacs-27
Windowing system distributor 'Apple', version 10.3.1894
System Description:  Mac OS X 10.15.4

Recent messages:
Checking 34 files in /Users/yuan/emacs/lisp/emulation...
Checking 180 files in /Users/yuan/emacs/lisp/emacs-lisp...
Checking 24 files in /Users/yuan/emacs/lisp/cedet...
Checking 59 files in /Users/yuan/emacs/lisp/calendar...
Checking 87 files in /Users/yuan/emacs/lisp/calc...
Checking 113 files in /Users/yuan/emacs/lisp/obsolete...
Checking for load-path shadows...done
Auto-saving...
Buffer *unsent mail to [hidden email]* modified; kill anyway? (y or n) y
C-c C-c is undefined

Configured using:
'configure --with-modules --with-pdumper=yes
--oldincludedir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2/'

Configured features:
RSVG GLIB NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS XIM
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: Shell-script

Minor modes in effect:
  global-semanticdb-minor-mode: t
  global-semantic-idle-scheduler-mode: t
  semantic-mode: t
  sh-electric-here-document-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
  diff-hl-mode: t
  color-outline-mode: t
  hi-lock-mode: t
  desktop-save-mode: t
  helpful-html-manual-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  form-feed-mode: t
  minibuffer-electric-default-mode: t
  flycheck-mode: t
  flyspell-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
  ivy-prescient-mode: t
  prescient-persist-mode: t
  recentf-mode: t
  which-key-mode: t
  general-override-mode: t
  outline-minor-mode: t
  counsel-mode: t
  ivy-mode: t
  company-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-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
  line-number-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/separedit/cask-bootstrap hides /Users/yuan/.emacs.d/ranch/comment-edit/cask-bootstrap
/Users/yuan/.emacs.d/ranch/esup/esup-child hides /Users/yuan/.emacs.d/package/esup-20200120.740/esup-child
/Users/yuan/.emacs.d/ranch/esup/esup hides /Users/yuan/.emacs.d/package/esup-20200120.740/esup
/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-shell
/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/emacs/lisp/emacs-lisp/faceup

Features:
(shadow sort mail-extr emacsbug sendmail face-remap rfc1345 quail
semantic/tag-write semantic/tag-file semantic/bovine/c hideif
semantic/bovine/c-by semantic/lex-spp semantic/bovine/gcc
semantic/analyze/refs semantic/db-file data-debug cedet-files
semantic/bovine/scm semantic/decorate/include semantic/db-find
semantic/db-ref semantic/decorate/mode semantic/decorate pulse
semantic/dep semantic/bovine/scm-by semantic/bovine semantic/db-mode
semantic/idle semantic/analyze semantic/sort semantic/scope
semantic/analyze/fcn semantic/db eieio-base semantic/format ezimage
semantic/tag-ls semantic/find semantic/ctxt semantic/util-modes
semantic/util semantic semantic/tag semantic/lex semantic/fw mode-local
cedet cc-mode-expansions cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs ls-lisp ess-custom apropos
sh-script smie executable geiser-mode geiser-xref geiser-compile
geiser-debug geiser-gambit geiser-chibi geiser-mit geiser-chez
geiser-chicken geiser-racket geiser-guile ghelp-geiser console-buffer
geiser geiser-repl geiser-image geiser-company geiser-doc geiser-menu
geiser-edit geiser-completion geiser-autodoc geiser-eval
geiser-connection tq geiser-syntax geiser-log geiser-popup view
geiser-impl geiser-custom geiser-base scheme vc-mtn vc-hg bug-reference
magit-patch-changelog magit-patch magit-bookmark 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 magit-core magit-autorevert autorevert magit-margin
magit-transient magit-process magit-mode transient git-commit magit-git
magit-section magit-utils crm log-edit pcvs-util add-log with-editor
async-bytecomp async shell misearch multi-isearch vc-git vc-bzr vc-src
vc-sccs vc-svn vc-cvs vc-rcs bookmark server cl-print gnutls mm-archive
message rfc822 mml mml-sec epa derived gnus-util rmail rmail-loaddefs
text-property-search mailabbrev gmm-utils mailheader mm-decode mm-bodies
mm-encode mail-utils network-stream url-http mail-parse rfc2231 rfc2047
rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm rmc puny url-cache
url-auth url url-proxy url-privacy url-expand url-methods url-history
url-cookie url-domsuf mailcap epg epg-config hideshow diff-hl vc-dir vc
vc-dispatcher diff-mode color-outline hi-lock company-oddmuse
company-keywords company-etags etags fileloop generator 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 desktop frameset trivial-copy ghelp
ghelp-eglot ghelp-helpful ghelp-builtin cus-edit centaur-tabs
centaur-tabs-interactive centaur-tabs-functions centaur-tabs-elements
powerline powerline-separators powerline-themes cus-start cus-load
luna-general-config pause utility transform flywrap yasnippet
sly-el-indent sly-cl-indent cl-indent cl all-the-icons
all-the-icons-faces data-material data-weathericons data-octicons
data-fileicons data-faicons data-alltheicons memoize form-feed
minibuf-eldef eglot array filenotify jsonrpc ert pp ewoc debug
flymake-proc flymake warnings url-util flycheck 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 ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-footnote org-src ob-comint org-pcomplete pcomplete
org-list org-faces org-entities time-date noutline outline org-version
ob-emacs-lisp ob-core ob-eval org-table ol org-keys org-compat advice
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
use-package-core finder-inf tex-site proof-site proof-autoloads 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 easy-mmode
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 489882 97798)
(symbols 48 40858 45)
(strings 32 193314 9271)
(string-bytes 1 4564854)
(vectors 16 58289)
(vector-slots 8 1900639 84204)
(floats 8 468 326)
(intervals 56 7219 1188)
(buffers 1000 40))

source-window.patch (13K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#40268: 27.0.60; [PATCH] Unify and improve gdb-mi source window display

martin rudalics
 >  From a user’s perspective, this change solves two problems: 1. The
 > behavior difference between jumping to break point and stepping (and
 > other command) 2. Gdb-mi opening more windows than I wanted for
 > displaying source files.

The patch doesn't apply here.  Searching for

   :group 'gdb
   :version "22.1")

(defvar gdbmi-debug-mode nil
   "When non-nil, print the messages sent/received from GDB/MI in *Messages*.")


fails.

Thanks, martin




Reply | Threaded
Open this post in threaded view
|

bug#40268: 27.0.60; [PATCH] Unify and improve gdb-mi source window display

Fu Yuan

> On Mar 29, 2020, at 5:01 AM, martin rudalics <[hidden email]> wrote:
>
> >  From a user’s perspective, this change solves two problems: 1. The
> > behavior difference between jumping to break point and stepping (and
> > other command) 2. Gdb-mi opening more windows than I wanted for
> > displaying source files.
>
> The patch doesn't apply here.  Searching for
>
>  :group 'gdb
>  :version "22.1")
>
> (defvar gdbmi-debug-mode nil
>  "When non-nil, print the messages sent/received from GDB/MI in *Messages*.")
>
>
> fails.
>
> Thanks, martin
>
Ah, I see. I should have generate this patch against the latest history. This one should be ok.

Yuan


source-window.patch (13K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#40268: 27.0.60; [PATCH] Unify and improve gdb-mi source window display

martin rudalics
 > This one should be ok.

Thanks.  A few remarks.  Please try to ident as

         (setq gdb-source-window-list
               (cl-remove-duplicates
                (cl-remove-if-not
                (lambda (win)
                  (and (window-live-p win)
                        (equal (window-frame win)
                               (selected-frame))))
                 gdb-source-window-list)
                :test #'equal))

so we can safely change this later and easily stay within our line
length limits.  Also, tests like

                        (equal (window-frame win)
                               (selected-frame))))

should use "eq" instead of "equal" and ones like

                      ((member (selected-window) gdb-source-window-list) 'source)))

"memq" instead of "member".

Similarly to the above, writing

         (window
          (when buffer
            (if (eq gud-minor-mode 'gdbmi)
                 (gdb-display-source-buffer buffer)
               ;; Gud still has the old behavior.
               (or (get-buffer-window buffer)
                   (display-buffer buffer '(nil (inhibit-same-window . t)))))))

permits us to stay within the 80 columns limit.

Finally, instead of "Also, we simply the logic ..." I'd write "Also,
simplify the logic ...".  And please provide a NEWS entry.

Thanks again for the work, martin



Reply | Threaded
Open this post in threaded view
|

bug#40268: 27.0.60; [PATCH] Unify and improve gdb-mi source window display

Fu Yuan


> On Mar 31, 2020, at 5:15 AM, martin rudalics <[hidden email]> wrote:
>
> > This one should be ok.
>
> Thanks.  A few remarks.  Please try to ident as
>
>        (setq gdb-source-window-list
>              (cl-remove-duplicates
>               (cl-remove-if-not
> (lambda (win)
>  (and (window-live-p win)
>                       (equal (window-frame win)
>                              (selected-frame))))
>                gdb-source-window-list)
>               :test #'equal))
>
> so we can safely change this later and easily stay within our line
> length limits.  Also, tests like
>
>                       (equal (window-frame win)
>                              (selected-frame))))
>
> should use "eq" instead of "equal" and ones like
>
>                     ((member (selected-window) gdb-source-window-list) 'source)))
>
> "memq" instead of "member".
>
> Similarly to the above, writing
>
> (window
>  (when buffer
>    (if (eq gud-minor-mode 'gdbmi)
>                (gdb-display-source-buffer buffer)
>              ;; Gud still has the old behavior.
>              (or (get-buffer-window buffer)
>                  (display-buffer buffer '(nil (inhibit-same-window . t)))))))
>
> permits us to stay within the 80 columns limit.
>
> Finally, instead of "Also, we simply the logic ..." I'd write "Also,
> simplify the logic ...".  And please provide a NEWS entry.
>
> Thanks again for the work, Martin
Thanks for reviewing. Besides the changes you requested, I changed the last condition in the cond form in `gdb-save-window-configuration’ to a catch-all condition (to avoid weird problem when loading it back).

Yuan




source-window.patch (16K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#40268: 27.0.60; [PATCH] Unify and improve gdb-mi source window display

martin rudalics
 > Thanks for reviewing. Besides the changes you requested, I changed the
 > last condition in the cond form in `gdb-save-window-configuration’ to
 > a catch-all condition (to avoid weird problem when loading it back).

Pushed to master with my usual tweaks.  Please have a look.

Thanks, martin