[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#67000: 30.0.50; [PATCH] Add support for reading/writing IELM input h
From: |
Simen Heggestøyl |
Subject: |
bug#67000: 30.0.50; [PATCH] Add support for reading/writing IELM input history |
Date: |
Wed, 07 Feb 2024 15:02:56 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Hi Stefan, thanks for your feedback. An updated patch is attached.
Stefan Kangas <stefankangas@gmail.com> writes:
> Simen Heggestøyl <simenheg@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
Description: Text Data
- bug#67000: 30.0.50; [PATCH] Add support for reading/writing IELM input history,
Simen Heggestøyl <=