Difference between revisions of "How to indicate that shell session is running inside Vifm"
Jump to navigation
Jump to search
(Fix syntax highlighting errors (use pre instead of source tag)) |
(fix previous edit) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 46: | Line 46: | ||
[V][~]$ | [V][~]$ | ||
</pre> | </pre> | ||
+ | |||
+ | === Variant #3. Demonstrated using fish === | ||
+ | |||
+ | To be added to <code>vifmrc</code>: | ||
+ | |||
+ | <source lang="bash"> | ||
+ | let $INSIDE_VIFM = 'true' | ||
+ | </source> | ||
+ | |||
+ | In <code>.config/fish/functions/</code> create a file <code>check_if_inside_vifm.fish</code> and paste the following: | ||
+ | |||
+ | <source lang=bash> | ||
+ | status is-interactive || exit | ||
+ | functions -c fish_prompt original_fish_prompt | ||
+ | function fish_prompt | ||
+ | # prepend fish_prompt with a custom message if running inside VIFM | ||
+ | if [ "$INSIDE_VIFM" = "true" ] | ||
+ | set_color brgreen | ||
+ | echo "Running inside VIFM, hit Ctrl-D to exit" | ||
+ | end | ||
+ | original_fish_prompt | ||
+ | end | ||
+ | </source> | ||
==== Drawbacks ==== | ==== Drawbacks ==== | ||
Line 54: | Line 77: | ||
[https://q2a.vifm.info/372/indicate-that-shell-sessions-is-running-inside-vifm Vifm Q&A question] | [https://q2a.vifm.info/372/indicate-that-shell-sessions-is-running-inside-vifm Vifm Q&A question] | ||
+ | |||
+ | [[Category:HOWTO]] |
Latest revision as of 14:17, 19 April 2022
The idea is to make shell indicate whether it was run inside by Vifm and exiting it will bring Vifm back or not.
Variant #1. Demonstrated using zsh[edit]
Add the following to .zshrc
:
if [ $(ps -ocommand= $(ps -oppid= -p $$)) = "vifm" ]
then
printf "\e[48;5;21m"
echo "-- VIFM SHELL SESSION --"
export PROMPT="-- VIFM_SESSION --"$'\n'"${ret_status} %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)"
fi
It will look similar to this:
-- VIFM SHELL SESSION -- -- VIFM_SESSION -- ➜ ~ uname Linux -- VIFM_SESSION --
Variant #2. Demonstrated using bash[edit]
To be added to vifmrc
:
let $INSIDE_VIFM = 'true'
In .bashrc
:
if [ -n "$INSIDE_VIFM" ]; then
PS1="[V]$PS1"
unset INSIDE_VIFM
fi
Will look similar to this:
[V][~]$
Variant #3. Demonstrated using fish[edit]
To be added to vifmrc
:
let $INSIDE_VIFM = 'true'
In .config/fish/functions/
create a file check_if_inside_vifm.fish
and paste the following:
status is-interactive || exit
functions -c fish_prompt original_fish_prompt
function fish_prompt
# prepend fish_prompt with a custom message if running inside VIFM
if [ "$INSIDE_VIFM" = "true" ]
set_color brgreen
echo "Running inside VIFM, hit Ctrl-D to exit"
end
original_fish_prompt
end
Drawbacks[edit]
Environment variable might "leak" to some child process, which will later spawn a shell and trick it into reporting as if it's inside Vifm.