mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-21 06:55:39 +00:00
Add support for reading/writing IELM input history (bug#67000)
* lisp/ielm.el (inferior-emacs-lisp-mode): Add support for saving input history to a file. (ielm--history-file-name): New variable indicating IELM input history file. (ielm--exit): Holds a function to call when Emacs is killed to write out the input history. (ielm--input-history-writer): Helper function for writing the IELM input history out to file. * lisp/comint.el (comint-input-ring-file-name): Improve defcustom tag.
This commit is contained in:
parent
783a511d1e
commit
60cff1ac9d
8
etc/NEWS
8
etc/NEWS
@ -1357,6 +1357,14 @@ characters, such as ½ (U+00BD VULGAR FRACTION ONE HALF), are also
|
|||||||
recognized as rational fractions. They have been since 2004, but it
|
recognized as rational fractions. They have been since 2004, but it
|
||||||
looks like it was never mentioned in the NEWS, or even the manual.
|
looks like it was never mentioned in the NEWS, or even the manual.
|
||||||
|
|
||||||
|
** IELM
|
||||||
|
|
||||||
|
---
|
||||||
|
*** IELM now remembers input history between sessions.
|
||||||
|
The new user option 'ielm-history-file-name' is the name of the file
|
||||||
|
where IELM input history will be saved. Customize it to nil to revert
|
||||||
|
to the old behavior of not remembering input history between sessions.
|
||||||
|
|
||||||
|
|
||||||
* New Modes and Packages in Emacs 30.1
|
* New Modes and Packages in Emacs 30.1
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ This variable is buffer-local."
|
|||||||
See also `comint-read-input-ring' and `comint-write-input-ring'.
|
See also `comint-read-input-ring' and `comint-write-input-ring'.
|
||||||
`comint-mode' makes this a buffer-local variable. You probably want
|
`comint-mode' makes this a buffer-local variable. You probably want
|
||||||
to set this in a mode hook, rather than customize the default value."
|
to set this in a mode hook, rather than customize the default value."
|
||||||
:type '(choice (const :tag "nil" nil)
|
:type '(choice (const :tag "Disable input history" nil)
|
||||||
file)
|
file)
|
||||||
:group 'comint)
|
:group 'comint)
|
||||||
|
|
||||||
|
29
lisp/ielm.el
29
lisp/ielm.el
@ -110,6 +110,13 @@ This gives more frame width for large indented sexps, and allows functions
|
|||||||
such as `edebug-defun' to work with such inputs."
|
such as `edebug-defun' to work with such inputs."
|
||||||
:type 'boolean)
|
:type 'boolean)
|
||||||
|
|
||||||
|
(defcustom ielm-history-file-name
|
||||||
|
(locate-user-emacs-file "ielm-history.eld")
|
||||||
|
"If non-nil, name of the file to read/write IELM input history."
|
||||||
|
:type '(choice (const :tag "Disable input history" nil)
|
||||||
|
file)
|
||||||
|
:version "30.1")
|
||||||
|
|
||||||
(defvaralias 'inferior-emacs-lisp-mode-hook 'ielm-mode-hook)
|
(defvaralias 'inferior-emacs-lisp-mode-hook 'ielm-mode-hook)
|
||||||
(defcustom ielm-mode-hook nil
|
(defcustom ielm-mode-hook nil
|
||||||
"Hooks to be run when IELM (`inferior-emacs-lisp-mode') is started."
|
"Hooks to be run when IELM (`inferior-emacs-lisp-mode') is started."
|
||||||
@ -503,6 +510,17 @@ behavior of the indirect buffer."
|
|||||||
(funcall pp-default-function beg end)
|
(funcall pp-default-function beg end)
|
||||||
end))
|
end))
|
||||||
|
|
||||||
|
;;; Input history
|
||||||
|
|
||||||
|
(defvar ielm--exit nil
|
||||||
|
"Function to call when Emacs is killed.")
|
||||||
|
|
||||||
|
(defun ielm--input-history-writer (buf)
|
||||||
|
"Return a function writing IELM input history to BUF."
|
||||||
|
(lambda ()
|
||||||
|
(with-current-buffer buf
|
||||||
|
(comint-write-input-ring))))
|
||||||
|
|
||||||
;;; Major mode
|
;;; Major mode
|
||||||
|
|
||||||
(define-derived-mode inferior-emacs-lisp-mode comint-mode "IELM"
|
(define-derived-mode inferior-emacs-lisp-mode comint-mode "IELM"
|
||||||
@ -605,6 +623,17 @@ Customized bindings may be defined in `ielm-map', which currently contains:
|
|||||||
#'ielm-indirect-setup-hook 'append t)
|
#'ielm-indirect-setup-hook 'append t)
|
||||||
(setq comint-indirect-setup-function #'emacs-lisp-mode)
|
(setq comint-indirect-setup-function #'emacs-lisp-mode)
|
||||||
|
|
||||||
|
;; Input history
|
||||||
|
(setq-local comint-input-ring-file-name ielm-history-file-name)
|
||||||
|
(setq-local ielm--exit (ielm--input-history-writer (current-buffer)))
|
||||||
|
(setq-local kill-buffer-hook
|
||||||
|
(lambda ()
|
||||||
|
(funcall ielm--exit)
|
||||||
|
(remove-hook 'kill-emacs-hook ielm--exit)))
|
||||||
|
(unless noninteractive
|
||||||
|
(add-hook 'kill-emacs-hook ielm--exit))
|
||||||
|
(comint-read-input-ring t)
|
||||||
|
|
||||||
;; A dummy process to keep comint happy. It will never get any input
|
;; A dummy process to keep comint happy. It will never get any input
|
||||||
(unless (comint-check-proc (current-buffer))
|
(unless (comint-check-proc (current-buffer))
|
||||||
;; Was cat, but on non-Unix platforms that might not exist, so
|
;; Was cat, but on non-Unix platforms that might not exist, so
|
||||||
|
Loading…
Reference in New Issue
Block a user