Add prompt mode and process OSC 51 as UI Command
* eat.el (eat-enable-native-shell-prompt-editing) (eat-prompt-input-ring-size) (eat-prompt-move-point-for-matching-input): New user option. * eat.el (eat--t-term): Remove slots 'cwd', 'prompt-start-fn', 'prompt-end-fn', 'cont-prompt-start-fn', 'cont-prompt-end-fn', 'cmd-start-fn' and 'cmd-finish-fn'. Add new slot 'ui-cmd-fn'. * eat.el (eat--t-set-cwd): Support only the format used by OSC 7. * eat.el (eat--t-prompt-start, eat--t-prompt-end) (eat--t-cont-prompt-start, eat--t-cont-prompt-end) (eat--t-set-cmd, eat--t-cmd-start, eat--t-cmd-finish): Remove function. * eat.el (eat--t-ui-cmd): New function. * eat.el (eat--t-handle-output): Remove all specialized OSC 51 handlers and call 'eat--t-ui-cmd' to handle any OSC 51 sequence. * eat.el (eat-term-set-parameter): Set 'ui-cmd-fn' slot of terminal when 'ui-command-function' is set. * eat.el (eat-term-cwd): Remove function. * eat.el (eat-term-prompt-start-function) (eat-term-prompt-end-function, eat-term-cmd-start-function) (eat-term-cont-prompt-start-function) (eat-term-cont-prompt-end-function, eat-term-set-cmd-function) (eat-term-cmd-finish-function): Remove generalized variables. * eat.el (eat-term-send-string): New function. * eat.el (eat-send-string-as-yank): Rename to 'eat-term-send-string-as-yank'. All callers changed. * eat.el (eat--set-cwd-uic, eat--post-cont-prompt): New function. * eat.el (eat--pre-prompt, eat--post-prompt, eat--set-cmd) (eat--pre-cmd, eat--set-cmd-status): Remove unused first argument. All callers changed. * eat.el (eat--get-shell-history, eat--handle-uic): New function. * eat.el (eat-prompt-mode-map): New variable. * eat.el (eat-emacs-mode, eat-semi-char-mode, eat-char-mode): Handle the case when prompt mode is active. * eat.el (eat--prompt-mode-previous-mode): New variable. * eat.el (eat--prompt-mode): New non-interactive minor mode. * eat.el (eat-prompt-send-default, eat-prompt-send) (eat-prompt-newline, eat-prompt-delchar-or-eof) (eat-prompt-send-interrupt): New command. * eat.el (eat--prompt-input-ring, eat--prompt-input-ring-index) (eat--prompt-stored-incomplete-input) (eat--prompt-matching-input-from-input-string): New variable. * eat.el (eat--prompt-populate-input-ring) (eat--prompt-reset-input-ring-vars, eat--prompt-ask-for-regexp-arg) (eat--prompt-search-arg, eat--prompt-search-start) (eat--prompt-prev-input-string, eat--prompt-prev-matching-input-str) (eat--prompt-delete-input, eat--prompt-prev-matching-input-str-pos): New function. * eat.el (eat-prompt-previous-input, eat-prompt-next-input) (eat-prompt-restore-input, eat-prompt-previous-matching-input) (eat-prompt-next-matching-input, eat-prompt-find-input) (eat-prompt-previous-matching-input-from-input) (eat-prompt-next-matching-input-from-input): New command. * eat.el (eat-mode): Make 'eat--prompt-mode-previous-mode', 'eat--prompt-input-ring', 'eat--prompt-input-ring-index', 'eat--prompt-stored-incomplete-input' and 'eat--prompt-matching-input-from-input-string' buffer-local. Record undo information if 'eat-enable-native-shell-prompt-editing' is enabled. Set 'mode-line-process' properly so that prompt mode is shown when enabled. * eat.el (eat--process-output-queue): Remove any narrowing temporarily when called. Don't * eat.el (eat--sentinel): Disable prompt mode. Also fix the bug where the point centers when the program exits, instead of going to the end of buffer. * eat.el (eat-exec): Don't set removed generalized variables 'eat-term-prompt-start-function', 'eat-term-set-cmd-function', 'eat-term-prompt-end-function', 'eat-term-cmd-start-function' and 'eat-term-cmd-finish-function'. Set terminal parameter 'ui-command-function' to 'eat--handle-uic'. * eat.el (eat--eshell-handle-uic): New function. * eat.el (eat--eshell-output-filter): Let-bind 'inhibit-read-only' only for required parts. * eat.el (eat--eshell-setup-proc-and-term): Set terminal parameter 'ui-command-function' to 'eat--eshell-handle-uic'. * eat.el (eat--eshell-sentinel): Fix the bug where the point centers when the program exits, instead of going to the end of buffer. * integration/bash (__eat_enable_integration): Send shell history.
This commit is contained in:
parent
b4595662d4
commit
baf0bb7e5f
2 changed files with 686 additions and 296 deletions
|
@ -102,6 +102,17 @@ __eat_enable_integration ()
|
|||
done
|
||||
# Step 2.2: Assign the first element.
|
||||
PROMPT_COMMAND[0]=__eat_before_prompt_command
|
||||
# Send the history, for native shell prompt.
|
||||
printf '\e]51;e;I;0;%s;%s\e\\' \
|
||||
"$(printf "%s" "$HOSTNAME" | base64)" \
|
||||
"$(printf "%s" "$HISTFILE" | base64)"
|
||||
local REPLY
|
||||
IFS=$';\e' read -r -s -t 10 -d "\\" -a REPLY
|
||||
if test "${REPLY[4]}" != 0
|
||||
then
|
||||
printf '\e]51;e;I;1;%s\e\\' \
|
||||
"$(tail -n "${REPLY[4]}" "$HISTFILE" | base64)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Enable.
|
||||
|
|
Loading…
Add table
Reference in a new issue