15 Stimmen

Gibt es eine Möglichkeit, den Scala REPL nicht mit STRG-C zu stoppen?

Ich verwende den Scala REPL, um interaktiv einige Hashfunktionen zu testen, die ich gerade erstelle. Ich wechsle ständig zwischen dem Produktcode (Eclipse), dem Browser und dem Scala-Interpreter, kopiere / füge Werte und Ergebnisse ein. Oft drücke ich auch STRG-C im Interpreter, beende die Sitzung und verliere alle meine Funktionen.

Gibt es eine Möglichkeit, den Scala REPL entweder dazu zu bringen, STRG-C zu ignorieren oder, noch besser, "einfügen" damit auszuführen? Ich arbeite auf Linux.

8voto

om-nom-nom Punkte 61437

Ich weiß nur, wie man verhindert, dass REPL beendet wird. Das Remapping von CTRL+C zum Ausführen des Kopierbefehls könnte auf die gleiche Weise erfolgen (wenn es einen Befehl gibt, der die Tastenzuordnung ohne Neustart des Terminals ändern kann - ich weiß nicht, ob es einen gibt). Wie auch immer, um ^C zu blockieren, umhüllen Sie Ihren REPL-Aufruf in einem .sh-Skript wie diesem:

#!/bin/bash

#Empfindlichkeit gegenüber ^C ausschalten
trap '' 2

#hier wird der REPL aufgerufen
scala

#Empfindlichkeit gegenüber ^C wiederherstellen
Trap 2

Trap-Befehl

definiert und aktiviert Handler, die ausgeführt werden sollen, wenn die Shell Signale empfängt oder andere Bedingungen erfüllt sind.

2 ist ein SIGINT Wert (das ist das Signal, das ausgelöst wird, wenn Sie CTRL+C drücken)

1voto

psp Punkte 12030

Der Repl fängt bereits Strg-C ab, aber anscheinend funktioniert es nicht unter Linux. Auf osx funktioniert es. Wenn jemand, der Linux verwendet, ein Ticket mit ausreichenden Details öffnet, um zu zeigen, warum nicht, kann ich es reparieren.

1voto

VonC Punkte 1117238

Als Alternative zum nativen Scala REPL kannst du Ammonite verwenden, das Ctrl+C behandelt:

@ while(true) ()
... hängt ...
^Ctrl-C
Unterbrochen!

@

Das traditionelle Scala REPL kann mit übermäßigem Code nicht umgehen und lässt dir keine andere Wahl, als den Prozess zu beenden und damit all deine Arbeit zu verlieren.
Ammonite-REPL ermöglicht es dir, den Thread zu unterbrechen, den übermäßigen Befehl zu stoppen und weiterzuarbeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X