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?


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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.