Ao trabalhar em um quadro Emacs maximizado, é difícil ver o conteúdo da área minibuffer / eco na parte inferior da tela, mas também causa perda de foco no texto que está sendo editado ao digitar um comando - o que é bastante questão em termos de usabilidade.
Existe uma maneira de mover a área do minibuffer / eco no centro do buffer emacs atual, sobre o texto que está sendo editado quando o minibuffer está ativo ou, melhor ainda, para capturar o conteúdo do minibuffer e exibi-lo também no centro do buffer atual enquanto digita o comando?
minibuffer
Sébastien Le Callonnec
fonte
fonte
Respostas:
Minibuffer pop-up no centro
Aqui está uma maneira de fazer exatamente o que você pediu: exiba o minibuffer no centro da tela .
Isso é relativamente fácil de conseguir e é o que você obterá com o
oneonone.el
pacote (como o @Drew aponta). O problema com essa abordagem é que o minibuffer também é usado para mensagens, portanto, mantê-lo oculto não é algo muito conveniente. Não se preocupe! Eu vim com outra solução.Implementação
Para implementar isso, precisamos criar o quadro minibuffer na inicialização do emacs.
Em seguida, fazemos o patch
read-from-minibuffer
para usar esse segundo minibuffer, em vez do minibuffer do quadro original.Isso pode não funcionar com absolutamente tudo, mas funcionou em tudo o que eu tentei até agora ---
find-file
,ido-switch-buffer
,eval-expression
. Se você fazer encontrar exceções, você pode corrigir estas funções numa base caso-a-caso, chamandouse-popup-minibuffer
sobre eles.Posição Próximo Ponto
Para posicionar esse quadro do minibuffer próximo à altura do ponto, basta definir algo como a seguinte função. Não é perfeito (na verdade, é horrível em muitos casos), mas faz um trabalho decente ao estimar a altura do ponto.
fonte
(setf (symbol-function function) ...)
você, seria melhor usaradvice-add
(ou mais antigoad-add-advice
).Minibuffer no topo
Exibir o minibuffer no meio da tela é complicado. Uma alternativa razoável (que você pode ou não achar mais legível) é movê-la para o topo.
Você pode configurar a localização (ou existência) do minibuffer de um quadro com o
minibuffer
parâmetro de quadro nainitial-frame-alist
variávelQuadro separado
Definir o parâmetro para
nil
configurará o quadro para não possuir minibuffer e o Emacs criará automaticamente um quadro separado para ele. Você pode posicionar esses dois quadros usando o gerenciador de janelas do seu sistema operacional ou pode fazê-lo no Emacs.O snippet a seguir explica como colocar o quadro do minibuffer no topo, com o quadro regular logo abaixo, mas você definitivamente precisará alterar os números para explicar o tamanho do monitor.
A maneira mais rápida de ajustar isso é redimensionar os quadros no seu gerenciador de janelas e depois avaliar
(frame-parameters)
para ver os valores dos parâmetros que você possui.Mesmo quadro
Outra possibilidade é definir o
minibuffer
parâmetro para uma janela. Infelizmente, não consegui fazer isso funcionar para uma janela no mesmo quadro.fonte
A Biblioteca
oneonone.el
fornece isso imediatamente.Basta personalizar a opção
1on1-minibuffer-frame-top/bottom
para a posição desejada para o quadro de minibffer independente. O valor é o número de pixels da parte superior (se não negativa) ou da parte inferior (se negativa) da sua exibição. Por exemplo, defina o valor para sua altura de exibição dividido por 2, para centralizá-lo verticalmente.Se você deseja que ele seja posicionado dinamicamente, digamos, no centro vertical do quadro atual, você pode fazer isso (a) deixando
1on1-minibuffer-frame-top/bottom
=nil
e (b) aconselhando a função1on1-set-minibuffer-frame-top/bottom
a vincular dinamicamente essa variável à posição apropriada. Por exemplo:(Defina a função
my-dynamic-position
para calcular a posição desejada, com base nos critérios desejados (tamanho e posição atual da janela / estrutura, fase da lua, ...).fonte