Schlafen Sie in einem kbd-Makro

7

Ich habe die Python-Koans in Emacs abgeschlossen und ein kdb-Makro verwendet, um meine Änderungen in einem Shell-Puffer zu testen und zurück in den Python-Code zu springen. Ich wollte die Zeilennummer des nächsten Fehlers aus dem Shell-Puffer nehmen, damit ich direkt dorthin springen konnte, aber da die Ausführung einen Moment dauerte, wurde stattdessen die vorherige Ausgabe beendet.

Wie kann ich eine Pause in ein Makro einfügen, während ich es aufzeichne?

Matthew Piziak
quelle

Antworten:

5

Sie können versuchen, (sleep-for n)während der Ausführung Ihres Makros mit auszuwerten M-:. Dies führt dazu, dass der Hauptthread von Emacs in den Ruhezustand versetzt wird, sodass der Rest Ihrer Makroaktionen verzögert wird. Dies sollte jedoch keinen Einfluss darauf haben, dass die Ausgabe von anderen Prozessen wie Python abgerufen wird.

Beachten Sie, dass dies zu einem seltsamen Verhalten des Cursors führen kann, wenn Sie eine Comint-Ausgabe erhalten (wie das Ergebnis eines Python-Prozesses). Sie sollten immer noch alle Ausgaben erhalten, aber der Cursor verfolgt möglicherweise nicht mehr das Ende. Zumindest ist mir das manchmal passiert, als ich es jetzt ausprobiert habe .

Tikhon Jelvis
quelle
1

Ich vermute aus der Beschreibung, dass Sie Python im Shell-Puffer ausführen? Es ist möglicherweise sinnvoller, Python als synchronen Befehl compileauszuführen oder zumindest zum Ausführen von Python zu verwenden.

Wenn Sie compile, ich denke , es ist einfacher, nur bindet ein Schlüssel zu , dass, und dann mit C-x `( command-next-error) oder M-g n, M-g p( next-error, previous-error) in Fehler - Analyse durch Fehler mit dem eingebauten zu springen.

Ich habe gerade mit dem eingebauten getestet python-modeund C-c C-cläuft, python-shell-send-bufferdas Python startet und den Puffer an es sendet. Die Python-Shell scheint fehlerbewusst zu sein, sodass ein wiederholter Aufruf C-x `zu jeder Zeile mit einem Fehler springt.

Ich verfolge nicht ganz, was Sie damit meinen, "die vorherige Ausgabe zu töten"? Versuchen Sie, Fehler zu beheben, während Sie das Programm gleichzeitig erneut ausführen?

dgtized
quelle
Vielen Dank für Ihre Antwort. Da die andere Antwort die allgemeine Frage im Titel behandelt, bin ich verpflichtet, sie anzunehmen. Sie haben jedoch mein individuelles Problem genauer angesprochen, und dafür bin ich sehr dankbar.
Matthew Piziak