Como passar opções ao comando usando cygwin run.exe

2

Eu quero executar um comando bash com meu ambiente de usuário e não quero abrir janelas de terminal na área de trabalho do Windows. Eu tentei:

c:\cygwin64\bin\run.exe zsh -lic emacs

E ele abre uma janela do emacs com meu ambiente de usuário. Mas se eu tentar:

c:\cygwin64\bin\run.exe zsh -lic emacs --name fancy-name

Parece que a opção --name é ineficaz.

Eu tentei adicionar um orçamento, mas não funcionou.

O que eu quero alcançar é usar a opção --eval no Emacs para inicializar o meu Emacs de acordo com o meu contexto de comando.

    
por davidshen84 12.05.2016 / 05:25

1 resposta

1

Eu posso fazer com que o Emacs interprete seus flags na minha configuração se eu envolver as coisas em dois conjuntos de aspas, como este:

C:\cygwin64\bin\run.exe bash -lic '"emacs -q"'

(Tudo isso está em uma janela cmd , a propósito. E eu estou assumindo que zsh e bash não são diferentes de forma alguma relevante para a questão.)

Acho que o que está acontecendo aqui é que run está removendo um nível de cotações antes de passar para bash . No entanto, não acho que você precise do nível extra de indireção. Isso também funciona para mim:

C:\cygwin64\bin\bash.exe -lic "emacs -q"

EDIT: Mas é claro que você está usando a opção --eval com o Emacs, o que significa que você vai querer usar aspas com o que você quiser avaliar. O problema aqui é que o argumento para eval também precisa ser citado, e.
C:\cygwin64\bin\run.exe bash -lic '"emacs --eval \"(foo)\""'

Para citar cadeias de caracteres dentro dela, você precisará substituir as aspas simples externas por duplas e duplas e triplas, conforme necessário:

C:\cygwin64\bin\run.exe bash -lic "\"emacs --eval \\"(message \\\\"Foo\\\\")\\"\""

É claro que isso fica maluco rapidamente. A sintaxe literal da string torna as coisas um pouco mais simples usando aspas simples, enquanto ainda permite que você escape de aspas simples dentro da string:

C:\cygwin64\bin\run.exe bash -lic "\"emacs --eval $'(message \\"Foo\\")'\""

Finalmente, há a opção de apenas encapsular o código que você quer avaliar como uma função dentro do Emacs, assim você pode chamá-lo sem strings ou literais de símbolos. Alternativamente, você poderia colocá-lo em um arquivo e fazer com que o Emacs o carregue com a opção -l .

    
por 12.05.2016 / 17:19