Questão Como passar opções para o comando usando cygwin run.exe


Eu quero executar um comando bash com o meu ambiente de usuário, e eu não quero abrir um terminal windows na minha á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 o --name opção é ineficaz.

Eu tentei adicionar cotação, mas não funcionou.

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


2


origem




Respostas:


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

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

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

Eu acho que o que está acontecendo aqui é que run está retirando um nível de citações antes de entregar as coisas 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 o --eval Alterne com o Emacs, o que significa que você vai querer usar aspas com o que você quer que seja avaliado. 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 strings dentro disso, 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 fica louco muito rapidamente. A sintaxe literal de string torna as coisas um pouco mais sãs 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 o Emacs carregá-lo com o arquivo. -l interruptor.


1



Obrigado pelo truque de cotação única. Mas ainda assim, não consigo fazer isso funcionar: d:\cygwin64\bin\run.exe zsh -lic '"emacs --eval (switch-to-buffer (get-buffer-create \"sss\"))"'. Alguma sugestão? - davidshen84
O problema imediato é que você precisa colocar o argumento inteiro para eval dentro de aspas, mas depois disso eu não consigo descobrir uma maneira de citar as seqüências dentro disso. Veja minha edição para outra ideia. - Aaron Harris
E eu descobri como obter literais de string para trabalhar. Ainda não tenho certeza se recomendaria usá-los sobre o encapsulamento do código como uma função ou arquivo, mas você pode, se necessário. - Aaron Harris