geiser-compile.el (2671B)
1 ;;; geiser-compile.el -- compile/load scheme files -*- lexical-binding: t; -*- 2 3 ;; Copyright (C) 2009-2013, 2016, 2018, 2021-2022 Jose Antonio Ortega Ruiz 4 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>. 9 10 ;; Start date: Wed Feb 11, 2009 00:16 11 12 13 ;;; Code: 14 15 (require 'geiser-debug) 16 (require 'geiser-autodoc) 17 (require 'geiser-eval) 18 (require 'geiser-base) 19 (require 'geiser-repl) 20 21 22 ;;; Auxiliary functions: 23 24 (defun geiser-compile--buffer/path (&optional path) 25 (let ((path (or path (read-file-name "Scheme file: " nil nil t)))) 26 (let ((buffer (find-file-noselect path))) 27 (when (and (buffer-modified-p buffer) 28 (y-or-n-p "Save buffer? ")) 29 (save-buffer buffer)) 30 (cons buffer path)))) 31 32 (defun geiser-compile--display-result (title ret) 33 (if (not (geiser-eval--retort-error ret)) 34 (message "%s done" title) 35 (message "")) 36 (geiser-debug--display-retort title ret)) 37 38 (defun geiser-compile--file-op (path compile-p msg) 39 (let* ((b/p (geiser-compile--buffer/path path)) 40 (path (cdr b/p)) 41 (msg (format "%s %s ..." msg path)) 42 (code `(,(if compile-p :comp-file :load-file) ,path)) 43 (cont (lambda (ret) (geiser-compile--display-result msg ret)))) 44 (message msg) 45 (geiser-autodoc--clean-cache) 46 (geiser-eval--send code cont))) 47 48 (defun geiser-compile--ensure-repl (force) 49 (when (or force 50 (and (not (geiser-repl--repl-buffer-p)) 51 (yes-or-no-p "No REPL is running: start it?"))) 52 (geiser-repl-restart-repl))) 53 54 55 ;;; User commands: 56 57 (defun geiser-compile-file (path) 58 "Compile and load Scheme file." 59 (interactive "FScheme file: ") 60 (geiser-compile--file-op path t "Compiling")) 61 62 (defun geiser-compile-current-buffer (&optional restart) 63 "Compile and load current Scheme file. 64 65 With prefix, restart REPL before compiling the file." 66 (interactive "P") 67 (geiser-compile--ensure-repl restart) 68 (geiser-compile-file (buffer-file-name (current-buffer)))) 69 70 (defun geiser-load-file (path) 71 "Load Scheme file." 72 (interactive "FScheme file: ") 73 (geiser-compile--ensure-repl nil) 74 (geiser-compile--file-op (file-local-name (expand-file-name path)) nil "Loading")) 75 76 (defun geiser-load-current-buffer (&optional restart) 77 "Load current Scheme file. 78 79 With prefix, restart REPL before loading the file." 80 (interactive "P") 81 (geiser-compile--ensure-repl restart) 82 (geiser-load-file (buffer-file-name (current-buffer)))) 83 84 (provide 'geiser-compile)