diff --git a/.logo/LICENSE b/.logo/LICENSE new file mode 100644 index 0000000..ff1c791 --- /dev/null +++ b/.logo/LICENSE @@ -0,0 +1,16 @@ +Oh my tmux! logo copyright (c) 2024, Gregory Pakosz + +Original tmux logo copyright (c) 2015, Jason Long +See https://github.com/tmux/tmux/tree/master/logo + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/.logo/logomark+wordmark.svg b/.logo/logomark+wordmark.svg new file mode 100644 index 0000000..56c8230 --- /dev/null +++ b/.logo/logomark+wordmark.svg @@ -0,0 +1 @@ + diff --git a/.logo/logomark.svg b/.logo/logomark.svg new file mode 100644 index 0000000..a11e750 --- /dev/null +++ b/.logo/logomark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/.tmux.conf.local b/.tmux.conf.local index 3e7aea8..f2e4107 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -393,7 +393,7 @@ tmux_conf_urlscan_options="--compact --dedupe" # set -g prefix C-a # bind C-a send-prefix -# if you don't want Oh my tmux! to alter a binding, use #!important +# if you don't want Oh my tmux! to alter a binding or a setting, use #!important # bind c new-window -c '#{pane_current_path}' #!important # move status line to top diff --git a/README.md b/README.md index 0734d76..b7d6734 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,30 @@ -.tmux -===== +

+ + + + Oh my tmux! logo and wordmark + +

-Self-contained, pretty and versatile `.tmux.conf` configuration file. +˗ˏˋ ★ ˎˊ˗ My self-contained, pretty and versatile tmux configuration, made with ❤️ ˗ˏˋ ★ ˎˊ˗ -![Screenshot](https://cloud.githubusercontent.com/assets/553208/19740585/85596a5a-9bbf-11e6-8aa1-7c8d9829c008.gif) +

+ + + + Oh my tmux! in action + +

Installation ------------ Requirements: - - tmux **`>= 2.6`** running inside Linux, Mac, OpenBSD, Cygwin or WSL - - awk, perl (with Time::HiRes support) and sed - - outside of tmux, `$TERM` must be set to `xterm-256color` + - tmux **`>= 2.6`** running on Linux, macOS, OpenBSD, Windows (WSL or Cygwin) + - awk, perl (with Time::HiRes support), grep, and sed + - Outside of tmux, the `TERM` environment variable must be set to + `xterm-256color` ⚠️ Before installing, you may want to backup your existing configuration. @@ -24,14 +36,14 @@ You can install Oh my tmux! at any of the following locations: Installing in `~`: ``` $ cd -$ git clone https://github.com/gpakosz/.tmux.git +$ git clone --single-branch https://github.com/gpakosz/.tmux.git $ ln -s -f .tmux/.tmux.conf $ cp .tmux/.tmux.conf.local . ``` Installing in `$XDG_CONFIG_HOME/tmux`: ``` -$ git clone https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux" +$ git clone --single-branch https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux" $ mkdir -p "$XDG_CONFIG_HOME/tmux" $ ln -s "/path/to/oh-my-tmux/.tmux.conf" "$XDG_CONFIG_HOME/tmux/tmux.conf" $ cp "/path/to/oh-my-tmux/.tmux.conf.local" "$XDG_CONFIG_HOME/tmux/tmux.conf.local" @@ -39,7 +51,7 @@ $ cp "/path/to/oh-my-tmux/.tmux.conf.local" "$XDG_CONFIG_HOME/tmux/tmux.conf.loc Installing in `~/.config/tmux`: ``` -$ git clone https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux" +$ git clone --single-branch https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux" $ mkdir -p "~/.config/tmux" $ ln -s "/path/to/oh-my-tmux/.tmux.conf" "~/.config/tmux/tmux.conf" $ cp "/path/to/oh-my-tmux/.tmux.conf.local" "~/.config/tmux/tmux.conf.local" @@ -47,108 +59,143 @@ $ cp "/path/to/oh-my-tmux/.tmux.conf.local" "~/.config/tmux/tmux.conf.local" ⚠️ When installing `$XDG_CONFIG_HOME/tmux` or `~/.config/tmux`, the configuration file names don't have a leading `.` character. -❗️ You should never alter the main `.tmux.conf` or `tmux.conf` file. If you do, +🚨 **You should never alter the main `.tmux.conf` or `tmux.conf` file. If you do, you're on your own. Instead, every customization should happen in your -`.tmux.conf.local` or `tmux.conf.local` customization file copy. +`.tmux.conf.local` or `tmux.conf.local` customization file copy.** -If you're a Vim user, setting the `$EDITOR` environment variable to `vim` will -enable and further customize the vi-style key bindings (see tmux manual). +If you're a Vim user, setting the `EDITOR` environment variable to `vim` will +enable and further customize the `vi-style` key bindings (see tmux manual). -If you're new to tmux, I recommend you to read [tmux 3: Productive Mouse-Free -Development][bhtmux3] by [@bphogan]. +If you're new to tmux, I recommend you to read the [tmux getting started +guide][getting-started], as well as the [tmux 3: Productive Mouse-Free +Development][bhtmux3] book by [@bphogan]. Now proceed to [adjust] your `.local` customization file copy. +[getting-started]: https://github.com/tmux/tmux/wiki/Getting-Started [bhtmux3]: https://pragprog.com/titles/bhtmux3/tmux-3/ -[@bphogan]: https://twitter.com/bphogan +[@bphogan]: https://bphogan.com/ [adjust]: #configuration Troubleshooting --------------- - - **I'm running tmux `HEAD` and things don't work properly. What should I do?** + - **I believe something's not quite right** - Please open an issue describing what doesn't work with upcoming tmux. I'll do - my best to address it. + Please, try make sure no tmux client or server process is currently running. - - **Status line is broken and/or gets duplicated at the bottom of the screen. - What gives?** + Then launch tmux with: + ``` + $ tmux -f /dev/null -L test + ``` - This particularly happens on Linux when the distribution provides a version - of glib that received Unicode 9.0 upgrades (glib `>= 2.50.1`) while providing - a version of glibc that didn't (glibc `< 2.26`). You may also configure - `LC_CTYPE` to use an `UTF-8` locale. Typically VTE based terminal emulators - rely on glib's `g_unichar_iswide()` function while tmux relies on glibc's - `wcwidth()` function. When these two functions disagree, display gets messed - up. + Which launches a new tmux client/server pair without loading any + configuration. - This can also happen on macOS when using iTerm2 and "Use Unicode version 9 - character widths" is enabled in `Preferences... > Profiles > Text` + If the issue is still reproducing, please reach out to the tmux project for + support. - For that reason, the default sample `.local` customization file stopped using - Unicode characters for which width changed in between Unicode 8.0 and 9.0 - standards, as well as Emojis. + Otherwise, please open an issue describing what doesn't work and I'll do my + best to address it. - - **I installed Powerline and/or (patched) fonts but can't see Powerline - symbols.** + - **I tried to used `set`, `bind` and `unbind` in my `.local` customization + file, but Oh my tmux! overwrites my preferences** - First, you don't need to install Powerline. You only need fonts patched with - Powerline symbols or the standalone `PowerlineSymbols.otf` font. Then make - sure your `.local` customization file copy uses the Powerline code points for - `tmux_conf_theme_left_separator_XXX` values. + When that happens append `#!important` to the line: - - **I'm using Bash On Windows (WSL), colors and the Powerline look are broken.** + ``` + bind c new-window -c '#{pane_current_path}' #!important + ``` - There is currently a [bug][1681] in the new console powering Bash On Windows - preventing text attributes (bold, underscore, ...) to combine properly with - colors. The workaround is to search your `.local` customization file copy and - replace attributes with `'none'`. + ``` + set -g default-terminal "screen-256color" #!important + ``` - Also, until Window's console replaces its GDI based render with a DirectWrite - one, Powerline symbols will be broken. + - **Status line is broken and/or gets duplicated at the bottom of the screen** - The alternative is to use the [Mintty terminal for WSL][wsltty]. + This could happen on Linux when the distribution provides a version of glib + that received Unicode 9.0 upgrades (glib `>= 2.50.1`) while providing a + version of glibc that didn't (glibc `< 2.26`). You may also configure + `LC_CTYPE` to use an `UTF-8` locale. Typically VTE based terminal emulators + rely on glib's `g_unichar_iswide()` function while tmux relies on glibc's + `wcwidth()` function. When these two functions disagree, display gets messed + up. -[1681]: https://github.com/Microsoft/BashOnWindows/issues/1681 -[wsltty]: https://github.com/mintty/wsltty + This can also happen on macOS when using iTerm2 and "Use Unicode version 9 + character widths" is enabled in `Preferences... > Profiles > Text` + + For that reason, the sample `.local` customization file stopped using + Unicode characters for which width changed in between Unicode 8.0 and 9.0 + standards, as well as Emojis. + + - **I installed Powerline and/or (patched) fonts but I can't see the Powerline + symbols** + + **🤯 Please realize that you don't need to install [Powerline].** + + You only need fonts patched with Powerline symbols or the standalone + `PowerlineSymbols.otf` font. + + Then make sure your `.local` customization file copy uses the [Powerline + code points] for the + `tmux_conf_theme_left_separator_main`, + `tmux_conf_theme_left_separator_sub`, + `tmux_conf_theme_right_separator_main` + and `tmux_conf_theme_right_separator_sub` variables. + +[Powerline]: https://github.com/Lokaltog/powerline +[Powerline code points]: #enabling-the-powerline-look Features -------- - - `C-a` acts as secondary prefix, while keeping default `C-b` prefix - - visual theme inspired by [Powerline][] - - [maximize any pane to a new window with ` +`][maximize-pane] - - SSH/Mosh aware username and hostname status line information - - mouse mode toggle with ` m` - - laptop battery status line information - - uptime status line information - - optional highlight of focused pane - - configurable new windows and panes behavior (optionally retain current path) - - SSH/Mosh aware split pane (reconnects to remote server) - - copy to OS clipboard (needs `xsel`, `xclip`, or `wl-copy` on Linux) - - support for 4-digit hexadecimal Unicode characters - - [Facebook PathPicker][] integration if available - - [Urlscan][] (preferred) or [Urlview][] integration if available + - `C-a` acts as secondary prefix, while keeping default `C-b` prefix + - Visual theme inspired by [Powerline][] + - [Maximize any pane to a new window with ` +`][maximize-pane] + - Mouse mode toggle with ` m` + - Laptop battery status line information + - Uptime status line information + - Optional highlight of focused pane + - Configurable new sessions, windows and panes behavior (to optionally retain + the current path) + - SSH/Mosh aware username and hostname status line information + - SSH/Mosh aware pane splitting (with automatic reconnection to the remote + server) + - Copy to OS clipboard (needs `xsel`, `xclip`, or `wl-copy` on Linux) + - Support for 4-digit hexadecimal Unicode characters + - [PathPicker][] integration, if available + - [Urlscan][] (preferred) or [Urlview][] integration, if available -[Powerline]: https://github.com/Lokaltog/powerline [maximize-pane]: http://pempek.net/articles/2013/04/14/maximizing-tmux-pane-new-window/ -[Facebook PathPicker]: https://facebook.github.io/PathPicker/ +[PathPicker]: https://facebook.github.io/PathPicker/ [Urlview]: https://packages.debian.org/stable/misc/urlview [Urlscan]: https://github.com/firecat53/urlscan -The "maximize any pane to a new window with ` +`" feature is different -from builtin `resize-pane -Z` as it allows you to further split a maximized +The "Maximize any pane to a new window with ` +`" feature is different +from the builtin `resize-pane -Z` command, as it allows you to further split a maximized pane. It's also more flexible by allowing you to maximize a pane to a new window, then change window, then go back and the pane is still in maximized state in its own window. You can then minimize a pane by using ` +` either from the source window or the maximized window. -![Maximize pane](https://cloud.githubusercontent.com/assets/553208/9890858/ee3c0ca6-5c02-11e5-890e-05d825a46c92.gif) +

+ + + + Maximizing a pane + +

Mouse mode allows you to set the active window, set the active pane, resize panes and automatically switches to copy-mode to select text. -![Mouse mode](https://cloud.githubusercontent.com/assets/553208/9890797/8dffe542-5c02-11e5-9c06-a25b452e6fcc.gif) +

+ + + + Mouse mode + +

Bindings -------- @@ -163,48 +210,52 @@ list of key bindings: This configuration uses the following bindings: - - ` e` opens the `.local` customization file copy with the editor - defined by the `$EDITOR` environment variable (defaults to `vim` when empty) - - ` r` reloads the configuration - - `C-l` clears both the screen and the tmux history + - ` e` opens the `.local` customization file copy with the editor + defined by the `EDITOR` environment variable (defaults to `vim` when empty) + - ` r` reloads the configuration + - `C-l` clears both the screen **and** the tmux history - - ` C-c` creates a new session - - ` C-f` lets you switch to another session by name + - ` C-c` creates a new session + - ` C-f` lets you switch to another session by name - - ` C-h` and ` C-l` let you navigate windows (default - ` n` and ` p` are unbound) - - ` Tab` brings you to the last active window + - ` C-h` and ` C-l` let you navigate windows (default + ` n` is unbound and ` p` is repurposed) + - ` Tab` brings you to the last active window - - ` -` splits the current pane vertically - - ` _` splits the current pane horizontally - - ` h`, ` j`, ` k` and ` l` let you navigate - panes ala Vim - - ` H`, ` J`, ` K`, ` L` let you resize panes - - ` <` and ` >` let you swap panes - - ` +` maximizes the current pane to a new window + - ` -` splits the current pane vertically + - ` _` splits the current pane horizontally + - ` h`, ` j`, ` k` and ` l` let you navigate + panes ala Vim + - ` H`, ` J`, ` K`, ` L` let you resize panes + - ` <` and ` >` let you swap panes + - ` +` maximizes the current pane to a new window - - ` m` toggles mouse mode on or off + - ` m` toggles mouse mode on or off - - ` U` launches Urlscan (preferred) or Urlview, if available - - ` F` launches Facebook PathPicker, if available + - ` U` launches Urlscan (preferred) or Urlview, if available + - ` F` launches Facebook PathPicker, if available - - ` Enter` enters copy-mode - - ` b` lists the paste-buffers - - ` p` pastes from the top paste-buffer - - ` P` lets you choose the paste-buffer to paste from + - ` Enter` enters copy-mode + - ` b` lists the paste-buffers + - ` p` pastes from the top paste-buffer + - ` P` lets you choose the paste-buffer to paste from -Additionally, `copy-mode-vi` matches [my own Vim configuration][] +Additionally, `copy-mode-vi` matches [my own Vim configuration] [my own Vim configuration]: https://github.com/gpakosz/.vim.git Bindings for `copy-mode-vi`: -- `v` begins selection / visual mode -- `C-v` toggles between blockwise visual mode and visual mode -- `H` jumps to the start of line -- `L` jumps to the end of line -- `y` copies the selection to the top paste-buffer -- `Escape` cancels the current operation + - `v` begins selection / visual mode + - `C-v` toggles between blockwise visual mode and visual mode + - `H` jumps to the start of line + - `L` jumps to the end of line + - `y` copies the selection to the top paste-buffer + - `Escape` cancels the current operation + +It's also possible to preserve the tmux stock bindings by setting the +`tmux_conf_preserve_stock_bindings` variable to `true` in your `.local` +customization file copy. Configuration ------------- @@ -212,32 +263,47 @@ Configuration While this configuration tries to bring sane default settings, you may want to customize it further to your needs. -❗️ Again, you should never alter the main `.tmux.conf` or `tmux.conf` file. +🚨 Again, you should never alter the main `.tmux.conf` or `tmux.conf` file. If you do, you're on your own. Please refer to the sample `.local` customization file to know more about the variables that allow you to alter different behaviors. Upon successful installation, pressing ` e` will open your `.local` customization file -copy with the editor defined by the `$EDITOR` environment variable (defaults to +copy with the editor defined by the `EDITOR` environment variable (defaults to `vim` when empty). ### Enabling the Powerline look Powerline originated as a status-line plugin for Vim. Its popular eye-catching -look is based on the use of special symbols: Powerline Symbols +look is based on the use of special symbols: + +

+ + + + Powerline symbols + +

To make use of these symbols, there are several options: -- use a font that already bundles those: this is e.g. the case of the - [2.030R-ro/1.050R-it version][source code pro] of the Source Code Pro font -- use a [pre-patched font][powerline patched fonts] -- use your preferred font along with the [Powerline font][powerline font] (that - only contains the Powerline symbols): [this highly depends on your operating - system and your terminal emulator][terminal support], for instance here's a - screenshot of iTerm2 configured to use `PowerlineSymbols.otf` - ![iTerm2 + Powerline font](https://user-images.githubusercontent.com/553208/62243890-8232f500-b3de-11e9-9b8c-51a5d38bdaa8.png) + - Use a font that already bundles those: this is the case of the [Source Code + Pro][source code pro] font + - Use a [pre-patched font][powerline patched fonts] + - Use your preferred font along with the standalone [Powerline font][powerline + font] (that only contains the Powerline symbols): [this highly depends on + your operating system and your terminal emulator][terminal support], for + instance here's a screenshot of iTerm2 configured to use + `PowerlineSymbols.otf` for non ASCII symbols: +

+ + + + iTerm2 + Powerline font + +

-[source code pro]: https://github.com/adobe-fonts/source-code-pro/releases/tag/2.030R-ro/1.050R-it +[source code pro]: https://github.com/adobe-fonts/source-code-pro/releases/latest [powerline patched fonts]: https://github.com/powerline/fonts [powerline font]: https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf [terminal support]: http://powerline.readthedocs.io/en/master/usage.html#usage-terminal-emulators @@ -253,8 +319,7 @@ tmux_conf_theme_right_separator_sub='\uE0B3' ``` The [Powerline manual] contains further details on how to install fonts -containing the Powerline symbols. You don't need to install Powerline itself -though. +containing the Powerline symbols. [Powerline manual]: http://powerline.readthedocs.org/en/latest/installation.html#fonts-installation @@ -262,53 +327,59 @@ though. Edit your `.local` customization file copy (` e`) and adjust the `tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` variables to -your own preferences. +your liking. This configuration supports the following builtin variables: - - `#{battery_bar}`: horizontal battery charge bar - - `#{battery_hbar}`: 1 character wide, horizontal battery charge bar - - `#{battery_vbar}`: 1 character wide, vertical battery charge bar - - `#{battery_percentage}`: battery percentage - - `#{battery_status}`: is battery charging or discharging? - - `#{circled_session_name}`: circled session number, up to 20 - - `#{hostname}`: SSH/Mosh aware hostname information - - `#{hostname_ssh}`: SSH/Mosh aware hostname information, blank when not - connected to a remote server through SSH/Mosh - - `#{loadavg}`: load average - - `#{pairing}`: is session attached to more than one client? - - `#{pretty_pane_current_path}`: prettified `#{pane_current_path}` when its - length is too long - - `#{prefix}`: is prefix being depressed? - - `#{root}`: is current user root? - - `#{synchronized}`: are the panes synchronized? - - `#{uptime_y}`: uptime years - - `#{uptime_d}`: uptime days, modulo 365 when `#{uptime_y}` is used - - `#{uptime_h}`: uptime hours - - `#{uptime_m}`: uptime minutes - - `#{uptime_s}`: uptime seconds - - `#{username}`: SSH/Mosh aware username information - - `#{username_ssh}`: SSH aware username information, blank when not connected - to a remote server through SSH/Mosh + - `#{battery_bar}`: horizontal battery charge bar + - `#{battery_hbar}`: 1 character wide, horizontal battery charge bar + - `#{battery_vbar}`: 1 character wide, vertical battery charge bar + - `#{battery_percentage}`: battery percentage + - `#{battery_status}`: is battery charging or discharging? + - `#{circled_session_name}`: circled session number (from ⓪) to ⑳) + - `#{hostname}`: SSH/Mosh aware hostname information + - `#{hostname_ssh}`: SSH/Mosh aware hostname information, blank when not + connected to a remote server through SSH/Mosh + - `#{loadavg}`: load average + - `#{pairing}`: is the current session attached to more than one client? + - `#{pretty_pane_current_path}`: prettified `#{pane_current_path}` when its + length is too long + - `#{prefix}`: is prefix being depressed? + - `#{root}`: is the current user root? + - `#{synchronized}`: are the panes synchronized? + - `#{uptime_y}`: uptime years + - `#{uptime_d}`: uptime days, modulo 365 when `#{uptime_y}` is used + - `#{uptime_h}`: uptime hours + - `#{uptime_m}`: uptime minutes + - `#{uptime_s}`: uptime seconds + - `#{username}`: SSH/Mosh aware username information + - `#{username_ssh}`: SSH aware username information, blank when not connected + to a remote server through SSH/Mosh Beside the variables mentioned above, the `tmux_conf_theme_status_left` and -`tmux_conf_theme_status_right` variables support usual tmux syntax, e.g. using -`#()` to call an external command that inserts weather information provided by -[wttr.in]: +`tmux_conf_theme_status_right` variables support the usual tmux syntax, e.g. +using `#()` to call an external command that inserts weather information +provided by [wttr.in]: ``` tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #(curl -m 1 wttr.in?format=3 2>/dev/null; sleep 900) , %R , %d %b | #{username}#{root} | #{hostname} ' ``` The `sleep 900` call makes sure the network request is issued at most every 15 minutes whatever the value of `status-interval`. -![Weather information from wttr.in](https://user-images.githubusercontent.com/553208/52175490-07797c00-27a5-11e9-9fb6-42eec4fe4188.png) +

+ + + + Weather information from wttr.in + +

[wttr.in]: https://github.com/chubin/wttr.in#one-line-output -💡 You can also define your own custom variables by writing special functions, -see the sample `.local` customization file for instructions. +💡 You can also define your own custom variables by defining your own POSIX +shell functions, see the sample `.local` customization file for instructions. -Finally, remember `tmux_conf_theme_status_left` and +Finally, remember that `tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` end up being given to tmux as `status-left` and `status-right` which means they're passed through `strftime()`. As such, the `%` character has a special meaning and needs to be escaped by doubling it, e.g. @@ -319,48 +390,44 @@ See also `man 3 strftime`. ### Using TPM plugins -This configuration now comes with built-in [TPM] support: -- use the `set -g @plugin ...` syntax to enable a plugin -- whenever a plugin introduces a variable to be used in `status-left` or - `status-right`, you can use it in `tmux_conf_theme_status_left` and - `tmux_conf_theme_status_right` variables, see instructions above 👆 -- ⚠️ do not add `set -g @plugin 'tmux-plugins/tpm'` to any configuration file -- ⛔️ do not add `run '~/.tmux/plugins/tpm/tpm'` to any configuration file +This configuration comes with built-in [TPM] support: + + - Use the `set -g @plugin ...` syntax to enable a plugin + - Whenever a plugin introduces a variable to be used in `status-left` or + `status-right`, you can use it in the `tmux_conf_theme_status_left` and + `tmux_conf_theme_status_right` variables, see instructions above 👆 + - ⚠️ Do not add `set -g @plugin 'tmux-plugins/tpm'` to any configuration file + - ⛔️ Do not add `run '~/.tmux/plugins/tpm/tpm'` to any configuration file ⚠️ The TPM bindings differ slightly from upstream: - - installing plugins: ` + I` - - uninstalling plugins: ` + Alt + u` - - updating plugins: ` + u` + - Installing plugins: ` + I` + - Uninstalling plugins: ` + Alt + u` + - Updating plugins: ` + u` -See the sample `.local` customization file for instructions. +See the sample `.local` customization file for further instructions. [TPM]: https://github.com/tmux-plugins/tpm -### Using the configuration under Cygwin within Mintty +### Using Oh my tmux! on Windows -**I don't recommend running this configuration with Cygwin anymore. Forking -under Cygwin is extremely slow and this configuration issues a lot of +

+ + + + Windows Terminal + WSL + +

+ +⚠️ I don't recommend running this configuration with [Cygwin] anymore. Forking +under Cygwin is extremely slow and this configuration issues a fair amount `run-shell` commands under the hood. As such, you will experience high CPU -usage. As an alternative consider using [Mintty terminal for WSL][wsltty].** +usage. -![cygwin](https://cloud.githubusercontent.com/assets/553208/19741789/67a3f3d8-9bc2-11e6-9ecc-499fc0228ee6.png) +Instead I recommend [Windows Subsystem for Linux][WSL] along with [Windows +Terminal]. As an alternative, you may also consider using [Mintty as a terminal +for WSL][wsltty]. -It is possible to use this configuration under Cygwin within Mintty, however -support for Unicode symbols and emojis lacks behind Mac and Linux. - -Particularly, Mintty's text rendering is implemented with GDI which has -limitations: - -- color emojis are only available through DirectWrite starting with Windows 8.1 -- display of double width symbols, like the battery discharging symbol indicator - (U+1F50B) is buggy - -To get Unicode symbols displayed properly, you have to use [font linking]. -Open `regedit.exe` then navigate to the registry key at -`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink` -and add a new entry for you preferred font to link it with the Segoe UI Symbol -font. - -![regedit](https://cloud.githubusercontent.com/assets/553208/19741304/71a2f3ae-9bc0-11e6-96aa-4c09a812c313.png) - -[font linking]: https://msdn.microsoft.com/en-us/goglobal/bb688134.aspx +[Cygwin]: https://www.cygwin.com +[WSL]: https://learn.microsoft.com/en-us/windows/wsl +[wsltty]: https://github.com/mintty/wsltty +[Windows Terminal]: https://aka.ms/terminal