2014-11-18 10 views
11

Ich benutze ein interaktives Programm, das etwa 10 MB [edit: wahrscheinlich näher an 100 MB tatsächlich] ASCII-Text ausgibt. Die Leistung im Emacs-Shell-Modus (Aquamacs) ist unannehmbar langsam und erfordert Stunden, um dies zu tun. Ich habe Puffer deaktivieren-Rückgängig ausführen, was die Dinge ein wenig beschleunigt, aber es ist immer noch zu langsam.Schneller Emacs Shell-Modus?

Ich habe versucht, das Programm mit dem Pufferfenster läuft versteckt, aber das Programm beendet, und wenn ich den Puffer neu gewählt, ich habe noch Stunden warten, bis die Ausgabe spulen.

Gibt es einen Befehl, den ich Emacs geben kann, um die Leistung akzeptabel zu machen? Ich verstehe nicht, wie es überhaupt möglich ist, dass der Shell-Modus so langsam ist: Dies ist ein 32-GB-Multicore-Rechner mit 64-Bit-modernen Multicore-CPUs und SSD.

+1

Können Sie Details über Ihre Situation, was am wichtigsten ist, wie genau Sie dieses Programm ausführen? Z.B. über 'M-x compile' oder in einem' M-x shell' Puffer oder ...? – Stefan

+0

Ich erstelle einen Puffer mit M-x-Shell. Ich deaktiviere Puffer in diesem Puffer. Ich lldb innerhalb des Puffers laufen, und innerhalb lldb, führen Sie mein Programm. Es druckt viel, da es in der Entwicklung ist, und ich mag es, die Ausgabe zu überwachen; Deshalb sollte es auch interaktiv sein. Dies ist eine übliche Art, unter Emacs zu entwickeln - das ist einer der Vorteile von Shell-Modus, Sie brauchen nicht immer separate Log-Dateien. Es würde gut funktionieren, außer dass Emacs lächerlich, lächerlich langsam läuft. – kdog

Antwort

1

Setzen Sie die Variablen und comint-scroll-show-maximum-output auf nil. Dies verhindert, dass der Puffer kontinuierlich zum Ende der Ausgabe scrollt, was häufige Neu-Anzeigen erfordert.

+0

Habe das noch nicht probiert, bin mir nicht sicher, ob ich während des Druckens drucken soll. Die Ausgabe ist jedoch langsam, selbst wenn das Pufferfenster nicht das Ende der Ausgabe anzeigt. Zum Beispiel zeigt der Puffer gerade an, dass ich mich ungefähr in der Linie 2.000.000 befinde und die Ausgabe spoolt von ungefähr der Linie 2.200.000. Alles, was ich sehen kann, ist, dass sich die Bildlaufleiste langsam nach oben bewegt. Nichts wird wieder angezeigt. Obwohl vielleicht die Ausgabe näher an 50 MB als 10 MB ist, was das wert ist. – kdog

+0

In diesem Fall denke ich, dass Sie das Beste tun, was Sie tun können. Es muss sich mit der Ausgabe beschäftigen, damit es die Bildlaufleiste und den Moduszeilenprozentsatz aktualisieren kann. Ich denke, es gibt eine Variable, die die maximale Puffergröße angibt, um Position und Prozentsatz in der Moduszeile anzuzeigen, aber ich kann mich nicht erinnern, was es ist. – Barmar

+3

Danke. Es ist so frustrierend für mich, dass die Emacs-Maintainer scheinen ihre ganze Zeit auf idiotisch Funktionen wie Web-Browsing niemand will oder muss, verbringen, und die grundlegenden Werkzeuge Leute benutzen Emacs für (Programmierung) sind fehlerhaft oder schuppig. Es gibt immer noch keinen vernünftigen C++ - Modus, zum Beispiel nur 50 verschiedene Pakete, die unmöglich zu installieren sind und nicht wirklich funktionieren (meiner Erfahrung nach). Wenn sie in einem Web-Browser setzen wollen, in Ordnung, aber erhalten zunächst die grundlegenden Sachen Arbeits: Code-Browsing, Programmentwicklung, usw. – kdog

1

Ist Ihr interaktives Programm im Shell-Modus als ein Shell-Skript ausgeführt wird?

Wäre es möglich, den Shell-Prozess direkt auf eine Shell (nicht Shell-Modus innerhalb von Emacs) zu forchen, dann haben Emacs nur die Ergebnisse bei Abschluss laden?

+2

Siehe vorherigen Kommentar. Ich könnte mein Programm immer umschreiben, um Probleme mit Emacs zu umgehen, aber das möchte ich lieber nicht. Ich würde erwarten, dass Emacs nach 30 oder 40 Jahren Entwicklungszeit eine Möglichkeit haben würden, einen ziemlich schnellen Shell-Modus zu machen. – kdog