{"id":13740730,"url":"https://github.com/jabirali/tmux-tilish","last_synced_at":"2025-05-08T20:32:26.463Z","repository":{"id":40325594,"uuid":"253033809","full_name":"jabirali/tmux-tilish","owner":"jabirali","description":"Plugin which makes tmux work and feel like i3wm","archived":false,"fork":false,"pushed_at":"2025-01-27T16:31:11.000Z","size":160,"stargazers_count":444,"open_issues_count":1,"forks_count":33,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-05-03T06:11:44.715Z","etag":null,"topics":["dwm","i3","i3wm","sway","swaywm","tmux","tmux-plugins"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jabirali.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-04T15:35:53.000Z","updated_at":"2025-04-30T23:07:50.000Z","dependencies_parsed_at":"2024-04-11T21:48:39.292Z","dependency_job_id":"1aa11843-a1d5-4c74-9148-de40a212075e","html_url":"https://github.com/jabirali/tmux-tilish","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jabirali%2Ftmux-tilish","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jabirali%2Ftmux-tilish/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jabirali%2Ftmux-tilish/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jabirali%2Ftmux-tilish/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jabirali","download_url":"https://codeload.github.com/jabirali/tmux-tilish/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253145029,"owners_count":21861171,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dwm","i3","i3wm","sway","swaywm","tmux","tmux-plugins"],"created_at":"2024-08-03T04:00:51.694Z","updated_at":"2025-05-08T20:32:26.421Z","avatar_url":"https://github.com/jabirali.png","language":"Shell","funding_links":[],"categories":["Shell","tmux","Plugins"],"sub_categories":[],"readme":"# Tmux Tilish\n\nThis is a plugin that makes [`tmux`][6] behave more like a typical\n[dynamic window manager][7]. It is heavily inspired by [`i3wm`][8], and \nmost keybindings are taken [directly from there][1]. However, I have made \nsome adjustments to make these keybindings more consistent with `vim`: \nusing \u003ckbd\u003eh\u003c/kbd\u003e\u003ckbd\u003ej\u003c/kbd\u003e\u003ckbd\u003ek\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e instead of\n\u003ckbd\u003ej\u003c/kbd\u003e\u003ckbd\u003ek\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e\u003ckbd\u003e;\u003c/kbd\u003e for directions, and \nusing `vim`'s definitions of \"split\" and \"vsplit\". There is also an \n\"easy mode\" available for non-`vim` users, which uses arrow keys \ninstead of \u003ckbd\u003eh\u003c/kbd\u003e\u003ckbd\u003ej\u003c/kbd\u003e\u003ckbd\u003ek\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e.\n\nThe plugin has been verified to work on `tmux` v1.9, v2.6, v2.7, v2.9, and v3.0. \nSome features are only available on newer versions of `tmux` (currently v2.7+), \nbut I hope to provide at least basic support for most `tmux` versions in active use.\nIf you encounter any problems, please file an issue and I'll try to look into it.\n\n[1]: https://i3wm.org/docs/refcard.html\n[6]: https://github.com/tmux/tmux/wiki/Getting-Started\n[7]: https://en.wikipedia.org/wiki/Dynamic_window_manager\n[8]: https://i3wm.org/docs/\n\n## Why?\n\nOkay, so who is this plugin for anyway? You may be interested in this if:\n\n- You're using or interested in using `tmux`, but find the default keybindings\n  a bit clunky. This lets you try out an alternative keybinding paradigm, \n  which uses a modifier key (\u003ckbd\u003eAlt\u003c/kbd\u003e) instead of a prefix key \n  (\u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eb\u003c/kbd\u003e). The plugin also makes it easier to do\n  automatic tiling via `tmux` layouts, as opposed to splitting panes manually.\n- You use `i3wm`, but also do remote work over `ssh` + `tmux`. This lets \n  you use similar keybindings in both contexts.\n- You also use other platforms like Gnome, Mac, or WSL. You want to take \n  your `i3wm` muscle memory with you via `tmux`.\n- You're not really using `i3wm` anymore, but you did like how it handled\n  terminals and workspaces. You'd like to keep working that way in terminals,\n  without using `i3wm` or `sway` for your whole desktop.\n- You use a window manager that is similar to `i3wm`, e.g. [`dwm`][9],\n  and want to have that workflow in `tmux` too.\n\n[9]: https://dwm.suckless.org/tutorial/\n\n## Quickstart\n\nThe easiest way to install this plugin is via the [Tmux Plugin Manager][2].\nJust add the following to `~/.tmux.conf`, then press \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eb\u003c/kbd\u003e\nfollowed by \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003ei\u003c/kbd\u003e to install it (assuming default prefix key):\n\n\tset -g @plugin 'jabirali/tmux-tilish'\n\nFor `tmux` v2.7+, you can customize which layout is used as default for new workspaces.\nTo do so, add this to your `tmux.conf`:\n\n\tset -g @tilish-default 'main-vertical'\n\nJust replace `main-vertical` with one of the layouts from the `tmux` `man` page:\n\n| Description       | Name              |\n| ----------------- | ----------------- |\n| split then vsplit | `main-horizontal` |\n| only split        | `even-vertical`   |\n| vsplit then split | `main-vertical`   |\n| only vsplit       | `even-horizontal` |\n| fully tiled       | `tiled`           |\n\nThe words \"split\" and \"vsplit\" refer to the layouts you get in `vim` when\nrunning `:split` and `:vsplit`, respectively. (Unfortunately, what is called \na \"vertical\" and \"horizontal\" split varies between programs.)\nIf you do not set this option, `tilish` will not autoselect any layout; you\ncan still choose layouts manually using the keybindings listed below.\n\nBy default, Tilish will enforce the selected layout by automatically reapplying\nit every time a new pane is created or destroyed. If you want to disable this\nfeature, you can add one of these commands to your `tmux.conf`:\n\n    set -g @tilish-enforce 'size'\n    set -g @tilish-enforce 'none'\n\nThe former enforces that panes should have equal sizes, but does not move the\npanes around to enforce the layout. The latter disables the feature completely.\n\nAfter performing the steps above, you should read the [list of keybindings](#keybindings).\nFor further configuration options:\n\n- If you use `nvim` or `vim`, consider [integrating it with `tilish`](#integration-with-vim).\n- If you do not use `vim` or `kak`, consider activating [easy mode](#easy-mode).\n- If you use `kak` or `emacs`, consider activating [prefix mode](#prefix-mode).\n- If you use `tmux` within `i3wm` or `sway`, see [this section](#usage-inside-i3wm).\n- If you like `fzf`, check out the [project launcher](#project-launcher) and [application launcher](#application-launcher).\n- If it doesn't work, check your [terminal settings](#terminal-compatibility).\n\nIt is also recommended that you add the following to the top of your `tmux.conf`:\n\n\tset -s escape-time 0\n\tset -g base-index 1\n\nThe first line prevents e.g. \u003ckbd\u003eEsc\u003c/kbd\u003e + \u003ckbd\u003eh\u003c/kbd\u003e from triggering the\n\u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eh\u003c/kbd\u003e keybinding, preventing common misbehavior when\nusing `vim` in `tmux`. This option is automatically set by [tmux-sensible][4], if \nyou use that. The second line makes workspace numbers go from 1-10 instead of 0-9,\nwhich makes more sense on a keyboard where the number row starts at 1. However,\n`tilish` explicitly checks this setting when mapping keys, and works fine without it.\n\n[2]: https://github.com/tmux-plugins/tpm\n[4]: https://github.com/tmux-plugins/tmux-sensible\n\n## Keybindings\n\nFinally, here is a list of the actual keybindings. Most are [taken from `i3wm`][1].\nBelow, a \"workspace\" is what `tmux` would call a \"window\" and `vim` would call a \"tab\",\nwhile a \"pane\" is what `i3wm` would call a \"window\" and `vim` would call a \"split\".\n\n| Keybinding | Description |\n| ---------- | ----------- |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003e0\u003c/kbd\u003e-\u003ckbd\u003e9\u003c/kbd\u003e | Switch to workspace number 0-9 |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003e0\u003c/kbd\u003e-\u003ckbd\u003e9\u003c/kbd\u003e | Move pane to workspace 0-9 |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eh\u003c/kbd\u003e\u003ckbd\u003ej\u003c/kbd\u003e\u003ckbd\u003ek\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e | Move focus left/down/up/right |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eh\u003c/kbd\u003e\u003ckbd\u003ej\u003c/kbd\u003e\u003ckbd\u003ek\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e | Move pane left/down/up/right |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eo\u003c/kbd\u003e | Move focus cyclically |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eo\u003c/kbd\u003e | Move pane cyclically |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eEnter\u003c/kbd\u003e | Create a new pane at \"the end\" of the current layout |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003es\u003c/kbd\u003e | Switch to layout: split then vsplit |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003es\u003c/kbd\u003e | Switch to layout: only split |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ev\u003c/kbd\u003e | Switch to layout: vsplit then split |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003ev\u003c/kbd\u003e | Switch to layout: only vsplit |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003et\u003c/kbd\u003e | Switch to layout: fully tiled |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ez\u003c/kbd\u003e | Switch to layout: zoom (fullscreen) |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003er\u003c/kbd\u003e | Refresh current layout |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003en\u003c/kbd\u003e | Name current workspace |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ed\u003c/kbd\u003e | Application launcher (if enabled) |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ep\u003c/kbd\u003e | Project launcher (if enabled) |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eq\u003c/kbd\u003e | Quit (close) pane |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003ee\u003c/kbd\u003e | Exit (detach) `tmux` |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003ec\u003c/kbd\u003e | Reload config |\n\nThe \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003e0\u003c/kbd\u003e and \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003e0\u003c/kbd\u003e \nbindings are \"smart\": depending on `base-index`, they either act on workspace 0 or 10.\nMoreover, if you press \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003e3\u003c/kbd\u003e to switch to workspace 3 and then\npress it again, you will be sent back to the previous workspace you were using.\n\nThe  \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003e0\u003c/kbd\u003e-\u003ckbd\u003e9\u003c/kbd\u003e will create a new workspace if\none does not exist. This option can be turned off by the configuration\n`@tilish-createauto` as follows:\n\n    set -g @tilish-createauto 'off'\n\nWhen set to off, this setting will silently ignore when a non-existing\nworkspace is selected. This prevents accidental creation of workspaces. Note\nthat this configuration does not change the move pane to workspace command\n\u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003e0\u003c/kbd\u003e-\u003ckbd\u003e9\u003c/kbd\u003e, which will\ncreate a new workspace.\n\nThese keybindings can be changed by using a configuration setting `@tilish-remap`,\nwhich is somewhat similar to `vim`'s `nnoremap` command. The way it works is\nthat you specify which keys you want to remap in the following format. For instance,\nsay that you want to remap the `vim`-style `hjkl` movements to the arrow-like `ijkl`\nmovements; use \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ep\u003c/kbd\u003e instead of \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eEnter\u003c/kbd\u003e\nto create new panes; replace \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eQ\u003c/kbd\u003e\nwith \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eq\u003c/kbd\u003e as the keybinding to close a pane; and use\n\u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003espace\u003c/kbd\u003e to run the application launcher.\nThis can be accomplished as follows:[^remap]\n\n    set -g @tilish-remap 'h=j; j=k; k=i; l=l; Q=q; enter=p; d=space'\n\n[^remap]: If you want to remap something to a key that's already in use,\n          remember to also remap the key you're replacing. Otherwise, it\n\t  is not guaranteed that the key remapping will work.\n\nThe keybindings that move panes between workspaces assume a US keyboard layout.\nHowever, you can configure `tilish` for international keyboards by providing a string\n`@tilish-shiftnum` prepared by pressing \u003ckbd\u003eShift\u003c/kbd\u003e + \n\u003ckbd\u003e1\u003c/kbd\u003e\u003ckbd\u003e2\u003c/kbd\u003e\u003ckbd\u003e3\u003c/kbd\u003e\u003ckbd\u003e4\u003c/kbd\u003e\u003ckbd\u003e5\u003c/kbd\u003e\u003ckbd\u003e6\u003c/kbd\u003e\u003ckbd\u003e7\u003c/kbd\u003e\u003ckbd\u003e8\u003c/kbd\u003e\u003ckbd\u003e9\u003c/kbd\u003e\u003ckbd\u003e0\u003c/kbd\u003e. \nFor instance, for a UK keyboard, you would configure it as follows:\n\n\tset -g @tilish-shiftnum '!\"£$%^\u0026*()'\n\nYour terminal must support sending keycodes like `M-£` for the above to work.\nFor instance, a UK keyboard layout works fine on `urxvt`, but does not work \nby default on `kitty` or `alacritty`, which may require additional configuration.\n\n## Easy mode\n\nTo make the plugin more accessible for people who do not use `vim` as well,\nthere is also an \"easy mode\" available, which uses arrow keys instead of \nthe `vim`-style \u003ckbd\u003eh\u003c/kbd\u003e\u003ckbd\u003ej\u003c/kbd\u003e\u003ckbd\u003ek\u003c/kbd\u003e\u003ckbd\u003el\u003c/kbd\u003e keys.\nThis mode can be activated by putting this in your `tmux.conf`:\n\n\tset -g @tilish-easymode 'on'\n\nThe revised keybindings for the pane focus and movement then become:\n\n| Keybinding | Description |\n| ---------- | ----------- |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003e\u0026#8592;\u003c/kbd\u003e\u003ckbd\u003e\u0026#8595;\u003c/kbd\u003e\u003ckbd\u003e\u0026#8593;\u003c/kbd\u003e\u003ckbd\u003e\u0026#8594;\u003c/kbd\u003e | Move focus left/down/up/right |\n| \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003e\u0026#8592;\u003c/kbd\u003e\u003ckbd\u003e\u0026#8595;\u003c/kbd\u003e\u003ckbd\u003e\u0026#8593;\u003c/kbd\u003e\u003ckbd\u003e\u0026#8594;\u003c/kbd\u003e | Move pane left/down/up/right |\n\n## Prefix mode\nNote that this feature is currently only available in `tmux` v2.4+.\nThe \"prefix mode\" uses a prefix key instead of \u003ckbd\u003eAlt\u003c/kbd\u003e, and \nmay be particularly interesting for users of editors like `kak` and \n`emacs` that use \u003ckbd\u003eAlt\u003c/kbd\u003e key a lot. To activate this mode, you\ndefine a prefix keybinding in your `tmux.conf`. For instance, to use\n\u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eSpace\u003c/kbd\u003e as your `tilish` prefix, add:\n\n\tset -g @tilish-prefix 'M-space'\n\nActions that would usually be done by \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ekey\u003c/kbd\u003e\nare now accomplished by pressing the prefix and then \u003ckbd\u003ekey\u003c/kbd\u003e. \nFor example, opening a split is usually \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eEnter\u003c/kbd\u003e,\nbut with the above prefix this becomes \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eSpace\u003c/kbd\u003e \nthen \u003ckbd\u003eEnter\u003c/kbd\u003e. Note that the `tilish` prefix is different from\nthe `tmux` prefix, and should generally be bound to a different key.\nFor the prefix key, you can choose basically any keybinding that `tmux`\nsupports, e.g. `F12` or `C-s` or anything else you may prefer.\n\nAll these keybindings are `repeat`'able, so you do not have to press the\nprefix key again if you type multiple commands fast enough. Thus, pressing\n\u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eSpace\u003c/kbd\u003e followed by \u003ckbd\u003eh\u003c/kbd\u003e\u003ckbd\u003ej\u003c/kbd\u003e would \nmove to the left and then down, without requiring another prefix activation.\nThe `tmux` option `repeat-time` can be used to customize this timeout.\nPersonally, I find the default 500ms timeout somewhat short, and would\nrecommend that you increase this to at least a second if you use `tilish`:\n\n\tset -g repeat-time 1000\n\n## Project launcher\n\nMany editors and IDEs provide some notion of \"projects\" that can be easily\nopened using fuzzy-searching. For instance, in Sublime Text you can use the\nkeybinding \u003ckbd\u003eCmd\u003c/kbd\u003e + \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003ep\u003c/kbd\u003e to quickly open\nrecent projects, and \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003er\u003c/kbd\u003e does the same in VSCode.\n\nIf you tell Tilish where you store your projects, it can integrate with `fzf`\nto provide a project launcher. The keybinding \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ep\u003c/kbd\u003e\nwill then pop up an `fzf` window that lets you select a directory from your\nproject directory, and will then open a new `tmux` workspace in that folder\nwhich is automatically named to match the folder name.\n\nTo enable this feature, place e.g. the following snippet in your `tmux.conf` if\nyou store all your code projects in `~/Code`:\n\n    set -g @tilish-project \"$HOME/Code\"\n\n## Application launcher\n\nIn `i3wm`, the keybinding \u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003ed\u003c/kbd\u003e is by default mapped to\nthe application launcher `dmenu`, which can be practical to quickly open apps.\nIf you have [`fzf`][5] available on your system, `tilish` can offer a similar \napplication launcher using the same keyboard shortcut. To enable this \nfunctionality, add the following to your `tmux.conf`:\n\n\tset -g @tilish-dmenu 'on'\n\nPressing \u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003ed\u003c/kbd\u003e will then show a pop-up `tmux` window that\nlets you fuzzy-search through all executables in your system `$PATH`. Selecting\nan executable runs the command in a new window. This can be quite convenient\nas a way to quickly launch interactive processes like `htop` and `ipython`.\n\n[5]: https://github.com/junegunn/fzf\n\n## Terminal compatibility\n\nNot all terminals support all keybindings. The plugin has been verified\nto work well with: `iTerm2` and `Terminal.app` on macOS; `alacritty`, `kitty`,\n`terminator`, `gnome-terminal`, and `urxvt` on Linux; `wsltty` and `alacritty`\non Windows.  Some of these terminals bind \u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e to\nfullscreen, so you have to disable that for the `tilish` \"new pane\" binding to\nwork.  Moreover, `gnome-terminal` steals the \"switch workspace\" keybindings\n\u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003e0\u003c/kbd\u003e-\u003ckbd\u003e9\u003c/kbd\u003e *if* you open multiple tabs. If you\nuse macOS, you likely want to configure the `Option` key to send either `Esc+`\n(`iTerm2`) or `Meta` (`Terminal.app`) under the keyboard settings of the app.\n\nIt is also worth noting that `iTerm2` allows you to swap the `Cmd` and `Option`\nkeys in the terminal app. I recommend giving this a try if you're on macOS,\nsince the `Cmd` is more ergonomic than the `Option` key for extended use.\n\nIf you use `xterm`, almost none of the \u003ckbd\u003eAlt\u003c/kbd\u003e keys work by default.\nThat can be fixed by adding this to `~/.Xresources`:\n\n\tXTerm*eightBitControl: false\n\tXTerm*eightBitInput: false\n\tXTerm.omitTranslation: fullscreen\n\tXTerm*fullscreen: never\n\nThe same issue affects Alacritty on macOS; see\n[this issue](https://github.com/alacritty/alacritty/issues/93#issuecomment-353489475)\nfor a proposed solution.\n\n## Usage inside i3wm\n\nIf you use `tilish` inside `i3wm` or `sway`, keybindings like \n\u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e may spawn a new terminal in your window manager\ninstead of a new terminal pane inside `tmux`. The window manager always takes\npriority — so if both `i3wm` and `tilish` define the same keybinding,\n`i3wm` will intercept the keybinding before `tmux` sees it.\n\nThe best way to solve this is perhaps to change your window manager  modifier key\nto \u003ckbd\u003eSuper\u003c/kbd\u003e, also known as the \"Windows key\". As described \n[in the `i3wm` user guide](https://i3wm.org/docs/userguide.html#_using_i3), this can\nbe done by changing `$mod` to `Mod4` in your `i3wm` config. That way, pressing e.g.\n\u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e opens a new terminal pane inside `tmux`, while\n\u003ckbd\u003eSuper\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e opens a new terminal in `i3wm`. \n\nAlternatively, `tilish` also supports a [Prefix mode](#prefix-mode). This is in my opinion\nless ergonomic than the default `tilish` keybindings. However, it does not require the use\nof \u003ckbd\u003eAlt\u003c/kbd\u003e, and is therefore compatible with the default `i3wm` keybindings.\n\n## Integration with vim/neovim\n\nThere are multiple great plugins [tmux-navigate][10], [vim-tmux-navigator][3],\n[smart-splits.nvim][11], which all allow seamless navigation between `vim`\nsplits and `tmux` splits. [tmux-navigate][10] has an advantage that it also\nworks over `ssh` connections, and that it plays better with zooming\n(\u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003ez\u003c/kbd\u003e). If you use these plugins, you can tell `tilish`\nto make it setup the keybindings for you as described below. (If you don't,\n`tilish` will use fallback keybindings that don't integrate with `vim`.)\n\n### Navigate\n\nIt is perhaps easiest to setup `tmux-navigate`. Just load `navigate` *after* `tilish`\nin your `tmux.conf`, and set the option `@tilish-navigate` to `on` to integrate them.\nThus a full working minimal example of a `tpm`-based `tmux.conf` would be:\n\n\t# List of plugins.\n\tset -g @plugin 'tmux-plugins/tpm'\n\tset -g @plugin 'tmux-plugins/tmux-sensible'\n\tset -g @plugin 'jabirali/tmux-tilish'\n\tset -g @plugin 'sunaku/tmux-navigate'\n\t\n\t# Plugin options.\n\tset -g @tilish-navigate 'on'\n\t\n\t# Install `tpm` if needed.\n\tif \"test ! -d ~/.tmux/plugins/tpm\" \\\n\t   \"run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm \u0026\u0026 ~/.tmux/plugins/tpm/bin/install_plugins'\"\n\t\n\t# Activate the plugins.\n\trun -b \"~/.tmux/plugins/tpm/tpm\"\n\n\nNo further setup is required; `tilish` sets up the keybindings, and `navigate`\nhandles seamless navigation of `vim`/`nvim` splits. However, if you also want\nthis seamless navigation over `ssh` connections, you should install\nthe accompanying `vim` plugin; see [their website for more information][10].\n\n### Navigator\n\nTo install `vim-tmux-navigator`, you should first install the plugin for `vim` \nor `nvim`, as described on [their website][3]. Then place this in your\n`~/.config/nvim/init.vim` (`nvim`) or `~/.vimrc` (`vim`):\n\n\tnoremap \u003csilent\u003e \u003cm-h\u003e :TmuxNavigateLeft\u003ccr\u003e\n\tnoremap \u003csilent\u003e \u003cm-j\u003e :TmuxNavigateDown\u003ccr\u003e\n\tnoremap \u003csilent\u003e \u003cm-k\u003e :TmuxNavigateUp\u003ccr\u003e\n\tnoremap \u003csilent\u003e \u003cm-l\u003e :TmuxNavigateRight\u003ccr\u003e\n\nYou then just have to tell `tilish` that you want the integration:\n\n\tset -g @tilish-navigator 'on'\n\nA minimal working  example of a `~/.tmux.conf` with `tpm` would then be:\n\n\t# List of plugins.\n\tset -g @plugin 'tmux-plugins/tpm'\n\tset -g @plugin 'tmux-plugins/tmux-sensible'\n\tset -g @plugin 'jabirali/tmux-tilish'\n\t\n\t# Plugin options.\n\tset -g @tilish-navigator 'on'\n\t\n\t# Install `tpm` if needed.\n\tif \"test ! -d ~/.tmux/plugins/tpm\" \\\n\t   \"run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm \u0026\u0026 ~/.tmux/plugins/tpm/bin/install_plugins'\"\n\t\n\t# Activate the plugins.\n\trun -b \"~/.tmux/plugins/tpm/tpm\"\n\n### Smart-splits (neovim)\n\nIntegration with [smart-splits][11] is achieved through setting the\n`@tilish-smartsplits` option to `on`. This automatically configures the\nkeybindings so that \u003ckbd\u003eM\u003c/kbd\u003e-\u003ckbd\u003ehjkl\u003c/kbd\u003e permit navigating around panes.\n\nPrior to that, it requires installing the `smart-splits.nvim` plugin and\nconfiguring the following keybindings in e.g. `~/.config/nvim/init.vim`:\n\n```lua\n  -- moving between splits\n  vim.keymap.set(\"n\", \"\u003cA-h\u003e\", require(\"smart-splits\").move_cursor_left)\n  vim.keymap.set(\"n\", \"\u003cA-k\u003e\", require(\"smart-splits\").move_cursor_up)\n  vim.keymap.set(\"n\", \"\u003cA-j\u003e\", require(\"smart-splits\").move_cursor_down)\n  vim.keymap.set(\"n\", \"\u003cA-l\u003e\", require(\"smart-splits\").move_cursor_right)\n  vim.keymap.set(\"n\", \"\u003cA-\\\\\u003e\", require(\"smart-splits\").move_cursor_previous)\n  -- resizing splits\n  vim.keymap.set(\"n\", \"\u003cC-h\u003e\", require(\"smart-splits\").resize_left)\n  vim.keymap.set(\"n\", \"\u003cC-j\u003e\", require(\"smart-splits\").resize_down)\n  vim.keymap.set(\"n\", \"\u003cC-k\u003e\", require(\"smart-splits\").resize_up)\n  vim.keymap.set(\"n\", \"\u003cC-l\u003e\", require(\"smart-splits\").resize_right)\n  -- swapping buffers between windows\n  vim.keymap.set(\"n\", \"\u003cleader\u003e\u003cleader\u003eh\", require(\"smart-splits\").swap_buf_left)\n  vim.keymap.set(\"n\", \"\u003cleader\u003e\u003cleader\u003ej\", require(\"smart-splits\").swap_buf_down)\n  vim.keymap.set(\"n\", \"\u003cleader\u003e\u003cleader\u003ek\", require(\"smart-splits\").swap_buf_up)\n  vim.keymap.set(\"n\", \"\u003cleader\u003e\u003cleader\u003el\", require(\"smart-splits\").swap_buf_right)\n```\n\n[3]:  https://github.com/christoomey/vim-tmux-navigator\n[10]: https://github.com/sunaku/tmux-navigate\n[11]: https://github.com/mrjones2014/smart-splits.nvim\n\n# Related projects\n\n- [3mux](https://github.com/aaronjanse/3mux)\n- [tmux-normalmode](https://github.com/jabirali/tmux-normalmode/)\n- [tmux-navigate](https://github.com/sunaku/tmux-navigate)\n- [vim-tmux-navigator](https://github.com/christoomey/vim-tmux-navigator)\n- [vim-i3wm-tmux-navigator](https://github.com/fogine/vim-i3wm-tmux-navigator)\n- [smart-splits.nvim](https://github.com/mrjones2014/smart-splits.nvim)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjabirali%2Ftmux-tilish","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjabirali%2Ftmux-tilish","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjabirali%2Ftmux-tilish/lists"}