diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2009-02-11 10:47:12 +0100 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2009-02-11 10:47:12 +0100 |
commit | e4c958fe1e5bad829e08dbce31f1a23e458ebd6b (patch) | |
tree | b6144afe718d65839bb1f60ae13d496525be4a03 /elisp/geiser-compile.el | |
parent | 2b2355b6134f5068dfff424f8fda32ae0236a516 (diff) | |
download | geiser-guile-e4c958fe1e5bad829e08dbce31f1a23e458ebd6b.tar.gz geiser-guile-e4c958fe1e5bad829e08dbce31f1a23e458ebd6b.tar.bz2 |
Load file commands.
Diffstat (limited to 'elisp/geiser-compile.el')
-rw-r--r-- | elisp/geiser-compile.el | 80 |
1 files changed, 55 insertions, 25 deletions
diff --git a/elisp/geiser-compile.el b/elisp/geiser-compile.el index f90c24d..a7a7daf 100644 --- a/elisp/geiser-compile.el +++ b/elisp/geiser-compile.el @@ -38,39 +38,69 @@ (geiser-popup--define compile "*Geiser compilation*" geiser-compile-mode) -;;; Compile file command: +;;; Auxiliary functions: + +(defun geiser-compile--buffer/path (&optional path) + (let ((path (or path (read-file-name "Scheme file: " nil nil t)))) + (let ((buffer (find-file-noselect path))) + (when (and (buffer-modified-p buffer) + (y-or-n-p "Save buffer? ")) + (save-buffer buffer)) + (cons buffer path)))) + +(defun geiser-compile--display-result (title ret) + (let ((err (geiser-eval--retort-error ret)) + (output (geiser-eval--retort-output ret))) + (geiser-compile--with-buffer + (erase-buffer) + (insert title) + (newline) + (when output + (insert output) + (newline)) + (when err + (insert "\n" (geiser-eval--error-msg err) "\n")) + (goto-char (point-min))) + (if (not err) + (message "%s %s" title (if (> 0 (length output)) + (geiser--chomp output) + (or (geiser-eval--retort-result ret) + "OK!"))) + (message "") + (geiser-compile--pop-to-buffer)))) + +(defun geiser-compile--file-op (path op msg) + (let* ((b/p (geiser-compile--buffer/path path)) + (buffer (car b/p)) + (path (cdr b/p)) + (msg (format "%s %s ..." msg path))) + (message msg) + (geiser-compile--display-result + msg (geiser-eval--send/wait `(:gs ((:ge ,op) ,path)))))) + + +;;; User commands:: -(defun geiser-compile-file (&optional path) +(defun geiser-compile-file (path) "Compile and load Scheme file." - (interactive (or path (read-file-name "Scheme file: " nil nil t))) - (let ((buffer (find-file-noselect path)) - (msg (format "Compiling %s ..." path))) - (when (and (buffer-modified-p buffer) - (y-or-n-p "Save buffer? ")) - (save-buffer buffer)) - (message msg) - (let* ((ret (geiser-eval--send/wait `(:gs ((:ge compile-file) ,path)))) - (err (geiser-eval--retort-error ret)) - (output (geiser-eval--retort-output ret))) - (geiser-compile--with-buffer - (erase-buffer) - (insert msg) - (newline) - (when output - (insert output) - (newline)) - (when err - (insert "\n" (geiser-eval--error-str err) "\n"))) - (if (not err) - (message "%s %s" msg (if output (geiser--chomp output) "OK!")) - (message "") - (geiser-compile--pop-to-buffer))))) + (interactive "FScheme file: ") + (geiser-compile--file-op path 'compile-file "Compiling")) (defun geiser-compile-current-buffer () "Compile and load current Scheme file." (interactive) (geiser-compile-file (buffer-file-name (current-buffer)))) +(defun geiser-load-file (path) + "Load Scheme file." + (interactive "FScheme file: ") + (geiser-compile--file-op path 'load-file "Loading")) + +(defun geiser-load-current-buffer () + "Load current Scheme file." + (interactive) + (geiser-load-file (buffer-file-name (current-buffer)))) + (provide 'geiser-compile) |