Visualizza l'inizio di un ambito quando è fuori dallo schermo


12

Vorrei visualizzare la parte iniziale di un ambito quando questo esce dallo schermo.

Esempio:

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

Questo potrebbe funzionare per molti linguaggi di programmazione, ma sto pensando principalmente al C ++.

Per chiarire un po 'di più e per coloro che conoscono VS, vorrei una funzionalità simile a quella esistente per Visual Studio. ovvero posizionando il cursore alla fine di un ambito, visualizzare l'inizio dell'ambito nella parte superiore del buffer di modifica.

Questa funzione esiste già da qualche parte?


Sono curioso, la mia risposta mi è stata d'aiuto?
Ma Do,

@TuDo si! Ho appena avuto il tempo di dare un'occhiata. Avevo già semantico e solo l'attivazione della modalità global-semantic-stickyfunc ha funzionato bene. Grazie. Il mio problema ora è che il colore non rende leggibile l'intestazione ..
log0

Risposte:


14

Se stai scrivendo C / C ++ / Java / Emacs Lisp / Python, allora la modalità semantica-sticky-func farà quello che vuoi.

NOTA : sembra funzionare con CEDET di Git, non con CEDET attualmente disponibile in Emacs 24.4. Per ottenere Emacs da Git:

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

E carica prima CEDET sopra ogni altra cosa nel tuo file 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"))

Quando abilitato, questa modalità mostra che il punto funzione è attualmente nella prima riga del buffer corrente. Ciò è utile quando si dispone di una funzione molto lunga che si estende su più di uno schermo e non è necessario scorrere verso l'alto per leggere il nome della funzione e quindi scorrere verso il basso fino alla posizione originale.

Visualizza l' interfaccia completa delle funzioni (tipo di ritorno, nome della funzione e parametri), non solo il nome della funzione.

Per abilitarlo, inserisci questo codice nel tuo file init:

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

AGGIORNAMENTO : Uno dei problemi con corrente semantic-stickyfunc-modeè che non visualizza tutti i parametri che sono sparsi su più righe. Per risolvere questo problema, ho creato il pacchetto stickyfunc-boost .

DEMO :

Ecco una demo in C:

semantico-appiccicoso-func-mode-c

Ecco una demo in Emacs Lisp:

semantico-appiccicoso-func-mode-elisp

AGGIORNAMENTO : in alternativa, puoi usare helm-semantic-or-imenu . Quando ci si trova all'interno di una funzione ed si esegue il comando, il cursore si trova proprio sulla funzione nell'elenco, in modo da poter sempre vedere l'interfaccia completa della funzione. DEMO:

  • In primo luogo, utilizzo helm-semantic-or-imenuper passare alla funzione helm-define-key-with-subkeyse spostare il punto lì.

  • Quindi, ricomincio helm-semantic-or-imenued helm-define-key-with-subkeysè preselezionato.

  • Quindi, sposto il punto sulla variabile helm-map ed eseguo helm-semantic-or-imenunuovamente su due funzioni: helm-next-source e helm-precedente-source. Questa volta, invece di mostrare l'attuale tag semantico in cui opero (che è helm-map), mostra gli altri due tag nel buffer semantico di Helm. Questo perché ho fornito un argomento prefisso prima di eseguire il comando.

Anche questa demo è in Emacs Lisp, funziona anche con C / C ++ ed è più flessibile se hai un'interfaccia con funzioni davvero lunghe.

timone-semantico-o-imenu


Come hai fatto a farlo funzionare per Lisp (Elisp in particolare)? Ho valutato il tuo codice emacs -Qma non ottengo il comportamento che descrivi quando sfoglio, ad es org.el.
giovedì

Ho aggiornato la risposta. Dovresti provarlo con Semantic di bzr.
Tu Do,

1
Totalmente fuori tema. Grazie per avermi introdotto alla modalità Nyan. La mia codifica non sarà più la stessa.
purple_arrows,

6

Puoi accenderlo which-function-modefacendo

M-x which-function-mode RET

Per rendere permanente l'impostazione, aggiungere

(which-function-mode 1)

al tuo file init.

Dalla documentazione:

Attiva / disattiva la visualizzazione della riga della modalità corrente (modalità Quale funzione). [...]

Quale modalità di funzione è una modalità secondaria globale. Se abilitato, il nome della funzione corrente viene continuamente visualizzato nella riga della modalità , in alcune modalità principali.

Nota : il nome non lo suggerisce, ma funziona non solo per "funzioni", ma anche per altri tipi di ambiti. Ad esempio, in org-mode, which-function-modevisualizza l'intestazione della sottostruttura corrente.


Grazie! Mi piace il nome della funzione visualizzato nella riga della modalità. Alcuni casi non funzionavano molto bene però. Come il metodo in una struttura in uno spazio dei nomi, veniva visualizzato solo il nome dello spazio dei nomi
log0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.