Como eu abro um arquivo no Cygwin Emacs do Windows?

2

Estou tentando fazer com que o Windows abra arquivos de texto no Emacs, que instalei no Cygwin. Eu segui estas instruções : e criei um arquivo bat assim:

@echo off
chdir C:\LocalApp\cygwin\bin
start mintty.exe /usr/bin/emacs-X11.exe %1

Ele inicia o Emacs quando eu clico duas vezes no nome do arquivo no Windows Explorer, mas tenho dois problemas:

  1. O Emacs é executado no modo de console, não no modo de janela (e eu tenho o XWin em execução).

  2. Ele mostra um buffer vazio em vez do conteúdo do arquivo (suspeito que esse seja um problema de caminho, mas não consegui encontrar uma maneira de inserir o cygpath no script .bat e fazê-lo funcionar).

Alguma ideia? Obrigado.

    
por rs028 01.10.2013 / 16:40

1 resposta

1

1) O Emacs provavelmente inicia no modo de console porque nenhuma variável DISPLAY está configurada; defina essa variável de ambiente, com um valor que aponte para um servidor X capaz de aceitar clientes e você deverá encontrar melhores resultados. Você também pode passar um identificador de exibição por meio da opção de linha de comando --display ou -d para o Emacs, o que farei no exemplo a seguir porque não sei como definir env vars em arquivos em lotes do Windows:

@echo off
chdir c:\LocalApp\cygwin\bin
start mintty.exe /usr/bin/emacs-X11.exe --display 127.0.0.1:0 %1

Se necessário, o que provavelmente não é, substitua o valor --display dado aqui por algo mais adequado para a configuração do seu servidor X.

Isso provavelmente ainda exibirá uma janela do console, já que você está usando o comando start do Windows para gerar um processo que pede para iniciar o Emacs. O que você pode fazer é usar o comando Cygwin, que lança um dado binário sem uma janela de console, e elimina o processo de menta redundante:

@echo off
chdir c:\LocalApp\cygwin\bin
run /usr/bin/emacs-X11.exe --display 127.0.0.1:0 %1

2) Finalmente, você precisa encontrar uma maneira de passar o caminho do arquivo para o Emacs de uma forma que ele possa entender. Infelizmente, tenho certeza de que a interpolação de comando é impossível na linguagem de lote do Windows, portanto, você não pode fazer o equivalente a, por exemplo, Bash $(cygpath -au %1) . Talvez sua melhor opção seja fazer com que o arquivo de lote do Windows execute o Cygwin Bash, passando o argumento filename para um script que o traduza e inicie o Emacs. Por exemplo, seu arquivo de lote pode ser

@echo off
chdir C:\LocalApp\cygwin\bin
run sh /path/to/launch-emacs.sh %1

E, em launch-emacs.sh, você pode ter algo como:

#!/bin/sh
cd /cygdrive/c/LocalApp/cygwin/bin
/usr/bin/emacs-X11 --display 127.0.0.1:0 'cygpath -au $1'

, que traduz o caminho via cygpath , e passa para o Emacs, junto com um identificador de exibição, conforme descrito acima.

Minha única caixa do Windows é em casa, então não tive oportunidade de testar esses scripts exatos, mas faço algumas coisas parecidas com o Emacs nessa máquina; supondo que o seu servidor X esteja configurado corretamente, o material em 1) quase certamente funcionará, e o resto deve ser OK modulo uma janela de console supérflua sobre a qual você pode ou não se importar. Deixe-me saber como é, e vou ver que ajuda adicional posso oferecer.

    
por 12.11.2013 / 23:49