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