[Bearbeiten]
Ich kann nicht C-x C-b
bekommen mit #lang
entweder zu arbeiten.
Es kann jedoch ein Puffer mit 10 an eine REPL gesendet werden, die von Geiser mit C-c C-a
gestartet wurde. Dies ist Wechseln Sie zu REPL und geben Sie das Modul über das Geiser-Dropdown-Menü ein. Wenn ich einen Puffer für bugsy.rkt haben:
;; bugsy.rkt
#lang racket
(define k 6)
(define j 7)
(define (f lhs rhs)
(+ lhs rhs))
C-c C-a
Typing gibt mir diese in der REPL:
[email protected]> ,enter "<filepath>/bugsy.rkt"
[email protected]>
ich dann das Modul in der REPL zugreifen:
[email protected]> k
6
[email protected]> (f 3 4)
7
Wenn ich zu einem anderen Modul [oder Puffer einer Datei] wechseln möchte, kann ich den Befehl ,enter
in der REPL:
verwenden 0
[email protected]> ,enter "clyde.rkt"
[email protected]> ,enter "bonny.rkt"
[email protected]>
Es gibt ein Beispiel für den Befehl ,enter
in der Dokumentation. Look above the Dinosaur.
[Original]
Nach der Racket Dokumentation #lang
has very simple syntax, Schopf aus dem Sumpf der Leser im Wesentlichen eine Sprachsyntax von was auch immer das Leerzeichen nach #lang
folgt. Dies bedeutet in gewissem Sinne, dass nicht in der Syntax von Racket [oder einer anderen Sprache] ist. Stattdessen ist es ein Implementierungsmerkmal des Lesers, das Teil des größeren "Racket" -Entwicklungs-Ökosystems ist.
Geiser [und vermutlich Quack und Schläger-Modus] handhaben dies durch #lang
in elsip Parsen bevor Code zum Racket REPL vorbei. In Geiser ist die Arbeit in geiser-racket.el erledigt.
Die Parsing-Funktion ist in Zeile 132:
(defun geiser-racket--language()
(or (cdr (geiser-racket--explicit-module))
(save-excursion
(goto-char (point-min))
(if (re-search-forward "^#lang +\\([^ ]+\\)" nil t)
(geiser-syntax--form-from-string (match-string-no-properties 1))))
"#f"))
Und es durch geiser-racket--geiser-procedure
auf der Leitung 166.
(defun geiser-racket--geiser-procedure (proc &rest args)
(case proc
((eval compile)
(format ",geiser-eval %s %s %s"
(or (car args) "#f")
(geiser-racket--language)
(mapconcat 'identity (cdr args) " ")))
((load-file compile-file)
(format ",geiser-load %S" (geiser-racket--find-module)))
((no-values) ",geiser-no-values")
(t (format ",apply geiser:%s (%s)" proc (mapconcat 'identity args " ")))))
Das geben können Sie einen Ausgangspunkt für das Walzen Ihren eigenen Code, wenn man angerufen wird der vorhandenen Emacs-Modi entspricht nicht Ihren Anforderungen.
So kann Geiser die Anweisung '# lang' in Code umwandeln, der in Racket REPL ausgeführt werden kann, aber wo wird dieser verwendet? Natürlich macht das Ausführen von C-c C-b, geiser-eval-buffer, dies nicht, es übergibt einfach "# lang" gerade hindurch, was den gleichen Fehler wie oben verursacht. (Getestet mit einem aktuellen Geiser von MELPA.) –
@DavorCubranic Ich habe zusätzliche Informationen über die Geiser REPL –
hinzugefügt Danke, das beantwortet was ich wirklich suchte. Obwohl ich vielleicht den Racket-Modus von @ GregHendershott verwende, da er näher an der DrRacket-Erfahrung liegt. –