Meus arquivos init são configurados de tal forma que meu .emacs
arquivo é um link simbólico apontando para um init específico do sistema operacional que, por sua vez, carrega o arquivo init principal com configurações que não são afetadas pelo sistema operacional. Eu não tive problemas com essa configuração para emacs que não são servidores.
No entanto, não funciona direito ao usar o emacsclient. Por exemplo, eu tenho uma configuração para org-mode
que no Terminal no OSX, S-Tab
seja mapeado para backtab para que ele funcione corretamente em vez de lançar um erro sobre a chave indefinida. Esta configuração funciona bem se eu não estiver usando o servidor emacs. Quando estou usando o emacsclient, recebo o erro de atalhos de teclado indefinidos.
Eu sei que todos os meus arquivos init estão sendo carregados sem erro porque qualquer (mensagem "qualquer") linhas que eu coloquei nos arquivos mostra bem quando o servidor é iniciado. Então não é como se o servidor emacs estivesse faltando os arquivos de alguma forma. É como se as teclas mapeadas fossem carregadas para o servidor, mas esquecidas quando um cliente se conectava. Eu até tentei eval
os mapeamentos de teclas uma vez em um buffer do emacsclient, mas sem erros, sem alterações. Alguma ideia?
(btw, --debug-init
não mostra nada de estranho. Tudo está carregando sem erro.)
fonte
window-system
ou algo parecido, as configurações podem não ser para um terminal, mas para a GUI.Respostas:
Eu acho que o seu problema é que o seu arquivo .emacs define algo como
local-function-key-map
ouinput-decode-map
mas essas variáveis são terminais-locais, o que significa que todo "terminal" (sua GUI é um "terminal", e toda conexão emacsclient durante um período de texto será outra "terminal") obtém um valor diferente dessa variável.Então você precisa re-executar esse código para cada novo terminal. Você pode fazer isso de
after-make-frame-functions
acordo com o sugerido pelo reza.safiyat, pois ele será executado com mais freqüência do que o necessário (uma vez por quadro, em vez de uma vez por terminal). Mas como isso provavelmente só é necessário para terminais "xterm", outra boa opção é fazer isso determinal-init-xterm-hook
:BTW, às vezes uma alternativa é usar
function-key-map
, desde que é uma variável global e se aplica igualmente a todos os terminais.fonte
grep terminal-init-xterm-hook **/*.el
mostra issolisp/term/xterm.el
. Observe que os ganchos não precisam ser "definidos" (um valor não ligado funciona tão bem quanto um valor nulo).Finalmente encontrei uma solução.
Esta é uma solução copiada, mas infelizmente perdi o link para ela. Basta adicionar isso ao seu
init
arquivo.fonte