jimeh / tmux-themepack

A pack of various Tmux themes.
1.67k stars 203 forks source link

Appending to the status bar #21

Closed zachschultz closed 4 years ago

zachschultz commented 5 years ago

It'd be nice to be able to customize the themes further. I'm trying to add a battery status indicator to my status-right, and right now below the import of the themepack theme I have written:

set -g status-right "#[fg=colour235,bg=colour233]#[fg=colour240,bg=colour235] %H:%M:%S #[fg=colour240, bg=colour235]#[fg=colour233,bg=colour240] %d-%b-%y #[fg=colour245,bg=colour240]#[fg=colour232,bg=colour245,bold] #H #{battery_icon} #{battery_percentage} "

It shows up for the first render, but then it looks like the theme is overwriting my status-right immediately after

gnumoksha commented 5 years ago

Did you solve this?

disrupted commented 5 years ago

I'd guess customization is not supported in its current state but wanted to add my +1 to this.

lucasprag commented 5 years ago

Yeah, I'd like to know about a better way of customizing it, but for now I can add more useful information to my status-right if I place my set-option -g status-right after run '~/.tmux/plugins/tpm/tpm'.

Example:

set -g @themepack 'powerline/default/cyan'

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'jimeh/tmux-themepack'

# Initialize TMUX plugin manager
run '~/.tmux/plugins/tpm/tpm'

# this is here to overwrite status-right from my tmux theme
set-option -g status-right '#(basename #{pane_current_path})'
lucasprag commented 5 years ago

In my case I did this:

set -g @themepack 'powerline/default/cyan'

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'jimeh/tmux-themepack'

# initialize TMUX plugin manager
run '~/.tmux/plugins/tpm/tpm'

# this is here to overwrite my tmux theme
set -g status-left "#[fg=colour232,bg=colour39,bold] #S #[fg=colour39,bg=colour240,nobold]#[fg=colour233,bg=colour240] #(basename #{pane_current_path}) #[fg=colour240,bg=colour235]#[fg=colour240,bg=colour235] #I:#P #[fg=colour235,bg=colour233,nobold]"
set -g status-right ""
set -g status-justify right
jimeh commented 5 years ago

I might have a solution to this soon. I'm thinking something along the lines of the themes define a bunch of fields/areas of information that can be overridden to customize them. It might differ a bit between themes though as the powerline themes have effectively three pieces of information on both the left and right sides, while other themes don't.

I'm currently working on support Tmux 2.9 while still retaining support for 1.8 and earlier. This work should make it rather easy to add in the kind of customizations mentioned in this issue :)

eh-am commented 5 years ago

@lucasprag approach wasn't working for me until I realized I was running run -b '~/.tmux/plugins/tpm/tpm', which I believe was finishing after a certain time t, essentially overwriting the overwrites(!), so in the end just had to remove the b flag

Teknitix commented 5 years ago

Has there been any update on this? This is a lovely theme to use, but status bar customization and appending is really needed. Even just providing support for the right status indicators for the following plugins would help a lot: https://github.com/tmux-plugins/tmux-battery https://github.com/tmux-plugins/tmux-online-status

oemergenc commented 4 years ago

Hi, any progress on this?

Update: As a current workaround one can use tmux-cpu and tmux-mem for memory and cpu usage.

Here is a snippet of my tmux.conf file:

run '~/.tmux/plugins/tpm/tpm'

set -g status-left-length 100
status_cpu="#[fg=colour24,bg=colour245,nobold]#[fg=colour235,bg=colour245]#(/usr/local/bin/tmux-cpu  --format '#[fg=:color] :percent #[fg=black] :percent5 #[fg=black] :percent15')"
status_memory="#[fg=colour245,bg=colour240,nobold]#[fg=colour233,bg=colour240] #(/usr/local/bin/tmux-mem --format  ":currentBytes/:totalBytes")"
set -g status-left "#[fg=colour232,bg=colour24,bold] #S $status_cpu $status_memory #[fg=colour240,bg=colour235]#[fg=colour240,bg=colour235] #I:#P #[fg=colour235,bg=colour233,nobold]"

I am using the blue powerline theme, you may need to adjust to your settings. looks like this: example

Teknitix commented 4 years ago

Do you mind explaining the code and how to apply it?

jimeh commented 4 years ago

It's taken a lot longer than I thought to find enough time to lay the groundwork for this. But I've finally got PR #30 ready for testing. It makes it possible for end-users to easily customize any part of the themes.

The powerline themes for example have three areas on both the left and the right sides of the status bar, there's a total of six customizable options, they're set like like in the themes:

set -goq @themepack-status-left-area-left-format "#S"
set -goq @themepack-status-left-area-middle-format "#(whoami)"
set -goq @themepack-status-left-area-right-format "#I:#P"
set -goq @themepack-status-right-area-left-format "%H:%M:%S"
set -goq @themepack-status-right-area-middle-format "%d-%b-%y"
set -goq @themepack-status-right-area-right-format "#H"

The -o option means that it only sets the option if it is unset, meaning users can override the value set by the theme, by simply setting it themselves in their .tmux.conf file before loading the theme. When using TPM, the theme is not loaded until TPM itself is loaded. For example:

set -g @plugin 'jimeh/tmux-themepack'

set -g @themepack 'powerline/default/green'
set -g @themepack-status-left-area-left-format "#H : #S"

run "${HOME}/.tmux/plugins/tpm/tpm"

Additional options which you can customize can be found by simply looking at the source for the theme file itself, as pretty much any option in there beginning with a @ are available for customization.

oemergenc commented 4 years ago

@Teknitix

Actually its pretty straight forward. Simply install the mentioned command line utilities tmux-cpu and tmux-mem. Please note, those tools depend on nodejs (npm). You could also use other tools if you like to. For me those are doing a quite good job.

Something like this will install the tools:

npm install -g tmux-cpu
npm install -g tmux-mem

And then edit your tmux.conf file to include something like the following at the end of the file:

# all your configs ...
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'jimeh/tmux-themepack'
set -g @themepack 'powerline/block/blue'
# maybe other plugins ... 

run '~/.tmux/plugins/tpm/tpm'

# customization of powerline/block/blue theme
set -g status-left-length 100
status_session="#[fg=colour232,bg=colour24,bold] #S"
status_cpu="#[fg=colour24,bg=colour245,nobold]#[fg=colour235,bg=colour245] #(/usr/local/bin/tmux-cpu --format '[#[fg=:color]:spark#[fg=black]] #[fg=:color]:percent #[fg=black]:percent5 #[fg=black]:percent15')"
status_memory="#[fg=colour245,bg=colour240,nobold]#[fg=colour233,bg=colour240] #(/usr/local/bin/tmux-mem --format '[#[fg=:color]:spark#[fg=black]] #[fg=:color]:currentBytes#[fg=black]/:totalBytes')"
status_panes="#[fg=colour240,bg=colour235]#[fg=colour240,bg=colour235] #I:#P #[fg=colour235,bg=colour233,nobold]"
set -g status-left "$status_session $status_cpu $status_memory $status_panes"

Reload tmux (prefix + I) or restart your session and you should be good to go.

jimeh commented 4 years ago

With #30 now merged, I believe this issue is resolved.

This is done like I described in my earlier comment, by setting specific @-prefixed Tmux options before loading the theme. For an example of variables available, check the source for any of the themes, for example:

https://github.com/jimeh/tmux-themepack/blob/1.1.0/powerline/default/green.tmuxtheme

ThaDaVos commented 4 years ago

I'm sorry for commenting on an old issue - but I'm doing the exact which is documented here but for me I don't see my status bar changing, this is what I have (one of the lines is cut off as it doesn't fit on the screen):

set -g @themepack-status-left-area-left-prefix "#{prefix_highlight}"
set -g @themepack-status-right-area-right-suffix "#(cat ~/project_revenew_scraper) | Battery: #(cat /sys/class/power_supply/BAT1/status) #[fg=colour155]#(cat /sys/class/power_supply/BAT1/capacity)% | #[fg=colou$
set -g @themepack 'powerline/block/cyan'
# Plugins
set -g @plugin 'jimeh/tmux-themepack'
set -g @plugin 'pschmitt/tmux-ssh-split'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-copycat'
set -g @plugin 'tmux-plugins/tmux-logging'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
set -g @plugin 'tmux-plugins/tmux-sidebar'
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'                                                                                                                                                     
ThaDaVos commented 4 years ago

Solution found here: https://github.com/jimeh/tmux-themepack/issues/41

zyfyy commented 4 years ago

@lucasprag approach wasn't working for me until I realized I was running run -b '~/.tmux/plugins/tpm/tpm', which I believe was finishing after a certain time t, essentially overwriting the overwrites(!), so in the end just had to remove the b flag

-b flags confused me all the time. I have to quit tmux again and again to look at what has changed. now just reload the config, everything works as expected.

thanks~