Git Product home page Git Product logo

Comments (10)

dimo414 avatar dimo414 commented on June 26, 2024

Similar support for PROMPT_COMMAND (appended to precmd_functions) would also be nice.

from bash-preexec.

rcaloras avatar rcaloras commented on June 26, 2024

the original PROMPT_COMMAND should be preserved as part of PROMPT_COMMANDstill.
https://github.com/rcaloras/bash-preexec/blob/master/bash-preexec.sh#L270

We could also move it to the precmd_functions array as well.

from bash-preexec.

dimo414 avatar dimo414 commented on June 26, 2024

Ah, nice. Moving it to precmd_functions (if that's what's done for the DEBUG trap) would make sense assuming it wouldn't break anyone. Otherwise leaving it as-is is probably fine.

from bash-preexec.

dimo414 avatar dimo414 commented on June 26, 2024

Currently bash-preexec clobbers existing DEBUG traps when it is sourced.

I'm actually not sure this is true; I found that sourced scripts can't override an existing DEBUG trap. Worse, it seems from within the sourced script there's no way to tell whether a DEBUG trap was already set or not. I'm not sure if this FR is possible.

from bash-preexec.

rcaloras avatar rcaloras commented on June 26, 2024

@dimo414 I noticed this a little while back. The debug trap isn't actually set when sourcing the script. bash-preexec actually does a two part install where it hooks its install function first into PROMPT_COMMAND and then runs setup through the invocation of that function. e.g. https://github.com/rcaloras/bash-preexec/blob/master/bash-preexec.sh#L306. and https://github.com/rcaloras/bash-preexec/blob/master/bash-preexec.sh#L241

Original commit for it: 4744d7e

from bash-preexec.

dimo414 avatar dimo414 commented on June 26, 2024

Well that's clever :) It would not have crossed my mind to try that. In that case it seems like it should be possible to add the trap to preexec_functions with something like:

preexec_functions+=("$(trap -p DEBUG | sed "s/[^']*'\(.*\)'[^']*/\1/")")

There's probably a better way to extract the DEBUG command, but that worked in a pinch. I take it you're open to a pull request adding something along these lines?

from bash-preexec.

rcaloras avatar rcaloras commented on June 26, 2024

Of course! Please feel free to submit a PR 👍

from bash-preexec.

rcaloras avatar rcaloras commented on June 26, 2024

Closing addressed by @dimo414

from bash-preexec.

rcaloras avatar rcaloras commented on June 26, 2024

@dimo414 Realized this PR no longer preserves the second half of a user's PROMPT_COMMAND. i.e. anything after the bash-preexec install commands. This is due to preserving PROMPT_COMMAND when it's first sourced and not as bash-preexec is being installed during the session init.

# If there's an existing PROMPT_COMMAND capture it and convert it into a function
# So it is preserved and invoked during precmd.
if [[ -n "$PROMPT_COMMAND" ]]; then
eval '__bp_original_prompt_command() {
'"$PROMPT_COMMAND"'
}'

Any way that we can preserve any commands afterwards into precmd? e.g. a .bash_profile like

PROMPT_COMMAND="foo"
source bash-preexec.sh
PROMPT_COMMAND="$PROMPT_COMMAND; bar"

would preserve both foo and bar.

I was originally doing this by parsing out the entire install string and then putting the original prompt command back into PROMPT_COMMAND:
https://github.com/rcaloras/bash-preexec/pull/50/files#diff-9f42bfd9f684d2763a4d12cc481506a1L244

from bash-preexec.

rcaloras avatar rcaloras commented on June 26, 2024

Trap is preserved and prompt command is fixed in 0.4.0.

from bash-preexec.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.