W

wentao's blog

feedId:79765201172692992+userId:79764570702557184

解决armbian更新报不能验证个别公钥

<p>近期把rock5b升级 <code>armbian</code> 的 <code>bookworm</code> 版本的时候,不管是官方的源还是国内,都会在执行 <code>apt update</code> 的时候会出现如下的错误:</p> <blockquote> <p>An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: <a href="https://mirrors.aliyun.com/armbian">https://mirrors.aliyun.com/armbian</a> bookworm InRelease: The following signatures couldn&rsquo;t be verified because the public key is not available: NO_PUBKEY 93D6889F9F0E78D5</p> </blockquote> <p>解决办法如下:</p> <div class="highlight"><pre class="chroma"><code class="language-bash" data-lang="bash">curl <span class="s1">&#39;https://keyserver.ubuntu.com/pks/lookup?op=get&amp;search=0xdf00faf1c577104b50bf1d0093d6889f9f0e78d5&#39;</span> <span class="p">|</span>gpg --dearmor<span class="p">|</span> sudo tee /etc/apt/trusted.gpg.d/armbian.gpg </code></pre></div><p>简单的说就是把在keyserver.ubuntu.com上的公钥手动放到受信任的公钥列表里面.</p> <p>对于其他的类似报错可以 <a href="https://keyserver.ubuntu.com/">https://keyserver.ubuntu.com/</a> 上查找并导入.</p> <p>参考资料:</p> <ul> <li><a href="https://github.com/cli/cli/issues/6175"target="_blank">GPG key used to sign debian packages is expired · Issue #6175 · cli/cli</a></li> <li><a href="https://forum.armbian.com/topic/26978-csc-armbian-for-rk3318rk3328-tv-box-boards/page/34/#comment-143097"target="_blank">CSC Armbian for RK3318/RK3328 TV box boards - Page 34 - Rockchip CPU Boxes - Armbian Community Forums</a></li> </ul>

2023/7/11
阅读更多

nyagos增加zoxide的支持

<h2 id="介绍">介绍</h2> <p><a href="https://github.com/ajeetdsouza/zoxide"target="_blank">zoxide</a> 提供了 <code>z jump</code> 的功能.能够记录就访问的路径,并通过其中的关键词快速的定位到你想要的文件夹.</p> <p><a href="https://github.com/nyaosorg/nyagos"target="_blank">nyagos</a> 是一个支持使用 <code>lua</code> 配置的 <code>shell</code>. 快速、稳定.但是使用圈子很小.</p> <p><a href="https://github.com/ajeetdsouza/zoxide"target="_blank">zoxide</a> 提供了常见的 <code>shell</code> 整合,在 <code>nyagos</code> 下面没有相关的支持.</p> <h2 id="步骤">步骤</h2> <p>由于主要是自用,简单的通过 <code>lua</code> 和 <code>nyagos.alias</code> 功能实现了一个简单的版本.</p> <p>其中 <code>z</code> 跳转的时候只支持一个参数.</p> <div class="highlight"><pre class="chroma"><code class="language-lua" data-lang="lua"><span class="n">nyagos.alias</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="kd">local</span> <span class="n">rest</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kd">local</span> <span class="n">path</span> <span class="o">=</span> <span class="n">rest</span> <span class="kr">if</span> <span class="p">(</span><span class="n">string.len</span><span class="p">(</span><span class="n">rest</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="kr">then</span> <span class="n">path</span> <span class="o">=</span> <span class="n">nyagos.eval</span><span class="p">(</span><span class="s2">&#34;zoxide query --exclude &#39;&#34;</span><span class="o">..</span> <span class="p">(</span><span class="n">nyagos.getwd</span><span class="p">())</span> <span class="o">..</span><span class="s2">&#34;&#39; -- &#34;</span> <span class="o">..</span> <span class="n">rest</span><span class="p">)</span> <span class="kr">end</span> <span class="n">nyagos.chdir</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="kr">end</span> <span class="n">nyagos.alias</span><span class="p">.</span><span class="n">zi</span><span class="o">=</span><span class="kr">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="kd">local</span> <span class="n">rest</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kr">if</span> <span class="n">rest</span><span class="o">==</span><span class="kc">nil</span> <span class="kr">then</span> <span class="n">rest</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> <span class="kr">end</span> <span class="n">path</span> <span class="o">=</span> <span class="n">nyagos.eval</span><span class="p">(</span><span class="s2">&#34;zoxide query -i -- &#34;</span> <span class="o">..</span> <span class="n">rest</span> <span class="o">..</span> <span class="s2">&#34;| fzf&#34;</span> <span class="p">)</span> <span class="n">nyagos.chdir</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="kr">end</span> </code></pre></div><p>利用 <code>postexechook</code> 功能,实现了自动更新 <code>zoxide</code> 数据.</p> <div class="highlight"><pre class="chroma"><code class="language-lua" data-lang="lua"><span class="n">nyagos.postexechook</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="kr">if</span> <span class="s2">&#34;cd&#34;</span> <span class="o">==</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kr">then</span> <span class="n">nyagos.eval</span><span class="p">(</span><span class="s2">&#34;zoxide add -- &#34;</span> <span class="o">..</span> <span class="n">nyagos.getwd</span><span class="p">())</span> <span class="kr">end</span> <span class="kr">end</span> </code></pre></div>

2023/4/27
阅读更多

快速查找PowerShell的历史命令

<p>在 <code>bash</code> 或者 <code>fish</code> 这些shell下面可以通过 <code>history</code> 来显示历史命令.在 <code>PowerShell</code> 下也可以通过 <code>Get-History</code> 来获取.</p> <p>不过毕竟功能有点单一,写了个函数来扩展一下.</p> <div class="highlight"><pre class="chroma"><code class="language-powershell" data-lang="powershell"><span class="k">function</span> <span class="n">hist</span> <span class="p">{</span> <span class="nv">$find</span> <span class="p">=</span> <span class="nv">$args</span><span class="p">;</span> <span class="nb">Get-Content</span> <span class="p">(</span><span class="nb">Get-PSReadlineOption</span><span class="p">).</span><span class="n">HistorySavePath</span> <span class="p">|</span> <span class="p">?</span> <span class="p">{</span> <span class="nv">$_</span> <span class="o">-like</span> <span class="s2">&#34;*$find*&#34;</span> <span class="p">}</span> <span class="p">|</span> <span class="nb">Get-Unique</span> <span class="p">|</span> <span class="n">more</span> <span class="p">}</span> </code></pre></div><p>这样就可以通过 <code>hist 关键词</code> 来搜索历史命令</p> <p>如果你安装了 <code>fzf</code> 的话,可以使用如下的版本</p> <pre><code class="language-powersehll" data-lang="powersehll">function hist { $find = $args; Get-Content (Get-PSReadlineOption).HistorySavePath | ? { $_ -like &quot;*$find*&quot; } | Get-Unique | fzf } </code></pre><p>这样可以利用 <code>fzf</code> 的模糊查询来缩小范围.</p>

2022/11/23
阅读更多

denote

<p>近期把笔记软件从<a href="https://www.orgroam.com/"target="_blank">Org-roam</a>迁移到了<a href="https://protesilaos.com/emacs/denote"target="_blank">Denote (denote.el)</a>,主要是有以下几个考虑:</p> <ul> <li>org-roam在windows下面的性能堪忧,即使使用了emacs内置的sqlite性能还是不太行.</li> <li>酷炫的<a href="https://github.com/org-roam/org-roam-ui"target="_blank">org-roam/org-roam-ui</a>其实没啥用</li> <li>denote性能和命名规范都挺合心意,</li> </ul> <p>以下是我的配置:</p> <div class="highlight"><pre class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="p">(</span><span class="nb">use-package</span> <span class="nv">denote</span> <span class="nb">:bind</span> <span class="p">((</span><span class="s">&#34;C-c n n&#34;</span> <span class="o">.</span> <span class="nv">denote</span><span class="p">)</span> <span class="p">(</span><span class="s">&#34;C-c n i&#34;</span> <span class="o">.</span> <span class="nv">denote-link-or-create</span><span class="p">)</span> <span class="p">(</span><span class="s">&#34;C-c n I&#34;</span> <span class="o">.</span> <span class="nv">denote-link</span><span class="p">)</span> <span class="p">(</span><span class="s">&#34;C-c n b&#34;</span> <span class="o">.</span> <span class="nv">denote-link-backlinks</span><span class="p">)</span> <span class="p">(</span><span class="s">&#34;C-c n a&#34;</span> <span class="o">.</span> <span class="nv">denote-add-front-matter</span><span class="p">)</span> <span class="p">(</span><span class="s">&#34;C-c n r&#34;</span> <span class="o">.</span> <span class="nv">denote-rename-file</span><span class="p">)</span> <span class="p">(</span><span class="s">&#34;C-c n R&#34;</span> <span class="o">.</span> <span class="nv">denote-rename-file-using-front-matter</span><span class="p">)</span> <span class="p">)</span> <span class="p">)</span> <span class="p">(</span><span class="nb">setq</span> <span class="nv">denote-directory</span> <span class="p">(</span><span class="nf">expand-file-name</span> <span class="s">&#34;~/Org/notes/&#34;</span><span class="p">)</span> <span class="nv">denote-known-keywords</span> <span class="o">&#39;</span><span class="p">(</span><span class="s">&#34;dev&#34;</span> <span class="s">&#34;read&#34;</span> <span class="s">&#34;report&#34;</span> <span class="s">&#34;cslp&#34;</span><span class="p">)</span> <span class="nv">denote-infer-keywords</span> <span class="no">t</span> <span class="nv">denote-sort-keywords</span> <span class="no">t</span> <span class="nv">denote-allow-multi-word-keywords</span> <span class="no">t</span> <span class="nv">denote-date-prompt-use-org-read-date</span> <span class="no">t</span> <span class="nv">denote-link-fontify-backlinks</span> <span class="no">t</span> <span class="nv">denote-front-matter-date-format</span> <span class="ss">&#39;org-timestamp</span> <span class="nv">denote-prompts</span> <span class="o">&#39;</span><span class="p">(</span><span class="nv">title</span> <span class="nv">keywords</span><span class="p">))</span> <span class="c1">;; 在work目录下创建标签为work的笔记</span> <span class="p">(</span><span class="nb">defun</span> <span class="nv">my-work-notes</span> <span class="p">()</span> <span class="s">&#34;Create an entry tagged &#39;journal&#39;, while prompting for a title.&#34;</span> <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span> <span class="p">(</span><span class="nv">denote</span> <span class="p">(</span><span class="nv">denote--title-prompt</span><span class="p">)</span> <span class="o">&#39;</span><span class="p">(</span><span class="s">&#34;work&#34;</span><span class="p">)</span> <span class="ss">&#39;denote-file-type</span> <span class="o">&#39;</span><span class="s">&#34;./work&#34;</span><span class="p">))</span> </code></pre></div><p>笔记查找使用的是<a href="https://github.com/mclear-tools/consult-notes"target="_blank">mclear-tools/consult-notes: Use consult to search notes</a></p> <div class="highlight"><pre class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="p">(</span><span class="nb">setq</span> <span class="nv">xref-search-program</span> <span class="ss">&#39;ripgrep</span><span class="p">)</span> <span class="p">(</span><span class="nb">use-package</span> <span class="nv">consult-notes</span> <span class="nb">:commands</span> <span class="p">(</span><span class="nv">consult-notes</span> <span class="nv">consult-notes-search-in-all-notes</span> <span class="nv">consult-notes-org-roam-find-node</span> <span class="nv">consult-notes-org-roam-find-node-relation</span><span class="p">)</span> <span class="nb">:config</span> <span class="p">(</span><span class="nb">setq</span> <span class="nv">consult-notes-sources</span> <span class="o">&#39;</span><span class="p">(</span> <span class="p">(</span><span class="s">&#34;notes&#34;</span> <span class="sc">?o</span> <span class="s">&#34;~/Org/notes&#34;</span><span class="p">)</span> <span class="p">))</span> <span class="nb">:bind</span> <span class="p">(</span> <span class="p">(</span><span class="s">&#34;C-c n F&#34;</span> <span class="o">.</span> <span class="nv">consult-notes</span><span class="p">))</span> <span class="p">)</span> <span class="p">(</span><span class="nb">use-package</span> <span class="nv">consult-denote</span> <span class="nb">:bind</span> <span class="p">(</span> <span class="p">(</span><span class="s">&#34;C-c n f&#34;</span> <span class="o">.</span> <span class="nv">consult-denote</span><span class="p">))</span> <span class="p">)</span> </code></pre></div><h2 id="参考资料">参考资料</h2> <ul> <li><a href="https://protesilaos.com/codelog/2022-06-18-denote-demo/"target="_blank">Emacs: demonstration of my Denote package (simple note-taking) | Protesilaos Stavrou</a></li> <li><a href="https://github.com/bitspook/notes-migrator"target="_blank">bitspook/notes-migrator: Migrate your notes b/w different note-taking software (only org-roam to denote supported for now)</a></li> <li><a href="https://takeonrules.com/2022/10/02/migration-plan-for-org-roam-notes-to-denote/"target="_blank">Migration Plan for Org-Roam Notes to Denote // Take on Rules</a></li> <li><a href="https://emacs-china.org/t/laos-denote/21787/15"target="_blank">有人尝试过laos大佬的笔记新插件“denote”吗 - Emacs-general - Emacs China</a></li> </ul>

2022/11/20
阅读更多

利用PowerShell来进行端口连通性测试

<p>一般情况下在是使用 <code>telnet</code> 来做网络连通性的测试. <code>PowerShell</code> 也可以实现类似的功能.而且由于本身和 <code>.Net</code> 的关系,还可以通过 <code>.Net</code> 的支持来完成.</p> <h2 id="原生的方案-test-connection">原生的方案:Test-Connection</h2> <h3 id="连接成功">连接成功</h3> <div class="highlight"><pre class="chroma"><code class="language-powershell" data-lang="powershell"><span class="nb">Measure-Command</span> <span class="p">{</span><span class="nb">Test-NetConnection</span> <span class="n">wentao</span><span class="p">.</span><span class="n">org</span> <span class="n">-Port</span> <span class="n">80</span><span class="p">}</span> <span class="p">|</span> <span class="p">%</span> <span class="n">TotalSeconds</span> </code></pre></div><h3 id="连接失败">连接失败</h3> <div class="highlight"><pre class="chroma"><code class="language-powershell" data-lang="powershell"><span class="nb">Measure-Command</span> <span class="p">{</span><span class="nb">Test-NetConnection</span> <span class="n">wentao</span><span class="p">.</span><span class="n">2org</span> <span class="n">-Port</span> <span class="n">80</span><span class="p">}</span> <span class="p">|</span> <span class="p">%</span> <span class="n">TotalSeconds</span> </code></pre></div><h2 id="使用system-dot-net-dot-sockets-dot-tcpclient的方案">使用System.Net.Sockets.TcpClient的方案</h2> <div class="highlight"><pre class="chroma"><code class="language-powershell" data-lang="powershell"> <span class="k">function</span> <span class="nb">Test-Port</span> <span class="p">{</span> <span class="p">[</span><span class="k">CmdletBinding</span><span class="p">()]</span> <span class="k">param</span> <span class="p">(</span> <span class="p">[</span><span class="k">Parameter</span><span class="p">(</span><span class="k">ValueFromPipeline</span> <span class="p">=</span> <span class="nv">$true</span><span class="p">,</span> <span class="k">HelpMessage</span> <span class="p">=</span> <span class="s1">&#39;Could be suffixed by :Port&#39;</span><span class="p">)]</span> <span class="no">[String[]]</span><span class="nv">$ComputerName</span><span class="p">,</span> <span class="p">[</span><span class="k">Parameter</span><span class="p">(</span><span class="k">HelpMessage</span> <span class="p">=</span> <span class="s1">&#39;Will be ignored if the port is given in the param ComputerName&#39;</span><span class="p">)]</span> <span class="no">[Int]</span><span class="nv">$Port</span> <span class="p">=</span> <span class="n">5985</span><span class="p">,</span> <span class="p">[</span><span class="k">Parameter</span><span class="p">(</span><span class="k">HelpMessage</span> <span class="p">=</span> <span class="s1">&#39;Timeout in millisecond. Increase the value if you want to test Internet resources.&#39;</span><span class="p">)]</span> <span class="no">[Int]</span><span class="nv">$Timeout</span> <span class="p">=</span> <span class="n">1000</span> <span class="p">)</span> <span class="k">begin</span> <span class="p">{</span> <span class="nv">$result</span> <span class="p">=</span> <span class="no">[System.Collections.ArrayList]</span><span class="p">::</span><span class="n">new</span><span class="p">()</span> <span class="p">}</span> <span class="k">process</span> <span class="p">{</span> <span class="k">foreach</span> <span class="p">(</span><span class="nv">$originalComputerName</span> <span class="k">in</span> <span class="nv">$ComputerName</span><span class="p">)</span> <span class="p">{</span> <span class="nv">$remoteInfo</span> <span class="p">=</span> <span class="nv">$originalComputerName</span><span class="p">.</span><span class="n">Split</span><span class="p">(</span><span class="s2">&#34;:&#34;</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$remoteInfo</span><span class="p">.</span><span class="n">count</span> <span class="o">-eq</span> <span class="n">1</span><span class="p">)</span> <span class="p">{</span> <span class="c"># In case $ComputerName in the form of &#39;host&#39;</span> <span class="nv">$remoteHostname</span> <span class="p">=</span> <span class="nv">$originalComputerName</span> <span class="nv">$remotePort</span> <span class="p">=</span> <span class="nv">$Port</span> <span class="p">}</span> <span class="k">elseif</span> <span class="p">(</span><span class="nv">$remoteInfo</span><span class="p">.</span><span class="n">count</span> <span class="o">-eq</span> <span class="n">2</span><span class="p">)</span> <span class="p">{</span> <span class="c"># In case $ComputerName in the form of &#39;host:port&#39;,</span> <span class="c"># we often get host and port to check in this form.</span> <span class="nv">$remoteHostname</span> <span class="p">=</span> <span class="nv">$remoteInfo</span><span class="p">[</span><span class="n">0</span><span class="p">]</span> <span class="nv">$remotePort</span> <span class="p">=</span> <span class="nv">$remoteInfo</span><span class="p">[</span><span class="n">1</span><span class="p">]</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="nv">$msg</span> <span class="p">=</span> <span class="s2">&#34;Got unknown format for the parameter ComputerName: &#34;</span> <span class="p">`</span> <span class="p">+</span> <span class="s2">&#34;[$originalComputerName]. &#34;</span> <span class="p">`</span> <span class="p">+</span> <span class="s2">&#34;The allowed formats is [hostname] or [hostname:port].&#34;</span> <span class="nb">Write-Error</span> <span class="nv">$msg</span> <span class="k">return</span> <span class="p">}</span> <span class="nv">$tcpClient</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">System</span><span class="p">.</span><span class="n">Net</span><span class="p">.</span><span class="n">Sockets</span><span class="p">.</span><span class="n">TcpClient</span> <span class="nv">$portOpened</span> <span class="p">=</span> <span class="nv">$tcpClient</span><span class="p">.</span><span class="n">ConnectAsync</span><span class="p">(</span><span class="nv">$remoteHostname</span><span class="p">,</span> <span class="nv">$remotePort</span><span class="p">).</span><span class="n">Wait</span><span class="p">(</span><span class="nv">$Timeout</span><span class="p">)</span> <span class="nv">$null</span> <span class="p">=</span> <span class="nv">$result</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="no">[PSCustomObject]</span><span class="p">@{</span> <span class="n">RemoteHostname</span> <span class="p">=</span> <span class="nv">$remoteHostname</span> <span class="n">RemotePort</span> <span class="p">=</span> <span class="nv">$remotePort</span> <span class="n">PortOpened</span> <span class="p">=</span> <span class="nv">$portOpened</span> <span class="n">TimeoutInMillisecond</span> <span class="p">=</span> <span class="nv">$Timeout</span> <span class="n">SourceHostname</span> <span class="p">=</span> <span class="nv">$env:COMPUTERNAME</span> <span class="n">OriginalComputerName</span> <span class="p">=</span> <span class="nv">$originalComputerName</span> <span class="p">})</span> <span class="p">}</span> <span class="p">}</span> <span class="k">end</span> <span class="p">{</span> <span class="k">return</span> <span class="nv">$result</span> <span class="p">}</span> <span class="p">}</span> </code></pre></div>

2022/7/17
阅读更多

wezterm的workspace配置

<p><a href="https://wezfurlong.org/"target="_blank">wezterm</a>里个特性是workspace,类似虚拟桌面的概念.可以在不同的workspace之间切换.这段时间工作上除了日常的开发以外,还有一些服务器的维护.这个时候这个workspace就会很方便.</p> <p>另外可以根据 <code>lua</code> 来获取环境变量,来区分个人电脑、办公电脑做到能够一套配置多处使用.在 <code>DUMMY</code> 的机器上启动一个 <code>Meta</code> 的配置</p> <div class="highlight"><pre class="chroma"><code class="language-lua" data-lang="lua"><span class="kr">if</span> <span class="s2">&#34;DUMMY&#34;</span> <span class="o">==</span> <span class="n">os.getenv</span><span class="p">(</span><span class="s2">&#34;USERDOMAIN&#34;</span><span class="p">)</span> <span class="kr">then</span> <span class="kd">local</span> <span class="n">tab</span><span class="p">,</span> <span class="n">pane</span><span class="p">,</span> <span class="n">window</span> <span class="o">=</span> <span class="n">mux.spawn_window</span> <span class="p">{</span> <span class="n">workspace</span> <span class="o">=</span> <span class="s2">&#34;Meta&#34;</span><span class="p">,</span> <span class="n">cwd</span> <span class="o">=</span> <span class="s2">&#34;d:/soft/Meta/&#34;</span><span class="p">,</span> <span class="p">}</span> <span class="n">pane</span><span class="p">:</span><span class="n">send_text</span><span class="p">(</span><span class="s2">&#34;.</span><span class="se">\\</span><span class="s2">meta.exe -d .</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span> <span class="kr">end</span> </code></pre></div><p>官方有如下的一个配置示例.</p> <div class="highlight"><pre class="chroma"><code class="language-lua" data-lang="lua"><span class="kd">local</span> <span class="n">wezterm</span> <span class="o">=</span> <span class="n">require</span> <span class="s1">&#39;wezterm&#39;</span> <span class="kd">local</span> <span class="n">mux</span> <span class="o">=</span> <span class="n">wezterm.mux</span> <span class="n">wezterm.on</span><span class="p">(</span><span class="s2">&#34;gui-startup&#34;</span><span class="p">,</span> <span class="kr">function</span><span class="p">()</span> <span class="c1">-- Set a workspace for coding on a current project</span> <span class="c1">-- Top pane is for the editor, bottom pane is for the build tool</span> <span class="kd">local</span> <span class="n">project_dir</span> <span class="o">=</span> <span class="n">wezterm.home_dir</span> <span class="o">..</span> <span class="s2">&#34;/wezterm&#34;</span> <span class="kd">local</span> <span class="n">tab</span><span class="p">,</span> <span class="n">build_pane</span><span class="p">,</span> <span class="n">window</span> <span class="o">=</span> <span class="n">mux.spawn_window</span><span class="p">{</span> <span class="n">workspace</span><span class="o">=</span><span class="s2">&#34;coding&#34;</span><span class="p">,</span> <span class="n">cwd</span><span class="o">=</span><span class="n">project_dir</span><span class="p">,</span> <span class="p">}</span> <span class="kd">local</span> <span class="n">editor_pane</span> <span class="o">=</span> <span class="n">build_pane</span><span class="p">:</span><span class="n">split</span><span class="p">{</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&#34;Top&#34;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span> <span class="n">cwd</span><span class="o">=</span><span class="n">project_dir</span> <span class="p">}</span> <span class="c1">-- may as well kick off a build in that pane</span> <span class="n">build_pane</span><span class="p">:</span><span class="n">send_text</span><span class="p">(</span><span class="s2">&#34;cargo build</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span> <span class="c1">-- A workspace for interacting with a local machine that</span> <span class="c1">-- runs some docker containners for home automation</span> <span class="kd">local</span> <span class="n">tab</span><span class="p">,</span> <span class="n">pane</span><span class="p">,</span> <span class="n">window</span> <span class="o">=</span> <span class="n">mux.spawn_window</span><span class="p">{</span> <span class="n">workspace</span><span class="o">=</span><span class="s2">&#34;automation&#34;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;ssh&#34;</span><span class="p">,</span> <span class="s2">&#34;vault&#34;</span><span class="p">},</span> <span class="p">}</span> <span class="c1">-- We want to startup in the coding workspace</span> <span class="n">mux.set_active_workspace</span><span class="p">(</span><span class="s2">&#34;coding&#34;</span><span class="p">)</span> <span class="kr">end</span><span class="p">)</span> <span class="kr">return</span> <span class="p">{}</span> </code></pre></div><h2 id="参考资料">参考资料</h2> <ul> <li><a href="https://wezfurlong.org/wezterm/config/lua/gui-events/gui-startup.html"target="_blank">gui-startup - Wez&rsquo;s Terminal Emulator</a></li> </ul>

2022/7/13
阅读更多

PSReadLine最强PowerShell模块

<p>PowerShell其实从设计理念上来说是一直强于bash的.毕竟不是一个时代的产物.但是bash的好处是经历了足够长的时间发展,有良好的周边支持.</p> <p><a href="https://www.gnu.org/software/bash/manual/html_node/Readline-Interaction.html"target="_blank">Readline</a> 就是其中一个很棒的功能.主要包含了根据你输入的内容进行搜索历史,提示命令,删除文字之类的功能.能够在日常使用的时候大大的提升便利性.</p> <p><a href="https://github.com/PowerShell/PSReadLine"target="_blank">PSReadLine</a> 则是 <code>A bash inspired readline implementation for PowerShell</code>. 提供了增加的Tab 自动补全和命令预测功能.最新的版本<a href="https://github.com/PowerShell/PSReadLine/releases/tag/v2.2.6"target="_blank">v2.2.6</a>还提供了插件来增强不全功能.</p> <p>安装的话只需要<a href="https://docs.microsoft.com/powershell/scripting/gallery/installing-psget"target="_blank">owerShellGet</a>的版本高于 <code>1.6.0</code> 就可以通过如下的命令安装或者升级</p> <div class="highlight"><pre class="chroma"><code class="language-powershell" data-lang="powershell"><span class="nb">Install-Module</span> <span class="n">-Name</span> <span class="n">PowerShellGet</span> <span class="n">-Force</span> </code></pre></div><p><code>PSReadLine</code> 的可配置项可以参考<a href="https://github.com/PowerShell/PSReadLine/blob/master/PSReadLine/SamplePSReadLineProfile.ps1"target="_blank">sample profile file</a>.</p> <p>下面是我的配置.</p> <div class="highlight"><pre class="chroma"><code class="language-powershell" data-lang="powershell"><span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">UpArrow</span> <span class="n">-Function</span> <span class="n">HistorySearchBackward</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">DownArrow</span> <span class="n">-Function</span> <span class="n">HistorySearchForward</span> <span class="nb">Set-PSReadLineOption</span> <span class="n">-EditMode</span> <span class="n">Emacs</span> <span class="nb">Set-PSReadLineOption</span> <span class="n">-PredictionSource</span> <span class="n">HistoryAndPlugin</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Chord</span> <span class="s1">&#39;Ctrl+d,Ctrl+c&#39;</span> <span class="n">-Function</span> <span class="n">CaptureScreen</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">d</span> <span class="n">-Function</span> <span class="n">ShellKillWord</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">Backspace</span> <span class="n">-Function</span> <span class="n">ShellBackwardKillWord</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">b</span> <span class="n">-Function</span> <span class="n">ShellBackwardWord</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">f</span> <span class="n">-Function</span> <span class="n">ShellForwardWord</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">B</span> <span class="n">-Function</span> <span class="n">SelectShellBackwardWord</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">F</span> <span class="n">-Function</span> <span class="n">SelectShellForwardWord</span> <span class="c">#endregion</span> <span class="c">#region git</span> <span class="c">#git status</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">s</span> <span class="n">-LongDescription</span> <span class="s2">&#34;git status&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">RevertLine</span><span class="p">()</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">Insert</span><span class="p">(</span><span class="s2">&#34;git status&#34;</span><span class="p">)</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">AcceptLine</span><span class="p">()</span> <span class="p">}</span> <span class="c"># git pull</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">p</span> <span class="n">-LongDescription</span> <span class="s2">&#34;git pull&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">RevertLine</span><span class="p">()</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">Insert</span><span class="p">(</span><span class="s2">&#34;git pull&#34;</span><span class="p">)</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">AcceptLine</span><span class="p">()</span> <span class="p">}</span> <span class="c"># git push</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">P</span> <span class="n">-LongDescription</span> <span class="s2">&#34;git push&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">RevertLine</span><span class="p">()</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">Insert</span><span class="p">(</span><span class="s2">&#34;git push&#34;</span><span class="p">)</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">AcceptLine</span><span class="p">()</span> <span class="p">}</span> <span class="c">#git show</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Ctrl</span><span class="p">+</span><span class="n">Alt</span><span class="p">+</span><span class="n">s</span> <span class="n">-LongDescription</span> <span class="s2">&#34;git show&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">RevertLine</span><span class="p">()</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">Insert</span><span class="p">(</span><span class="s2">&#34;git show&#34;</span><span class="p">)</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">AcceptLine</span><span class="p">()</span> <span class="p">}</span> <span class="c">#endregion</span> <span class="c">#region utils</span> <span class="c"># 保存当前命令到历史中,但是并不执行</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">w</span> <span class="p">`</span> <span class="n">-BriefDescription</span> <span class="n">SaveInHistory</span> <span class="p">`</span> <span class="n">-LongDescription</span> <span class="s2">&#34;Save current line in history but do not execute&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="k">param</span><span class="p">(</span><span class="nv">$key</span><span class="p">,</span> <span class="nv">$arg</span><span class="p">)</span> <span class="nv">$line</span> <span class="p">=</span> <span class="nv">$null</span> <span class="nv">$cursor</span> <span class="p">=</span> <span class="nv">$null</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">GetBufferState</span><span class="p">(</span><span class="no">[ref]</span><span class="nv">$line</span><span class="p">,</span> <span class="no">[ref]</span><span class="nv">$cursor</span><span class="p">)</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">AddToHistory</span><span class="p">(</span><span class="nv">$line</span><span class="p">)</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">RevertLine</span><span class="p">()</span> <span class="p">}</span> <span class="c"># Insert text from the clipboard as a here string</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Ctrl</span><span class="p">+</span><span class="n">V</span> <span class="p">`</span> <span class="n">-BriefDescription</span> <span class="n">PasteAsHereString</span> <span class="p">`</span> <span class="n">-LongDescription</span> <span class="s2">&#34;Paste the clipboard text as a here string&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="k">param</span><span class="p">(</span><span class="nv">$key</span><span class="p">,</span> <span class="nv">$arg</span><span class="p">)</span> <span class="nb">Add-Type</span> <span class="n">-Assembly</span> <span class="n">PresentationCore</span> <span class="k">if</span> <span class="p">(</span><span class="no">[System.Windows.Clipboard]</span><span class="p">::</span><span class="n">ContainsText</span><span class="p">())</span> <span class="p">{</span> <span class="c"># Get clipboard text - remove trailing spaces, convert \r\n to \n, and remove the final \n.</span> <span class="nv">$text</span> <span class="p">=</span> <span class="p">(</span><span class="no">[System.Windows.Clipboard]</span><span class="p">::</span><span class="n">GetText</span><span class="p">()</span> <span class="o">-replace</span> <span class="s2">&#34;\p{Zs}*</span><span class="se">`r</span><span class="s2">?</span><span class="se">`n</span><span class="s2">&#34;</span><span class="p">,</span> <span class="s2">&#34;</span><span class="se">`n</span><span class="s2">&#34;</span><span class="p">).</span><span class="n">TrimEnd</span><span class="p">()</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">Insert</span><span class="p">(</span><span class="s2">&#34;@&#39;</span><span class="se">`n</span><span class="s2">$text</span><span class="se">`n</span><span class="s2">&#39;@&#34;</span><span class="p">)</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">Ding</span><span class="p">()</span> <span class="p">}</span> <span class="p">}</span> <span class="c"># F7 弹出一个GUI的历史命令列表</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">F7</span> <span class="p">`</span> <span class="n">-BriefDescription</span> <span class="nb">History </span><span class="p">`</span> <span class="n">-LongDescription</span> <span class="s1">&#39;Show command history&#39;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="nv">$pattern</span> <span class="p">=</span> <span class="nv">$null</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">GetBufferState</span><span class="p">(</span><span class="no">[ref]</span><span class="nv">$pattern</span><span class="p">,</span> <span class="no">[ref]</span><span class="nv">$null</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$pattern</span><span class="p">)</span> <span class="p">{</span> <span class="nv">$pattern</span> <span class="p">=</span> <span class="no">[regex]</span><span class="p">::</span><span class="n">Escape</span><span class="p">(</span><span class="nv">$pattern</span><span class="p">)</span> <span class="p">}</span> <span class="nv">$history</span> <span class="p">=</span> <span class="no">[System.Collections.ArrayList]</span><span class="p">@(</span> <span class="nv">$last</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span> <span class="nv">$lines</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span> <span class="k">foreach</span> <span class="p">(</span><span class="nv">$line</span> <span class="k">in</span> <span class="no">[System.IO.File]</span><span class="p">::</span><span class="n">ReadLines</span><span class="p">((</span><span class="nb">Get-PSReadLineOption</span><span class="p">).</span><span class="n">HistorySavePath</span><span class="p">))</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$line</span><span class="p">.</span><span class="n">EndsWith</span><span class="p">(</span><span class="s1">&#39;`&#39;</span><span class="p">))</span> <span class="p">{</span> <span class="nv">$line</span> <span class="p">=</span> <span class="nv">$line</span><span class="p">.</span><span class="n">Substring</span><span class="p">(</span><span class="n">0</span><span class="p">,</span> <span class="nv">$line</span><span class="p">.</span><span class="n">Length</span> <span class="p">-</span> <span class="n">1</span><span class="p">)</span> <span class="nv">$lines</span> <span class="p">=</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$lines</span><span class="p">)</span> <span class="p">{</span> <span class="s2">&#34;$lines</span><span class="se">`n</span><span class="s2">$line&#34;</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="nv">$line</span> <span class="p">}</span> <span class="k">continue</span> <span class="p">}</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$lines</span><span class="p">)</span> <span class="p">{</span> <span class="nv">$line</span> <span class="p">=</span> <span class="s2">&#34;$lines</span><span class="se">`n</span><span class="s2">$line&#34;</span> <span class="nv">$lines</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span> <span class="p">}</span> <span class="k">if</span> <span class="p">((</span><span class="nv">$line</span> <span class="o">-cne</span> <span class="nv">$last</span><span class="p">)</span> <span class="o">-and</span> <span class="p">(!</span><span class="nv">$pattern</span> <span class="o">-or</span> <span class="p">(</span><span class="nv">$line</span> <span class="o">-match</span> <span class="nv">$pattern</span><span class="p">)))</span> <span class="p">{</span> <span class="nv">$last</span> <span class="p">=</span> <span class="nv">$line</span> <span class="nv">$line</span> <span class="p">}</span> <span class="p">}</span> <span class="p">)</span> <span class="nv">$history</span><span class="p">.</span><span class="n">Reverse</span><span class="p">()</span> <span class="nv">$command</span> <span class="p">=</span> <span class="nv">$history</span> <span class="p">|</span> <span class="nb">Out-GridView</span> <span class="n">-Title</span> <span class="nb">History </span><span class="n">-PassThru</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$command</span><span class="p">)</span> <span class="p">{</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">RevertLine</span><span class="p">()</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">Insert</span><span class="p">((</span><span class="nv">$command</span> <span class="n">-join</span> <span class="s2">&#34;</span><span class="se">`n</span><span class="s2">&#34;</span><span class="p">))</span> <span class="p">}</span> <span class="p">}</span> <span class="c">#</span> <span class="c"># Ctrl+Shift+j then type a key to mark the current directory.</span> <span class="c"># Ctrj+j then the same key will change back to that directory without</span> <span class="c"># needing to type cd and won&#39;t change the command line.</span> <span class="nv">$global:PSReadLineMarks</span> <span class="p">=</span> <span class="p">@{}</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Ctrl</span><span class="p">+</span><span class="n">J</span> <span class="p">`</span> <span class="n">-BriefDescription</span> <span class="n">MarkDirectory</span> <span class="p">`</span> <span class="n">-LongDescription</span> <span class="s2">&#34;Mark the current directory&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="k">param</span><span class="p">(</span><span class="nv">$key</span><span class="p">,</span> <span class="nv">$arg</span><span class="p">)</span> <span class="nv">$key</span> <span class="p">=</span> <span class="no">[Console]</span><span class="p">::</span><span class="n">ReadKey</span><span class="p">(</span><span class="nv">$true</span><span class="p">)</span> <span class="nv">$global:PSReadLineMarks</span><span class="p">[</span><span class="nv">$key</span><span class="p">.</span><span class="n">KeyChar</span><span class="p">]</span> <span class="p">=</span> <span class="nv">$pwd</span> <span class="p">}</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Ctrl</span><span class="p">+</span><span class="n">j</span> <span class="p">`</span> <span class="n">-BriefDescription</span> <span class="n">JumpDirectory</span> <span class="p">`</span> <span class="n">-LongDescription</span> <span class="s2">&#34;Goto the marked directory&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="k">param</span><span class="p">(</span><span class="nv">$key</span><span class="p">,</span> <span class="nv">$arg</span><span class="p">)</span> <span class="nv">$key</span> <span class="p">=</span> <span class="no">[Console]</span><span class="p">::</span><span class="n">ReadKey</span><span class="p">()</span> <span class="nv">$dir</span> <span class="p">=</span> <span class="nv">$global:PSReadLineMarks</span><span class="p">[</span><span class="nv">$key</span><span class="p">.</span><span class="n">KeyChar</span><span class="p">]</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$dir</span><span class="p">)</span> <span class="p">{</span> <span class="nb">cd </span><span class="nv">$dir</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">InvokePrompt</span><span class="p">()</span> <span class="p">}</span> <span class="p">}</span> <span class="nb">Set-PSReadLineKeyHandler</span> <span class="n">-Key</span> <span class="n">Alt</span><span class="p">+</span><span class="n">j</span> <span class="p">`</span> <span class="n">-BriefDescription</span> <span class="n">ShowDirectoryMarks</span> <span class="p">`</span> <span class="n">-LongDescription</span> <span class="s2">&#34;Show the currently marked directories&#34;</span> <span class="p">`</span> <span class="n">-ScriptBlock</span> <span class="p">{</span> <span class="k">param</span><span class="p">(</span><span class="nv">$key</span><span class="p">,</span> <span class="nv">$arg</span><span class="p">)</span> <span class="nv">$global:PSReadLineMarks</span><span class="p">.</span><span class="n">GetEnumerator</span><span class="p">()</span> <span class="p">|</span> <span class="p">%</span> <span class="p">{</span> <span class="no">[PSCustomObject]</span><span class="p">@{</span><span class="n">Key</span> <span class="p">=</span> <span class="nv">$_</span><span class="p">.</span><span class="n">Key</span><span class="p">;</span> <span class="nb">Dir </span><span class="p">=</span> <span class="nv">$_</span><span class="p">.</span><span class="n">Value</span> <span class="p">}</span> <span class="p">}</span> <span class="p">|</span> <span class="nb">Format-Table</span> <span class="n">-AutoSize</span> <span class="p">|</span> <span class="nb">Out-Host</span> <span class="no">[Microsoft.PowerShell.PSConsoleReadLine]</span><span class="p">::</span><span class="n">InvokePrompt</span><span class="p">()</span> <span class="p">}</span> <span class="c">#endregion</span> </code></pre></div>

2022/7/10
阅读更多

读《万千微尘纷坠心田》

<p>《万千微尘纷坠心田》的副标题是-文学阅读的生命化.讲我们应该如何读书、怎么从读书变成读进一本书.可以说是一本怎么讲吃书的一本书了.现在这个时代可能最不缺的就是书了,但是各类统计又在说读书的人少了.一方面获取咨询、知识的渠道多了.阅读不再是唯一的渠道了.</p> <p>其中有一篇有如下的内容:</p> <blockquote> <p>小说的创作,意味着我们从日常现实的领域纵身一跳,进入一个想象的生活的领域.想象并不意味着轻盈,一篇能够称之为好的小说,也绝不是任由想象的线索,安排词句和时间进行组合.</p> </blockquote> <p>小说的阅读其实也是这样,读一些大部头小说的时候,了解当时的时空背景是很重要的.好的文字给人的带入感要远远高于视频的.读《战争与和平》,《飘》这些的时候,了解当时的历史背景对阅读会有很大的帮助.但是在一些科幻小说的时候,就可能不能这么做了.不过好的科幻小说,除了本身一个很重的概念一直支撑这整本小说.作者在构建整个环境的时候也会投入很多的笔墨.整体是自洽的这点很重要.</p> <p>其中有篇讲了文本细读.这个其实用到编程中也是一样的.看别人写的代码,其实就跟读小说一样,有好有坏.但是如果真的代入进去,去发现他当时为什么这么写.看到代码之外的内容.和用户讨论需求的时候也是如此,透过讨论真正的看到他们内心想要的内容.</p> <p>后面有篇分析石黑一雄的《远山深影》,又从另外一个角度理解了下这篇小说.</p>

2022/5/28
阅读更多

Emacs添加腾讯会议连接

<p>这段时间因为疫情居家办公的时候太多了,各种腾讯会议不断.用了 <code>org-mode</code> 来做待办的提醒.但是在电脑上怎么快速进入会议呢?想着通过<a href="https://orgmode.org/manual/External-Links.html"target="_blank">External Links (The Org Manual)</a>的方式来实现快速打开腾讯会议.</p> <div class="highlight"><pre class="chroma"><code class="language-lisp" data-lang="lisp"> <span class="p">(</span><span class="nb">defun</span> <span class="nv">make-wemeet-link</span> <span class="p">(</span><span class="nv">meet_id</span><span class="p">)</span> <span class="p">(</span><span class="nv">browse-url</span> <span class="p">(</span><span class="nv">concat</span> <span class="s">&#34;wemeet://page/inmeeting?meeting_code=&#34;</span> <span class="p">(</span><span class="nv">s-replace</span> <span class="s">&#34;-&#34;</span> <span class="s">&#34;&#34;</span> <span class="nv">meet_id</span><span class="p">))))</span> <span class="p">(</span><span class="nv">org-add-link-type</span> <span class="s">&#34;wemeet&#34;</span> <span class="ss">&#39;make-wemeet-link</span><span class="p">)</span> </code></pre></div><p>这样之后通过创建一个 <code>[[wemeet:123-345-128]]</code> 的连接.就能够通过 <code>url scheme</code> 来快速启动腾讯会议并入会.</p>

2022/5/26
阅读更多

一个新的终端模拟器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">&#34;(.*[/</span><span class="se">\\</span><span class="s2">])(.*)&#34;</span><span class="p">,</span> <span class="s2">&#34;%2&#34;</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">&#34;wezterm&#34;</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">&#34;¹&#34;</span><span class="p">,</span><span class="s2">&#34;²&#34;</span><span class="p">,</span><span class="s2">&#34;³&#34;</span><span class="p">,</span><span class="s2">&#34;⁴&#34;</span><span class="p">,</span><span class="s2">&#34;⁵&#34;</span><span class="p">,</span><span class="s2">&#34;⁶&#34;</span><span class="p">,</span><span class="s2">&#34;⁷&#34;</span><span class="p">,</span><span class="s2">&#34;⁸&#34;</span><span class="p">,</span><span class="s2">&#34;⁹&#34;</span><span class="p">,</span><span class="s2">&#34;¹⁰&#34;</span><span class="p">,</span> <span class="s2">&#34;¹¹&#34;</span><span class="p">,</span><span class="s2">&#34;¹²&#34;</span><span class="p">,</span><span class="s2">&#34;¹³&#34;</span><span class="p">,</span><span class="s2">&#34;¹⁴&#34;</span><span class="p">,</span><span class="s2">&#34;¹⁵&#34;</span><span class="p">,</span><span class="s2">&#34;¹⁶&#34;</span><span class="p">,</span><span class="s2">&#34;¹⁷&#34;</span><span class="p">,</span><span class="s2">&#34;¹⁸&#34;</span><span class="p">,</span><span class="s2">&#34;¹⁹&#34;</span><span class="p">,</span><span class="s2">&#34;²⁰&#34;</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">&#34;₁&#34;</span><span class="p">,</span><span class="s2">&#34;₂&#34;</span><span class="p">,</span><span class="s2">&#34;₃&#34;</span><span class="p">,</span><span class="s2">&#34;₄&#34;</span><span class="p">,</span><span class="s2">&#34;₅&#34;</span><span class="p">,</span><span class="s2">&#34;₆&#34;</span><span class="p">,</span><span class="s2">&#34;₇&#34;</span><span class="p">,</span><span class="s2">&#34;₈&#34;</span><span class="p">,</span><span class="s2">&#34;₉&#34;</span><span class="p">,</span><span class="s2">&#34;₁₀&#34;</span><span class="p">,</span> <span class="s2">&#34;₁₁&#34;</span><span class="p">,</span><span class="s2">&#34;₁₂&#34;</span><span class="p">,</span><span class="s2">&#34;₁₃&#34;</span><span class="p">,</span><span class="s2">&#34;₁₄&#34;</span><span class="p">,</span><span class="s2">&#34;₁₅&#34;</span><span class="p">,</span><span class="s2">&#34;₁₆&#34;</span><span class="p">,</span><span class="s2">&#34;₁₇&#34;</span><span class="p">,</span><span class="s2">&#34;₁₈&#34;</span><span class="p">,</span><span class="s2">&#34;₁₉&#34;</span><span class="p">,</span><span class="s2">&#34;₂₀&#34;</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">&#34;ssh&#34;</span><span class="p">}</span> <span class="kr">if</span> <span class="n">wezterm.target_triple</span> <span class="o">==</span> <span class="s2">&#34;x86_64-pc-windows-msvc&#34;</span> <span class="kr">then</span> <span class="n">ssh_cmd</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;powershell.exe&#34;</span><span class="p">,</span> <span class="s2">&#34;ssh&#34;</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">&#34;PowerShell Core&#34;</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;pwsh.exe&#34;</span><span class="p">,</span> <span class="s2">&#34;-NoLogo&#34;</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">&#34;NyaGOS&#34;</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;nyagos.exe&#34;</span><span class="p">,</span> <span class="s2">&#34;--glob&#34;</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">&#34;/.ssh/config&#34;</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">&#34;*l&#34;</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">&#34;Host &#34;</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">&#34;Host &#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</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">&#34;SSH &#34;</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">&#34;ssh&#34;</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">&#34;*l&#34;</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">&#34;Right&#34;</span><span class="p">}},</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;NONE&#34;</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">&#34;Clipboard&#34;</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&#39;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">&#34;Left&#34;</span><span class="p">}},</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;NONE&#34;</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">&#34;PrimarySelection&#34;</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">&#34;Left&#34;</span><span class="p">}},</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;CTRL&#34;</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="s2">&#34;OpenLinkAtMouseCursor&#34;</span> <span class="p">}</span> <span class="p">}</span> <span class="n">wezterm.on</span><span class="p">(</span><span class="s2">&#34;format-tab-title&#34;</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">&#34;#121212&#34;</span> <span class="kd">local</span> <span class="n">background</span> <span class="o">=</span> <span class="s2">&#34;#4E4E4E&#34;</span> <span class="kd">local</span> <span class="n">foreground</span> <span class="o">=</span> <span class="s2">&#34;#1C1B19&#34;</span> <span class="kd">local</span> <span class="n">dim_foreground</span> <span class="o">=</span> <span class="s2">&#34;#3A3A3A&#34;</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">&#34;#FBB829&#34;</span> <span class="n">foreground</span> <span class="o">=</span> <span class="s2">&#34;#1C1B19&#34;</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">&#34;#FF8700&#34;</span> <span class="n">foreground</span> <span class="o">=</span> <span class="s2">&#34;#1C1B19&#34;</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">&#34;%.exe$&#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</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">&#34;nu&#34;</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">&#34; NuShell&#34;</span> <span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;pwsh&#34;</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">&#34; PS&#34;</span> <span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;cmd&#34;</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">&#34; CMD&#34;</span> <span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;elvish&#34;</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">&#34; Elvish&#34;</span> <span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;wsl&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;wslhost&#34;</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">&#34; WSL&#34;</span> <span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;nyagos&#34;</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">&#34; &#34;</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">&#34;.*: (.+) %- .+&#34;</span><span class="p">,</span> <span class="s2">&#34;%1&#34;</span><span class="p">)</span> <span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;yori&#34;</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">&#34; &#34;</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">&#34; %- Yori&#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;nvim&#34;</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">&#34;^(%S+)%s+(%d+/%d+) %- nvim&#34;</span><span class="p">,</span> <span class="s2">&#34; %2 %1&#34;</span><span class="p">)</span> <span class="kr">elseif</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;bat&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;less&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;moar&#34;</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">&#34; &#34;</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">&#34;fzf&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;hs&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;peco&#34;</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">&#34; &#34;</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">&#34;btm&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;ntop&#34;</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">&#34; &#34;</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">&#34;python&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;hiss&#34;</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">&#34; &#34;</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">&#34;node&#34;</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">&#34; &#34;</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">&#34;deno&#34;</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">&#34; &#34;</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">&#34;bb&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;cmd-clj&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;janet&#34;</span> <span class="ow">or</span> <span class="n">exec_name</span> <span class="o">==</span> <span class="s2">&#34;hy&#34;</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">&#34; &#34;</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">&#34;bb&#34;</span><span class="p">,</span> <span class="s2">&#34;Babashka&#34;</span><span class="p">):</span><span class="n">gsub</span><span class="p">(</span><span class="s2">&#34;cmd%-clj&#34;</span><span class="p">,</span> <span class="s2">&#34;Clojure&#34;</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">&#34; &#34;</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">&#34;^Administrator: &#34;</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">&#34; &#34;</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">&#34; &#34;</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">&#34; &#34;</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">&#34;Bold&#34;</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">&#34;Normal&#34;</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">&#34;update-right-status&#34;</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">&#34;%Y-%m-%d %H:%M:%S &#34;</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">&#34;pwsh.exe&#34;</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">&#34;;&#34;</span> <span class="o">..</span> <span class="n">os.getenv</span><span class="p">(</span><span class="s2">&#34;PATH&#34;</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">&#34;Fira Code&#34;</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">&#34;x&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;CTRL&#34;</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">&#34;`&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER|CTRL&#34;</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">&#34;`&#34;</span><span class="p">}},</span> <span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;v&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;CTRL&#34;</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">&#34;Clipboard&#34;</span><span class="p">}},</span> <span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;-&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;CurrentPaneDomain&#34;</span><span class="p">}}},</span> <span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="se">\\</span><span class="s2">&#34;</span><span class="p">,</span><span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;CurrentPaneDomain&#34;</span><span class="p">}}},</span> <span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;c&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;CurrentPaneDomain&#34;</span><span class="p">}},</span> <span class="p">{</span><span class="n">key</span><span class="o">=</span><span class="s2">&#34;h&#34;</span><span class="p">,</span><span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;Left&#34;</span><span class="p">}},</span> <span class="p">{</span><span class="n">key</span><span class="o">=</span><span class="s2">&#34;j&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;Up&#34;</span><span class="p">}},</span> <span class="p">{</span><span class="n">key</span><span class="o">=</span><span class="s2">&#34;k&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;Down&#34;</span><span class="p">}},</span> <span class="p">{</span><span class="n">key</span><span class="o">=</span><span class="s2">&#34;l&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;Right&#34;</span><span class="p">}},</span> <span class="p">{</span><span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;,&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="s2">&#34;ShowLauncher&#34;</span><span class="p">},</span> <span class="p">{</span><span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;b&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="s2">&#34;ShowTabNavigator&#34;</span><span class="p">},</span> <span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;f&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="s2">&#34;QuickSelect&#34;</span> <span class="p">},</span> <span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="se">\t</span><span class="s2">&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&#34;ActivateLastTab&#34;</span><span class="p">},</span> <span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;1&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;2&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;3&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;4&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;5&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;6&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;7&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;8&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;9&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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 = &#34;l&#34;, mods = &#34;LEADER&#34;, action=wezterm.action{EmitEvent=&#34;toggle-ligature&#34;}},</span> <span class="p">{</span> <span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;n&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;p&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;&amp;&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER|SHIFT&#34;</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">&#34;x&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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">&#34;w&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;ALT&#34;</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">&#34;Clipboard&#34;</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">&#34;y&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;CTRL&#34;</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">&#34;Clipboard&#34;</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">&#34;Tab&#34;</span><span class="p">,</span> <span class="n">mods</span> <span class="o">=</span> <span class="s2">&#34;LEADER&#34;</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>

2022/5/15
阅读更多