geiser-reload.el (2537B)
1 ;;; geiser-reload.el -- unload/load geiser packages -*- lexical-binding: t; -*- 2 3 ;; Copyright (C) 2009, 2010, 2012, 2020, 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: Sat Aug 22, 2009 23:04 11 12 13 ;;; Code: 14 15 (require 'geiser-repl) 16 (require 'geiser-mode) 17 (require 'geiser-custom) 18 (require 'geiser-base) 19 (require 'geiser) 20 21 22 ;;; Reload: 23 24 (defmacro geiser--features-list () 25 (quote '( 26 geiser-mode 27 geiser-repl 28 geiser-capf 29 geiser-doc 30 geiser-xref 31 geiser-compile 32 geiser-debug 33 geiser-completion 34 geiser-autodoc 35 geiser-edit 36 geiser-eval 37 geiser-connection 38 geiser-syntax 39 geiser-menu 40 geiser-inf 41 geiser-impl 42 geiser-image 43 geiser-custom 44 geiser-log 45 geiser-popup 46 geiser-base 47 geiser-version 48 geiser 49 ))) 50 51 (defun geiser-unload () 52 "Unload all Geiser modules." 53 (interactive) 54 (let ((fs (geiser--features-list))) 55 (unload-feature 'geiser-reload t) 56 (dolist (f fs) 57 (when (featurep f) (unload-feature f t))) 58 (remove-hook 'scheme-mode-hook 'geiser-mode--maybe-activate))) 59 60 (defun geiser-reload (&optional arg) 61 "Reload Geiser. 62 With prefix arg, prompts for the DIRECTORY from which Geiser should be 63 loaded again." 64 (interactive "P") 65 (let* ((old-dir geiser-elisp-dir) 66 (dir (or (and arg (read-directory-name "New Geiser elisp dir: " 67 old-dir old-dir t old-dir)) 68 old-dir))) 69 (unless (or (file-exists-p (expand-file-name "geiser-reload.el" dir)) 70 (file-exists-p (expand-file-name "geiser-reload.elc" dir))) 71 (error "%s does not contain Geiser!" dir)) 72 (let ((memo (geiser-custom--memoized-state)) 73 (repls (geiser-repl--repl-list)) 74 (buffers (geiser-mode--buffers))) 75 (geiser-unload) 76 (setq load-path (remove old-dir load-path)) 77 (add-to-list 'load-path dir) 78 (mapc (lambda (x) (set (car x) (cdr x))) memo) 79 (require 'geiser-reload) 80 (geiser-repl--restore repls) 81 (geiser-mode--restore buffers) 82 (message "Geiser reloaded!")))) 83 84 85 (provide 'geiser-reload)