<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Jason Rudolph</title>
  <link href="https://jasonrudolph.com/blog/atom.xml" rel="self"/>
  <link href="https://jasonrudolph.com/"/>
  <updated>2026-03-10T15:24:57+00:00</updated>
  <id>https://jasonrudolph.com/</id>
  <author>
    <name>Jason Rudolph</name>
    <email>jason@jasonrudolph.com</email>
  </author>

  
    <entry>
      <title>Introducing EveryDive</title>
      <link href="https://jasonrudolph.com/blog/2023/10/25/introducing-everydive-scuba-logbook-for-iphone/"/>
      <updated>2023-10-25T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2023/10/25/introducing-everydive-scuba-logbook-for-iphone</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>BuildPulse has been acquired!</title>
      <link href="https://jasonrudolph.com/blog/2023/01/04/buildpulse-has-been-acquired/"/>
      <updated>2023-01-04T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2023/01/04/buildpulse-has-been-acquired</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>BuildPulse is now available in the Slack App Directory</title>
      <link href="https://jasonrudolph.com/blog/2021/02/09/buildpulse-is-now-available-in-the-slack-app-directory/"/>
      <updated>2021-02-09T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2021/02/09/buildpulse-is-now-available-in-the-slack-app-directory</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>Launching BuildPulse in the GitHub Marketplace</title>
      <link href="https://jasonrudolph.com/blog/2020/01/07/launching-buildpulse-in-the-github-marketplace/"/>
      <updated>2020-01-07T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2020/01/07/launching-buildpulse-in-the-github-marketplace</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>Talking Teletype on the Ruby on Rails podcast</title>
      <link href="https://jasonrudolph.com/blog/2017/11/24/talking-teletype-on-the-ruby-on-rails-podcast/"/>
      <updated>2017-11-24T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2017/11/24/talking-teletype-on-the-ruby-on-rails-podcast</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>Code together in real time with Teletype for Atom</title>
      <link href="https://jasonrudolph.com/blog/2017/11/15/code-together-in-real-time-with-teletype-for-atom/"/>
      <updated>2017-11-15T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2017/11/15/code-together-in-real-time-with-teletype-for-atom</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>Navigate file history faster with improved blame view</title>
      <link href="https://jasonrudolph.com/blog/2017/01/18/navigate-file-history-faster-with-improved-blame-view/"/>
      <updated>2017-01-18T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2017/01/18/navigate-file-history-faster-with-improved-blame-view</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>Automatic redirects for renamed repositories</title>
      <link href="https://jasonrudolph.com/blog/2015/07/21/automatic-redirects-for-renamed-repositories/"/>
      <updated>2015-07-21T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2015/07/21/automatic-redirects-for-renamed-repositories</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>Organization-approved applications</title>
      <link href="https://jasonrudolph.com/blog/2015/01/19/organization-approved-applications/"/>
      <updated>2015-01-19T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2015/01/19/organization-approved-applications</id>
      <content type="html">
</content>
    </entry>
  
    <entry>
      <title>Defining Atom commands in your init script</title>
      <link href="https://jasonrudolph.com/blog/2014/03/02/defining-atom-commands-in-your-init-script/"/>
      <updated>2014-03-02T00:00:00+00:00</updated>
      <id>https://jasonrudolph.com/blog/2014/03/02/defining-atom-commands-in-your-init-script</id>
      <content type="html">&lt;p&gt;I’m thrilled that &lt;a href=&quot;https://atom.io/&quot;&gt;Atom&lt;/a&gt;—the newly-announced text editor from GitHub—is now out in the wild for more people to enjoy. It’s been my editor of choice for the past seven months. Atom is a delight to use. And for the first time, I’m using an editor that I find enjoyable to &lt;em&gt;extend&lt;/em&gt;. There’s a ton to say about Atom, but for the moment, let’s talk about a quick way to start experimenting with extending the default Atom experience.&lt;/p&gt;

&lt;p&gt;The majority of your Atom customizations will come in the form of &lt;a href=&quot;https://atom.io/packages&quot;&gt;packages&lt;/a&gt;. Packages provide an excellent means for defining commands and other customizations&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. But sometimes I want to quickly define a new command without &lt;a href=&quot;https://atom.io/docs/v1.0.2/hacking-atom-package-word-count&quot;&gt;creating a full-blown package&lt;/a&gt;. Cue &lt;a href=&quot;https://atom.io/docs/v1.0.2/hacking-atom-the-init-file&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/atom/init.coffee&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;defining-your-first-command&quot;&gt;Defining your first command&lt;/h2&gt;

&lt;p&gt;As a simple (and admittedly contrived) example, let’s define a command that logs a message to the console. For starters, add the following code to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/atom/init.coffee&lt;/code&gt; script:&lt;/p&gt;

&lt;div class=&quot;language-coffeescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;atom&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;commands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;atom-workspace&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;dot-atom:demo&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;log&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Hello from dot-atom:demo&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Atom evaluates &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.coffee&lt;/code&gt; each time you open a new window. To test out this new command, you can open a new window, or you can reload the current window via the “Window: Reload” command in the &lt;a href=&quot;https://atom.io/docs/v1.0.2/getting-started-atom-basics#command-palette&quot;&gt;Command Palette&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now, use the Command Palette to locate and execute the new command by name (i.e., “Dot Atom: Demo”), as shown in the gif below. Each time you run the command, you’ll see the message logged to the console.&lt;/p&gt;

&lt;p&gt;Defining and using a new command is just that simple.&lt;/p&gt;

&lt;p&gt;If you’d like to trigger the command via a keyboard shortcut, you can define a keymap for the command in &lt;a href=&quot;https://atom.io/docs/v1.0.2/using-atom-basic-customization#customizing-key-bindings&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.atom/keymap.cson&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/resources/201403-define-atom-commands-in-your-init-script.gif&quot; title=&quot;Demo of an Atom command in init.coffee&quot;&gt;&lt;img src=&quot;/resources/201403-define-atom-commands-in-your-init-script.gif&quot; alt=&quot;Demo of an Atom command in init.coffee&quot; title=&quot;Demo of an Atom command in init.coffee&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;going-further&quot;&gt;Going further&lt;/h2&gt;

&lt;p&gt;Because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.coffee&lt;/code&gt; provides full access to Atom’s API, it’s fertile ground for implementing genuinely useful commands. For example, Lincoln Stoll uses his &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.coffee&lt;/code&gt; to define a &lt;a href=&quot;https://github.com/lstoll/.atom/blob/557394111a8f16b5f3efa9800fe37682ec71689a/init.coffee#L13-L29&quot;&gt;command for generating ctags&lt;/a&gt;. In my &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.coffee&lt;/code&gt;, I define a &lt;a href=&quot;https://github.com/jasonrudolph/dotfiles/blob/86ec9226fbede526006a8be537dc77152e4a17cd/atom/init.coffee#L28-L37&quot;&gt;command that closes all panes in one fell swoop&lt;/a&gt;, and I’m experimenting with &lt;a href=&quot;https://github.com/jasonrudolph/dotfiles/blob/86ec9226fbede526006a8be537dc77152e4a17cd/atom/init.coffee#L43-L115&quot;&gt;a few other commands&lt;/a&gt; as well&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Whether you need a sandbox for experimenting with new commands before publishing them in
a package, or you just want to define a few small commands without the overhead of an entire package, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.coffee&lt;/code&gt; is the place to go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updated 7/10/2015&lt;/strong&gt;: Atom 1.0 recently &lt;a href=&quot;http://blog.atom.io/2015/06/25/atom-1-0.html&quot;&gt;launched&lt;/a&gt;. To make it easier for readers to use this post in the era of Atom 1.0, I’ve updated the code in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dot-atom:demo&lt;/code&gt; command to use the &lt;a href=&quot;http://blog.atom.io/2015/05/01/removing-deprecated-apis.html&quot;&gt;Atom 1.0 API&lt;/a&gt;, updated the documentation links to point to the current Atom documentation, and updated the links to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.coffee&lt;/code&gt; files hosted on github.com to point to the latest versions of those files.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I’ve enjoyed writing a &lt;a href=&quot;https://atom.io/packages/open-on-github&quot;&gt;handful&lt;/a&gt; &lt;a href=&quot;https://atom.io/packages/sort-lines&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;https://atom.io/packages/toggle-quotes&quot;&gt;packages&lt;/a&gt; over the past few months. Now that Atom is in public beta, the package ecosystem is quickly &lt;a href=&quot;https://atom.io/packages/list&quot;&gt;heating up&lt;/a&gt;. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;As people begin to share their Atom &lt;a href=&quot;http://dotfiles.github.io/&quot;&gt;dotfiles on GitHub&lt;/a&gt;, it’s going to be a blast to discover novel customizations that allow developers to get even more from Atom. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
    </entry>
  

</feed>
