Hiermit wird lediglich ein Ticket für https://stackoverflow.com/questions/50493580/cider-for-emacs-stdin erstellt
Es scheint, dass das Schlürfen aus dem Standard momentan nicht unterbrochen werden kann, was sicherlich möglich sein sollte.
Ich möchte einen kleinen Beitrag zu CIDER leisten, habe aber keine Ahnung, wo ich mit diesem Problem anfangen soll. Könnten Sie / jemand mir einige Hinweise geben?
@ TimoFreiberg Ich habe ein paar Artikel darüber verfasst, wie man mit dem Debuggen beginnt und Beiträge leistet: http://hackingcider.com/ (insbesondere CIDER für die Entwicklung einrichten )
Fühlen Sie sich auch frei, in #cider auf der Clojure Slack zu chatten
Es gibt auch http://docs.cider.mx/en/latest/hacking_on_cider/
danke @dpsutton! M-x nrepl-toggle-message-loggin
war das fehlende Glied für mich :)
Das Problem scheint zu sein:
stdin
-Nachricht mit :status "need-input"
cider-need-input
immer aufgerufen, siehe https://github.com/clojure-emacs/cider/blob/master/cider-client.el#L596).cider-need-input
hängt immer eine neue Zeile an die Eingabe an (was korrekt erscheint), daher gibt es keine Möglichkeit, ein leeres stdin zu sendenMögliche Lösungen scheinen zu sein:
signal 'quit
von C-g
und senden Sie nil / eine leere Liste an nreplIch werde diesen Ansatz versuchen, Feedback geschätzt :)
Hervorragende Forschung!
Ja, ich denke wir sollten beides machen.
cider-need-input hängt immer eine neue Zeile an die Eingabe an (was korrekt erscheint), daher gibt es keine Möglichkeit, ein leeres stdin zu senden
Übrigens bin ich mir da nicht ganz sicher. Warum ist es richtig, immer eine letzte neue Zeile hinzuzufügen?
Übrigens bin ich mir da nicht ganz sicher. Warum ist es richtig, immer eine letzte neue Zeile hinzuzufügen?
Andernfalls wäre es unmöglich, eine leere Zeile in stdin einzugeben
Sie können einfach \n
. :-) Aber ja - das ist ein guter Punkt. Andernfalls benötigen wir eine andere Tastenkombination (z. B. haben viele Chats Shift+Enter
dafür). Der von Ihnen vorgeschlagene Ansatz klingt mit Sicherheit besser.
Freut mich das zu hören :)
Ich werde versuchen, es zum Laufen zu bringen, es könnte eine Weile dauern, da ich neu im Emacs-Hacking bin;)
Hier erfahren Sie, wie Sie das Minibuffer-Setup für stdin https://github.com/clojure-emacs/cider/blob/master/cider-common.el#L87 optimieren
Übrigens, wenn Sie Lust auf mehr Detektiv- / Fehlerbehebung haben, kann ich Ihnen zwei weitere kleine Probleme vorschlagen, die etwas miteinander zu tun haben:
Ich werde einen Blick darauf werfen: +1:
Aktueller Status:
Ich habe C-c C-c
an abort-recursive-edit
gebunden.
C-c C-c
und C-g
stoppen erfolgreich die stdin-Schleife:
https://gist.github.com/TimoFreiberg/34d7efa24f2966daff44601ce6c4753e#file -nrepl-exception
Es gibt jedoch ein Problem: Wenn Sie (slurp *in*)
erneut aufrufen, wird der folgende Fehler ausgegeben:
https://gist.github.com/TimoFreiberg/34d7efa24f2966daff44601ce6c4753e#file -nrepl-messages-cider-issue-2317
wahrscheinlich, weil der stdin reader nach dem lesen einer leeren nachricht geschlossen wird.
Wahrscheinlich hast du recht. Ich bin mir nicht sicher, wo ich am besten damit umgehen soll.
Übrigens bin ich neugierig, ob wir irgendwie eine Möglichkeit hinzufügen können, die vom Minibuffer gelesene Eingabe mit EOF abzuschließen (z. B. mit einer Tastenkombination), um zu verhindern, dass eine zweite "Beendigungs" -Nachricht gesendet werden muss.
Oh, eigentlich ist es ziemlich offensichtlich. slurp
schließt *in*
und nrepl öffnet es einfach nicht wieder.
Ja, darüber habe ich auch nachgedacht.
slurp
liest, bis es auf EOF trifft, das nrepl sendet, wenn stdin leer ist: https://github.com/clojure/tools.nrepl/blob/master/src/main/clojure/clojure/tools/nrepl/ Middleware / session.clj # L233
nrepl macht das nur, wenn eine leere Nachricht gesendet wird. Ich denke, eine leere Beendigungsnachricht ist der einzige Weg, es sei denn, nrepl ändert sich
Nun, Verbesserungen in nREPL sind jetzt sicherlich machbar. Https://github.com/nrepl/nrepl/
CIDER wird bald auf den neuen nREPL-Server umsteigen.
Wie auch immer, für den Moment sollten wir wahrscheinlich mit einer Kündigungsnachricht gehen, bis der Übergang zur "neuen" nREPL abgeschlossen ist.
Ich habe es jetzt.
Wir akzeptieren also, dass Benutzer das nREPL-Standard schließen und dies möglicherweise im neuen nREPL-Projekt beheben / verbessern können?
Wir akzeptieren daher, dass Benutzer den nREPL-Standard schließen können
Nur für jetzt.
Vielleicht das im neuen nREPL-Projekt beheben / verbessern?
Wir sollten dies dort auf jeden Fall beheben. Mein Punkt war hauptsächlich, dass einige Leute das Legacy-Projekt noch eine Weile nutzen werden, daher müssen wir im Idealfall auch damit kompatibel sein.
CIDER wird die Unterstützung des Legacy-nREPL einstellen, sobald ich etwas Zeit finde, mich darauf zu konzentrieren. :-)
Hilfreichster Kommentar
@ TimoFreiberg Ich habe ein paar Artikel darüber verfasst, wie man mit dem Debuggen beginnt und Beiträge leistet: http://hackingcider.com/ (insbesondere CIDER für die Entwicklung einrichten )
Fühlen Sie sich auch frei, in #cider auf der Clojure Slack zu chatten