Almanaque de gerenciamento de janelas no Emacs
(karthinks.com)- O gerenciamento de janelas do Emacs fica sobre uma estrutura flexível em que buffers e janelas são separados, mas com operações básicas um tanto desajeitadas, então o usuário precisa combinar ferramentas e hábitos para montar seu fluxo de trabalho
- O foco do texto não está em regras de
display-buffernem em workspaces baseados em abas, mas em operações manuais dentro de um único frame do Emacs, lidando com movimento de foco, posicionamento de buffers, divisão e remoção de janelas, e tarefas temporárias other-window,windmove,winum,ace-window, o mouse,transpose-frame,window-prefix-map,other-window-prefixewinner-modedividem entre si a navegação cíclica, navegação por direção, seleção por número, seleção por dicas, transformação de layout e restauração- Com
ace-windowe Avy, dá para escolher uma janela específica e então executar um comando, ou pular direto para uma posição no texto, reduzindo a própria necessidade de trocar de janela - O gerenciamento de janelas no Emacs é menos um sistema fixo e complexo e mais um problema em aberto;
display-buffer-alist, Popper e Popwin, manipulação da árvore de janelas e integração com tiling WM são poderosos, mas também têm custo de configuração e várias lacunas
O que o Emacs chama de gerenciamento de janelas
- A janela(window) no Emacs é o viewport ou painel dentro de um frame, e o buffer(buffer) é um bloco contínuo de texto que pode ou não ser o conteúdo de um arquivo
- Muitos IDEs e editores praticamente fundem os conceitos de janela e buffer para reduzir a carga cognitiva, mas o Emacs separa os dois para permitir layouts mais flexíveis
- Ver o mesmo arquivo duas vezes é simples
- Buffers que não correspondem diretamente a arquivos também podem ser tratados de forma natural
- Os indirect buffers do Emacs são quase uma cópia “ao vivo” do buffer inteiro
- Essa estrutura separada cobra um preço dos novos usuários
- É preciso colocar as janelas no lugar desejado dentro do frame
- É preciso colocar o buffer desejado na janela desejada
- No começo, a carga operacional aparece antes das vantagens trazidas por essa separação
O que este texto não cobre
- As regras automáticas de exibição de buffers para controlar completamente o
display-buffernão são o tema principal- A API de
display-bufferexige conhecimento detalhado de coisas comowindow-parameters, slots e janelas dedicadas - Como material relacionado, é possível consultar o texto de Mickey Peterson, o vídeo de Protesilaos Stavrou e o manual de Emacs Lisp
- A API de
- Abas, workspaces, isolamento de buffers e persistência de sessão também ficam fora do escopo principal
- Ferramentas relacionadas incluem tab-bar, tabspaces, eyebrowse, tab-bookmark, desktop.el, persp-mode.el, perspective, project-tab-groups, beframe e activities.el
- Alternativas radicais que fazem o Emacs se comportar como um gerenciador de janelas separado também ficam fora do corpo principal
- O foco real está em operações manuais do dia a dia
- Troca de foco entre janelas
- Movimentação de buffers entre janelas
- Divisão e remoção de janelas
- Controle da janela de destino durante a execução de comandos
Navegação básica: other-window e a “próxima janela”
other-windowé o comando básico de troca de janela ensinado no tutorial do Emacs, com atalho padrãoC-x o- A ordem de seleção normalmente circula no sentido horário dentro do frame
- Quando há poucas janelas, é simples e suficiente
- Conforme o número de janelas cresce, pode ser necessário chamá-lo várias vezes até chegar ao lugar desejado
- Há também formas práticas de ajustar isso
- Dá para associá-lo a uma tecla mais fácil de pressionar, como
M-o - É possível pular várias posições ou mover-se no sentido inverso usando um argumento numérico
- Se
repeat-modeestiver ativado, dá para repetir a entrada como emC-x o o o...ouM-o o o...
- Dá para associá-lo a uma tecla mais fácil de pressionar, como
- Se o parâmetro de janela
no-other-windowestiver definido,other-windowignora aquela janela específica- É por isso que janelas laterais de gerenciadores de arquivos como
dired-sidebaroudirvish-sideficam fora do alvo deother-window
- É por isso que janelas laterais de gerenciadores de arquivos como
- A ideia de “próxima janela” também é o alvo padrão de comandos que atuam sobre outra janela, como
scroll-other-window
Navegação por direção: windmove
windmoveé uma biblioteca embutida para mover o foco entre janelas com base em direção- É mais próxima da navegação para esquerda, direita, cima e baixo que usuários de Vim esperam
- Usuários de
evil-modetambém usam Windmove internamente
windmove-left,windmove-right,windmove-upewindmove-downpodem ser associados aWASD,HJKL, setas ou outras teclas- Os comandos
windmove-swap-states-left/right/up/downtrocam os buffers das janelas com base em direção- Nesse caso, o foco se move junto com o buffer
- Também é possível apagar janelas numa direção específica com a família
windmove-delete-*, mas o texto trata de outros métodos mais adiante - Em ambientes com tiling WM, é possível integrar as teclas para navegar tanto entre janelas internas do Emacs quanto entre janelas do sistema operacional
- Há um exemplo de integração Emacs+i3wm em i3 integration
- Um exemplo de configuração para qtile pode ser visto em emacs-wm.el
Deixar as janelas do Emacs por conta das janelas do sistema operacional
- frames-only-mode faz com que todos os buffers sejam abertos em novos frames, em vez de janelas do Emacs, para que o gerenciador de janelas do sistema operacional cuide deles
- Essa abordagem coloca os buffers do Emacs no mesmo nível das janelas do sistema operacional, permitindo gerenciar ambos com as mesmas teclas
- Ferramentas como Avy,
winum,ace-windowescroll-other-windowpodem se aplicar não só a janelas, mas também a frames inteiros - Alguns comandos do Emacs presumem que podem dividir frames livremente, então podem surgir casos excepcionais
- Isso tende a acontecer especialmente com comandos do org-mode
- Não há experiência relatada com o uso de
frames-only-modeem compositores Wayland
Seleção imediata com números e dicas
- winum exibe números das janelas na mode line e permite selecioná-las por número
- Se
other-windowé algo próximo de O(n) ewindmovedepende da disposição espacial, owinumoferece um acesso mais próximo de O(1) quando você sabe o número - Se o comando de seleção for chamado com um argumento prefixado negativo, a janela correspondente é excluída
- Quando o minibuffer está ativo, ele sempre recebe o número 0
- Funciona entre frames do Emacs
- Se
- Como a tecla padrão
C-x w <n>pode ser longa, há exemplos de configuração que usamM-0atéM-9para selecionar janelas - ace-window é tratado como uma ferramenta poderosa para controle de janelas no Emacs via teclado
- Exibe dicas sobre cada janela, e você a seleciona pressionando a tecla correspondente
- Se
ace-window-display-modeestiver ativado, as dicas podem ficar sempre visíveis na mode line, como no winum - Pressionar
?abre o menu de dispatch
- O ponto forte do
ace-windownão está só na seleção simples, mas em escolher uma janela e então executar uma ação- Excluir janela
- Mover e trocar janelas
- Dividir janelas
- Exibir um buffer específico
- Aplicar uma ação a outra janela sem sair da janela selecionada
Mouse e transformação de layout
- No Emacs, o mouse se encaixa naturalmente para selecionar janelas, redimensioná-las, abrir menus de contexto e usar arrastar e soltar
context-menu-modee a barra de menus aumentam a descoberta de recursos
- Se suas mãos já saíram do teclado, operar o Emacs com o mouse pode ser o caminho com menos atrito
- Também há operações possíveis com gestos do mouse
- Divisão vertical e horizontal do frame
- Excluir janela
- Alternar entre buffers dentro da janela
- Trocar janelas para a direita ou esquerda
- Alternar entre os dois últimos buffers em uma janela
- Configurando
mouse-autoselect-window, é possível ativar o comportamento focus-follows-mouse - transpose-frame fornece comandos para rotacionar ou inverter o layout de janelas do frame
rotate-frame,flip-frameeflop-framesão citados como comandos especialmente úteis- O próprio
transpose-frameé avaliado como pouco útil na prática, por fazer uma transposição pela diagonal principal
window-prefix-map e a árvore de janelas
window-prefix-mapé um conjunto de comandos de gerenciamento de janelas vinculado à tecla padrãoC-x wdo Emacssplit-root-window-rightesplit-root-window-belowdividem a janela raiz do frame- Eles estão vinculados a
C-x w 3eC-x w 2, respectivamente - Ao contrário dos comandos de divisão normais, que fragmentam ainda mais a janela atual, eles são úteis para criar um espaço de trabalho separado
- Eles estão vinculados a
- As janelas no Emacs são organizadas em uma estrutura de árvore
- Janelas reais são nós folha
- Uma divisão transforma uma folha em nó pai de duas janelas
- Isso lembra o arranjo de gerenciadores de janelas com tiling manual, como i3 ou bspwm
tab-window-detachetear-off-windowmovem a janela atual para uma nova aba ou um novo frame- As teclas padrão
C-x w ^ teC-x w ^ fsão consideradas longas - Elas podem ser substituídas por ações de dispatch do
ace-windowou por bindings do mouse
- As teclas padrão
other-window-prefix: mudar onde o próximo comando vai exibir
other-window-prefixé um comando embutido vinculado aC-x 4 4, que faz o buffer exibido pelo próximo comando aparecer na próxima janela- Esse comando separa comandos que exibem buffers, como abrir arquivos, trocar de buffer ou saltar para bookmarks, da escolha da janela de destino
- Reduz a necessidade de decorar toda vez famílias de comandos como
find-file-other-window,find-file-other-tabefind-file-other-frame - Você pode apenas adicionar o prefixo antes de comandos básicos como
find-file,find-file-read-onlyouswitch-to-bufferpara mudar só o local de exibição
- Reduz a necessidade de decorar toda vez famílias de comandos como
- No exemplo com Forge, ele evita que a janela atual seja sobrescrita ao pressionar
RETna lista de issues usandoother-window-prefix - Também oferece um comportamento uniforme quando cada pacote tem sua própria forma de “abrir em outra janela”, como em Magit, Org mode, Notmuch, Elfeed e EWW
- Há prefixos relacionados também
same-window-prefixforça o buffer do próximo comando a aparecer na janela atualother-frame-prefixfaz abrir em um novo frameother-tab-prefixfaz abrir em uma nova aba
Salvar e restaurar configurações de janelas
window-configuration-to-registeré o comando embutido para salvar a configuração atual das janelas em um registrador, e sua tecla padrão éC-x r wjump-to-registerrestaura a configuração salva, e sua tecla padrão éC-x r j- No nível de Elisp, é possível guardar o resultado de
current-window-configurationem uma variável e aplicá-lo comset-window-configuration- Salvar isso em disco com algo como
prin1,persistoumultisessionpode ser o começo de um recurso de restauração entre sessões - Ainda assim, o fato de a posição do cursor em cada janela também ser restaurada pode ser um comportamento normalmente indesejado
- Salvar isso em disco com algo como
- Também existem opções “oops” que acumulam automaticamente configurações passadas
winner-mode: quando não se usam abas,winner-undoewinner-redopermitem desfazer ou refazer mudanças na configuração das janelastab-bar-history-mode: fornece uma pilha de histórico separada para cada abaundelete-frame-modeetab-undo: recuperam frames ou abas fechados por engano
- Usar
winner-undocomo forma de consertar toda vez que o Emacs exibe um buffer no lugar errado é mais uma gambiarra temporária- O problema de fundo é que as regras de exibição de buffers não estão configuradas como você quer
Otimizando para duas janelas entre as quais você alterna com frequência
- No trabalho real, mesmo com várias janelas na tela, na maior parte do tempo você alterna com frequência entre duas janelas
- Código & REPL
- Código & Grep
- Prosa & Notas
- Lista & Item
- As outras janelas podem ser áreas de referência que você consulta com frequência, mas quase nunca alterna para elas, como documentação, informações de depuração, logs, saída de comandos, sumário, explorador de arquivos ou pré-visualização
- Há um exemplo de
other-window-mruque usaget-mru-windowpara alternar para a janela usada mais recentemente- Não importa como a segunda janela foi escolhida — mouse,
ace-window,winumou outro método — depois disso fica fácil alternar rapidamente entre as duas
- Não importa como a segunda janela foi escolhida — mouse,
- Também há formas de melhorar o próprio
other-window- Fazer com que ele divida automaticamente quando só houver uma janela
- Circular em ordem de uso recente, como em switchy-window
- Inverter a direção sempre que a chamada não for consecutiva, como em
other-window-alternating, para tornar natural a ida e volta entre duas janelas
Expandindo o ace-window com base em execução de comandos
ace-windowpermite usar separadamente só a etapa de seleção de uma janela específica por meio deaw-select- Se você executar a ação desejada sobre a janela retornada por
aw-select, pode criar o padrão “selecionar janela → executar ação → manter a janela original” - Os comandos de exemplo são os seguintes
ace-tear-off-window: destaca em um novo frame a janela escolhida comace-windowace-tab-window-detach: move a janela escolhida para uma nova aba
ace-window-one-commandexecuta um único comando arbitrário na janela selecionada- Primeiro, escolhe-se a janela com
ace-window - Depois, a sequência de teclas é lida e o comando correspondente é executado
- Assim, é possível aplicar uma ação em outra janela sem mudar a janela originalmente selecionada
- Primeiro, escolhe-se a janela com
ace-window-prefixfunciona como uma versão mais direta deother-window-prefix- Você escolhe diretamente com
ace-windowa janela de destino do buffer que o próximo comando vai exibir - Se necessário, é possível criar uma nova janela na hora com uma ação do
ace-windowe exibir o buffer ali - O binding de tecla sugerido é
C-x 4 o
- Você escolhe diretamente com
É mesmo necessário alternar de janela?
- O objetivo de alternar de janela se divide, em grande parte, em dois casos
- Switch and stay: continuar editando ou trabalhando na janela de destino
- Switch and return: fazer rapidamente algo como rolar, pesquisar, copiar ou apagar, e voltar à posição original
- No primeiro caso, o Avy pode unir a alternância de janela e o movimento do cursor em uma coisa só
avy-goto-char-timertrata várias janelas e frames visíveis do Emacs como um único conjunto de candidatos para salto- Ao saltar para uma determinada string ou posição de caractere, a janela também muda automaticamente
- Se o Avy não atravessar janelas e frames, é preciso verificar a configuração
avy-all-windows
pop-global-marké um meio de voltar à posição anterior e, se necessário, a alternância de janela também pode acontecer junto- Por padrão, ele troca o buffer na janela atual, então existe um advice para fazer com que use
pop-to-buffer
- Por padrão, ele troca o buffer na janela atual, então existe um advice para fazer com que use
- No segundo caso, o fluxo “alternar → agir → voltar” pode ser encapsulado em um comando e automatizado
ace-window-one-commandé uma forma genérica de fazer isso- Ações específicas podem virar comandos ou macros dedicados
Rolagem, busca e troca de buffer em outra janela
scroll-other-windowescroll-other-window-downrolam outra janela sem sair da janela atual- O alvo padrão é a “próxima janela” no sentido horário a partir da janela atual
- Se houver três ou mais janelas, pode acabar rolando uma janela diferente da janela de referência esperada
- É possível mudar a regra de escolha do alvo de rolagem configurando
other-window-scroll-default- Com
get-lru-window, a rolagem acontece na janela usada há menos tempo - Com
get-mru-window, é possível usar como alvo a janela usada mais recentemente
- Com
- Se
other-window-scroll-bufferfor definido, a janela que exibe um buffer específico pode ser escolhida como alvo da rolagem- Em geral, isso é tratado como uma opção mais útil para autores de pacotes
- O exemplo de
isearch-other-windowinicia uma busca na janela alvo da rolagem e, ao terminar a busca, volta para a janela original- Há um exemplo de uso conjunto com buffers de shell e Man
next-buffer,previous-buffereswitch-to-buffertambém podem ser estendidos para rodar em outra janela combinando argumento de prefixo comother-window-for-scrolling- Se você criar um keymap para
repeat-mode, dá para circular ou selecionar em sequência os buffers de outra janela comn,peb
- Se você criar um keymap para
master-mode, scroll-all-mode, with-other-window
master-modedefine o buffer atual como “master” e outro buffer como “slave”, permitindo enviar ações ao buffer slave sem sair da posição atual- No geral, ele é avaliado como uma alternativa menos transparente do que a abordagem com
other-window-scroll-defaultdescrita acima - Com
master-says, é possível criar teclas que executem ações arbitrárias, comorecenter, no buffer slave
- No geral, ele é avaliado como uma alternativa menos transparente do que a abordagem com
scroll-all-modevincula o comportamento de rolagem de todas as janelas do frame- Isso é útil quando você quer visualizar várias janelas de forma sincronizada
- A macro
with-other-windowé um helper de Elisp que executa o código do corpo na janela escolhida porother-window-for-scrolling- Ela permite criar facilmente comandos como
isearch-other-windoweisearch-other-window-backwards - Funciona como o equivalente em Elisp do interativo
ace-window-one-command
- Ela permite criar facilmente comandos como
Estratégias para reduzir o número de janelas
- A UI de editores modernos em geral converge para uma janela principal, uma barra de abas no topo, uma barra lateral à esquerda com diretórios ou sumário, um painel opcional à direita e um terminal embaixo
- Também é possível montar esse tipo de layout no Emacs, mas há a alternativa de concentrar a tela em um único buffer e substituir a troca de janela por troca de buffer
- Se você se limitar a no máximo duas janelas, ainda dá para manter a maior parte da simplicidade e usar a segunda janela como material de referência ao vivo
- A configuração padrão do Emacs oferece um suporte bastante bom para esse padrão por meio de comandos como
scroll-other-window
- A configuração padrão do Emacs oferece um suporte bastante bom para esse padrão por meio de comandos como
- Também existe a estratégia de tratar as janelas apenas como contêineres de texto e ignorá-las
- Saltar diretamente para posições de texto na tela com o Avy
- Refazer o caminho por posições anteriores com
mark-ringeglobal-mark-ring - dogears pode oferecer uma UI de rastreamento mais detalhada
- Para fixar posições manualmente, você pode usar
point-to-registerejump-to-register; para um registro mais permanente,bookmark-setebookmark-jump
Regras de exibição automática e gerenciamento de pop-ups
display-buffer-alisté a variável que decide como exibir um buffer ao casar buffers e regras quando código Elisp tenta mostrá-lo- Em teoria, grande parte do gerenciamento de janelas pode ser resolvida se você criar regras de tamanho, posição, papel e foco para cada tipo de buffer que vê no dia a dia
- O problema é o custo de configuração
- Predicados de buffer e de modo
- Tipos de janela e slots
- Funções de ação de
display-buffer - Parâmetros de janela
- Não é fácil expressar de forma simples intenções como “não mexa no meu layout de janelas”
- Também há ferramentas auxiliares
- Shackle esconde a complexidade de
display-buffer-aliste fornece uma interface Elisp mais simples - O Doom Emacs oferece comandos de conveniência como
set-popup-rule!
- Shackle esconde a complexidade de
- Popwin e Popper partem da observação de que nem todos os buffers são iguais
- Eles distinguem entre buffers principais de trabalho e buffers temporários de pop-up
- Documentação, shell, estado de tarefas, resultados de compilação, resultados de busca e mensagens podem aparecer em pequenas janelas auxiliares e ser fechados ou percorridos com facilidade
- O Popper foca em subir e descer buffers de pop-up definidos com uma única tecla
- O Popwin é uma implementação mais antiga e abrangente, mas também empacota sua própria configuração de
display-buffer - Se você só quer abrir e fechar o shell rapidamente, shell-pop ou vterm-toggle podem ser suficientes
A peça que falta: manipulação da árvore de janelas
- O Emacs representa as janelas dentro de um frame como uma árvore, mas a maioria dos comandos de usuário opera olhando apenas para a posição espacial, não para a estrutura da árvore
- Por causa desse descompasso, ao dividir ou apagar janelas o comportamento pode sair diferente do esperado, ou podem surgir limitações na estrutura de divisões que é possível criar
- Se existisse um pacote hipotético como
window-tree, seria possível manipular nós internos diretamente- Dividir, transpor ou espelhar apenas parte de um frame
- Selecionar várias janelas como uma subconfiguração
- Enviar a parte selecionada para uma aba ou frame
- Duplicar ou salvar subconfigurações
- Proteger um branch específico da árvore contra comandos da família
display-buffer
- Já existem elementos de Elisp relacionados
window-treeretorna a própria árvoreframe-root-windowretorna a raiz- Há
window-parent,window-childewindow-*-sibling walk-window-treeewalk-windowspermitem percorrê-la
- As lacunas também são claras
- Fora split/delete em geral, não há funções básicas para transformar a árvore
- Não existe o conceito de selecionar janelas internas, então isso teria de ser simulado pela UI
A peça que faltava: integração com WM tiling
- O modelo de árvore de janelas do Emacs é muito parecido com gerenciadores de janelas tiling manuais como i3 e bspwm
- Se você usa Emacs dentro de i3, bspwm ou tmux, é natural querer navegar entre janelas internas e externas do Emacs com os mesmos atalhos de teclado
- Exemplos existentes incluem o i3-integration de Pavel Korytov e o emacs-wm.el para qtile
- Uma interface de integração mais limpa precisa dos seguintes elementos
- O gerenciador de janelas deve identificar a classe da janela ativa e fornecer movimentação e manipulação de janelas de forma programática
- O método de comunicação pode ser por comandos shell, sockets, IPC baseado em servidor, D-Bus no Linux etc.
- No lado do Emacs, é necessária uma interface independente do método de comunicação que imite manipulações no estilo de gerenciador de janelas
- Ao alternar entre janelas do sistema operacional, verifica-se se a janela ativa é o Emacs e, se necessário, o Emacs processa a operação dentro do frame interno
Conclusão
- O gerenciamento de janelas no Emacs oferece opções em várias camadas, de
other-windowaace-window, Avy, Popper edisplay-buffer-alist - Não é necessário usar todos os métodos; como há muitos meios alternativos para resolver o mesmo problema, você pode escolher um e ignorar o restante
- As ferramentas nativas básicas provavelmente serão mantidas por muito tempo, mas o estado de pacotes de terceiros pode variar conforme desenvolvimento, abandono ou orfandade
- O gerenciamento de janelas do Emacs está mais próximo de uma estrutura aberta que fornece ingredientes e receitas do que de um sistema fixo e complexo
- Mesmo com pouca configuração já dá para ter a refeição básica, e com algumas combinações e ajustes em Elisp é possível criar um fluxo de trabalho muito mais personalizado
1 comentários
Opiniões no Hacker News
O texto é bom, e as explicações e diretrizes também são excelentes. Às vezes, janelas divididas igualmente não bastam; por isso coloquei a função abaixo no
init.ele a vinculei aC-x 7para ajustar a janela atual e a janela pareada verticalmente em 70%/30%A direção horizontal também é tratada da mesma forma com um atalho em
C-x 8(defun partial-size-window ()"Set the two split windows to 70% and 30% vertically."(interactive)(let ((size (- (truncate (* .70 (frame-height))) (window-height))))(if (> size 0)(enlarge-window size))))(defun partial-size-window-h ()"Set the two split windows to 70% and 30% horizontally."(interactive)(let ((size (- (truncate (* .70 (frame-width))) (window-width))))(if (> size 0)(enlarge-window-horizontally size))))Foi uma boa exploração. Estou no celular agora, então não posso testar de imediato, mas quero muito experimentar ace-window,
ace-window-display-modeeframes-only-modePara ser sincero, mesmo usando Emacs há uns 40 anos, em geral fiquei basicamente em
next-window, criar uma nova janela abaixo ou ao lado e depender dotmuxao trabalhar em servidores remotosC-x 1/2/3eC-x oAinda assim, na verdade isso é bem poderoso e suficiente para o meu uso; sinto que vários gerenciadores de janelas em mosaico bem que poderiam ser só nesse nível
C-x oé um pouco incômodo, então deixei a configuração abaixo, mas não sinto que esses pacotes adicionais sejam realmente necessários(global-set-key (kbd "M-o") #'other-window)Mesmo assim, é ótimo ter um texto de referência tão aprofundado, e os textos do Karthik são sempre didáticos e interessantes
Somando à observação do Karthink sobre
windmove-mode, é possível configurarwindmove-default-keybindingspara se mover entre janelas comCtrl-<teclas de direção>(windmove-default-keybindings 'control)Também coloquei isso na minha configuração e incluí em um starter kit minimalista; é realmente um divisor de águas
https://codeberg.org/ashton314/emacs-bedrock
.emacse vi que uso exatamente a mesma coisa. Prefiro porque exige uma tecla a menos queC-x Oe é mais flexívelConfigurei o Emacs para não dividir frames em várias janelas. É parecido com a forma como um navegador web não divide uma janela do navegador em vários viewports
Meu Emacs também não cria um segundo frame. O método de implementação mudou de ano para ano, conforme a forma antiga deixou de funcionar
No método atual, em certas situações o frame é dividido, por exemplo quando o Emacs mostra o buffer
*Completions*, mas, pelo que me lembro, nunca precisei chamardelete-windowmanualmente para eliminar a segunda janela; ela sempre desapareceu sozinhaEu uso bastante frames com várias janelas. No macOS recente e com Emacs recente, às vezes um frame com várias janelas parece travar, sem responder ao teclado ou ao trackpad, e nem várias pressões de
Ctrl-GresolvemMas criar um novo frame com
C-x 5 2funciona, e então eu conseguia voltar ao frame travado e fechá-lo comC-x 5 0O texto é muito aprofundado, e gostei muito do fato de o autor ter dedicado tempo a desenhar bons diagramas
É um bom texto, e quero compartilhar um excelente pacote para usar junto. Para mim, zygospore foi uma ferramenta indispensável
“zygospore permite desfazer
C-x 1(delete-other-window) pressionandoC-x 1de novo”https://github.com/LouisKottmann/zygospore.el
https://www.emacswiki.org/emacs/WinnerMode
undo?Seria meio estranho, mas
C-u C-x 1parece coerenteSe o autor vir isto, quero dizer que fiquei contente com a breve menção ao Acme editor
Ao chamar
hledger-balance-sheet, quero que ele abra à direita com 30% de largura, sem substituir o.hledger.journalexistenteGostaria que o
.hledger.journalcontinuasse aberto à esquerda e permanecesse selecionado