A área de eco fica vazia a maior parte do tempo, o que me faz pensar que eu poderia usá-la para exibir algumas informações. Por exemplo, org-clock
exibe a tarefa atual, o tempo restante e o tempo total decorrido na modelagem. Esta informação não é realmente legível lá (o modeline pode ser bastante curto), é repetido em cada modeline (porque se aplica à sessão emacs inteiros), e não é que útil que eu estou disposto a sacrificar algum espaço modeline precioso para ele . Por outro lado, pode aparecer na área de eco quando não há mais nada para exibir aqui.
Existe uma maneira canônica de conseguir isso? Pensei em invadir uma função de inserção minibuffer-inactive-mode-hook
(mas não funciona de maneira confiável, por exemplo, a mensagem desaparece assim que a área de eco é usada novamente) ou envia mensagens de spam não registradas (mas isso atrapalhará outros usos de a área de eco e o minibuffer).
Uma versão pobre disso usaria temporizadores ociosos, mas a área de eco pode estar vazia sem o emacs ficar ocioso (por exemplo, ao inserir algum texto).
fonte
Respostas:
Um comentário sobre esta pergunta menciona que um pacote chamado symon faz uso desse recurso.
Isso é conseguido enviando spam para mensagens não registradas quando o minibuffer está inativo e interrompendo a exibição novamente toda vez que um comando é emitido. O boilerplate para isso é bastante curto e, após alguns minutos de uso, não percebi nenhum problema com isso: as mensagens e o uso do minibuffer ainda têm prioridade sobre as mensagens.
Os principais componentes são:
message-log-max
set paranil
, para que a string exibida não entre no*Messages*
buffer)pre-command-hook
O único problema é que a exibição é interrompida sempre que um comando está sendo executado, o que inclui ao digitar.
Para os interessados, extraí o código relevante em um pacote padrão disponível no github .
fonte
A resposta, IMO, é não . A área de eco é para mensagens efêmeras . E muitas coisas apagam explicitamente qualquer coisa que possa ter ecoado lá. Portanto, a realização do que você solicita de maneira razoável é problemática, IMO.
Em suma, use uma alternativa. Aqui estão alguns:
Use outro buffer (por exemplo, uma pequena moldura ou janela que você mantenha aberta para esse fim). Simples de fazer, você pode movê-lo, editá-lo, apagá-lo ou fazer o que quiser com ele.
Use parte ou toda a linha de modo (que você já considerou, aparentemente).
Use uma linha de cabeçalho.
Use um título de quadro.
Se fosse eu, provavelmente optaria pelo # 1. (Mas eu realmente não quero / preciso de uma exibição em tempo integral das informações de status. É mais provável que eu defina um comando que me mostre as informações (mesmo um histórico / log) sob demanda).
Atualizado após seus comentários:
Você já disse, na sua pergunta, " a mensagem desaparece assim que a área de eco é usada novamente ". Por isso, parecia usar um espaço efêmero que a área de eco não atenderia às suas necessidades. Suas respostas aos comentários parecem contradizer isso.
Se você realmente deseja usar a área de eco, use
minibuffer-inactive-mode-hook
, como mencionado, ou use um timer para ligarmessage
ou inserir a mensagem de tempo na área de eco de alguma outra maneira. No entanto, você já observou os problemas com isso. Esses problemas (substituição, apagamento) decorrem da natureza efêmera ( pretendida ) da área de eco .Em suma, você deseja usar uma área destinada a mensagens efêmeras, mas não deseja que suas mensagens desapareçam assim que essa área for usada novamente.
(BTW - por favor, mencione que as informações da linha de modo são repetidas em todas as linhas de modo: isso não precisa ser o caso. Você pode tornar a linha de modo específica para um buffer em particular etc. IOW, você pode escolher uma linha de modo para sempre (ou periodicamente) mostre seu relógio ou o que for.)
fonte
org-clock
exemplo da pergunta: Quero que o cronômetro toque para baixo para me lembrar o que devo fazer e que devo fazê-lo agora , como sempre que possível.minibuffer-inactive-mode-hook
e sair do minibuffer, a mensagem será exibida. Então, se algum outro comando imprimir algo na área de eco, essa nova mensagem será adicionada e a mensagem efêmera não retornará (porque o minibuffer não se envolveu dessa vez).message
oupost-command-hook
, se desejar. Mas o problema essencial de desaparecer / substituir, às vezes, eleva sua cabeça, porque você está tentando usar uma área de exibição temporária para algo que não deseja que seja temporário.