Immer wenn ich versuche, M-x Begriff aus meiner Windows-Distribution von GNU Emacs zu starten, bekomme ich den Fehler:
%Vor%nach dem Akzeptieren des Standardprogramms zur Ausführung (entweder "bash.exe" oder "zsh.exe" von Cygwin und in meiner Umgebungsvariablen Windows PATH vorhanden).
M-x-Shell funktioniert mit Zsh / Bash von Cygwin. Aber ich möchte Term verwenden, um weitere Funktionen zu erhalten ...
Irgendwelche Hilfe?
Aus meiner Erfahrung wird keiner der Terminal-Emulatoren in Emacs (Begriff, Ansi-Term, Multi-Term) unter Windows unterstützt. Es sieht so aus, als ob der Hauptgrund ist, dass alle auf Low-Level-Unterstützung für Terminals (Stty usw.) angewiesen sind, die nicht von Windows bereitgestellt werden. Versuche, Emacs zu zwingen, sagen wir Cygwin bash zu verwenden, indem wir Referenzen auf z.B. / bin / sh in term.el hilft auch nicht. Es kann in Cygwin Emacs funktionieren, aber ich habe es schon lange nicht mehr benutzt, weil der native W32 Emacs so viel besser ist (für mich). Der Shell-Modus funktioniert entweder mit Cygwin bash oder mit Windows cmd (über cmdproxy, das Teil von Emacs install ist). Sie können Unterstützung für ANSI-Farben haben, wenn Sie
tun %Vor% Ich habe es viele Male versucht, aber am Ende benutze ich den Shell-Modus mit bash, weil ich dazu neige, Pipes und Umleitungen zu benutzen. Gibt es bestimmte Anwendungen, die Sie verwenden möchten, die eine vollständige Terminal-Unterstützung benötigen? Ich habe zuerst top
vermisst, aber dann habe ich gerade M-x proced
benutzt.
UPDATE: term
, ansi-term
und multi-term
tun arbeiten in Cygwin Emacs.
Dies ist ein Versuch, eine allgemeinere Antwort über die Nachricht "Kindprozess erstellen: ungültiges Argument" aufzunehmen, die in verschiedenen Situationen erzeugt wird. Ich benutze Emacs 25.0.50.1 auf Windows 7, aber ich habe das schon früher mit früheren Versionen untersucht und ich denke nicht, dass sich irgendetwas Relevantes geändert hat. Aus irgendeinem Grund startet dieser Fehler den Debugger nicht, auch wenn debug-on-error
festgelegt ist. Es scheint jedoch, dass der Fehler immer von der Funktion start-process
in subr.el
(im obersten Lisp-Verzeichnis) generiert wird. Sie können daher M-x debug-on-entry RET start-process RET
eingeben und dann alles tun, was den Fehler verursacht hat. Emacs zeigt dann einen Backtrace-Puffer an, dessen zweite Zeile die Argumente zeigt, die an start-process
übergeben wurden. Das letzte Argument soll der Name einer ausführbaren Datei sein. In allen Fällen, in denen ich den Fehler "Fehlerhafter untergeordneter Prozess: ungültiges Argument" gesehen habe, war die ausführbare Datei nicht vorhanden. Sie müssen dann herausfinden, woher emacs den Dateinamen hat und wie Sie ihn ändern können. Sie können einige Hinweise vom Rest des Backtrace-Puffers erhalten.
Im Falle des Befehls M-x term
ist die verwendete ausführbare Datei die erste der folgenden Sachen, die einen Nicht-Null-Wert hat:
explicit-shell-file-name
(die Sie nach Eingabe von C-h v RET explicit-shell-file-name RET
anpassen können) ESHELL
SHELL
/bin/sh
(Sie können dies sehen, indem Sie sich den Code in term.el
im obersten Lisp-Verzeichnis ansehen.)
Wenn ich im Quelltext von term.el nachschaue, kann ich ein fest codiertes "/ bin / sh" sehen, das benutzt wird, um das Programm zu starten (das in Ihrem Pfad existiert). Wenn Sie eine Kopie Ihrer bash.exe an genau diesem Ort und Namen erstellen können (ich bin mir nicht sicher, ob Windows-Cygwin-Pfade das erlauben), könnten Sie Glück haben.
Ich habe versucht, M-x term
von einer MingW64 emacs mit einer MSYS2 bash.exe auszuführen, und ich habe den gleichen Fehler wie Sie bekommen. Es ist möglich, ein wenig weiter zu kommen, indem term-exec-1
in term.el
geändert wird, um zu lesen:
Sie müssen mit dem MSYS2-Shell-Pfad antworten, der so etwas wie /usr/bin/bash.exe
ist, und dann erhalten Sie ein Terminal. Das Problem ist, dass das Terminal durcheinander ist. Der stty-Befehl funktioniert nicht und der cr funktioniert nicht.
Außerdem erhält die Funktion cd
emacs MSYS2-Pfade wie /c/usr/share/emacs/
, die nicht gültig sind. Diese Funktion muss angewiesen werden, diese Pfade in Windows-Pfade umzuwandeln.