Hoe kan ik recenter Grep of compileer venster op de volgende fout

Op volgende fout in het grep- of compilatievenster, kan ik zoiets gebruiken

(setq next-error-recenter 35)

om ervoor te zorgen dat het venster dat de overeenkomst weergeeft, schuift om de hele overeenkomst weer te geven, zoals in meer detail beschreven in deze stackoverflow-vraag .

Hoe doe ik hetzelfde in het grep- of compilatievenster zelf? Ik heb vaak grep-uitvoer of compileer uitvoer die zich onderaan het venster bevindt, en op dagen dat ik al mijn tijd besteed aan het doorlopen van grep-uitvoer of het compileren van fouten, maakt het schakelen tussen vensters een aanzienlijke overhead.

5
U wilt compilation-goto-locus bekijken en waar nodig een recenter -opdracht plaatsen - in het gedeelte dat begint met de opmerking: Als de compilatiebuffer venster is geselecteerd. . . , U kunt op verschillende locaties van het venster opnieuw zoeken - zie de doc-string voor recenter .
toegevoegd de auteur lawlist, de bron

1 antwoord

Ik gebruik een dergelijke oplossing voor het exact opslaan van punt in de compilatie/grep -buffer:

(defun eab/compile-goto-error ()
  (interactive)
  (let ((istc? truncate-lines))
    (toggle-truncate-lines t)
    (let ((buf (current-buffer))
          (line (- (count-lines (window-start) (point))
                   (if (eq (point) (point-at-bol)) 0 1)))
          (point (point)))
      (compile-goto-error)
      (run-with-timer 0.01 nil `(lambda ()
                                 (let ((cb (current-buffer)))
                                       (pop-to-buffer ,buf)
                                       (recenter ,line)
                                       (goto-char ,point)
                                       (toggle-truncate-lines ,istc?)
                                       (pop-to-buffer cb)))))))

Als u eenvoudig het punt in de buffer compilatie/grep wilt centreren, gebruikt u:

(defun eab/next-error ()
  (interactive)
  (let ((buf (current-buffer)))
    (next-error)
    (run-with-timer 0.01 nil `(lambda ()
                             (let ((cb (current-buffer)))
                               (pop-to-buffer ,buf)
                               (recenter)
                               (pop-to-buffer cb))))))

U kunt volgende fout gebruiken in plaats van compileren-goto-fout in het eerste voorbeeld.

Upd. Emacs 25.1 is nodig voor een niet-nulperiode.

1
toegevoegd