diff options
Diffstat (limited to 'elisp')
| -rw-r--r-- | elisp/geiser-impl.el | 2 | ||||
| -rw-r--r-- | elisp/geiser-plt.el | 208 | ||||
| -rw-r--r-- | elisp/geiser.el | 10 | 
3 files changed, 6 insertions, 214 deletions
| diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index e5bff0a..1c3347c 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -26,7 +26,7 @@    :type 'symbol    :group 'geiser-implementation) -(geiser-custom--defcustom geiser-active-implementations '(guile plt) +(geiser-custom--defcustom geiser-active-implementations '(guile racket)    "List of active installed Scheme implementations."    :type '(repeat symbol)    :group 'geiser-implementation) diff --git a/elisp/geiser-plt.el b/elisp/geiser-plt.el deleted file mode 100644 index 64b770d..0000000 --- a/elisp/geiser-plt.el +++ /dev/null @@ -1,208 +0,0 @@ -;; geiser-plt.el -- geiser support for PLT scheme - -;; Copyright (C) 2009, 2010 Jose Antonio Ortega Ruiz - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the Modified BSD License. You should -;; have received a copy of the license along with this program. If -;; not, see <http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5>. - -;; Start date: Sat Apr 25, 2009 21:13 - - - -(require 'geiser-edit) -(require 'geiser-doc) -(require 'geiser-eval) -(require 'geiser-syntax) -(require 'geiser-custom) -(require 'geiser-base) - - -;;; Customization: - -(defgroup geiser-plt nil -  "Customization for Geiser's PLT flavour." -  :group 'geiser) - -(geiser-custom--defcustom geiser-plt-binary -  (cond ((eq system-type 'windows-nt) "Racket.exe") -        ((eq system-type 'darwin) "racket") -        (t "racket")) -  "Name to use to call the mzscheme executable when starting a REPL." -  :type '(choice string (repeat string)) -  :group 'geiser-plt) - -(geiser-custom--defcustom geiser-plt-collects nil -  "A list of paths to be added to mzscheme's collection directories." -  :type '(repeat file) -  :group 'geiser-plt) - -(geiser-custom--defcustom geiser-plt-init-file "~/.plt-geiser" -  "Initialization file with user code for the mzscheme REPL." -  :type 'string -  :group 'geiser-plt) - - - -;;; REPL support: - -(defun geiser-plt--binary () -  (if (listp geiser-plt-binary) (car geiser-plt-binary) geiser-plt-binary)) - -(defun geiser-plt--parameters () -  "Return a list with all parameters needed to start mzscheme. -This function uses `geiser-plt-init-file' if it exists." -  (let ((init-file (and (stringp geiser-plt-init-file) -                        (expand-file-name geiser-plt-init-file)))) -    `("-i" "-q" -      "-S" ,(expand-file-name "plt/" geiser-scheme-dir) -      ,@(apply 'append (mapcar (lambda (p) (list "-S" p)) geiser-plt-collects)) -      ,@(and (listp geiser-plt-binary) (cdr geiser-plt-binary)) -      ,@(and init-file (file-readable-p init-file) (list "-f" init-file)) -      "-f" ,(expand-file-name "plt/geiser.rkt" geiser-scheme-dir)))) - -(defconst geiser-plt--prompt-regexp "^=?\\(mzscheme\\|racket\\)@[^ ]*?> ") - - -;;; Evaluation support: - -(defun geiser-plt--language () -  (save-excursion -    (goto-char (point-min)) -    (if (re-search-forward -         "^\\(?:#lang\\|(module +[^ ]+?\\) +\\([^ ]+?\\|([^)]+)\\) *$" nil t) -        (car (geiser-syntax--read-from-string (match-string-no-properties 1))) -      :f))) - -(defun geiser-plt--geiser-procedure (proc) -  (if (memq proc '(eval compile)) -      `((dynamic-require 'geiser 'geiser:eval) ',(geiser-plt--language)) -    `(dynamic-require 'geiser ',(intern (format "geiser:%s" proc))))) - -(defconst geiser-plt--module-re -  "^(module +\\([^ ]+\\)") - -(defun geiser-plt--explicit-module () -  (save-excursion -    (goto-char (point-min)) -    (and (re-search-forward geiser-plt--module-re nil t) -         (ignore-errors -           (car (geiser-syntax--read-from-string -                 (match-string-no-properties 1))))))) - -(defsubst geiser-plt--implicit-module () -  (save-excursion -    (goto-char (point-min)) -    (if (re-search-forward "^#lang " nil t) -        (buffer-file-name) -      :f))) - -(defun geiser-plt--get-module (&optional module) -  (cond ((and (null module) (buffer-file-name))) -        ;; (geiser-plt--explicit-module) -        ((null module) (geiser-plt--implicit-module)) -        ((symbolp module) module) -        ((and (stringp module) (file-name-absolute-p module)) module) -        ((stringp module) (intern module)) -        (t nil))) - -(defun geiser-plt--symbol-begin (module) -  (save-excursion (skip-syntax-backward "^-()>") (point))) - -(defun geiser-plt--enter-command (module) -  (and (stringp module) (format "(enter! (file %S))" module))) - -(defconst geiser-plt--binding-forms -  '(for for/list for/hash for/hasheq for/and for/or -    for/lists for/first for/last for/fold)) - -(defconst geiser-plt--binding-forms* -  '(for* for*/list for*/lists for*/hash for*/hasheq for*/and -    for*/or for*/first for*/last for*/fold)) - -;;; External help - -(defsubst geiser-plt--get-help (symbol module) -  (geiser-eval--send/wait -   `(:eval (get-help ',symbol (:module ,module)) geiser/autodoc))) - -(defun geiser-plt--external-help (id module) -  (message "Requesting help for '%s'..." id) -  (let ((out (geiser-eval--retort-output (geiser-plt--get-help id module)))) -    (when (and out (string-match " but provided by:\n +\\(.+\\)\n" out)) -      (geiser-plt--get-help symbol (match-string 1 out)))) -  (minibuffer-message "%s done" (current-message)) -  t) - - -;;; Error display - -(defconst geiser-plt--file-rxs '("^\\([^:\n\"]+\\):\\([0-9]+\\):\\([0-9]+\\)" -                                 "path:\"?\\([^>\"\n]+\\)\"?>" -                                 "module: \"\\([^>\"\n]+\\)\"")) - -(defun geiser-plt--find-files (rx) -  (save-excursion -    (while (re-search-forward rx nil t) -      (geiser-edit--make-link (match-beginning 1) -                              (match-end 1) -                              (match-string 1) -                              (match-string 2) -                              (match-string 3))))) - -(defun geiser-plt--display-error (module key msg) -  (when key -    (insert "Error: ") -    (geiser-doc--insert-button key nil 'plt) -    (newline 2)) -  (when msg -    (let ((p (point))) -      (insert msg) -      (when key -        (let ((end (point))) -        (goto-char p) -        (mapc 'geiser-plt--find-files geiser-plt--file-rxs) -        (goto-char end) -        (newline))))) -  t) - - -;;; Trying to ascertain whether a buffer is mzscheme scheme: - -(defun geiser-plt--guess () -  (or (save-excursion -        (goto-char (point-min)) -        (re-search-forward "#lang " nil t)) -      (geiser-plt--explicit-module))) - - -;;; Implementation definition: - -(define-geiser-implementation plt -  (unsupported-procedures '(callers callees generic-methods)) -  (binary geiser-plt--binary) -  (arglist geiser-plt--parameters) -  (startup) -  (prompt-regexp geiser-plt--prompt-regexp) -  (marshall-procedure geiser-plt--geiser-procedure) -  (find-module geiser-plt--get-module) -  (enter-command geiser-plt--enter-command) -  (find-symbol-begin geiser-plt--symbol-begin) -  (display-error geiser-plt--display-error) -  (display-help geiser-plt--external-help) -  (check-buffer geiser-plt--guess) -  (binding-forms geiser-plt--binding-forms) -  (binding-forms* geiser-plt--binding-forms*)) - -(geiser-impl--add-to-alist 'regexp -                           "\\.\\(mzscheme\\|racket\\)\\.sl?s$" 'plt t) -(geiser-impl--add-to-alist 'regexp "\\.ss$" 'plt t) -(geiser-impl--add-to-alist 'regexp "\\.rkt$" 'plt t) - -(defalias 'run-racket 'run-plt) -(defalias 'switch-to-racket 'switch-to-plt) - - -(provide 'geiser-plt) -;;; geiser-plt.el ends here diff --git a/elisp/geiser.el b/elisp/geiser.el index 4389652..b241b78 100644 --- a/elisp/geiser.el +++ b/elisp/geiser.el @@ -47,11 +47,11 @@  (autoload 'switch-to-guile "geiser-guile.el"    "Start a Geiser Guile REPL, or switch to a running one." t) -(autoload 'run-plt "geiser-plt.el" -  "Start a Geiser MzScheme REPL, or switch to a running one." t) +(autoload 'run-racket "geiser-racket.el" +  "Start a Geiser Racket REPL, or switch to a running one." t) -(autoload 'switch-to-plt "geiser-guile.el" -  "Start a Geiser MzScheme REPL, or switch to a running one." t) +(autoload 'switch-to-racket "geiser-guile.el" +  "Start a Geiser Racket REPL, or switch to a running one." t)  (autoload 'geiser-mode "geiser-mode.el"    "Minor mode adding Geiser REPL interaction to Scheme buffers." t) @@ -72,7 +72,7 @@          geiser-faces          geiser-mode          geiser-guile -        geiser-plt +        geiser-racket          geiser-implementation          geiser-xref)) | 
