dotemacs

My Emacs configuration
git clone git://git.entf.net/dotemacs
Log | Files | Refs | LICENSE

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)