3 votes

Comment dire à emacs gdb d'afficher la ligne de code actuelle au centre de la mémoire tampon ?

Utiliser le débogueur dans emacs est agréable : Vous pouvez parcourir le code avec la fonction next et emacs affichera toujours la ligne de code qui est actuellement exécutée, comme ceci :

  int x;
  int y;
=>int z;

Mais malheureusement, si votre fichier est long, ce pointeur => se déplacera éventuellement vers le bas et montrera toujours la ligne actuelle au bas de la mémoire tampon.

Il serait plus agréable que le pointeur => reste toujours au milieu du tampon (centré verticalement), afin que je puisse voir ce qui va suivre la ligne actuelle, avant de dire next encore, comme ici :

  int y;
=>int z;
  std::cout << z;

Est-ce possible ? Puis-je le définir quelque part ?

4voto

crackity_jones Points 1112

Il n'y a pas de mécanisme intégré pour garder la ligne centrée, mais ce conseil fait l'affaire pour moi :

(defadvice gud-display-line (after gud-display-line-centered activate)
  "Center the line in the window"
  (when (and gud-overlay-arrow-position gdb-source-window)
    (with-selected-window gdb-source-window
      ; (marker-buffer gud-overlay-arrow-position)
      (save-restriction
        (goto-line (ad-get-arg 1))
        (recenter)))))

0voto

Baoshan Pang Points 1

Comme @MMM l'a mentionné, la fenêtre gdb-source-window est nulle avec les nouveaux emacs. Avec l'inspiration du code ici : http://kousik.blogspot.com/2005/10/highlight-current-line-in-gdbemacs.html J'ai réussi à le faire fonctionner avec le code suivant (NOTE : il fonctionne à la fois pour le recentrage et la mise en évidence de la ligne courante) :

(defvar gud-overlay
  (let* ((ov (make-overlay (point-min) (point-min))))
    (overlay-put ov 'face '(:background "#F6FECD")) ;; colors for Leuven theme
    ov)
  "Overlay variable for GUD highlighting.")
(defadvice gud-display-line (after my-gud-highlight act)
 "Highlight current line."
 (let* ((ov gud-overlay)
        (bf (gud-find-file true-file)))
   (save-excursion
     (with-selected-window (get-buffer-window bf)
       (save-restriction
         (goto-line (ad-get-arg 1))
         (recenter)))
     (set-buffer bf)
     (move-overlay ov (line-beginning-position) (line-end-position)
                   (current-buffer)))))

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X