Gostaria de exibir a parte inicial de um escopo quando este sair da tela.
Exemplo:
namespace a
{
...
--------------------- <- display frame
... |
}* | * when cursor is here display "namespace a" in the minibuffer
--------------------- or on screen
Isso poderia funcionar para muitas linguagens de programação, mas estou pensando principalmente em C ++.
Para esclarecer um pouco mais e para quem conhece o VS, eu gostaria de um recurso semelhante ao que existe para o Visual Studio. ou seja, posicionar o cursor no final de um escopo exibe o início do escopo na parte superior do buffer de edição.
Esse recurso já existe em algum lugar?
minibuffer
c++
programming
log0
fonte
fonte
Respostas:
Se você estiver escrevendo C / C ++ / Java / Emacs Lisp / Python, o modo semântico-função-pegajosa fará o que você deseja.
NOTA : Isso parece estar funcionando com o CEDET do Git, não com o estoque CEDET atualmente no Emacs 24.4. Para obter o Emacs no Git:
E carregue o CEDET primeiro acima de tudo no seu arquivo init:
Quando ativado, este modo mostra que o ponto de função está atualmente na primeira linha do buffer atual. Isso é útil quando você tem uma função muito longa que se espalha mais que uma tela e não precisa rolar para cima para ler o nome da função e, em seguida, rolar para baixo até a posição original.
Ele exibe a interface completa da função (tipo de retorno, nome da função e parâmetros), não apenas o nome da função.
Para habilitá-lo, coloque este código no seu arquivo init:
ATUALIZAÇÃO : Um dos problemas com a corrente
semantic-stickyfunc-mode
é que ela não exibe todos os parâmetros espalhados em várias linhas. Para resolver esse problema, criei o pacote stickyfunc-enhancer .DEMO :
Aqui está uma demonstração em C:
Aqui está uma demonstração no Emacs Lisp:
ATUALIZAÇÃO : Como alternativa, você pode usar leme-semântico-ou-imenu . Quando você está dentro de uma função e executa o comando, o cursor é colocado diretamente na função da lista, para que você sempre possa ver a interface completa da função. DEMO:
Primeiro, eu uso
helm-semantic-or-imenu
para mover para a funçãohelm-define-key-with-subkeys
e mover o ponto para lá.Então, começo
helm-semantic-or-imenu
novamente ehelm-define-key-with-subkeys
é pré-selecionado.Então, movo o ponto para a variável helm-map e executo
helm-semantic-or-imenu
novamente em duas funções: helm-next-source e helm-previous-source. Desta vez, em vez de mostrar a marca semântica atual em que estou operando (que é o mapa do leme), ela mostra as outras duas marcas no buffer semântico de leme. Isso ocorre porque eu forneci um argumento de prefixo antes de executar o comando.Além disso, esta demonstração está no Emacs Lisp, funciona também com C / C ++ e é mais flexível se você tiver uma interface de função realmente longa.
fonte
emacs -Q
mas não entendo o comportamento que você descreve quando navego, por exemploorg.el
,.Você pode ligar
which-function-mode
fazendoM-x
which-function-mode
RETPara tornar a configuração permanente, adicione
para o seu arquivo init.
A partir da documentação:
Nota : O nome realmente não sugere, mas isso funciona não apenas para "funções", mas também para outros tipos de escopos. Por exemplo, em
org-mode
,which-function-mode
exibe o cabeçalho da subárvore atual.fonte