Zeigen Sie den Anfang eines Bereichs an, wenn dieser außerhalb des Bildschirms liegt


12

Ich möchte den ersten Teil eines Oszilloskops anzeigen, wenn dieser nicht mehr auf dem Bildschirm angezeigt wird.

Beispiel:

namespace a  
{  
...  
--------------------- <- display frame 
...                 |  
}*                  | * when cursor is here display "namespace a" in the minibuffer
---------------------   or on screen

Dies könnte für viele Programmiersprachen funktionieren, aber ich denke hauptsächlich an C ++.

Um ein bisschen mehr zu verdeutlichen und für diejenigen, die VS kennen, möchte ich eine ähnliche Funktion wie für Visual Studio. Wenn Sie den Cursor am Ende eines Bereichs positionieren, wird der Anfang des Bereichs oben im Bearbeitungspuffer angezeigt.

Gibt es diese Funktion bereits irgendwo?


Ich bin neugierig, hat meine Antwort geholfen?
Tu Do

@ TuDo ja! Ich hatte gerade Zeit, einen Blick darauf zu werfen. Ich hatte bereits Semantik und nur das Aktivieren des Global-Semantic-Stickyfunc-Modus funktionierte gut. Vielen Dank. Mein Problem ist jetzt, dass die Farbe die Kopfzeile nicht lesbar macht.
log0

Antworten:


14

Wenn Sie C / C ++ / Java / Emacs Lisp / Python schreiben, macht der Semantic-Sticky-Func-Modus das, was Sie wollen.

HINWEIS : Dies scheint mit CEDET von Git zu funktionieren, nicht mit CEDET, das derzeit in Emacs 24.4 verfügbar ist. So erhalten Sie Emacs von Git:

Git-Klon http://git.code.sf.net/p/cedet/git Ceded

Und laden Sie CEDET zuerst über alles in Ihre Init-Datei:

(load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
(add-to-list 'load-path (concat user-emacs-directory "cedet/contrib"))
(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))

Bei Aktivierung zeigt dieser Modus an, dass sich der Funktionspunkt derzeit in der ersten Zeile des aktuellen Puffers befindet. Dies ist nützlich, wenn Sie eine sehr lange Funktion haben, die sich über mehr als einen Bildschirm erstreckt, und nicht nach oben scrollen müssen, um den Funktionsnamen zu lesen, und dann nach unten zur ursprünglichen Position scrollen müssen.

Es zeigt die vollständige Funktionsoberfläche (Rückgabetyp, Funktionsname und Parameter) an, nicht nur den Funktionsnamen.

Fügen Sie diesen Code in Ihre Init-Datei ein, um ihn zu aktivieren:

(require 'semantic)
(semantic-mode 1)
(global-semantic-stickyfunc-mode 1)

UPDATE : Eines der Probleme mit current semantic-stickyfunc-modeist, dass nicht alle Parameter angezeigt werden, die auf mehrere Zeilen verteilt sind. Um dieses Problem zu lösen, habe ich das Paket stickyfunc-boost erstellt .

DEMO :

Hier ist eine Demo in C:

semantic-sticky-func-mode-c

Hier ist eine Demo in Emacs Lisp:

semantic-sticky-func-mode-elisp

UPDATE : Alternativ können Sie helm-semantic-or-imenu verwenden . Wenn Sie sich in einer Funktion befinden und den Befehl ausführen, befindet sich der Cursor direkt auf der Funktion in der Liste, sodass Sie immer die vollständige Funktionsoberfläche sehen können. DEMO:

  • Zuerst helm-semantic-or-imenubewege ich mich zur Funktion helm-define-key-with-subkeysund verschiebe dort den Punkt.

  • Dann starte ich helm-semantic-or-imenuerneut und bin helm-define-key-with-subkeysvorausgewählt.

  • Dann bewege ich den Punkt zur Variablen helm-map und führe helm-semantic-or-imenuzwei Funktionen erneut aus: helm-next-source und helm-previous-source. Dieses Mal werden anstelle des aktuellen semantischen Tags, in dem ich arbeite (die Helmkarte), die beiden anderen Tags im Helm-Semantik-Puffer angezeigt. Dies liegt daran, dass ich vor dem Ausführen des Befehls ein Präfixargument angegeben habe.

Auch diese Demo ist in Emacs Lisp, sie funktioniert auch für C / C ++ und ist flexibler, wenn Sie eine wirklich lange Funktionsoberfläche haben.

helm-semantic-or-imenu


Wie haben Sie das für Lisp (insbesondere Elisp) zum Laufen gebracht? Ich habe Ihren Code in ausgewertet, emacs -Qaber ich erhalte nicht das Verhalten, das Sie beim Surfen beschreiben, z org.el.
Itsjeyd

Ich habe die Antwort aktualisiert. Sie sollten es mit Semantic von bzr versuchen.
Tu Do

1
Völlig unangebracht. Vielen Dank, dass Sie mich in den Nyan-Modus eingeführt haben. Meine Codierung wird nie wieder dieselbe sein.
lila_ Pfeile

5

Sie können einschalten, which-function-modeindem Sie tun

M-x which-function-mode RET

Fügen Sie hinzu, um die Einstellung dauerhaft zu machen

(which-function-mode 1)

zu Ihrer Init-Datei.

Aus der Dokumentation:

Umschalten der Zeilenzeile des Modus der aktuellen Funktion (welcher Funktionsmodus). [...]

Welcher Funktionsmodus ist ein globaler Nebenmodus? Wenn diese Option aktiviert ist, wird der aktuelle Funktionsname in bestimmten Hauptmodi kontinuierlich in der Moduszeile angezeigt .

Hinweis : Der Name deutet nicht wirklich darauf hin, aber dies funktioniert nicht nur für "Funktionen", sondern auch für andere Arten von Bereichen. Zum Beispiel in org-mode, which-function-modePosition der Anzeigen des aktuellen Teilbaums.


Vielen Dank! Ich mag den Funktionsnamen, der in der Moduszeile angezeigt wird. Einige Fälle funktionierten jedoch nicht sehr gut. Wie die Methode in einer Struktur in einem Namespace wurde nur der Namespace-Name angezeigt
log0
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.