GNU bug report logs -
#67000
30.0.50; [PATCH] Add support for reading/writing IELM input history
Previous Next
Reported by: Simen Heggestøyl <simenheg <at> runbox.com>
Date: Wed, 8 Nov 2023 15:13:01 UTC
Severity: wishlist
Tags: patch
Found in version 30.0.50
Done: Simen Heggestøyl <simenheg <at> runbox.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Hi Stefan, thanks for your feedback. An updated patch is attached.
Stefan Kangas <stefankangas <at> gmail.com> writes:
> Simen Heggestøyl <simenheg <at> runbox.com> writes:
>
>> +---
>> +*** IELM now remembers input history between sessions.
>> +
>> +---
>> +*** New variable 'ielm-history-file-name'.
>> +If non-nil, name of the file to read/write IELM input history. Set to
>> +nil to revert IELM to the old behavior of not remembering input
>> +history between sessions.
>
> I would probably make this into one entry, like so:
>
> *** 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.
Aight, changed!
>> +(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 "nil" nil)
>
> The tag here should be "Disable input history" or something like that.
Ok. Should it be updated for `comint-input-ring-file-name' too then (I
copied it from there)?
> This should read
>
> (defvar ielm--exit nil
>
> or the below docstring will instead be its value.
Of course, thanks.
>> + "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
>>
>> (define-derived-mode inferior-emacs-lisp-mode comint-mode "IELM"
>> @@ -605,6 +623,17 @@ inferior-emacs-lisp-mode
>> #'ielm-indirect-setup-hook 'append t)
>> (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)
>
> There are some complications here:
>
> You can get more than one IELM buffer using
>
> M-x ielm RET
> M-x rename-buffer RET foo RET
> M-x ielm RET
>
> What happens if there is more than one IELM buffer? It will save only
> the history from the last one, or something like that?
Yes. Though I think that's kind of expected; that's how Eshell for
instance also works.
> Perhaps the kill-emacs-hook should look for all buffers that are using
> `ielm-mode' and save the history from all of them?
It would also need to be handled in the kill-buffer hooks I guess,
updating the remaining buffers' histories when one buffer is
killed. Sounds kind of messy though, I think I'd prefer the more simple
approach suggested here.
-- Simen
[0001-Add-support-for-reading-writing-IELM-input-history.patch (text/x-diff, attachment)]
This bug report was last modified 1 year and 181 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.