<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tipjar on Hillel Wayne</title>
    <link>https://www.hillelwayne.com/categories/tipjar/</link>
    <description>Recent content in Tipjar on Hillel Wayne</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 15 Apr 2023 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://www.hillelwayne.com/categories/tipjar/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>OCR Everywhere</title>
      <link>https://www.hillelwayne.com/tipjar/windows-01/</link>
      <pubDate>Sat, 15 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/tipjar/windows-01/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://learn.microsoft.com/en-us/windows/powertoys/&#34;&gt;Powertoys&lt;/a&gt; is &amp;ldquo;a set of utilities for power users&amp;rdquo; that Microsoft keeps separate from Windows so they can get away with less testing. My favorite one is &amp;ldquo;Text Extractor&amp;rdquo;, which lets you OCR capture anything on the screen. Win-Shift-T:&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.hillelwayne.com/tipjar/img/windows-01-before.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Text in the selected field is stored to your clipboard.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.hillelwayne.com/tipjar/img/windows-01-ocr.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;It doesn&amp;rsquo;t work well with photographs or non-computer fonts, though.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>gitk and git-gui</title>
      <link>https://www.hillelwayne.com/tipjar/git-01/</link>
      <pubDate>Tue, 07 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/tipjar/git-01/</guid>
      <description>&lt;p&gt;&lt;code&gt;gitk .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.hillelwayne.com/tipjar/img/gitk.png&#34; alt=&#34;Image of gitk&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git-gui .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.hillelwayne.com/tipjar/img/git-gui.png&#34; alt=&#34;Image of git-gui&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Both of these come default with git.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A Modular Hotkey System</title>
      <link>https://www.hillelwayne.com/tipjar/ahk-01/</link>
      <pubDate>Fri, 30 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/tipjar/ahk-01/</guid>
      <description>&lt;p&gt;For my &lt;a href=&#34;https://www.thestrangeloop.com/2022/tlaplus-workshop.html&#34;&gt;StrangeLoop workshop&lt;/a&gt; I had to do a lot of powerpoint work. To streamline this, I made over 20 AutoHotKey shortcuts to run various ribbon commands. To avoid polluting my keyboard I built them all into a general-purpose system. All shortcuts started by clicking the thumb mouse button and then quickly pressing 1-2 keys in sequence.&lt;/p&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #272822&#34;&gt;&lt;pre style=&#34;line-height: 125%;&#34;&gt;&lt;code class=&#34;language-ahk&#34; data-lang=&#34;ahk&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;#IfWinActive&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;ahk_exe&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;POWERPNT&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;EXE&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;pp_func()&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;pp_cmd&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;Map(&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;a2&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{cmd&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;{alt}adu.2&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;info&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;Set animation time to .2 seconds&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;fh&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{cmd&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;{alt}hgoh&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;info&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;Flip horizontal&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color: #75715e&#34;&gt; ; etc etc&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;)&lt;/span&gt;


&lt;span style=&#34;color: #f8f8f2&#34;&gt;pp_input&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;?&amp;quot;&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;pp_info&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;pkey,&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;pval&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;pp_cmd&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;pp_input&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;.=&lt;/span&gt;  &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;,&amp;quot;&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;pkey&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;pp_info&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;.=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;Format(&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;{1:-20}{2:-1}`n&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,pkey,pval&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;info)&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color: #f8f8f2&#34;&gt;ih&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;InputHook(&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;L2 C T1&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,,&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;pp_input)&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;ih&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;Start()&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;(ih&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;Wait()&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;Match&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;(ih&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;Match&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;?&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color: #f8f8f2&#34;&gt;MsgBox(pp_info)&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
            &lt;span style=&#34;color: #f8f8f2&#34;&gt;Send(pp_cmd[ih&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;Match]&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;cmd)&lt;/span&gt;
        &lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color: #75715e&#34;&gt;; Mouse thumb button, you can change this to something else&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;XButton1::pp_func()&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;#IfWinActive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pressing &lt;code&gt;?&lt;/code&gt; will show all of the commands along with descriptions.&lt;/p&gt;

&lt;h3 id=&#34;how-it-works&#34;&gt;How it Works&lt;/h3&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Context Managers for Debugging</title>
      <link>https://www.hillelwayne.com/tipjar/py-02/</link>
      <pubDate>Thu, 01 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/tipjar/py-02/</guid>
      <description>&lt;p&gt;A small helper I use to debug some python programs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #272822&#34;&gt;&lt;pre style=&#34;line-height: 125%;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;contextlib&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;contextmanager&lt;/span&gt;

&lt;span style=&#34;color: #a6e22e&#34;&gt;@contextmanager&lt;/span&gt;
&lt;span style=&#34;color: #66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color: #a6e22e&#34;&gt;debug_error&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;():&lt;/span&gt;
    &lt;span style=&#34;color: #66d9ef&#34;&gt;try&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;:&lt;/span&gt;
        &lt;span style=&#34;color: #66d9ef&#34;&gt;yield&lt;/span&gt;
    &lt;span style=&#34;color: #66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color: #a6e22e&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color: #66d9ef&#34;&gt;as&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;e:&lt;/span&gt;
        &lt;span style=&#34;color: #f8f8f2&#34;&gt;breakpoint()&lt;/span&gt;
        &lt;span style=&#34;color: #f8f8f2&#34;&gt;quit()&lt;/span&gt;

&lt;span style=&#34;color: #75715e&#34;&gt;### usage&lt;/span&gt;

&lt;span style=&#34;color: #66d9ef&#34;&gt;with&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;debug_error():&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #ae81ff&#34;&gt;1&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;y&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #ae81ff&#34;&gt;0&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;y&lt;/span&gt; &lt;span style=&#34;color: #75715e&#34;&gt;# x and y will be avail in pdb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You can also put things before the &lt;code&gt;yield&lt;/code&gt; (which will run before the &lt;code&gt;with&lt;/code&gt; block), and after it (to run at the end of the block.) Anything put after it will run at the end of the block. See &lt;a href=&#34;https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager&#34;&gt;@contextmanager&lt;/a&gt; for more info.&lt;/p&gt;

&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Path Objects</title>
      <link>https://www.hillelwayne.com/tipjar/py-01/</link>
      <pubDate>Tue, 23 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/tipjar/py-01/</guid>
      <description>&lt;p&gt;Python 3.4 added &lt;a href=&#34;https://docs.python.org/3.10/library/pathlib.html#&#34;&gt;path objects&lt;/a&gt;, but most people still don&amp;rsquo;t know about them. They simplify a lot of file operations:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #272822&#34;&gt;&lt;pre style=&#34;line-height: 125%;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#34;color: #75715e&#34;&gt;### Without pathlib&lt;/span&gt;

&lt;span style=&#34;color: #f8f8f2&#34;&gt;path&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;path/to/file&amp;quot;&lt;/span&gt;

&lt;span style=&#34;color: #75715e&#34;&gt;# parent dir&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;os&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;dirname(path)&lt;/span&gt;

&lt;span style=&#34;color: #75715e&#34;&gt;# file suffix&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;os&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;splitext(path)[&lt;/span&gt;&lt;span style=&#34;color: #ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;]&lt;/span&gt;

&lt;span style=&#34;color: #75715e&#34;&gt;# read file&lt;/span&gt;
&lt;span style=&#34;color: #66d9ef&#34;&gt;with&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;open(path)&lt;/span&gt; &lt;span style=&#34;color: #66d9ef&#34;&gt;as&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;f:&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;read()&lt;/span&gt;


&lt;span style=&#34;color: #75715e&#34;&gt;### With pathlib&lt;/span&gt;

&lt;span style=&#34;color: #f8f8f2&#34;&gt;path&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;pathlib&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;Path(&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;path/to/file&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;)&lt;/span&gt;

&lt;span style=&#34;color: #75715e&#34;&gt;# parent dir&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;parent&lt;/span&gt;

&lt;span style=&#34;color: #75715e&#34;&gt;# file suffix&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;suffix&lt;/span&gt;

&lt;span style=&#34;color: #75715e&#34;&gt;# read file&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color: #f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;read_text()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Paths are also OS-independent, so the same code will generally work on both Windows and Unix.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LoadLocal</title>
      <link>https://www.hillelwayne.com/tipjar/vim-01/</link>
      <pubDate>Fri, 19 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/tipjar/vim-01/</guid>
      <description>&lt;p&gt;This one&amp;rsquo;s in Lua because I use Neovim, but it should be directly translatable to VimScript.&lt;/p&gt;

&lt;p&gt;I often need to rerun the same commands in a specific buffer. For example, I might regularly run one command to expand an &lt;a href=&#34;https://buttondown.email/hillelwayne/archive/on-metafiles/&#34;&gt;XML metafile&lt;/a&gt;, and then another to run one of the expanded outputs.&lt;/p&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #272822&#34;&gt;&lt;pre style=&#34;line-height: 125%;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#34;color: #66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color: #a6e22e&#34;&gt;LoadLocal&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;(local_cmd)&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;vim.b.local_cmd&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;local_cmd&lt;/span&gt;
&lt;span style=&#34;color: #66d9ef&#34;&gt;end&lt;/span&gt;

&lt;span style=&#34;color: #66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color: #a6e22e&#34;&gt;RunLocal&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;()&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;vim.cmd(vim.b.local_cmd)&lt;/span&gt;
&lt;span style=&#34;color: #66d9ef&#34;&gt;end&lt;/span&gt;

&lt;span style=&#34;color: #f8f8f2&#34;&gt;vim.cmd&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;[[command! -nargs=1 LoadLocal call v:lua.LoadLocal(&amp;lt;f-args&amp;gt;)]]&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;vim.keymap.set(&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;#39;n&amp;#39;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;#39;gxl&amp;#39;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;RunLocal,&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{silent&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Use it like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #272822&#34;&gt;&lt;pre style=&#34;line-height: 125%;&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;:&lt;/span&gt;LoadLocal &lt;span style=&#34;color: #f8f8f2&#34;&gt;!&lt;/span&gt;python %
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then, for that buffer &lt;em&gt;and only that buffer&lt;/em&gt;, typing &lt;code&gt;gxl&lt;/code&gt; will call python on the file.&lt;/p&gt;

&lt;h4 id=&#34;notes&#34;&gt;Notes&lt;/h4&gt;

&lt;p&gt;I have a few different map leaders. The spacebar is my default &lt;code&gt;&amp;lt;leader&amp;gt;&lt;/code&gt; for most mappings, but I also use &lt;code&gt;\&lt;/code&gt; for some navigational commands, &lt;code&gt;gx&lt;/code&gt; for triggering scripts, and &lt;code&gt;;&lt;/code&gt; for insert-mode commands, like&lt;/p&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #272822&#34;&gt;&lt;pre style=&#34;line-height: 125%;&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;inoremap&lt;/span&gt; ;&lt;span style=&#34;color: #66d9ef&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color: #66d9ef&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;-&lt;/span&gt;R&lt;span style=&#34;color: #f8f8f2&#34;&gt;&amp;gt;+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>