Wyświetl początek zakresu, gdy jest poza ekranem

12

Chciałbym wyświetlić część otwierającą lunety, gdy ta wyjdzie poza ekran.

Przykład:

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

Może to działać dla wielu języków programowania, ale myślę głównie o C ++.

Aby wyjaśnić nieco więcej, a dla tych, którzy znają VS, chciałbym podobną funkcję jak w przypadku Visual Studio. tzn. umieszczenie kursora na końcu zakresu wyświetla początek zakresu na górze bufora edycji.

Czy ta funkcja już gdzieś istnieje?

log0
źródło
Jestem ciekawa, czy moja odpowiedź pomogła?
Tu Do
@TuDo yes! Właśnie miałem czas, żeby rzucić okiem. Miałem już semantyczny i właśnie włączenie globalnego semantycznego trybu stickyfunc działało dobrze. Dzięki. Mój problem polega na tym, że kolor nie sprawia, że ​​nagłówek jest czytelny.
log0

Odpowiedzi:

14

Jeśli piszesz C / C ++ / Java / Emacs Lisp / Python, tryb semantyczny-lepki-func zrobi to, co chcesz.

UWAGA : Wygląda na to, że działa z CEDET firmy Git, a nie w magazynie CEDET obecnie w Emacsie 24.4. Aby uzyskać Emacsa z Gita:

git clone http://git.code.sf.net/p/cedet/git cedet

I najpierw załaduj CEDET ponad wszystko inne w pliku init:

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

Po włączeniu ten tryb pokazuje, że punkt funkcji znajduje się obecnie w pierwszej linii bieżącego bufora. Jest to przydatne, gdy masz bardzo długą funkcję, która rozciąga się na więcej niż ekran, i nie musisz przewijać w górę, aby odczytać nazwę funkcji, a następnie przewijać w dół do pierwotnej pozycji.

Wyświetla pełny interfejs funkcji (typ zwracany, nazwę i parametry funkcji), a nie tylko nazwę funkcji.

Aby go włączyć, umieść ten kod w pliku init:

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

AKTUALIZACJA : Jednym z problemów z prądem semantic-stickyfunc-modejest to, że nie wyświetla on wszystkich parametrów, które są rozproszone na wielu liniach. Aby rozwiązać ten problem, stworzyłem pakiet stickyfunc-enhancement .

DEMO :

Oto wersja demonstracyjna w C:

semantic-sticky-func-mode-c

Oto demo w Emacs Lisp:

semantic-sticky-func-mode-elisp

AKTUALIZACJA : Alternatywnie możesz użyć steru semantycznego lub imenu . Gdy znajdziesz się w funkcji i uruchomisz polecenie, kursor zostanie umieszczony bezpośrednio na funkcji na liście, dzięki czemu zawsze możesz zobaczyć pełny interfejs funkcji. PRÓBNY:

  • Najpierw używam, helm-semantic-or-imenuaby przejść do funkcji helm-define-key-with-subkeysi przenieść tam punkt.

  • Następnie zaczynam od helm-semantic-or-imenunowa i helm-define-key-with-subkeysjest wstępnie wybrany.

  • Następnie przesuwam punkt do zmiennej ster-mapa i helm-semantic-or-imenuponownie wykonuję dwie funkcje: ster-następne-źródło i ster-poprzednie-źródło. Tym razem zamiast pokazywać bieżący znacznik semantyczny, w którym działam (czyli mapę steru), pokazuje pozostałe dwa znaczniki w buforze sterującym semantycznym. Jest tak, ponieważ podałem argument przedrostka przed uruchomieniem polecenia.

Również to demo jest w Emacs Lisp, działa również dla C / C ++ i jest bardziej elastyczne, jeśli masz naprawdę długi interfejs funkcji.

ster-semantyczny-lub-imenu

Do zrobienia
źródło
Jak udało ci się to zadziałać dla Lisp (w szczególności Elisp)? Sprawdziłem Twój kod, emacs -Qale nie widzę zachowania, które opisujesz podczas przeglądania, np org.el.
itsjeyd
Zaktualizowałem odpowiedź. Powinieneś spróbować z Semantic od bzr.
Tu Do
1
Zupełnie nie na temat. Dziękujemy za zapoznanie mnie z trybem Nyan. Moje kodowanie już nigdy nie będzie takie samo.
purple_arrows
6

Możesz włączyć which-function-mode, robiąc

M-x which-function-mode RET

Aby ustawienie było trwałe, dodaj

(which-function-mode 1)

do twojego pliku init.

Z dokumentacji:

Przełącza wyświetlanie linii w trybie bieżącej funkcji (tryb której funkcji). [...]

Który tryb funkcji jest globalnym trybem podrzędnym. Po włączeniu bieżąca nazwa funkcji jest stale wyświetlana w wierszu trybu , w niektórych głównych trybach.

Uwaga : nazwa tak naprawdę tego nie sugeruje, ale działa to nie tylko dla „funkcji”, ale także dla innych typów zakresów. Na przykład, w org-mode, which-function-modewyświetla nagłówek bieżącego poddrzewa.

itsjeyd
źródło
Dzięki! Podoba mi się nazwa funkcji wyświetlana w wierszu trybu. Niektóre przypadki nie działały jednak zbyt dobrze. Podobnie jak metoda w struct w przestrzeni nazw, wyświetlana była tylko nazwa przestrzeni nazw
log0