* Exclude the `bind -x` commands from interactive commands
* Check COMP_POINT instead of possibly empty COMP_LINE
The check for COMP_LINE can fail because it can be empty in the
completion function for the empty command line "complete -F _func -E".
This is an oversight of changing `trap DEBUG` to `trap - DEBUG` in
https://github.com/rcaloras/bash-preexec/pull/106
The oversight did not cause a test error because the test always
succeeds. The problem is that even if __bp_install is broken and
fails to remove `trap - DEBUG`, the current test case failed to detect
the failure and produce a false negative. This patch fixes it.
* Fix the test for the Bash version for shellcheck
* Add parenthesis and whitespace for clarity
---------
Co-authored-by: Michael Diamond <dimo414@gmail.com>
Some libraries do things like `PROMPT_COMMAND="$PROMPT_COMMAND ; _new_addition"`, that's a space-semicolon-space. It would be counter-productive to try to account for all possibilities, so just swap the install string for a no-op.
Clean up no-op, it it's all that's left
Co-authored-by: Ryan Caloras <rcaloras@gmail.com>
* Disable remaining shellcheck false warning
* Avoid passing empty argument to `return`
* Avoid word splitting of the exit status
* Follow the shellcheck suggestion
* add shellcheck # shellcheck shell=bash directive to allow linting
* BP_PIPESTATUS may be unused in function __bp_precmd_invoke_cmd, ignore
* line 174 - SC2086 (info): Double quote to prevent globbing and word splitting.
* line 249 false alarm 'SC1007 (warning): Remove space after = ', added ignore.
* line 294 SC2155 (warning): Declare and assign separately to avoid masking return values.
* line 295 SC2001 (style): See if you can use ${variable//search/replace}. Added ignore
* line 323 SC1087 (error): Use braces when expanding arrays. Disable warning
* fix indentation
* line 249 false alarm 'SC1007 (warning): empty space to '' removed shellcheck directive
Co-authored-by: Adam Price <git@blinvisible.com>
* Return original value from `__bp_precmd_invoke_cmd`
WIthout this change, `__bp_precmd_invoke_cmd` may not restore `$?` to its original value after being run.
Since `__bp_precmd_invoke_cmd` get installed as the first thing in `PROMPT_COMMAND`, this will cause problems if there is an existing `PROMPT_COMMAND` (which is perhaps not aware of `bash-preexec`) that wants to do something with the exit status of the command that was just run.
* Updating tests to allow preserving original exist status for other commands in PROMPT_COMMAND
Co-authored-by: Ryan Caloras <rcaloras@alumni.cmu.edu>
* Remove the underscore prefix of "__bp_imported"
This formally exposes it as part of the public API.
* Fix Bats test after renaming the variable
* Rename the variable upon reviewer request
* Fix inconsistency after renaming variables
Variables were reanmed in 7fbc07fb4e, but
it didn’t cover the test or ReadMe. This commit fixes that.
Since the precmd_functions and preexec_functions arrays won't be actually defined until __bp_install, which is called only during the first $PROMPT_COMMAND, declare empty arrays for these parameters.
This ensures that the shell is aware these things exist, which helps avoud unbound parameters failures in other scripts which depend upon this package.
- Return with an exit code of 1 when run in any shell other than Bash.
Should prevent any functions or variables from being defined. This check
was previously run later during initialization.
- Updated test case for this
- Should address #113
This change allows us to avoid unnecessary command substitutions which are (relatively speaking) quite expensive. Although __bp_sanitize_string is only used during installation __bp_trim_whitespace is invoked in a loop in the critial path as part of __bp_preexec_invoke_exec. Eliminating these subshells will reduce bash-preexec's overhead.
See https://github.com/dimo414/prompt.gem/commit/9764cdb3 for another example of a similar change.
Note: the printf -v syntax was added to Bash in v3.1: https://mywiki.wooledge.org/BashFAQ/061
- Need to update unit tests for echos on both cases
- Small edge case where preexec is not invoked the first time if
PROMPT_COMMAND is appended to after bash-preexec is sourced.
- Handle cases where we append with semicolon and \n
- Relaxes requirement that bash-prexec.sh needs to be included as last
thing in bash_profile.sh
- Preserves existing prompt command in PROMPT_COMMAND variable. May make
sense to still move this to a function in precmd.
- Should address #97 and #39
- Keeps existing traps preserved as preexec functions
- Removes trailing \n on PROMPT_COMMAND added for #58.
In a [`--posix` shell](https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html) (e.g. a shell invoked as `sh` instead of `bash`) the ARG parameter is not optional:
> 41. The trap builtin doesn’t check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should use ‘-’ as the first argument.
It may not be the intent of bash-preexec to actively _support_ POSIX mode, but the failure behavior here is pretty bad:
```
$ bash --noprofile --norc --posix || echo BASH CRASHED
bash-5.0$ source bash_preexec.sh
trap: usage: trap [-lp] [[arg] signal_spec ...]
BASH CRASHED
```
So this small tweak seems worthwhile, even if POSIX mode ends up being problematic for other reasons.
* Using [[ ... ]] on older versions of Bash (e.g. 3.2 on macOS) causes
the test to always pass.
* Include test/README.md that explains the problem and suggests
solutions for future tests.
* Fix use of sed on platforms that don't support \+
Fixes#89.
* Set LC_ALL=C before manipulating strings of numbers.
Thanks @Gnouc for the suggestion in #89.
* upgrade bats version to bats-core 1.1.0
This is necessary for testing with 'nounset'.
* run tests with 'set -o nounset'
Updates tests to run under "nounset" and changes
the code so that the tests pass again.
This resolves#80 .
Tests now pass on both bash 4.3 (travis) and 4.4
(my local). We should probably test multiple
versions of bash at some point.