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
.