Commit 5fda2053 authored by Bruno Pinto's avatar Bruno Pinto

Merge pull request #366 from tannhuber/master

parents bc92376d d00a7af8
# Budspencer theme # Budspencer theme
A theme for the 70s, makes fish even more powerful. It's equipped with a few A theme for the 70s, makes fish even more powerful. It's equipped with a hell
nice functions and key bindings to speed up your workflow. of a lot of nice functions and key bindings to speed up your workflow.
The philosophy behind budspencer theme:
* Delimit the prompt lines clearly to the output.
* Produce output only if it contains relevant information.
* Show useful notifications within the prompt.
* Equip the prompt with toggle commands in order to change its style
interactively.
* Store sessions in order to make frequently used commands quickly accessible.
* Make navigation within the directory tree as easy as possible using
bookmarks and a directory history without duplicates.
* Make histories quickly accessible with menus.
* Don't stress your eyes. Use different colors in dark and bright environments.
## Demonstration video ## Demonstration video
...@@ -25,11 +38,12 @@ Non standard tools: ...@@ -25,11 +38,12 @@ Non standard tools:
### General configuration ### General configuration
The theme behaves similar to vim's airline/powerline plugins. Thus, it needs a The theme behaves similar to vim's airline/powerline plugins. Thus, it needs a
[powerline font][font]. Although it works with emacs mode, it's more powerful [powerline font][font].
with vi mode. In order to enable vi mode, execute: It's also crucial to have vi mode enabled. Thus, execute
``` ```
set -U fish_key_bindings fish_vi_key_bindings set -U fish_key_bindings fish_vi_key_bindings
``` ```
before enabling the theme.
### Colors ### Colors
...@@ -88,8 +102,8 @@ set -e budspencer_nogreeting ...@@ -88,8 +102,8 @@ set -e budspencer_nogreeting
* ⚙: there are background jobs, can be toggled with `#` to show the amount of * ⚙: there are background jobs, can be toggled with `#` to show the amount of
background jobs background jobs
* : no write permissions in present working directory * : no write permissions in present working directory
* ⚔: there are tasks scheduled due today, can be toggled with `#` to * ⚔: there are tasks scheduled for this week, can be toggled with `#` to
show the amount of tasks show the amount of weekly tasks
* ⚑: there are appointments for today, can be toggled with `#` to * ⚑: there are appointments for today, can be toggled with `#` to
show the amount of appointments show the amount of appointments
* ✔: last command succeeded, can be toggled with `#` to show the status value * ✔: last command succeeded, can be toggled with `#` to show the status value
...@@ -128,17 +142,24 @@ The following shortcuts need vi-mode: ...@@ -128,17 +142,24 @@ The following shortcuts need vi-mode:
`short long none`); note that changes to `$budspencer_pwdstyle` keep persistant as it's `short long none`); note that changes to `$budspencer_pwdstyle` keep persistant as it's
a universal variable. a universal variable.
![pwd style][pwdstyle]
- Style of symbols can be toggled in NORMAL and in VISUAL mode with `#` - Style of symbols can be toggled in NORMAL and in VISUAL mode with `#`
* styles implemented: * styles implemented:
- `symbols` (shows status symbols) - `symbols` (shows status symbols)
- `numbers` (shows numbers instead of symbols in left prompt as well as amount of changes in - `numbers` (shows numbers instead of symbols in left prompt as well as amount of changes in
right git prompt) right git prompt)
Note, the format is _username@hostname:pathname_. Thus, you can cut
the whole string with your mouse and paste it into `ssh` commands.
## Quickly navigate in history of working directories ## Quickly navigate in history of working directories
The function `d` shows the history as enumerated list. Unlike fish's builtin The function `d` drops down a menu showing the history as enumerated list. Unlike
`dirh`, `d` does not show any duplicates. Enter a number to jump to a directory fish's builtin `dirh`, `d` does not show any duplicates. Enter a number to jump
within the list. to a directory within the list.
![dir menu][dirmenu]
The following shortcuts need vi-mode: The following shortcuts need vi-mode:
- Press `H` in NORMAL mode to change present working directory to previous - Press `H` in NORMAL mode to change present working directory to previous
...@@ -148,8 +169,8 @@ The following shortcuts need vi-mode: ...@@ -148,8 +169,8 @@ The following shortcuts need vi-mode:
## Quickly navigate in command history ## Quickly navigate in command history
The function `c` shows the command history as enumerated list similarly to The function `c` drops down a menu showing the command history as enumerated list similarly to
the `d` function. Selections are also paste into the X clipboard. It's possible the `d` function. Selections are also pasted into the X clipboard. It's possible
to load a command of a former prompt by giving the prompt line number as to load a command of a former prompt by giving the prompt line number as
argument. argument.
...@@ -158,7 +179,8 @@ argument. ...@@ -158,7 +179,8 @@ argument.
A bookmark can be created with `mark`. It can be removed with `unmark`. A bookmark can be created with `mark`. It can be removed with `unmark`.
Bookmarks are universal and thus persistant. Bookmarks are universal and thus persistant.
A new shell automatically changes working directory on startup to newest bookmark. A new shell automatically changes working directory on startup to newest bookmark.
`m` is a function that shows the bookmarks as enumerated list equivalently to `d`. `m` is a function that drops down a menu showing the bookmarks as enumerated list
equivalently to `d`.
The following shortcuts need vi mode: The following shortcuts need vi mode:
- Create a bookmark for present working directory with `m` in NORMAL mode. - Create a bookmark for present working directory with `m` in NORMAL mode.
...@@ -171,8 +193,7 @@ It makes the commandline as powerful as your editor. If `$EDITOR` is not set, ...@@ -171,8 +193,7 @@ It makes the commandline as powerful as your editor. If `$EDITOR` is not set,
vi is used. vi is used.
The following shortcut needs vi mode: The following shortcut needs vi mode:
- Type `.` in NORMAL mode or `\cv` in NORMAL/INSERT mode to edit commandline in - Type `.` in NORMAL mode to edit commandline in editor.
editor.
## Sessions ## Sessions
...@@ -195,6 +216,13 @@ Just type `wt <title>`. ...@@ -195,6 +216,13 @@ Just type `wt <title>`.
- vi REPLACE mode, as soon as REPLACE mode is implemented within fish - vi REPLACE mode, as soon as REPLACE mode is implemented within fish
## Feedback
Give me feedback if you ...
* ... have ideas how I could improve budspencer.
* ... have problems with budspencer.
* ... have questions concerning budspencer.
[font]: https://github.com/Lokaltog/powerline-fonts [font]: https://github.com/Lokaltog/powerline-fonts
[ranger]: http://ranger.nongnu.org/ [ranger]: http://ranger.nongnu.org/
[taskwarrior]: http://taskwarrior.org/ [taskwarrior]: http://taskwarrior.org/
...@@ -203,3 +231,5 @@ Just type `wt <title>`. ...@@ -203,3 +231,5 @@ Just type `wt <title>`.
[fish-nightly]: https://github.com/fish-shell/fish-shell/wiki/Nightly-builds [fish-nightly]: https://github.com/fish-shell/fish-shell/wiki/Nightly-builds
[screenshot]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer.jpg [screenshot]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer.jpg
[colors]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer_replace_colors.jpg [colors]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer_replace_colors.jpg
[dirmenu]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer_dir_menu.jpg
[pwdstyle]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer_pwd_style.jpg
...@@ -41,8 +41,6 @@ if [ $fish_key_bindings = 'fish_vi_key_bindings' ] ...@@ -41,8 +41,6 @@ if [ $fish_key_bindings = 'fish_vi_key_bindings' ]
bind m mark bind m mark
bind M unmark bind M unmark
bind . __budspencer_edit_commandline bind . __budspencer_edit_commandline
bind \cv __budspencer_edit_commandline
bind -M insert \cv __budspencer_edit_commandline
bind -M insert \n __budspencer_preexec bind -M insert \n __budspencer_preexec
bind \n __budspencer_preexec bind \n __budspencer_preexec
end end
...@@ -112,8 +110,8 @@ function __budspencer_preexec -d 'Execute after hitting <Enter> before doing any ...@@ -112,8 +110,8 @@ function __budspencer_preexec -d 'Execute after hitting <Enter> before doing any
return return
end end
end end
end end
commandline -f execute commandline -f execute
end end
##################### #####################
...@@ -134,7 +132,7 @@ function __budspencer_create_dir_hist -v PWD -d 'Create directory history withou ...@@ -134,7 +132,7 @@ function __budspencer_create_dir_hist -v PWD -d 'Create directory history withou
end end
set $dir_hist $$dir_hist $PWD set $dir_hist $$dir_hist $PWD
set -g dir_hist_val (count $$dir_hist) set -g dir_hist_val (count $$dir_hist)
end end
end end
function __budspencer_cd_prev -d 'Change to previous directory, press H in NORMAL mode.' function __budspencer_cd_prev -d 'Change to previous directory, press H in NORMAL mode.'
...@@ -143,7 +141,7 @@ function __budspencer_cd_prev -d 'Change to previous directory, press H in NORMA ...@@ -143,7 +141,7 @@ function __budspencer_cd_prev -d 'Change to previous directory, press H in NORMA
set pwd_hist_lock true set pwd_hist_lock true
cd $$dir_hist[1][$dir_hist_val] cd $$dir_hist[1][$dir_hist_val]
commandline -f repaint commandline -f repaint
end end
end end
function __budspencer_cd_next -d 'Change to next directory, press L in NORMAL mode.' function __budspencer_cd_next -d 'Change to next directory, press L in NORMAL mode.'
...@@ -152,7 +150,7 @@ function __budspencer_cd_next -d 'Change to next directory, press L in NORMAL mo ...@@ -152,7 +150,7 @@ function __budspencer_cd_next -d 'Change to next directory, press L in NORMAL mo
set pwd_hist_lock true set pwd_hist_lock true
cd $$dir_hist[1][$dir_hist_val] cd $$dir_hist[1][$dir_hist_val]
commandline -f repaint commandline -f repaint
end end
end end
function d -d 'List directory history, jump to directory in list with d <number>' function d -d 'List directory history, jump to directory in list with d <number>'
...@@ -161,34 +159,39 @@ function d -d 'List directory history, jump to directory in list with d <number> ...@@ -161,34 +159,39 @@ function d -d 'List directory history, jump to directory in list with d <number>
set_color $fish_color_error[1] set_color $fish_color_error[1]
echo 'Directory history is empty. '(set_color normal)'It will be created automatically' echo 'Directory history is empty. '(set_color normal)'It will be created automatically'
return return
end end
for i in (seq $num_items) for i in (seq $num_items)
if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] if [ (expr \( $num_items - $i \) \% 2) -eq 0 ]
set_color normal set_color normal
else else
set_color $budspencer_colors[4] set_color $budspencer_colors[4]
end end
echo (expr $num_items - $i)\t$$dir_hist[1][$i] | sed "s|$HOME|~|" echo '▶' (expr $num_items - $i)\t$$dir_hist[1][$i] | sed "s|$HOME|~|"
end end
if [ $num_items -eq 1 ] if [ $num_items -eq 1 ]
set last_item '' set last_item ''
else else
set last_item '-'(expr $num_items - 1) set last_item '-'(expr $num_items - 1)
end end
echo -en $budspencer_cursors[2] echo -en $budspencer_cursors[2]
set input_length (expr length (expr $num_items - 1)) set input_length (expr length (expr $num_items - 1))
read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[5])" ♻ Goto [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[5])' -n $input_length -l dir_num read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[5])" ♻ Goto [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[5])' -n $input_length -l dir_num
switch $dir_num switch $dir_num
case (seq 0 (expr $num_items - 1)) case (seq 0 (expr $num_items - 1))
cd $$dir_hist[1][(expr $num_items - $dir_num)] cd $$dir_hist[1][(expr $num_items - $dir_num)]
return 0 case 'e'
case 'e'
read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[5])" ♻ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[5])' -n $input_length -l dir_num read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[5])" ♻ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[5])' -n $input_length -l dir_num
set -e $dir_hist[1][(expr $num_items - $dir_num)] ^ /dev/null set -e $dir_hist[1][(expr $num_items - $dir_num)] ^ /dev/null
set dir_hist_val (count $$dir_hist) set dir_hist_val (count $$dir_hist)
return 0 tput cuu1
end end
return 1 for i in (seq (expr $num_items + 1))
tput cuu1
end
tput ed
tput cuu1
set pcount (expr $pcount - 1)
set no_prompt_hist 'T'
end end
#################### ####################
...@@ -196,11 +199,18 @@ end ...@@ -196,11 +199,18 @@ end
#################### ####################
function __budspencer_create_cmd_hist -e fish_prompt -d 'Create command history without duplicates' function __budspencer_create_cmd_hist -e fish_prompt -d 'Create command history without duplicates'
if [ $_ = 'fish' ] if [ $_ = 'fish' ]
set pcount (expr $pcount + 1)
set -l IFS '' set -l IFS ''
set -l cmd (echo $history[1] | fish_indent | expand -t 4) set -l cmd (echo $history[1] | fish_indent | expand -t 4)
# Create prompt history # Create prompt history
set prompt_hist $prompt_hist $cmd if begin
[ $pcount -gt 0 ]
and [ $no_prompt_hist = 'F' ]
end
set prompt_hist[$pcount] $cmd
else
set no_prompt_hist 'F'
end
set pcount (expr $pcount + 1)
# Create command history # Create command history
if not begin if not begin
expr $cmd : '[cdms] ' > /dev/null expr $cmd : '[cdms] ' > /dev/null
...@@ -211,9 +221,9 @@ function __budspencer_create_cmd_hist -e fish_prompt -d 'Create command history ...@@ -211,9 +221,9 @@ function __budspencer_create_cmd_hist -e fish_prompt -d 'Create command history
end end
set $cmd_hist $$cmd_hist $cmd set $cmd_hist $$cmd_hist $cmd
end end
end end
set fish_bind_mode insert set fish_bind_mode insert
echo -n \a echo -n \a
end end
function c -d 'List command history, load command from prompt with c <prompt number>' function c -d 'List command history, load command from prompt with c <prompt number>'
...@@ -222,36 +232,44 @@ function c -d 'List command history, load command from prompt with c <prompt num ...@@ -222,36 +232,44 @@ function c -d 'List command history, load command from prompt with c <prompt num
set_color $fish_color_error[1] set_color $fish_color_error[1]
echo 'Command history is empty. '(set_color normal)'It will be created automatically.' echo 'Command history is empty. '(set_color normal)'It will be created automatically.'
return return
end end
for i in (seq $num_items) for i in (seq $num_items)
if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] if [ (expr \( $num_items - $i \) \% 2) -eq 0 ]
set_color normal set_color normal
else else
set_color $budspencer_colors[4] set_color $budspencer_colors[4]
end end
echo -n (expr $num_items - $i) echo -n '▶ '(expr $num_items - $i)
set -l item (echo $$cmd_hist[1][$i]) set -l item (echo $$cmd_hist[1][$i])
echo -n \t$item\n echo -n \t$item\n
end end
if [ $num_items -eq 1 ] if [ $num_items -eq 1 ]
set last_item '' set last_item ''
else else
set last_item '-'(expr $num_items - 1) set last_item '-'(expr $num_items - 1)
end end
echo -en $budspencer_cursors[4] echo -en $budspencer_cursors[4]
set input_length (expr length (expr $num_items - 1)) set input_length (expr length (expr $num_items - 1))
read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[9])" ↩ Exec [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[9])' -n $input_length -l cmd_num read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[9])" ↩ Exec [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[9])' -n $input_length -l cmd_num
switch $cmd_num switch $cmd_num
case (seq 0 (expr $num_items - 1)) case (seq 0 (expr $num_items - 1))
commandline $$cmd_hist[1][(expr $num_items - $cmd_num)] commandline $$cmd_hist[1][(expr $num_items - $cmd_num)]
echo $$cmd_hist[1][(expr $num_items - $cmd_num)] | xsel echo $$cmd_hist[1][(expr $num_items - $cmd_num)] | xsel
return 0 for i in (seq (count (echo $$cmd_hist\n)))
case 'e' tput cuu1
end
case 'e'
read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[9])" ↩ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[9])' -n $input_length -l cmd_num read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[9])" ↩ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[9])' -n $input_length -l cmd_num
for i in (seq (count (echo $$cmd_hist\n)))
tput cuu1
end
tput cuu1
set -e $cmd_hist[1][(expr $num_items - $cmd_num)] ^ /dev/null set -e $cmd_hist[1][(expr $num_items - $cmd_num)] ^ /dev/null
return 0 end
end tput ed
return 1 tput cuu1
set pcount (expr $pcount - 1)
set no_prompt_hist 'T'
end end
############## ##############
...@@ -262,7 +280,7 @@ function mark -d 'Create bookmark for present working directory.' ...@@ -262,7 +280,7 @@ function mark -d 'Create bookmark for present working directory.'
set -U bookmarks $PWD $bookmarks set -U bookmarks $PWD $bookmarks
set pwd_hist_lock true set pwd_hist_lock true
commandline -f repaint commandline -f repaint
end end
end end
function unmark -d 'Remove bookmark for present working directory.' function unmark -d 'Remove bookmark for present working directory.'
...@@ -270,7 +288,7 @@ function unmark -d 'Remove bookmark for present working directory.' ...@@ -270,7 +288,7 @@ function unmark -d 'Remove bookmark for present working directory.'
set -e bookmarks[(contains -i $PWD $bookmarks)] set -e bookmarks[(contains -i $PWD $bookmarks)]
set pwd_hist_lock true set pwd_hist_lock true
commandline -f repaint commandline -f repaint
end end
end end
function m -d 'List bookmarks, jump to directory in list with m <number>' function m -d 'List bookmarks, jump to directory in list with m <number>'
...@@ -279,8 +297,8 @@ function m -d 'List bookmarks, jump to directory in list with m <number>' ...@@ -279,8 +297,8 @@ function m -d 'List bookmarks, jump to directory in list with m <number>'
set_color $fish_color_error[1] set_color $fish_color_error[1]
echo 'Bookmark list is empty. '(set_color normal)'Enter '(set_color $fish_color_command[1])'mark '(set_color normal)'in INSERT mode or '(set_color $fish_color_command[1])'m '(set_color normal)'in NORMAL mode, if you want to add the current directory to your bookmark list.' echo 'Bookmark list is empty. '(set_color normal)'Enter '(set_color $fish_color_command[1])'mark '(set_color normal)'in INSERT mode or '(set_color $fish_color_command[1])'m '(set_color normal)'in NORMAL mode, if you want to add the current directory to your bookmark list.'
return return
end end
for i in (seq $num_items) for i in (seq $num_items)
if [ $PWD = $bookmarks[$i] ] if [ $PWD = $bookmarks[$i] ]
set_color $budspencer_colors[10] set_color $budspencer_colors[10]
else else
...@@ -290,22 +308,25 @@ for i in (seq $num_items) ...@@ -290,22 +308,25 @@ for i in (seq $num_items)
set_color $budspencer_colors[4] set_color $budspencer_colors[4]
end end
end end
echo (expr $num_items - $i)\t$bookmarks[$i] | sed "s|$HOME|~|" echo '▶ '(expr $num_items - $i)\t$bookmarks[$i] | sed "s|$HOME|~|"
end end
if [ $num_items -eq 1 ] if [ $num_items -eq 1 ]
set last_item '' set last_item ''
else else
set last_item '-'(expr $num_items - 1) set last_item '-'(expr $num_items - 1)
end end
echo -en $budspencer_cursors[1] echo -en $budspencer_cursors[1]
set input_length (expr length (expr $num_items - 1)) set input_length (expr length (expr $num_items - 1))
read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[10])" ⌘ Goto [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[10])' -n $input_length -l dir_num read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[10])" ⌘ Goto [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[10])' -n $input_length -l dir_num
switch $dir_num switch $dir_num
case (seq 0 (expr $num_items - 1)) case (seq 0 (expr $num_items - 1))
cd $bookmarks[(expr $num_items - $dir_num)] cd $bookmarks[(expr $num_items - $dir_num)]
return 0 end
end for i in (seq (expr $num_items + 1))
return 1 tput cuu1
end
tput ed
tput cuu1
end end
############# #############
...@@ -318,7 +339,7 @@ function __budspencer_delete_zombi_sessions -d 'Delete zombi sessions' ...@@ -318,7 +339,7 @@ function __budspencer_delete_zombi_sessions -d 'Delete zombi sessions'
set -e budspencer_sessions_active_pid[$item] set -e budspencer_sessions_active_pid[$item]
set -e budspencer_sessions_active[$item] set -e budspencer_sessions_active[$item]
end end
end end
end end
function __budspencer_create_new_session -d 'Create a new session' function __budspencer_create_new_session -d 'Create a new session'
...@@ -332,20 +353,20 @@ function __budspencer_erase_session -d 'Erase current session' ...@@ -332,20 +353,20 @@ function __budspencer_erase_session -d 'Erase current session'
set_color $fish_color_error[1] set_color $fish_color_error[1]
echo 'Missing argument: name of session to erase' echo 'Missing argument: name of session to erase'
return return
end end
if contains $argv[2] $budspencer_sessions_active if contains $argv[2] $budspencer_sessions_active
set_color $fish_color_error[1] set_color $fish_color_error[1]
echo "Session '$argv[2]' cannot be erased because it's currently active." echo "Session '$argv[2]' cannot be erased because it's currently active."
return return
end end
if contains $argv[2] $budspencer_sessions if contains $argv[2] $budspencer_sessions
set -e budspencer_session_cmd_hist_$argv[2] set -e budspencer_session_cmd_hist_$argv[2]
set -e budspencer_session_dir_hist_$argv[2] set -e budspencer_session_dir_hist_$argv[2]
set -e budspencer_sessions[(contains -i $argv[2] $budspencer_sessions)] set -e budspencer_sessions[(contains -i $argv[2] $budspencer_sessions)]
else else
set_color $fish_color_error[1] set_color $fish_color_error[1]
echo "Session '$argv[2]' not found. "(set_color normal)'Enter '(set_color $fish_color_command[1])'s '(set_color normal)'to show a list of all recorded sessions.' echo "Session '$argv[2]' not found. "(set_color normal)'Enter '(set_color $fish_color_command[1])'s '(set_color normal)'to show a list of all recorded sessions.'
end end
end end
function __budspencer_detach_session -d 'Detach current session' function __budspencer_detach_session -d 'Detach current session'
...@@ -353,19 +374,20 @@ function __budspencer_detach_session -d 'Detach current session' ...@@ -353,19 +374,20 @@ function __budspencer_detach_session -d 'Detach current session'
set dir_hist dir_hist_nosession set dir_hist dir_hist_nosession
if [ -z $$dir_hist ] ^ /dev/null if [ -z $$dir_hist ] ^ /dev/null
set $dir_hist $PWD set $dir_hist $PWD
end end
set dir_hist_val (count $$dir_hist) set dir_hist_val (count $$dir_hist)
set -e budspencer_sessions_active_pid[$argv] ^ /dev/null set -e budspencer_sessions_active_pid[$argv] ^ /dev/null
set -e budspencer_sessions_active[$argv] ^ /dev/null set -e budspencer_sessions_active[$argv] ^ /dev/null
set budspencer_session_current '' set budspencer_session_current ''
cd $$dir_hist[1][$dir_hist_val] cd $$dir_hist[1][$dir_hist_val]
set no_prompt_hist 'T'
end end
function __budspencer_attach_session -d 'Attach session' function __budspencer_attach_session -d 'Attach session'
set argv (echo -sn $argv\n | sed 's|[^[:alnum:]]|_|g') set argv (echo -sn $argv\n | sed 's|[^[:alnum:]]|_|g')
if contains $argv[1] $budspencer_sessions_active if contains $argv[1] $budspencer_sessions_active
wmctrl -a "✻ $argv[1]" wmctrl -a "✻ $argv[1]"
else else
wt "✻ $argv[1]" wt "✻ $argv[1]"
__budspencer_detach_session $argv[-1] __budspencer_detach_session $argv[-1]
set budspencer_sessions_active $budspencer_sessions_active $argv[1] set budspencer_sessions_active $budspencer_sessions_active $argv[1]
...@@ -381,7 +403,8 @@ else ...@@ -381,7 +403,8 @@ else
end end
set dir_hist_val (count $$dir_hist) set dir_hist_val (count $$dir_hist)
cd $$dir_hist[1][$dir_hist_val] ^ /dev/null cd $$dir_hist[1][$dir_hist_val] ^ /dev/null
end end
set no_prompt_hist 'T'
end end
function s -d 'Create, delete or attach session' function s -d 'Create, delete or attach session'
...@@ -417,7 +440,7 @@ function s -d 'Create, delete or attach session' ...@@ -417,7 +440,7 @@ function s -d 'Create, delete or attach session'
else else
set active_indicator ' ' set active_indicator ' '
end end
echo (expr $num_items - $i)\t$active_indicator$budspencer_sessions[$i] echo '▶ '(expr $num_items - $i)\t$active_indicator$budspencer_sessions[$i]
end end
if [ $num_items -eq 1 ] if [ $num_items -eq 1 ]
set last_item '' set last_item ''
...@@ -427,44 +450,64 @@ function s -d 'Create, delete or attach session' ...@@ -427,44 +450,64 @@ function s -d 'Create, delete or attach session'
echo -en $budspencer_cursors[3] echo -en $budspencer_cursors[3]
set input_length (expr length (expr $num_items - 1)) set input_length (expr length (expr $num_items - 1))
read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[8])" ✻ Attach [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[8])' -n $input_length -l session_num read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[8])" ✻ Attach [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[8])' -n $input_length -l session_num
set pcount (expr $pcount - 1)
switch $session_num switch $session_num
case (seq 0 (expr $num_items - 1)) case (seq 0 (expr $num_items - 1))
set argv[1] $budspencer_sessions[(expr $num_items - $session_num)] set argv[1] $budspencer_sessions[(expr $num_items - $session_num)]
for i in (seq (expr $num_items + 1))
tput cuu1
end
tput ed
tput cuu1
case 'e' case 'e'
read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[8])" ✻ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[8])' -n $input_length -l session_num read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[8])" ✻ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[8])' -n $input_length -l session_num
if [ (expr $num_items - $session_num) -gt 0 ]
__budspencer_erase_session -e $budspencer_sessions[(expr $num_items - $session_num)] __budspencer_erase_session -e $budspencer_sessions[(expr $num_items - $session_num)]
return 0 end
for i in (seq (expr $num_items + 3))
tput cuu1
end
tput ed
return
case '*' case '*'
return 1 for i in (seq (expr $num_items + 1))
tput cuu1
end end
end tput ed
set -l item (contains -i %self $budspencer_sessions_active_pid ^ /dev/null) tput cuu1
switch $argv[1] return
case '-e' end
end
set -l item (contains -i %self $budspencer_sessions_active_pid ^ /dev/null)
switch $argv[1]
case '-e'
__budspencer_erase_session $argv __budspencer_erase_session $argv
case '-d' case '-d'
wt 'fish' wt 'fish'
__budspencer_detach_session $item __budspencer_detach_session $item
case '-*' tput cuu1
tput ed
set pcount (expr $pcount - 1)
case '-*'
set_color $fish_color_error[1] set_color $fish_color_error[1]
echo "Invalid argument: $argv[1]" echo "Invalid argument: $argv[1]"
case '*' case '*'
__budspencer_attach_session $argv $item __budspencer_attach_session $argv $item
end end
end end
##################################### #####################################
# => Commandline editing with $EDITOR # => Commandline editing with $EDITOR
##################################### #####################################
function __budspencer_edit_commandline -d 'Open current commandline with your editor' function __budspencer_edit_commandline -d 'Open current commandline with your editor'
commandline | fish_indent > $budspencer_tmpfile commandline > $budspencer_tmpfile
eval $EDITOR $budspencer_tmpfile eval $EDITOR $budspencer_tmpfile
if [ -s $budspencer_tmpfile ] if [ -s $budspencer_tmpfile ]
commandline (sed 's|^\s*||' $budspencer_tmpfile) commandline (sed 's|^\s*||' $budspencer_tmpfile)
else else
commandline '' commandline ''
end end
rm $budspencer_tmpfile rm $budspencer_tmpfile
end end
################ ################
...@@ -480,9 +523,9 @@ function __budspencer_prompt_git_branch -d 'Return the current branch name' ...@@ -480,9 +523,9 @@ function __budspencer_prompt_git_branch -d 'Return the current branch name'
else else
echo -n (set_color -b $budspencer_colors[9])''(set_color $budspencer_colors[1])'  '$position' '(set_color $budspencer_colors[9]) echo -n (set_color -b $budspencer_colors[9])''(set_color $budspencer_colors[1])'  '$position' '(set_color $budspencer_colors[9])
end end
else else
echo -n (set_color -b $budspencer_colors[3])''(set_color $budspencer_colors[1])'  '$branch' '(set_color $budspencer_colors[3]) echo -n (set_color -b $budspencer_colors[3])''(set_color $budspencer_colors[1])'  '$branch' '(set_color $budspencer_colors[3])
end end
end end
###################### ######################
...@@ -490,26 +533,26 @@ end ...@@ -490,26 +533,26 @@ end
###################### ######################
function __budspencer_prompt_bindmode -d 'Displays the current mode' function __budspencer_prompt_bindmode -d 'Displays the current mode'
switch $fish_bind_mode switch $fish_bind_mode
case default case default
set budspencer_current_bindmode_color $budspencer_colors[10] set budspencer_current_bindmode_color $budspencer_colors[10]
echo -en $budspencer_cursors[1] echo -en $budspencer_cursors[1]
case insert case insert
set budspencer_current_bindmode_color $budspencer_colors[5] set budspencer_current_bindmode_color $budspencer_colors[5]
echo -en $budspencer_cursors[2] echo -en $budspencer_cursors[2]
if [ "$pwd_hist_lock" = true ] if [ "$pwd_hist_lock" = true ]
set pwd_hist_lock false set pwd_hist_lock false
__budspencer_create_dir_hist __budspencer_create_dir_hist
end end
case visual case visual
set budspencer_current_bindmode_color $budspencer_colors[8] set budspencer_current_bindmode_color $budspencer_colors[8]
echo -en $budspencer_cursors[3] echo -en $budspencer_cursors[3]
end end
if [ (count $budspencer_prompt_error) -eq 1 ] if [ (count $budspencer_prompt_error) -eq 1 ]
set budspencer_current_bindmode_color $budspencer_colors[7] set budspencer_current_bindmode_color $budspencer_colors[7]
end end
set_color -b $budspencer_current_bindmode_color $budspencer_colors[1] set_color -b $budspencer_current_bindmode_color $budspencer_colors[1]
echo -n " $pcount " echo -n " $pcount "
set_color -b $budspencer_colors[1] $budspencer_current_bindmode_color set_color -b $budspencer_colors[1] $budspencer_current_bindmode_color
end end
#################### ####################
...@@ -518,21 +561,25 @@ end ...@@ -518,21 +561,25 @@ end
function __budspencer_prompt_left_symbols -d 'Display symbols' function __budspencer_prompt_left_symbols -d 'Display symbols'
set -l jobs (jobs | wc -l) set -l jobs (jobs | wc -l)
if [ -e ~/.taskrc ] if [ -e ~/.taskrc ]
set todo (task due.before:tomorrow ^ /dev/null | tail -1 | cut -f1 -d' ') set todo (task due.before:sunday ^ /dev/null | tail -1 | cut -f1 -d' ')
end set overdue (task due.before:today ^ /dev/null | tail -1 | cut -f1 -d' ')
if [ -e ~/.reminders ] end
if [ -e ~/.reminders ]
set appointments (rem -a | cut -f1 -d' ') set appointments (rem -a | cut -f1 -d' ')
end end
if [ (count $todo) -eq 0 ] if [ (count $todo) -eq 0 ]
set todo 0 set todo 0
end end
if [ (count $appointments) -eq 0 ] if [ (count $overdue) -eq 0 ]
set overdue 0
end
if [ (count $appointments) -eq 0 ]
set appointments 0 set appointments 0
end end
set_color -b $budspencer_colors[2] set_color -b $budspencer_colors[2]
echo -n '' echo -n ''
if [ $symbols_style = 'symbols' ] if [ $symbols_style = 'symbols' ]
if [ $budspencer_session_current != '' ] if [ $budspencer_session_current != '' ]
set_color -o $budspencer_colors[8] set_color -o $budspencer_colors[8]
echo -n ' ✻' echo -n ' ✻'
...@@ -559,6 +606,11 @@ if [ $symbols_style = 'symbols' ] ...@@ -559,6 +606,11 @@ if [ $symbols_style = 'symbols' ]
end end
if [ $todo -gt 0 ] if [ $todo -gt 0 ]
set_color -o $budspencer_colors[4] set_color -o $budspencer_colors[4]
end
if [ $overdue -gt 0 ]
set_color -o $budspencer_colors[8]
end
if [ (expr $todo + $overdue) -gt 0 ]
echo -n ' ⚔' echo -n ' ⚔'
end end
if [ $appointments -gt 0 ] if [ $appointments -gt 0 ]
...@@ -576,7 +628,7 @@ if [ $symbols_style = 'symbols' ] ...@@ -576,7 +628,7 @@ if [ $symbols_style = 'symbols' ]
set_color -o $budspencer_colors[6] set_color -o $budspencer_colors[6]
echo -n ' ⚡' echo -n ' ⚡'
end end
else else
if [ $budspencer_session_current != '' ] ^ /dev/null if [ $budspencer_session_current != '' ] ^ /dev/null
set_color $budspencer_colors[8] set_color $budspencer_colors[8]
echo -n ' '(expr (count $budspencer_sessions) - (contains -i $budspencer_session_current $budspencer_sessions)) echo -n ' '(expr (count $budspencer_sessions) - (contains -i $budspencer_session_current $budspencer_sessions))
...@@ -605,6 +657,11 @@ else ...@@ -605,6 +657,11 @@ else
end end
if [ $todo -gt 0 ] if [ $todo -gt 0 ]
set_color -b $budspencer_colors[2] $budspencer_colors[4] set_color -b $budspencer_colors[2] $budspencer_colors[4]
end
if [ $overdue -gt 0 ]
set_color -b $budspencer_colors[2] $budspencer_colors[8]
end
if [ (expr $todo + $overdue) -gt 0 ]
echo -n " $todo" echo -n " $todo"
end end
if [ $appointments -gt 0 ] if [ $appointments -gt 0 ]
...@@ -622,9 +679,9 @@ else ...@@ -622,9 +679,9 @@ else
set_color -o $budspencer_colors[6] set_color -o $budspencer_colors[6]
echo -n ' ⚡' echo -n ' ⚡'
end end
end end
echo -n ' ' echo -n ' '
set_color -b normal $budspencer_colors[2] set_color -b normal $budspencer_colors[2]
end end
############################################################################### ###############################################################################
...@@ -645,6 +702,7 @@ set -g dir_hist dir_hist_nosession ...@@ -645,6 +702,7 @@ set -g dir_hist dir_hist_nosession
set -g pwd_hist_lock false set -g pwd_hist_lock false
set -g pcount 1 set -g pcount 1
set -g prompt_hist set -g prompt_hist
set -g no_prompt_hist 'F'
set -g symbols_style 'symbols' set -g symbols_style 'symbols'
# Load user defined key bindings # Load user defined key bindings
...@@ -678,8 +736,8 @@ if not begin ...@@ -678,8 +736,8 @@ if not begin
set -q -x LOGIN set -q -x LOGIN
or set -q -x RANGER_LEVEL or set -q -x RANGER_LEVEL
or set -q -x VIM or set -q -x VIM
end ^ /dev/null end ^ /dev/null
cd $bookmarks[1] cd $bookmarks[1]
end end
set -x LOGIN $USER set -x LOGIN $USER
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment