Wie kann ich beim Erweitern eines Abschnitts im Magit-Status nach oben scrollen?

8

Durch magit-statusDrücken von im Puffer wird TABein bestimmter Abschnitt ein- oder ausgeblendet. Dies ist praktisch, wenn Sie nicht bereitgestellte Inhalte betrachten und sehen, welche Hunks bereitgestellt werden können.

Wenn Sie jedoch auf einen Abschnitt tippen, wird der Puffer verkleinert, sodass der Abschnitt, den ich erweitern möchte, an den unteren Rand des Puffers verschoben wird, wodurch der erweiterte Teil des Abschnitts ausgeblendet wird. Ich muss dann mit radeln recenter-top-bottom, um den Abschnitt wieder an die Spitze des Puffers zu bringen.

Gibt es eine Möglichkeit, den Abschnitt / Eintrag beim Erweitern automatisch an den oberen Rand des Puffers zu bringen?

Sébastien Le Callonnec
quelle

Antworten:

5

Wenn Sie Emacs v24.3.x verwenden, geben Sie seine in Ihre ein .emacs

(defadvice magit-toggle-section (after magit-section-hidden activate)
  (recenter-top-bottom 0))

Wenn Sie Emacs v24.4.x verwenden, habe ich mir einen Rat ausgedacht - obwohl ich sicher bin, dass er nicht perfekt ist:

(defun magit-toggle-scroll-to-top () (recenter-top-bottom 0))
(advice-add 'magit-toggle-section :after #'magit-toggle-scroll-to-top)
Sébastien Le Callonnec
quelle
Das advice-addist in Emacs v24.3.1 nichtig, es ist eine neue Beratungsfunktion, die in Emacs v24.4
CodyChan
@CodyChan Das stimmt: Für ältere Versionen defadvicesollte verwendet werden.
Sébastien Le Callonnec
Vielen Dank. Ihre Lösung für Emacs 24.4 hat bei mir perfekt funktioniert. Ich bin verrückt geworden und habe gedacht, dass eines der Pakete, die ich habe, mit Magit in Konflikt steht.
zeroDivisible
4

Auf dem nextZweig, der bereits unterstützt wird. (Was niemanden davon abhalten sollte, hier eine andere Antwort zu geben und zu erklären, wie man den gleichen Effekt erzielt master).

Tarsius
quelle
Ich habe deine Frage falsch verstanden. Eine ähnliche Funktion gibt es beim Wechseln zwischen Abschnitten, jedoch nicht für den Fall, dass Sie tatsächlich danach gefragt haben. Aber jetzt habe ich das auch für das Umschalten von Abschnitten implementiert, und so ist diese Antwort jetzt richtig :-)
Tarsius
Genial, ich werde dem nextZweig einen Dreh geben.
Sébastien Le Callonnec
Dies ist nicht die Standardeinstellung, sondern nur für Hunks. Ersetzen Sie diese magit-hunk-set-window-startdurch magit-section-set-window-startin magit-section-movement-hookund magit-section-show-hookwenn Sie dieses Verhalten für alle Abschnitte wünschen . Jetzt, wo ich daran denke, magit-section-show-hookwürde dies wahrscheinlich zu Problemen führen.
Tarsius
Es stellte sich heraus, dass dies nicht so einfach ist wie ich und ich musste diese Änderung vorerst rückgängig machen.
Tarsius
0

Diese arbeiten auf der neuesten Version von magitvon Melpa (von Master - Zweig) , wie heute geprüft.

Während Sie sich im Magit Status-Fenster befinden,

  • C-u j u- Weiter zum u nstaged Abschnitt, erweitern sie und bringt , dass an die Spitze des Puffers
  • C-u j s- Wechsel zu dem s TAged Abschnitt, erweitern sie und bringt , dass an die Spitze des Puffers

Eine ähnliche Aktion gilt auch für andere C-u j ..Bindungen magit-section-jump-map.

Von magit.elin Master - Zweig :

(defvar magit-section-jump-map
  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "z") 'magit-jump-to-stashes)
    (define-key map (kbd "n") 'magit-jump-to-untracked)
    (define-key map (kbd "u") 'magit-jump-to-unstaged)
    (define-key map (kbd "s") 'magit-jump-to-staged)
    (define-key map (kbd "f") 'magit-jump-to-unpulled)
    (define-key map (kbd "p") 'magit-jump-to-unpushed)
    (define-key map (kbd "r") 'magit-jump-to-pending)
    map)
  "Submap for jumping to sections in `magit-status-mode'.")

Antworten

Führen Sie C-u j uden Magit- Statuspuffer aus, um Ihre spezifische Anwendung zu beantworten und die Hunks im nicht bereitgestellten Abschnitt zu überprüfen .

Gilt für den Magit-Master-Zweigcode. habe den nächsten Zweig nicht ausprobiert.

Ein Beispiel für einen Workflow mit diesen Bindungen

  1. M-x magit-status
  2. Stellen Sie die gewünschten Dateien bereit s
  3. Erweitern Sie die bereitgestellten Dateien mit den Hunk-Unterschieden, und positionieren Sie gleichzeitig den oberen Rand des bereitgestellten Abschnitts oben im Puffer: C-u j s
  4. Commit c c, öffnet den COMMIT-Puffer in einem geteilten Fenster
  5. Schreiben Sie ein Protokoll, während Sie die inszenierten Unterschiede in einem anderen Fenster überprüfen. Wenn diff die Fensterhöhe überschreitet, verwende ich die Befehle "Andere Fenster scrollen" .
  6. Commit beenden C-c C-c.
Kaushal Modi
quelle
Obwohl dies in der Tat nützliche Verknüpfungen sind, ist dies nicht genau das, wonach ich gesucht habe: Ich möchte, dass die aktuelle Datei, der Hunk oder der Abschnitt beim Erweitern nach oben gescrollt wird, damit ich den größten Teil des Unterschieds in dieser aktuellen Änderung sehen kann.
Sébastien Le Callonnec