Avoid overwriting existing PROMPT_COMMAND #46
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.


Fixes #43
There seems to be an existing report #43 by another user, but I have also faced a problem with
truelinefor its behavior overwritingPROMPT_COMMAND. This PR fixes the problem.Problem
The current setup of
truelineoverwrites the existing value ofPROMPT_COMMAND, so the setups by other plugins sourced beforetruelineare all disabled.Bash 5.1 introduced the array
PROMPT_COMMANDto resolve the conflictingPROMPT_COMMAND, buttruelineeven completely breaks this new Bash 5.1 feature byunset PROMPT_COMMAND. With Bash 5.1+, the plugins are supposed to add itsPROMPT_COMMANDby e.g.PROMPT_COMMAND+=(_plugin_specific_prompt_command)keeping the existing array elements as is. However, the currenttruelineremoves all the other elements by unsetting the entire array byunset PROMPT_COMMAND.Solution
With Bash 5.1+, we may just use
PROMPT_COMMAND+=(_trueline_prompt_command). To protect it from some older plugins that does not support Bash 5.1+, we can optionally prependPROMPT_COMMAND=${PROMPT_COMMAND-}as suggested by Martijn in the Bash mailing list [1].With Bash 5.0 and below, we can prepend
_trueline_prompt_commandin the existing value ofPROMPT_COMMAND.