From e4c958fe1e5bad829e08dbce31f1a23e458ebd6b Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Wed, 11 Feb 2009 10:47:12 +0100 Subject: Load file commands. --- elisp/geiser-compile.el | 80 +++++++++++++++++++++++++++++++++---------------- elisp/geiser-mode.el | 12 +++++--- elisp/geiser-repl.el | 1 + 3 files changed, 64 insertions(+), 29 deletions(-) (limited to 'elisp') 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) diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index 18accb4..f5798e5 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -137,21 +137,25 @@ interacting with the Geiser REPL is at your disposal. ;;; Keys: +(define-key geiser-mode-map "\C-c\C-z" 'switch-to-guile) +(define-key geiser-mode-map "\C-c\C-l" 'geiser-load-current-buffer) +(define-key geiser-mode-map "\C-c\C-k" 'geiser-compile-current-buffer) + (define-key geiser-mode-map (kbd "M-TAB") 'geiser-completion--complete-symbol) + (define-key geiser-mode-map "\M-\C-x" 'geiser-send-definition) -(define-key geiser-mode-map "\C-c\C-a" 'geiser-autodoc-mode) (define-key geiser-mode-map "\C-x\C-e" 'geiser-send-last-sexp) (define-key geiser-mode-map "\C-c\C-e" 'geiser-send-definition) (define-key geiser-mode-map "\C-c\M-e" 'geiser-send-definition-and-go) (define-key geiser-mode-map "\C-c\C-r" 'geiser-send-region) (define-key geiser-mode-map "\C-c\M-r" 'geiser-send-region-and-go) + +(define-key geiser-mode-map "\C-c\C-a" 'geiser-autodoc-mode) + (define-key geiser-mode-map "\C-c\M-c" 'geiser-compile-definition) (define-key geiser-mode-map "\C-c\C-c" 'geiser-compile-definition-and-go) (define-key geiser-mode-map "\C-c\C-t" 'geiser-trace-procedure) (define-key geiser-mode-map "\C-c\C-x" 'geiser-expand-current-form) -(define-key geiser-mode-map "\C-c\C-z" 'switch-to-guile) -(define-key geiser-mode-map "\C-c\C-l" 'geiser-load-file) -(define-key geiser-mode-map "\C-c\C-k" 'geiser-compile-current-buffer) (provide 'geiser-mode) diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index 3cb84b8..d757bef 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -143,6 +143,7 @@ the Geiser REPL buffer." (define-key geiser-repl-mode-map "\C-a" 'geiser-repl--bol) (define-key geiser-repl-mode-map "\C-ca" 'geiser-autodoc-mode) (define-key geiser-repl-mode-map "\C-ck" 'geiser-compile-file) +(define-key geiser-repl-mode-map "\C-cl" 'geiser-load-file) (define-key geiser-repl-mode-map "\M-p" 'comint-previous-matching-input-from-input) (define-key geiser-repl-mode-map "\M-n" 'comint-next-matching-input-from-input) -- cgit v1.2.3