Gostaria de exibir 3 listas de palavras em linhas separadas horizontalmente ao longo da parte inferior (embora a parte superior também funcione) de todos os quadros do emacs que eu abrir. Eu pensei em 6 maneiras de fazer isso, e todos eles têm problemas:
Meu primeiro pensamento foi adicionar uma linha à minha linha de modo, mas AFAICT você não pode usar o caractere de nova linha em uma linha de modo, apenas é convertido em "^ J".
Meu segundo pensamento foi ter a linha na parte superior da tela e usar a linha de cabeçalho, mas também não suporta o caractere de nova linha.
Eu poderia exibir uma sobreposição nas últimas 3 linhas da janela, mas, para tornar isso robusto, parece difícil - a rolagem precisaria ser acionada quando o ponto atingisse a sobreposição e não o final real da janela, e eu teria que reposicionar constantemente a sobreposição, pois as sobreposições estão no espaço de texto e não na janela.
Eu poderia tentar criar janelas dedicadas na parte inferior do quadro. Eu tentei codificar isso, mas também não é muito robusto, parece não funcionar corretamente quando um quadro já contém janelas divididas e eu tive que religar o Cx, 1 para uma versão personalizada do delete-other-windows que ignora minhas janelas especiais e tenho certeza de que existem outros casos de canto. Além disso, quando uma janela de ajuda se abre agora, ela se abre verticalmente porque acha que já existe uma divisão horizontal (o que tecnicamente existe, mas é apenas para exibir uma janela de uma linha).
Eu poderia ter um quadro dedicado para isso, mas minha configuração não funcionará no modo terminal, e eu teria que criar um script para o meu gerenciador de janelas para mantê-lo na parte inferior da tela, tornando-o não selecionável, sem afetar o layout, etc etc.
Eu poderia inserir o texto para as 3 linhas diretamente no minibuffer. Eu consegui isso parcialmente trabalhando, posso aumentar o minibuffer para acomodar as 3 linhas e posso exibi-las. No entanto, sempre que uma mensagem é repetida, as linhas desaparecem até que eu emita outro comando, no qual elas reaparecem. Idealmente, as 3 linhas e a área de eco não se sobrepunham para que eu pudesse ver as duas. Isso seria menos irritante se eu pudesse filtrar com segurança quais mensagens vão para a área de eco - encontrei uma solução no EmacsWiki, mas ela não parece funcionar para mensagens originadas na fonte C do emacs (especificamente, eu gostaria de receber livrar-me das mensagens de salvamento de arquivos porque eu sempre salvei automaticamente em um timer).
Para contextualizar, meu objetivo é exibir constantemente as palavras mais usadas no buffer atual, as palavras mais próximas do buffer atual e as palavras usadas mais recentemente no buffer atual. Pretendo inseri-los no buffer por meio de comandos de voz. Então, eu poderia dizer "mais próximo de 2" e pedir para ele escolher o segundo item da lista de palavras mais próximo e inseri-lo. Eu só me importo com o fato de as listas de palavras serem visíveis para qualquer buffer que estou editando no momento. Não quero usar as janelas pop-up usadas pelos vários modos de conclusão de código porque preciso das listas sempre visíveis.
Respostas:
Com muita experimentação hacky, consegui obter o número 6 (usando o texto minibuffer) para um estado de funcionamento "bom o suficiente". Aqui está uma captura de tela:
Existem várias partes principais para fazer isso funcionar:
Aqui está um link para minha implementação com um exemplo de cinto exibindo o anel de morte. Eventualmente, isso fará parte de um projeto adequado: https://gist.github.com/jgarvin/ce37d08654978fd7e4c9
Esta é a primeira vez que escrevo qualquer quantidade significativa de elisp, de modo que a qualidade é provavelmente inferior, mas funciona.
fonte
Infelizmente, nem a linha de modo nem a linha de cabeçalho podem ter várias linhas. Eu perguntei sobre isso antes e existe (pelo menos não havia) nenhuma opção oculta para fazer isso funcionar. Então 1 e 2 estão fora. Também sinto que 3 e 6 são hacks que não farão você feliz a longo prazo. 3 e 4 parecem boas abordagens, mas fazê-las funcionar de maneira confiável será um investimento e tanto.
Por isso, recomendo que você o inicie no emacs-devel . Na minha experiência, as coisas serão implementadas eventualmente se você se preocupar em explicar cuidadosamente o que deseja e por que isso é uma coisa boa. Pode levar algum tempo, pelo menos até a próxima versão, mas se você estiver bem esperando um pouco ou usando a versão de desenvolvimento, poderá obter exatamente o que deseja, com muito menos esforço.
fonte