Às vezes, quero exibir informações no estilo de buffer da Ajuda, portanto, tenho usado códigos como este:
(with-help-window (help-buffer)
(princ "Type q to exit this help buffer.\n\n")
(princ result))
Isso funciona bem, mas a janela de ajuda usa apenas metade do meu quadro. Normalmente, divido minha moldura horizontalmente, para dar duas janelas altas. O buffer de ajuda exibido usa uma das duas janelas.
Prefiro usar o quadro inteiro em alguns casos, para exibir mais informações e reduzir o número de vezes que preciso percorrer as informações exibidas. O problema a ser resolvido é como usar temporariamente o quadro inteiro para a with-help-window
chamada e restaurar automaticamente os tamanhos dos buffers / janelas originais quando digito "q" na janela de ajuda.
Como posso alcançar melhor esse objetivo? Acho que estou procurando algo assim:
(with-FULL-FRAME-help-window (help-buffer)
...)
Examinei o modo vencedor, marcadores, salvando layouts em registros, os vários (display-buffer ...)
métodos (e poderosos, mas complexos) . A maioria deles parece um pouco fora do alvo para minha intenção desejada, porque eles tendem a corrigir / restaurar um layout após uma operação de exibição de quadro completo. E parece-me que muitos deles exigem que eu restaure manualmente meu layout de janela (o que eu preferiria não fazer).
Gostaria de saber se alguém já ouviu falar de uma maneira de resolver isso simplesmente. Espero algo simples como essas possíveis abordagens, onde eu possa substituir algo com um quadro let ...
(let ((help-window-width-display-option fullwidth))
(with-help-window (help-buffer)
...))
Ou esse tipo de abordagem, que ainda não sei fazer, e que parece um pouco difícil / complicado para o meu nível de habilidade atual.
(let ((save original configuration somehow)
(delete-other-windows)
(with-help-window (help-buffer)
...)
;; somehow, when I type "q" in the help buffer
;; - catch that action in code after the buffer is killed
;; - and restore the original window configuration
)
Parece-me que o principal problema para resolver é como restaurar automaticamente a configuração original da janela quando digito "q" no buffer temporário do modo de ajuda. obrigado
display-buffer-pop-up-frame
: gnu.org/software/emacs/manual/html_node/elisp/… Outra idéia seria emitir ummake-frame
tempo usandodisplay-buffer
uma função personalizada para atingir esse novo quadro. Se você estiver interessado em localizar e direcionar um quadro existente, dê uma olhada neste exemplo: stackoverflow.com/questions/18346785/…display-buffer-pop-up-frame
, pois é bem próximo do que procuro. Mas ... o quadro aparece em outro lugar (não o meu quadro atual), e devo enviá-lo com cmd-w, não "q" no estilo de ajuda. Salvar / restaurar configurações de janela não é o problema subjacente. Atualmente, estou inclinado a clonar e modificar a fonte do with-help-window para oferecer uma opção que eu possa deixar vincular ou encerrar com um defmacro ou algo assim. Eu sorrio para o quão exigente nós emacs as pessoas estão querendo exatamente o que queremos do Emacs.help-return-method
,quit-window
oquit-restore
parâmetro janela, e provavelmente algum código personalizado para definir / usar todas essas coisas para criar o efeito desejado.Respostas:
Exemplo # 1 : O atalho de teclado
q
nohelp-mode
buffer vem dospecial-mode-map
que é incorporado aohelp-mode-map
. O valor padrão équit-window
, que oferece apenas quatro (4) ações possíveis: " De acordo com as informações armazenadas noquit-restore
parâmetro da janela do WINDOW (1) exclua o WINDOW e seu quadro, (2) exclua o WINDOW, (3) restaure o buffer exibido anteriormente no WINDOW ou (4) faça com que o WINDOW exiba outro buffer que não o atual. Se não for nulo, redefina oquit-restore
parâmetro para nulo. "[Consulte a string de documentos:M-x describe-function RET quit-window RET
]Aqui está um resumo do que este exemplo faz:
Deixe vincular a variável
help-window-select
parat
que a*Help*
janela seja selecionada.Deixe-vincular a configuração atual da janela a uma variável temporária chamada
config
.Gere a
*Help*
janela.Armazene a configuração da janela anterior -
config
- em uma variável local chamadamy-stored-win-config
.Crie uma atribuição de chave local para a letra à
q
qual está vinculadamy-restore-win-config
. [Esta tarefa local supera / oculta a tarefa anterior dequit-window
.]Exclua outras janelas.
Pressione a letra
q
para restaurar a configuração anterior da janela e interrompa o*Help*
buffer.O fragmento a seguir é um exemplo de uso, mas não é uma função interativa completa. Pode ser avaliado no
*scratch*
buffer para vê-lo em ação.Exemplo 2 :
Aqui está uma macro independente que faz tudo como o exemplo acima, que lida com três situações possíveis relacionadas aos valores de gancho existentes - por exemplo
nil
, símbolo ou lista de símbolos.E aqui está o trecho de amostra para avaliar no
*scratch*
buffer.fonte
my-help-quit
função enquanto tentava religar a chave do mapa de ajuda dentro dewith-help-window
. Mas não estava funcionando. Agora vejo que você vincula a chave dentro do buffer da Ajuda (não da janela da Ajuda como eu estava fazendo) após a instalação do buffer. Eu acho que minha ligação foi derrotada pela configuração do buffer. Uma lição aprendida. Tudo está funcionando agora. Muito Obrigado.*Help*
buffer antes que ele termine - otemp-buffer-window-setup-hook
que é executadohelp-mode-setup
e, em seguida, qualquer outra coisa já / previamente atribuída ao gancho; e, em seguida, otemp-buffer-window-show-hook
que é executadohelp-mode-finish
e qualquer coisa já atribuída anteriormente ao gancho.help-mode-setup
deve permanecer primeiro, mas você pode adicionar algo por trás disso vinculando qualquer um desses ganchos acima mencionados com itens personalizados. Nesse cenário, você não precisariawith-current-buffer
.help-mode-setup
ehelp-mode-finish
, mas ambos correram antes que o buffer fosse exibido. O principal problema foi redirecionar a combinação de teclas "q" e você me mostrou como fazer isso no buffer (não na janela, o que eu estava tentando fazer). PS. Tentei escrever uma solução como(defmacro with-full-frame-help-window
, mas a macro ainda requer uma função separada para lidar com a ação de restauração "q" e janela. Vou postar minhas funções concluídas abaixo.... (kill-buffer (current-buffer))))))
. A macro tomou um nome de buffer como argumento e eliminou " Help ", para que houvesse um problema se o chamador usasse um buffer cujo nome fosse diferente.buffer-name
Modifiquei minha macro para remover o parâmetro e gerou / eliminou o mesmo buffer dentro do defmacro.Com base na excelente resposta do @lawlist, aqui estão minhas funções completas para o próximo cara ...
A longa cadeia de comentários acima, com a ajuda contínua do @lawlist, resultou nesta versão de uma macro que não requer um nome de buffer, trata adequadamente a instalação original / mostra as listas de ganchos e não causa problemas com o "q "em outros buffers do modo Ajuda .
Use a macro desta maneira:
fonte