Racket: fix for module evaluation/entering
[geiser.git] / elisp / geiser-compile.el
blob2f8fa5e7387261c9bb4abb26402fbfe20debb43b
1 ;; geiser-compile.el -- compile/load scheme files
3 ;; Copyright (C) 2009, 2010, 2011, 2012 Jose Antonio Ortega Ruiz
5 ;; This program is free software; you can redistribute it and/or
6 ;; modify it under the terms of the Modified BSD License. You should
7 ;; have received a copy of the license along with this program. If
8 ;; not, see <http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5>.
10 ;; Start date: Wed Feb 11, 2009 00:16
14 (require 'geiser-debug)
15 (require 'geiser-autodoc)
16 (require 'geiser-eval)
17 (require 'geiser-base)
20 ;;; Auxiliary functions:
22 (defun geiser-compile--buffer/path (&optional path)
23 (let ((path (or path (read-file-name "Scheme file: " nil nil t))))
24 (let ((buffer (find-file-noselect path)))
25 (when (and (buffer-modified-p buffer)
26 (y-or-n-p "Save buffer? "))
27 (save-buffer buffer))
28 (cons buffer path))))
30 (defun geiser-compile--display-result (title ret)
31 (if (not (geiser-eval--retort-error ret))
32 (message "%s done" title)
33 (message ""))
34 (geiser-debug--display-retort title ret))
36 (defun geiser-compile--file-op (path compile-p msg)
37 (let* ((b/p (geiser-compile--buffer/path path))
38 (buffer (car b/p))
39 (path (cdr b/p))
40 (msg (format "%s %s ..." msg path)))
41 (message msg)
42 (geiser-autodoc--clean-cache)
43 (geiser-compile--display-result
44 msg (geiser-eval--send/wait
45 `(,(if compile-p :comp-file :load-file) ,path)))))
48 ;;; User commands:
50 (defun geiser-compile-file (path)
51 "Compile and load Scheme file."
52 (interactive "FScheme file: ")
53 (geiser-compile--file-op path t "Compiling"))
55 (defun geiser-compile-current-buffer ()
56 "Compile and load current Scheme file."
57 (interactive)
58 (geiser-compile-file (buffer-file-name (current-buffer))))
60 (defun geiser-load-file (path)
61 "Load Scheme file."
62 (interactive "FScheme file: ")
63 (geiser-compile--file-op path nil "Loading"))
65 (defun geiser-load-current-buffer ()
66 "Load current Scheme file."
67 (interactive)
68 (geiser-load-file (buffer-file-name (current-buffer))))
70 (defun geiser-add-to-load-path (path)
71 "Add a new directory to running Scheme's load path.
72 When called interactively, this function will ask for the path to
73 add, defaulting to the current buffer's directory."
74 (interactive "DDirectory to add: ")
75 (let* ((c `(:eval (:ge add-to-load-path ,path)))
76 (r (geiser-eval--send/result c)))
77 (message "%s" (if r "Added" "Failed!"))))
80 (provide 'geiser-compile)