O Emacs abre arquivos em um novo quadro quando aberto com “open -a”

20

Eu quero ser capaz de invocar o Emacs a partir da linha de comando e começar o Emacs gráfico se ele não estiver rodando ou visitar um arquivo em um Emacs já em execução. Eu tentei fazer isso com emacsclient que eu sei que é a maneira "certa" de fazer isso, mas eu tive um monte de problemas com ele no OS X, seria aleatoriamente falha, ou o processo emacs --daemon iria travar durante o fechamento para baixo ou reiniciar a máquina e descamação geral. Embora eu queira que isso funcione, no momento o open -a funciona muito melhor, exceto por esse problema que descreverei abaixo:

Usando open -a assim:

$ open -a Emacs file.txt

iniciará o Emacs se ele não estiver em execução e visitará o arquivo. Mas se eu fizer isso quando o buffer atual não for *scratch* , o arquivo será aberto em um novo quadro (ou seja, uma nova janela do sistema).

Veja um exemplo de sessão:

$ open -a Emacs file.txt

Isso inicia o Emacs e abre o arquivo.txt, então há um único quadro com esse buffer nele. Se eu mudar para o buffer *scratch* , e faça isso:

$ open -a Emacs file1.txt

Abre este arquivo no mesmo quadro. Agora há um único quadro com este arquivo aberto e, se eu fizer isso:

$ open -a Emacs file2.txt 

Ele abre um novo quadro, resultando em dois quadros abertos ao mesmo tempo.

Eu tentei brincar com args de linha de comando para o Emacs usando a opção --args para open , mas isso não parece funcionar para chamadas subseqüentes, por exemplo:

$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'

Isso só imprime "foo" no buffer de mensagem ... a segunda vez que o Emacs é trazido para o primeiro plano, mas nenhuma mensagem é impressa.

Não sei ao certo como open se comunica com aplicativos que já estão em execução. Alguém sabe como posso descobrir? Ou há alguma maneira de obter um log mais detalhado do que está acontecendo do que o buffer Messages ? Nada de interessante é impresso nesse buffer durante a sessão acima, então eu não sei como eu poderia hackear algum Emacs Lisp para fazer o que eu quero ...

Obrigado!

    
por michiakig 01.05.2011 / 19:33

1 resposta

25

A resposta está aqui: variável emacs para "abrir com" no quadro original

É uma alteração nas configurações padrão nas versões mais recentes do emacs. Adicione:

(setq ns-pop-up-frames nil)

para o arquivo .emacs.

Muito feliz por ter encontrado isto.

    
por 01.06.2012 / 22:37

Tags