Cum pot recupera grep sau compila fereastra la următoarea eroare

La next-error în fereastra grep sau compilație, pot folosi ceva de genul

(setq next-error-recenter 35)

pentru a vă asigura că fereastra care afișează potrivirea se derulează pentru a afișa întregul meci, așa cum este descris mai detaliat în această problemă stackoverflow .

Cum pot face același lucru în fereastra grep sau în compilație? Deseori am o ieșire grepată sau o compilă de ieșire care este în partea de jos a ferestrei și în zilele în care îmi petrec tot timpul trecând prin ieșire grepată sau prin compilarea erorilor, comutarea între ferestre și adăugarea unei suprafețe semnificative.

5
Vrei să te uiți la compilation-goto-locus și să introduci o comandă recenter unde este cazul - la secțiunea care începe cu comentariul: fereastra a fost selectată. . . , Puteți să vă reperați la o altă locație a ferestrei - vedeți doc-string pentru recenter .
adăugat autor lawlist, sursa

1 răspunsuri

Folosesc o astfel de soluție pentru salvarea exactă a poziției point în bufferul compilation/grep :

(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)))))))

Dacă doriți centralizarea simplă a point în tamponul compilation/grep , utilizați:

(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))))))

Puteți folosi next-error în loc de compile-goto-error în primul exemplu.

UPD. Emacs 25.1 este necesar pentru o perioadă de timp diferită de zero.

1
adăugat