一个新的终端模拟器WezTerm
<p><a href="https://wezfurlong.org/wezterm/"target="_blank">wezterm</a> 是<a href="https://github.com/wez/"target="_blank">@wez</a>利用<a href="https://www.rust-lang.org/"target="_blank">Rust</a>开发的一款终端模拟器.和<a href="https://github.com/microsoft/terminal"target="_blank">microsoft/terminal</a>还有 <code>ITerm</code> 类似.</p>
<p>支持的<a href="https://wezfurlong.org/wezterm/features.html"target="_blank">特性</a>也特别多,比较有特色的是可以通过 <code>lua</code> 来配置或者增加一些特性.比方把 <code>~/.ssh/config</code> 中的host直插入到 <code>wezterm</code> 中的 <code>launch_menu</code> ,在打开 <code>launch_menu</code> 的时候可以通过 <code>/</code> 来查找.</p>
<p>在快捷键支持这块有一个 <code>leader key</code> 的设定类似 <code>vim</code> 或者 <code>emacs</code> 里面的快捷键配置.</p>
<p>下面是鼓捣出来一个配置,如果有兴趣尝试的话可以试试看.把这个配置放到 <code>~/.config/wezterm/wezterm.lua</code> 就可以了.</p>
<div class="highlight"><pre class="chroma"><code class="language-lua" data-lang="lua"><span class="kd">local</span> <span class="kr">function</span> <span class="nf">basename</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="kr">return</span> <span class="n">string.gsub</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s2">"(.*[/</span><span class="se">\\</span><span class="s2">])(.*)"</span><span class="p">,</span> <span class="s2">"%2"</span><span class="p">)</span>
<span class="kr">end</span>
<span class="kd">local</span> <span class="n">wezterm</span> <span class="o">=</span> <span class="n">require</span> <span class="s2">"wezterm"</span>
<span class="kd">local</span> <span class="n">SOLID_LEFT_ARROW</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xe0ba</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">SOLID_LEFT_MOST</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0x2588</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">SOLID_RIGHT_ARROW</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xe0bc</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">ADMIN_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf49c</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">CMD_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xe62a</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">NU_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xe7a8</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">PS_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xe70f</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">ELV_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xfc6f</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">WSL_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf83c</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">YORI_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf1d4</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">NYA_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf61a</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">VIM_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xe62b</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">PAGER_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf718</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">FUZZY_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf0b0</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">HOURGLASS_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf252</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">SUNGLASS_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf9df</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">PYTHON_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xf820</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">NODE_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xe74e</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">DENO_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xe628</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">LAMBDA_ICON</span> <span class="o">=</span> <span class="n">utf8.char</span><span class="p">(</span><span class="mh">0xfb26</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">SUP_IDX</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"¹"</span><span class="p">,</span><span class="s2">"²"</span><span class="p">,</span><span class="s2">"³"</span><span class="p">,</span><span class="s2">"⁴"</span><span class="p">,</span><span class="s2">"⁵"</span><span class="p">,</span><span class="s2">"⁶"</span><span class="p">,</span><span class="s2">"⁷"</span><span class="p">,</span><span class="s2">"⁸"</span><span class="p">,</span><span class="s2">"⁹"</span><span class="p">,</span><span class="s2">"¹⁰"</span><span class="p">,</span>
<span class="s2">"¹¹"</span><span class="p">,</span><span class="s2">"¹²"</span><span class="p">,</span><span class="s2">"¹³"</span><span class="p">,</span><span class="s2">"¹⁴"</span><span class="p">,</span><span class="s2">"¹⁵"</span><span class="p">,</span><span class="s2">"¹⁶"</span><span class="p">,</span><span class="s2">"¹⁷"</span><span class="p">,</span><span class="s2">"¹⁸"</span><span class="p">,</span><span class="s2">"¹⁹"</span><span class="p">,</span><span class="s2">"²⁰"</span><span class="p">}</span>
<span class="kd">local</span> <span class="n">SUB_IDX</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"₁"</span><span class="p">,</span><span class="s2">"₂"</span><span class="p">,</span><span class="s2">"₃"</span><span class="p">,</span><span class="s2">"₄"</span><span class="p">,</span><span class="s2">"₅"</span><span class="p">,</span><span class="s2">"₆"</span><span class="p">,</span><span class="s2">"₇"</span><span class="p">,</span><span class="s2">"₈"</span><span class="p">,</span><span class="s2">"₉"</span><span class="p">,</span><span class="s2">"₁₀"</span><span class="p">,</span>
<span class="s2">"₁₁"</span><span class="p">,</span><span class="s2">"₁₂"</span><span class="p">,</span><span class="s2">"₁₃"</span><span class="p">,</span><span class="s2">"₁₄"</span><span class="p">,</span><span class="s2">"₁₅"</span><span class="p">,</span><span class="s2">"₁₆"</span><span class="p">,</span><span class="s2">"₁₇"</span><span class="p">,</span><span class="s2">"₁₈"</span><span class="p">,</span><span class="s2">"₁₉"</span><span class="p">,</span><span class="s2">"₂₀"</span><span class="p">}</span>
<span class="kd">local</span> <span class="n">launch_menu</span> <span class="o">=</span> <span class="p">{}</span>
<span class="kd">local</span> <span class="n">ssh_cmd</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ssh"</span><span class="p">}</span>
<span class="kr">if</span> <span class="n">wezterm.target_triple</span> <span class="o">==</span> <span class="s2">"x86_64-pc-windows-msvc"</span> <span class="kr">then</span>
<span class="n">ssh_cmd</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"powershell.exe"</span><span class="p">,</span> <span class="s2">"ssh"</span><span class="p">}</span>
<span class="n">table.insert</span><span class="p">(</span>
<span class="n">launch_menu</span><span class="p">,</span>
<span class="p">{</span>
<span class="n">label</span> <span class="o">=</span> <span class="s2">"PowerShell Core"</span><span class="p">,</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"pwsh.exe"</span><span class="p">,</span> <span class="s2">"-NoLogo"</span><span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">table.insert</span><span class="p">(</span>
<span class="n">launch_menu</span><span class="p">,</span>
<span class="p">{</span>
<span class="n">label</span> <span class="o">=</span> <span class="s2">"NyaGOS"</span><span class="p">,</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"nyagos.exe"</span><span class="p">,</span> <span class="s2">"--glob"</span><span class="p">},</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="kr">end</span>
<span class="kd">local</span> <span class="n">ssh_config_file</span> <span class="o">=</span> <span class="n">wezterm.home_dir</span> <span class="o">..</span> <span class="s2">"/.ssh/config"</span>
<span class="kd">local</span> <span class="n">f</span> <span class="o">=</span> <span class="n">io.open</span><span class="p">(</span><span class="n">ssh_config_file</span><span class="p">)</span>
<span class="kr">if</span> <span class="n">f</span> <span class="kr">then</span>
<span class="kd">local</span> <span class="n">line</span> <span class="o">=</span> <span class="n">f</span><span class="p">:</span><span class="n">read</span><span class="p">(</span><span class="s2">"*l"</span><span class="p">)</span>
<span class="kr">while</span> <span class="n">line</span> <span class="kr">do</span>
<span class="kr">if</span> <span class="n">line</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"Host "</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="kr">then</span>
<span class="kd">local</span> <span class="n">host</span> <span class="o">=</span> <span class="n">line</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"Host "</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
<span class="n">table.insert</span><span class="p">(</span>
<span class="n">launch_menu</span><span class="p">,</span>
<span class="p">{</span>
<span class="n">label</span> <span class="o">=</span> <span class="s2">"SSH "</span> <span class="o">..</span> <span class="n">host</span><span class="p">,</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ssh"</span><span class="p">,</span> <span class="n">host</span><span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="kr">end</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">f</span><span class="p">:</span><span class="n">read</span><span class="p">(</span><span class="s2">"*l"</span><span class="p">)</span>
<span class="kr">end</span>
<span class="n">f</span><span class="p">:</span><span class="n">close</span><span class="p">()</span>
<span class="kr">end</span>
<span class="kd">local</span> <span class="n">mouse_bindings</span> <span class="o">=</span> <span class="p">{</span>
<span class="p">{</span>
<span class="n">event</span> <span class="o">=</span> <span class="p">{</span><span class="n">Down</span> <span class="o">=</span> <span class="p">{</span><span class="n">streak</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">button</span> <span class="o">=</span> <span class="s2">"Right"</span><span class="p">}},</span>
<span class="n">mods</span> <span class="o">=</span> <span class="s2">"NONE"</span><span class="p">,</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">wezterm.action</span> <span class="p">{</span><span class="n">PasteFrom</span> <span class="o">=</span> <span class="s2">"Clipboard"</span><span class="p">}</span>
<span class="p">},</span>
<span class="c1">-- Change the default click behavior so that it only selects</span>
<span class="c1">-- text and doesn't open hyperlinks</span>
<span class="p">{</span>
<span class="n">event</span> <span class="o">=</span> <span class="p">{</span><span class="n">Up</span> <span class="o">=</span> <span class="p">{</span><span class="n">streak</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">button</span> <span class="o">=</span> <span class="s2">"Left"</span><span class="p">}},</span>
<span class="n">mods</span> <span class="o">=</span> <span class="s2">"NONE"</span><span class="p">,</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">wezterm.action</span> <span class="p">{</span><span class="n">CompleteSelection</span> <span class="o">=</span> <span class="s2">"PrimarySelection"</span><span class="p">}</span>
<span class="p">},</span>
<span class="c1">-- and make CTRL-Click open hyperlinks</span>
<span class="p">{</span>
<span class="n">event</span> <span class="o">=</span> <span class="p">{</span><span class="n">Up</span> <span class="o">=</span> <span class="p">{</span><span class="n">streak</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">button</span> <span class="o">=</span> <span class="s2">"Left"</span><span class="p">}},</span>
<span class="n">mods</span> <span class="o">=</span> <span class="s2">"CTRL"</span><span class="p">,</span>
<span class="n">action</span> <span class="o">=</span> <span class="s2">"OpenLinkAtMouseCursor"</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">wezterm.on</span><span class="p">(</span><span class="s2">"format-tab-title"</span><span class="p">,</span> <span class="kr">function</span><span class="p">(</span><span class="n">tab</span><span class="p">,</span> <span class="n">tabs</span><span class="p">,</span> <span class="n">panes</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">hover</span><span class="p">,</span> <span class="n">max_width</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">edge_background</span> <span class="o">=</span> <span class="s2">"#121212"</span>
<span class="kd">local</span> <span class="n">background</span> <span class="o">=</span> <span class="s2">"#4E4E4E"</span>
<span class="kd">local</span> <span class="n">foreground</span> <span class="o">=</span> <span class="s2">"#1C1B19"</span>
<span class="kd">local</span> <span class="n">dim_foreground</span> <span class="o">=</span> <span class="s2">"#3A3A3A"</span>
<span class="kr">if</span> <span class="n">tab.is_active</span> <span class="kr">then</span>
<span class="n">background</span> <span class="o">=</span> <span class="s2">"#FBB829"</span>
<span class="n">foreground</span> <span class="o">=</span> <span class="s2">"#1C1B19"</span>
<span class="kr">elseif</span> <span class="n">hover</span> <span class="kr">then</span>
<span class="n">background</span> <span class="o">=</span> <span class="s2">"#FF8700"</span>
<span class="n">foreground</span> <span class="o">=</span> <span class="s2">"#1C1B19"</span>
<span class="kr">end</span>
<span class="kd">local</span> <span class="n">edge_foreground</span> <span class="o">=</span> <span class="n">background</span>
<span class="kd">local</span> <span class="n">process_name</span> <span class="o">=</span> <span class="n">tab.active_pane</span><span class="p">.</span><span class="n">foreground_process_name</span>
<span class="kd">local</span> <span class="n">pane_title</span> <span class="o">=</span> <span class="n">tab.active_pane</span><span class="p">.</span><span class="n">title</span>
<span class="kd">local</span> <span class="n">exec_name</span> <span class="o">=</span> <span class="n">basename</span><span class="p">(</span><span class="n">process_name</span><span class="p">):</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"%.exe$"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">title_with_icon</span>
<span class="kr">if</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"nu"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">NU_ICON</span> <span class="o">..</span> <span class="s2">" NuShell"</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"pwsh"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">PS_ICON</span> <span class="o">..</span> <span class="s2">" PS"</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"cmd"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">CMD_ICON</span> <span class="o">..</span> <span class="s2">" CMD"</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"elvish"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">ELV_ICON</span> <span class="o">..</span> <span class="s2">" Elvish"</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"wsl"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"wslhost"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">WSL_ICON</span> <span class="o">..</span> <span class="s2">" WSL"</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"nyagos"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">NYA_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">pane_title</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">".*: (.+) %- .+"</span><span class="p">,</span> <span class="s2">"%1"</span><span class="p">)</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"yori"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">YORI_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">pane_title</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">" %- Yori"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"nvim"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">VIM_ICON</span> <span class="o">..</span> <span class="n">pane_title</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"^(%S+)%s+(%d+/%d+) %- nvim"</span><span class="p">,</span> <span class="s2">" %2 %1"</span><span class="p">)</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"bat"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"less"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"moar"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">PAGER_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">exec_name</span><span class="p">:</span><span class="n">upper</span><span class="p">()</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"fzf"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"hs"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"peco"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">FUZZY_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">exec_name</span><span class="p">:</span><span class="n">upper</span><span class="p">()</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"btm"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"ntop"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">SUNGLASS_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">exec_name</span><span class="p">:</span><span class="n">upper</span><span class="p">()</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"python"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"hiss"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">PYTHON_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">exec_name</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"node"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">NODE_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">exec_name</span><span class="p">:</span><span class="n">upper</span><span class="p">()</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"deno"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">DENO_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">exec_name</span><span class="p">:</span><span class="n">upper</span><span class="p">()</span>
<span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"bb"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"cmd-clj"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"janet"</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">"hy"</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">LAMBDA_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">exec_name</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"bb"</span><span class="p">,</span> <span class="s2">"Babashka"</span><span class="p">):</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"cmd%-clj"</span><span class="p">,</span> <span class="s2">"Clojure"</span><span class="p">)</span>
<span class="kr">else</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">HOURGLASS_ICON</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">exec_name</span>
<span class="kr">end</span>
<span class="kr">if</span> <span class="n">pane_title</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"^Administrator: "</span><span class="p">)</span> <span class="kr">then</span>
<span class="n">title_with_icon</span> <span class="o">=</span> <span class="n">title_with_icon</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">ADMIN_ICON</span>
<span class="kr">end</span>
<span class="kd">local</span> <span class="n">left_arrow</span> <span class="o">=</span> <span class="n">SOLID_LEFT_ARROW</span>
<span class="kr">if</span> <span class="n">tab.tab_index</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span>
<span class="n">left_arrow</span> <span class="o">=</span> <span class="n">SOLID_LEFT_MOST</span>
<span class="kr">end</span>
<span class="kd">local</span> <span class="n">id</span> <span class="o">=</span> <span class="n">SUB_IDX</span><span class="p">[</span><span class="n">tab.tab_index</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span>
<span class="kd">local</span> <span class="n">pid</span> <span class="o">=</span> <span class="n">SUP_IDX</span><span class="p">[</span><span class="n">tab.active_pane</span><span class="p">.</span><span class="n">pane_index</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span>
<span class="kd">local</span> <span class="n">title</span> <span class="o">=</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">wezterm.truncate_right</span><span class="p">(</span><span class="n">title_with_icon</span><span class="p">,</span> <span class="n">max_width</span><span class="o">-</span><span class="mi">6</span><span class="p">)</span> <span class="o">..</span> <span class="s2">" "</span>
<span class="kr">return</span> <span class="p">{</span>
<span class="p">{</span><span class="n">Attribute</span><span class="o">=</span><span class="p">{</span><span class="n">Intensity</span><span class="o">=</span><span class="s2">"Bold"</span><span class="p">}},</span>
<span class="p">{</span><span class="n">Background</span><span class="o">=</span><span class="p">{</span><span class="n">Color</span><span class="o">=</span><span class="n">edge_background</span><span class="p">}},</span>
<span class="p">{</span><span class="n">Foreground</span><span class="o">=</span><span class="p">{</span><span class="n">Color</span><span class="o">=</span><span class="n">edge_foreground</span><span class="p">}},</span>
<span class="p">{</span><span class="n">Text</span><span class="o">=</span><span class="n">left_arrow</span><span class="p">},</span>
<span class="p">{</span><span class="n">Background</span><span class="o">=</span><span class="p">{</span><span class="n">Color</span><span class="o">=</span><span class="n">background</span><span class="p">}},</span>
<span class="p">{</span><span class="n">Foreground</span><span class="o">=</span><span class="p">{</span><span class="n">Color</span><span class="o">=</span><span class="n">foreground</span><span class="p">}},</span>
<span class="p">{</span><span class="n">Text</span><span class="o">=</span><span class="n">id</span><span class="p">},</span>
<span class="p">{</span><span class="n">Text</span><span class="o">=</span><span class="n">title</span><span class="p">},</span>
<span class="p">{</span><span class="n">Foreground</span><span class="o">=</span><span class="p">{</span><span class="n">Color</span><span class="o">=</span><span class="n">dim_foreground</span><span class="p">}},</span>
<span class="p">{</span><span class="n">Text</span><span class="o">=</span><span class="n">pid</span><span class="p">},</span>
<span class="p">{</span><span class="n">Background</span><span class="o">=</span><span class="p">{</span><span class="n">Color</span><span class="o">=</span><span class="n">edge_background</span><span class="p">}},</span>
<span class="p">{</span><span class="n">Foreground</span><span class="o">=</span><span class="p">{</span><span class="n">Color</span><span class="o">=</span><span class="n">edge_foreground</span><span class="p">}},</span>
<span class="p">{</span><span class="n">Text</span><span class="o">=</span><span class="n">SOLID_RIGHT_ARROW</span><span class="p">},</span>
<span class="p">{</span><span class="n">Attribute</span><span class="o">=</span><span class="p">{</span><span class="n">Intensity</span><span class="o">=</span><span class="s2">"Normal"</span><span class="p">}},</span>
<span class="p">}</span>
<span class="kr">end</span><span class="p">)</span>
<span class="n">wezterm.on</span><span class="p">(</span>
<span class="s2">"update-right-status"</span><span class="p">,</span>
<span class="kr">function</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
<span class="kd">local</span> <span class="n">date</span> <span class="o">=</span> <span class="n">wezterm.strftime</span><span class="p">(</span><span class="s2">"%Y-%m-%d %H:%M:%S "</span><span class="p">)</span>
<span class="n">window</span><span class="p">:</span><span class="n">set_right_status</span><span class="p">(</span>
<span class="n">wezterm.format</span><span class="p">(</span>
<span class="p">{</span>
<span class="p">{</span><span class="n">Text</span> <span class="o">=</span> <span class="n">date</span><span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="kr">end</span>
<span class="p">)</span>
<span class="kd">local</span> <span class="n">default_prog</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"pwsh.exe"</span><span class="p">}</span>
<span class="kr">return</span> <span class="p">{</span>
<span class="n">set_environment_variables</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">PATH</span> <span class="o">=</span> <span class="n">wezterm.executable_dir</span> <span class="o">..</span> <span class="s2">";"</span> <span class="o">..</span> <span class="n">os.getenv</span><span class="p">(</span><span class="s2">"PATH"</span><span class="p">),</span>
<span class="p">},</span>
<span class="n">window_frame</span> <span class="o">=</span> <span class="n">window_frame</span><span class="p">,</span> <span class="c1">-- needed only if using fancy tab</span>
<span class="n">window_background_opacity</span> <span class="o">=</span> <span class="mf">0.8</span><span class="p">,</span>
<span class="n">launch_menu</span> <span class="o">=</span> <span class="n">launch_menu</span><span class="p">,</span>
<span class="n">mouse_bindings</span> <span class="o">=</span> <span class="n">mouse_bindings</span><span class="p">,</span>
<span class="n">disable_default_key_bindings</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span>
<span class="n">default_prog</span> <span class="o">=</span> <span class="n">default_prog</span><span class="p">,</span>
<span class="n">font</span> <span class="o">=</span> <span class="n">wezterm.font</span><span class="p">(</span><span class="s2">"Fira Code"</span><span class="p">),</span>
<span class="n">colors</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">tab_bar</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">background</span> <span class="o">=</span> <span class="n">TAB_BAR_BG</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">},</span>
<span class="n">text_background_opacity</span> <span class="o">=</span> <span class="mf">0.95</span><span class="p">,</span>
<span class="n">leader</span> <span class="o">=</span> <span class="p">{</span> <span class="n">key</span><span class="o">=</span><span class="s2">"x"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"CTRL"</span><span class="p">},</span>
<span class="n">keys</span> <span class="o">=</span> <span class="p">{</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"`"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER|CTRL"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">SendString</span><span class="o">=</span><span class="s2">"`"</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"v"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"CTRL"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">PasteFrom</span> <span class="o">=</span> <span class="s2">"Clipboard"</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"-"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">SplitVertical</span><span class="o">=</span><span class="p">{</span><span class="n">domain</span><span class="o">=</span><span class="s2">"CurrentPaneDomain"</span><span class="p">}}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">,</span><span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">SplitHorizontal</span><span class="o">=</span><span class="p">{</span><span class="n">domain</span><span class="o">=</span><span class="s2">"CurrentPaneDomain"</span><span class="p">}}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"c"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">SpawnTab</span><span class="o">=</span><span class="s2">"CurrentPaneDomain"</span><span class="p">}},</span>
<span class="p">{</span><span class="n">key</span><span class="o">=</span><span class="s2">"h"</span><span class="p">,</span><span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivatePaneDirection</span><span class="o">=</span><span class="s2">"Left"</span><span class="p">}},</span>
<span class="p">{</span><span class="n">key</span><span class="o">=</span><span class="s2">"j"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span><span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivatePaneDirection</span><span class="o">=</span><span class="s2">"Up"</span><span class="p">}},</span>
<span class="p">{</span><span class="n">key</span><span class="o">=</span><span class="s2">"k"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span><span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivatePaneDirection</span><span class="o">=</span><span class="s2">"Down"</span><span class="p">}},</span>
<span class="p">{</span><span class="n">key</span><span class="o">=</span><span class="s2">"l"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span><span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivatePaneDirection</span><span class="o">=</span><span class="s2">"Right"</span><span class="p">}},</span>
<span class="p">{</span><span class="n">key</span> <span class="o">=</span> <span class="s2">","</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="s2">"ShowLauncher"</span><span class="p">},</span>
<span class="p">{</span><span class="n">key</span> <span class="o">=</span> <span class="s2">"b"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="s2">"ShowTabNavigator"</span><span class="p">},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"f"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="s2">"QuickSelect"</span> <span class="p">},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\t</span><span class="s2">"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"ActivateLastTab"</span><span class="p">},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">0</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"2"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">1</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"3"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">2</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"4"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">3</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"5"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">4</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"6"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">5</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"7"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">6</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"8"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">7</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"9"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTab</span><span class="o">=</span><span class="mi">8</span><span class="p">}},</span>
<span class="c1">-- { key = "l", mods = "LEADER", action=wezterm.action{EmitEvent="toggle-ligature"}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"n"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTabRelative</span><span class="o">=</span><span class="mi">1</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"p"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">ActivateTabRelative</span><span class="o">=-</span><span class="mi">1</span><span class="p">}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"&"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER|SHIFT"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">CloseCurrentTab</span><span class="o">=</span><span class="p">{</span><span class="n">confirm</span><span class="o">=</span><span class="kc">true</span><span class="p">}}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"x"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">wezterm.action</span><span class="p">{</span><span class="n">CloseCurrentPane</span><span class="o">=</span><span class="p">{</span><span class="n">confirm</span><span class="o">=</span><span class="kc">true</span><span class="p">}}},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"w"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"ALT"</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="n">wezterm.action</span><span class="p">({</span> <span class="n">CopyTo</span> <span class="o">=</span> <span class="s2">"Clipboard"</span> <span class="p">})</span> <span class="p">},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"y"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"CTRL"</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="n">wezterm.action</span><span class="p">({</span> <span class="n">PasteFrom</span> <span class="o">=</span> <span class="s2">"Clipboard"</span> <span class="p">})</span> <span class="p">},</span>
<span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">"Tab"</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">"LEADER"</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="n">wezterm.action</span><span class="p">({</span> <span class="n">ActivateTabRelative</span> <span class="o">=</span> <span class="mi">1</span> <span class="p">})</span> <span class="p">},</span>
<span class="p">},</span>
<span class="p">}</span>
</code></pre></div>