-
-
Notifications
You must be signed in to change notification settings - Fork 971
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Try to detech SSH connection when SSH_CONNECTION is unset #393
Conversation
This change allows us to detect SSH connections even when the `$SSH_CONNECTION` environment variable is gone. This can happen when a user changes to another user (`su`, `sudo`) or the environment is otherwise reset. By checking the output of `who am i` for a parenthesis at the end, we assume that said parenthesis must contain either an IPv4 or IPv6 address, indicating that this is a remote session. The reliablity of this assumption has not been analyzed to a great degree, there could be false positives, or systems that do not format the output in this way. Fixes sindresorhus#382.
|
||
typeset -gA prompt_pure_state=( | ||
username "$username" | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm considering doing more checks at "startup" in the future, the result of those would also go into prompt_pure_state
. We should be able to get rid of a bunch of other global (internal) pure variables this way.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like it 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I haven't tried whether it works or not, but the code itself looks good.
Thanks for reviewing! I'm fairly confident it will work based on my tests. There might be some odd implementations of As I was writing this, I decided to take a look at |
This change prevents the hostname from showing up when a terminal is opened inside a local X session (displayed as (:1)). Fixes a regression introduced in sindresorhus#393.
Turned out my hunch was right, #398 fixes it. |
This change prevents the hostname from showing up when a terminal is opened inside a local X session (displayed as (:1)). Fixes a regression introduced in sindresorhus#393.
* upstream/master: (21 commits) Fix wrong placement of localoptions during prompt init Fix line erasure when terminal output does not end in newline (sindresorhus#391) Try to detech SSH connection when SSH_CONNECTION is unset (sindresorhus#393) Always force BatchMode for the Git SSH command (sindresorhus#392) 1.7.0 Avoid setting title over serial console (sindresorhus#388) Hide virtualenv when explicitly disabled by the user (sindresorhus#381) Add install guide for Zplugin (sindresorhus#386) Update URL to Droid Sans Mono font (sindresorhus#387) Prevent multiple prompt resets in one execution cycle (sindresorhus#368) More thorough handling (hiding) of match results Avoid implicit creation of global var prompt_pure_git_arrows 1.6.0 Link to pure.zsh and async.zsh for better clarity (sindresorhus#358) Readme tweaks Link to a Pure-inspired prompt done in Rust Avoid implicit global var creation and cleanup (sindresorhus#347) Fix grammar in readme (sindresorhus#344) Update oh-my-zsh instructions in readme Remove extra $fpath from npm postinstall fail instructions ...
This change prevents the hostname from showing up when a terminal is opened inside a local X session (displayed as (:1)). Fixes a regression introduced in sindresorhus#393.
* Prevent hostname from showing up in local X sessions This change prevents the hostname from showing up when a terminal is opened inside a local X session (displayed as (:1)). Fixes a regression introduced in #393. * Implement a more robust remote connection detection (who) First, we switch from `who am i` to `who -m` because this is the POSIX way and macOS supports it as well. Second, if the above fails, we fall back to using just `who` and grep the line that represents our TTY. This works e.g. with busybox systems. Finally, we use (extremely) simplified regular expressions for detecting IPv4, IPv6 and hostname. This is a best-effort attempt at detecting the remote connections when SSH_CONNECTION is not set. * Inherit SSH connection detection inside tmux or other subshells * Store match and use upper case export for consistency This will also help with debugging if a user ever runs into a problem where the user/host is shown when it should not be: # typeset -p PROMPT_PURE_SSH_CONNECTION export PROMPT_PURE_SSH_CONNECTION='(::1)'
* upstream/master: Add pure-pwsh to the ports section of the readme (sindresorhus#467) Skip grep fork, use native zsh matching (sindresorhus#459) Add pure-now to Ports section in the readme (sindresorhus#458) 1.9.0 Update to zsh-async 1.7.1 and recover from unexpected worker death (sindresorhus#454) Add conda environment name to precmd (sindresorhus#440) Add Mímir to Ports section in the readme (sindresorhus#438) Avoid calling zle reset-prompt in precmd (sindresorhus#431) Simplify async tasks by not passing $PWD (sindresorhus#430) Abort git check if pwd has changed after invocation (sindresorhus#428) Update zsh-async to 1.7.0 (sindresorhus#429) 1.8.0 Advice against enabling incompatible Oh-My-Zsh plugins Show warning when Oh My Zsh themes are enabled (sindresorhus#426) Add support for VI-mode indicator (sindresorhus#405) Remove unused function for computing string length (sindresorhus#418) Update fpath-reference link (sindresorhus#417) Prevent IPv6 regexp from capturing the time (sindresorhus#413) Prevent hostname from showing up in local X sessions (sindresorhus#398) Make sure local HUP trap is unset during git fetch Improve the debug prompt (PS4) (sindresorhus#396) Show options as a table in readme (sindresorhus#407) Remove unfrequent FAQs from readme (sindresorhus#406) Prevent interactive prompts during git fetch (sindresorhus#397) Set title via atomic print statement (sindresorhus#399) Revert local prompt_opts, breaks promptinit Fix for setopt not taking effect when sourcing pure Fix prompt_pure_state on older versions of zsh Fix wrong placement of localoptions during prompt init Fix line erasure when terminal output does not end in newline (sindresorhus#391) Try to detech SSH connection when SSH_CONNECTION is unset (sindresorhus#393) Always force BatchMode for the Git SSH command (sindresorhus#392) 1.7.0 Avoid setting title over serial console (sindresorhus#388) Hide virtualenv when explicitly disabled by the user (sindresorhus#381) Add install guide for Zplugin (sindresorhus#386) Update URL to Droid Sans Mono font (sindresorhus#387) Prevent multiple prompt resets in one execution cycle (sindresorhus#368) More thorough handling (hiding) of match results Avoid implicit creation of global var prompt_pure_git_arrows 1.6.0 Link to pure.zsh and async.zsh for better clarity (sindresorhus#358) Readme tweaks Link to a Pure-inspired prompt done in Rust Avoid implicit global var creation and cleanup (sindresorhus#347)
…us#393) This change allows us to detect SSH connections even when the `$SSH_CONNECTION` environment variable is gone. This can happen when a user changes to another user (`su`, `sudo`) or the environment is otherwise reset. By checking the output of `who am i` for a parenthesis at the end, we assume that said parenthesis must contain either an IPv4 or IPv6 address, indicating that this is a remote session. The reliablity of this assumption has not been analyzed to a great degree, there could be false positives, or systems that do not format the output in this way. Fixes sindresorhus#382.
* Prevent hostname from showing up in local X sessions This change prevents the hostname from showing up when a terminal is opened inside a local X session (displayed as (:1)). Fixes a regression introduced in sindresorhus#393. * Implement a more robust remote connection detection (who) First, we switch from `who am i` to `who -m` because this is the POSIX way and macOS supports it as well. Second, if the above fails, we fall back to using just `who` and grep the line that represents our TTY. This works e.g. with busybox systems. Finally, we use (extremely) simplified regular expressions for detecting IPv4, IPv6 and hostname. This is a best-effort attempt at detecting the remote connections when SSH_CONNECTION is not set. * Inherit SSH connection detection inside tmux or other subshells * Store match and use upper case export for consistency This will also help with debugging if a user ever runs into a problem where the user/host is shown when it should not be: # typeset -p PROMPT_PURE_SSH_CONNECTION export PROMPT_PURE_SSH_CONNECTION='(::1)'
This change allows us to detect SSH connections even when the
$SSH_CONNECTION
environment variable is gone. This can happen when a user changes to another user (su
,sudo
) or the environment is otherwise reset.By checking the output of
who am i
for a parenthesis at the end, we assume that said parenthesis must contain either an IPv4 or IPv6 address, indicating that this is a remote session.The reliablity of this assumption has not been analyzed to a great degree, there could be false positives, or systems that do not format the output in this way.
Fixes #382.
This PR might introduce a start-up impact (via
who am i | grep -q '(.*)$'
) but I'm not really worried that it would be noticeable.