<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>TextMate Blog</title>
	<atom:link href="http://blog.macromates.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.macromates.com</link>
	<description>TextMate and OS X</description>
	<pubDate>Wed, 13 Aug 2008 10:00:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>ProjectPlus</title>
		<link>http://blog.macromates.com/2008/projectplus/</link>
		<comments>http://blog.macromates.com/2008/projectplus/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 10:00:00 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2008/projectplus/</guid>
		<description><![CDATA[There is a plug-in from Ciarán Walsh called ProjectPlus. It does SCM badgets (Git and SVN), Finder (color) labels, preserves project state between sessions, and lots more.
]]></description>
			<content:encoded><![CDATA[<p>There is a plug-in from Ciarán Walsh called <a href="http://ciaranwal.sh/2008/08/05/textmate-plug-in-projectplus">ProjectPlus</a>. It does SCM badgets (Git and SVN), Finder (color) labels, preserves project state between sessions, and lots more.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/projectplus/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bundles and GitHub</title>
		<link>http://blog.macromates.com/2008/bundles-and-github/</link>
		<comments>http://blog.macromates.com/2008/bundles-and-github/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 10:00:00 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/?p=191</guid>
		<description><![CDATA[To make it possible to find TextMate bundles by automatic tools such as TextMate Gem and the new GetBundles bundle (currently in review) the naming convention proposed is to include .tmbundle in the name of your bundle project.

Presently most bundles at GitHub use -tmbundle but likely because a dot was previously not allowed in a [...]]]></description>
			<content:encoded><![CDATA[<p>To make it possible to find TextMate bundles by automatic tools such as <a href="http://yehudakatz.com/2008/05/19/textmate-gem/">TextMate Gem</a> and the new <a href="http://lists.macromates.com/textmate/2008-July/026119.html">GetBundles bundle</a> (currently <a href="http://macromates.com/svn/Bundles/trunk/Review/Bundles/GetBundles.tmbundle/">in review</a>) the <a href="http://lists.macromates.com/textmate/2008-July/026146.html">naming convention proposed</a> is to include <code>.tmbundle</code> in the name of your bundle project.</p>

<p>Presently most bundles at <a href="http://github.com/" title="Git hosting and collaborative development">GitHub</a> use <code>-tmbundle</code> but likely because a dot was previously not allowed in a project name.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/bundles-and-github/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Japanese Manual</title>
		<link>http://blog.macromates.com/2008/japanese-manual/</link>
		<comments>http://blog.macromates.com/2008/japanese-manual/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 08:42:43 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2008/japanese-manual/</guid>
		<description><![CDATA[Thanks to the work of Takaaki Kato there now is a Japanese TextMate manual.

A few things still need to be translated (there is an issue tracker) but it should already be very useful for people who prefer reading Japanese over English.

And no, this does not mean that a new CJK-compliant TextMate has been released. The [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to the work of <a href="http://samuraicoder.net/">Takaaki Kato</a> there now is a <a href="http://manual.macromates.com/ja/">Japanese TextMate manual</a>.</p>

<p>A few things still need to be translated (there is an <a href="http://samuraicoder.net/lighthouse_textmate_manual_translation">issue tracker</a>) but it should already be very useful for people who prefer reading Japanese over English.</p>

<p>And no, this does not mean that a new CJK-compliant TextMate has been released. The best approach for <a href="http://blog.macromates.com/2006/faking-cjk-support/">using CJK with TextMate</a> is still via the plug-in.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/japanese-manual/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Working With History in Bash</title>
		<link>http://blog.macromates.com/2008/working-with-history-in-bash/</link>
		<comments>http://blog.macromates.com/2008/working-with-history-in-bash/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 16:28:07 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2008/working-with-history-in-bash/</guid>
		<description><![CDATA[Yesterday we talked about favorite bash features (on the ##textmate IRC channel). I figured it was worth posting mine to this blog, they mostly revolve around history, hence the title.



Setup

My shell history collects a lot of complex command invocations which take time to figure out. To ensure that I have access to them at a [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday we talked about favorite bash features (on the <code>##textmate</code> IRC channel). I figured it was worth posting mine to this blog, they mostly revolve around history, hence the title.</p>

<p><span id="more-189"></span></p>

<h2>Setup</h2>

<p>My shell history collects a lot of complex command invocations which take time to figure out. To ensure that I have access to them at a later time, I have the following 3 lines in my bash init:</p>

<pre><code>export HISTCONTROL=erasedups
export HISTSIZE=10000
shopt -s histappend
</code></pre>

<p>The first one will remove duplicates from the history (when a new item is added). For example if you switch between running <code>make</code> and <code>./a.out</code> in a shell, you may later find that the last 100 or so history items is a mix of these two commands. Not very useful.</p>

<p>The second one increase the history size. With duplicates erased, the history already holds a lot more actual information, but I still like to increase the default size of only 1,000 items.</p>

<p>The third line ensures that when you exit a shell, the history from that session is <em>appended</em> to <code>~/.bash_history</code>. Without this, you might very well lose the history of entire sessions (rather weird that this is not enabled by default).</p>

<h2>History Searching</h2>

<p>Now that I have my history preserved nicely in <code>~/.bash_history</code> there are a few ways to search it.</p>

<h3>Using Grep</h3>

<p>The most crude is <code>grep</code>. You can do:</p>

<pre><code>history|grep iptables
</code></pre>

<p>For me (on this particular Linux server) I get:</p>

<pre><code>4599  iptables -N http-block
4600  iptables -A http-block -s 58.60.43.196 -j DROP
4601  iptables -A INPUT -p tcp --dport 80 -j http-block
4602  iptables -L http-block
4603  iptables-save -c
4604  history|grep iptables
</code></pre>

<p>I do this often enough to have an alias for <code>history</code> (which is just <code>h</code>).</p>

<p>From the output I can either copy/paste the stuff I want, or repeat a given history event. You’ll notice that each history event has a number, you can repeat e.g. event number 4603 simply by running:</p>

<pre><code>!4603
</code></pre>

<p>I will write a bit more about referencing history events in History Expansion.</p>

<h3>Prefix Searching</h3>

<p>Similar to how you can press arrow up for the previous history event, there is a function you can invoke for the previous history event <em>with the same prefix as what is to the left of the insertion point</em>.</p>

<p>This function is called <code>history-search-backward</code> and by default does not have a key equivalent. So to actually reach this function, I have the following in <code>~/.inputrc</code> (or <code>/etc/inputrc</code> when I control the full system):</p>

<pre><code>"\ep": history-search-backward
</code></pre>

<p>This places the function on <abbr title="Escape">⎋</abbr>P (escape P). So if I want to repeat the <code>iptables-save -c</code> history event we found in previous section, all I do is type <code>ipt</code> and hit <abbr title="Escape">⎋</abbr>P. If it finds a later event with the same prefix, hit <abbr title="Escape">⎋</abbr>P again to go further back.</p>

<p><em>This functionality is offered by the <a href="http://tiswww.case.edu/php/chet/readline/rltop.html"><code>readline</code></a> library, so if you setup this key, you have access to prefix searching in all commands which use this library.</em></p>

<h3>Incremental Search</h3>

<p>It is possible to press <abbr title="Control-R">⌃R</abbr> to do an incremental (interactive) search of the history.</p>

<p>Personally I am not a big fan of this feature, so I will leave it at that :)</p>

<p><strong>Update:</strong> The reason I dislike <abbr title="Control-R">⌃R</abbr> is both because the interactive stuff just seems to get in the way (when <abbr title="Escape">⎋</abbr>P is what I need 99% of the time) and because it fails in cases where I “switch shell”, for example I may do: <code>ssh mm</code> press return, then instantly type: <code>f<abbr title="Escape">⎋</abbr>P</code> and again hit return (to execute <code>free -m</code> on the server called <code>mm</code>). I enter this <em>before</em> the connection to the server has been fully established, and here <abbr title="Control-R">⌃R</abbr> would have been taken by the local shell, but it is the shell history at the server I want to search.</p>

<h2>History Expansion</h2>

<p>History Expansion was what we did above when we ran <code>!4603</code>. It is a <abbr title="Domain Specific Language">DSL</abbr> for referencing history events and optionally run transformations on these.</p>

<p>Anyone interested in this should run <code>man bash</code> and search for <code>History Expansion</code>, but just to give you a feel for what it is, I will reference a subset of the manual and provide a few examples.</p>

<h3>Event Designators</h3>

<p>First, an event designator starts with <code>!</code> and then the event we want to reference. This can be:</p>

<pre><code>«n»      Reference event number «n».
-«n»     Go «n» events back.
!        Last line (this is the default).
#        Current line.
«text»   Last event starting with «text».
?«text»  Last event containing «text».
</code></pre>

<p>So if we want to re-run our <code>iptables-save -c</code> we can do: <code>!ipt</code>.</p>

<p>What’s more useful though is to use history references as part of larger commands.</p>

<p>For example take this example:</p>

<pre><code>% which ruby
/usr/bin/ruby
% ls -l $(!!)
lrwxr-xr-x  1 root  wheel  76 30 Oct  2007 /usr/bin/ruby -&gt; ../../System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby
</code></pre>

<p>Or something like:</p>

<pre><code>% make some_target
(no errors)
% path/to/target some arguments
(no errors)
% !-2 &amp;&amp; !-1
</code></pre>

<h3>Word Designators</h3>

<p>In the previous section we referenced entire history events. It is possible to reference just a subset of a history event by appending a <code>:</code> to the event designator and then the word of interest, the two most useful are:</p>

<pre><code>«n»      Reference the «n»’th word.
$        Reference the last word.
</code></pre>

<p>So for example we can do:</p>

<pre><code>% mkdir -p /path/to/our/www-files
(no errors)
% chown www:www !$
(no errors)
</code></pre>

<p>Here we reference last word of last line. We can also reference stuff on the same line, e.g.:</p>

<pre><code>% cp /path/to/important/file !#:1_backup
</code></pre>

<p><em>To reference the last word of last line one can also press <code><abbr title="Escape">⎋</abbr>_</code> which will immediately insert that word.</em></p>

<h3>Modifiers</h3>

<p>To make history substitution even more useful (and harder to remember), one can also add a modifier to the event designator.</p>

<p>The most useful modifiers are in my experience <code>:h</code> and <code>:t</code>, these are head and tail respectively or better know as <code>dirname</code> and <code>basename</code>.</p>

<p>An example could be:</p>

<pre><code>% ls -l /path/to/some/file
(listing of file)
% cd !$:h
(change directory to that of file)
</code></pre>

<h2>Brace Expansion</h2>

<p>Somewhat related to the backup example where we reference the first argument as <code>!#:1</code> and append <code>_backup</code> to this, another approach is bracket expansion.</p>

<p>Anywhere on a command line, one can write <code>{a,b,c}</code> which will expand to the 3 words <code>a</code>, <code>b</code>, and <code>c</code>. If we include a prefix/suffix, that will be part of each of the expanded words. We can also leave the word in the braces empty, and have it expand to just the prefix/suffix, so for example we can do:</p>

<pre><code>% cp /path/to/important/file{,_backup}
</code></pre>

<p>This is functionally equivalent to:</p>

<pre><code>% cp /path/to/important/file !#:1_backup
</code></pre>

<p>But lack of hardcoded word number is IMO an improvement.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/working-with-history-in-bash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TextMate (Ruby) Tricks</title>
		<link>http://blog.macromates.com/2008/textmate-ruby-tricks/</link>
		<comments>http://blog.macromates.com/2008/textmate-ruby-tricks/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 12:22:05 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2008/textmate-ruby-tricks/</guid>
		<description><![CDATA[John Muchow of Mac Developer Tips recently posted a screencast showing a neat way to debug your Ruby code.

Speaking of the Ruby bundle, Ciarán Walsh has a post about the design philosophy behind the mnemonics of the Ruby bundle and a few highlights.

And while there seems to be a preference for writing TextMate commands in [...]]]></description>
			<content:encoded><![CDATA[<p>John Muchow of <a href="http://macdevelopertips.com/">Mac Developer Tips</a> recently posted a screencast showing a <a href="http://macdevelopertips.com/textmate/textmate-execute-inline-ruby.html">neat way to debug your Ruby code</a>.</p>

<p>Speaking of the Ruby bundle, Ciarán Walsh has a post about the <a href="http://ciaranwal.sh/2008/02/20/textmate-tip-the-ruby-bundle">design philosophy behind the mnemonics of the Ruby bundle</a> and a few highlights.</p>

<p>And while there seems to be a preference for writing TextMate commands in Ruby, anything that you can run from a terminal (shell) can be used. A <a href="http://ciaranwal.sh/2008/04/04/textmate-tip-using-php-for-commands">step-by-step tutorial about how to write TextMate commands in PHP</a> is available at Ciarán’s blog. I pushed him to write this one, as I believe there are a lot of people who work with PHP in TextMate that never got around to writing custom commands in the false belief that they would have to learn <a href="http://en.wikipedia.org/wiki/Elisp">elisp</a> or some similarly obscure language :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/textmate-ruby-tricks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ExpanDrive — Seamless sftp mounts</title>
		<link>http://blog.macromates.com/2008/expandrive-seamless-sftp-mounts/</link>
		<comments>http://blog.macromates.com/2008/expandrive-seamless-sftp-mounts/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 12:51:45 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2008/expandrive-seamless-sftp-mounts/</guid>
		<description><![CDATA[Not so long ago Jonathan Ragan-Kelley mentioned ExpanDrive on the mailing list and I assume it is the same Jonathan R. quoted on their page as saying:


  I’ve never seen TextMate work well on a network drive. With
  ExpanDrive, it’s a dream. And the drives stay mounted perfectly
  when I move my [...]]]></description>
			<content:encoded><![CDATA[<p>Not so long ago Jonathan Ragan-Kelley <a href="http://lists.macromates.com/pipermail/textmate/2008-February/024516.html">mentioned ExpanDrive on the mailing list</a> and I assume it is the same Jonathan R. quoted on <a href="http://www.magnetk.com/expandrive" title="ExpanDrive — Mount sftp onto your desktop (OS X)">their page</a> as saying:</p>

<blockquote>
  <p>I’ve never seen TextMate work well on a network drive. With
  ExpanDrive, it’s a dream. And the drives stay mounted perfectly
  when I move my laptop between home and work.</p>
</blockquote>

<p>John Gruber just posted a <a href="http://daringfireball.net/2008/03/expandrive">review about ExpanDrive</a> in which he writes:</p>

<blockquote>
  <p>My first impression after reading ExpanDrive’s promotional
  description last week was that it sounded too good to be true. One
  week later, I’m pretty sure it actually <em>is</em> that good.</p>
</blockquote>

<p>If it wasn’t clear from the above, <a href="http://www.magnetk.com/expandrive" title="ExpanDrive — Mount sftp onto your desktop (OS X)">ExpanDrive</a> lets you mount remote sftp drives and it actually works! I.e. no long delays or dropped connection in the middle of a save. Their introductory price is $29.</p>

<p><strong>2008-03-11: Update:</strong> There is a $5 discount for the first 100 who use <code>UWQ0OUQZWIB1ZMTP</code> as coupon code.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/expandrive-seamless-sftp-mounts/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Changes — FileMerge Replacement</title>
		<link>http://blog.macromates.com/2008/changes-filemerge-replacement/</link>
		<comments>http://blog.macromates.com/2008/changes-filemerge-replacement/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 06:31:06 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2008/changes-%e2%80%94-filemerge-replacement/</guid>
		<description><![CDATA[

Ian Baird recently released Changes which is an application to show differences between two folders and merge these intelligently.

I know this is not an uncommon task among many TextMate users, as I have received quite a lot of requests for building such functionality — Changes of course has TextMate integration, so this application will hopefully [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.macromates.com/wp-content/uploads/2008/02/changes-icon.png" alt="Changes Application Icon" height="128" width="128" align="right"></p>

<p>Ian Baird recently released <a href="http://changesapp.com/">Changes</a> which is an application to show differences between two folders and merge these intelligently.</p>

<p>I know this is not an uncommon task among many TextMate users, as I have received quite a lot of requests for building such functionality — Changes of course has TextMate integration, so this application will hopefully satisfy a lot of you.</p>

<p>Version 1.0 of Changes is available for $39.95 (free trial) but if you use <code>TEXTMATE0308</code> as coupon code you can get it for $29.95 (offer lasts throughout March 2008).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/changes-filemerge-replacement/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Git Bundle</title>
		<link>http://blog.macromates.com/2008/git-bundle/</link>
		<comments>http://blog.macromates.com/2008/git-bundle/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 23:46:34 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2008/git-bundle/</guid>
		<description><![CDATA[You may have read that a lot of prominent people have recently moved to Git and are loving it. I too am one of those who fancy this new kid on the block but never got very far with the bundle I started for it.

Fortunately Tim Harper recently picked up on my initial efforts and [...]]]></description>
			<content:encoded><![CDATA[<p>You may have read that a lot of prominent people have recently moved to Git and are loving it. I too am one of those who fancy this new kid on the block but never got very far with the bundle I started for it.</p>

<p>Fortunately Tim Harper recently picked up on my initial efforts and has done a great job at not only making this bundle functional but also downright impressive :)</p>

<p>The much improved <a href="http://gitorious.org/projects/git-tmbundle">Git bundle can be found at Gitorious</a> and discussion about it can be directed to its <a href="http://groups.google.com/group/git-tmbundle" title="Git Bundle Google Group">Google Group</a>.</p>

<p>For those too lazy to click the link above, here are the short install instructions:</p>

<pre><code>mkdir -p /Library/Application\ Support/TextMate/Bundles
cd !$
git clone git://gitorious.org/git-tmbundle/mainline.git Git.tmbundle
osascript -e 'tell app "TextMate" to reload bundles'
</code></pre>

<p>After having installed it you can press <abbr title="Control-Command-T">⌃⌘T</abbr> in TextMate and enter <code>git</code> to find the <em>“Administration → Update Git Bundle”</em> action. Use this to update the bundle (it will automatically reload after having performed the update).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/git-bundle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>From Bash to Z Shell</title>
		<link>http://blog.macromates.com/2008/from-bash-to-z-shell/</link>
		<comments>http://blog.macromates.com/2008/from-bash-to-z-shell/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 00:05:57 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2008/from-bash-to-z-shell/</guid>
		<description><![CDATA[

If your usage of Mac OS X is the slightest bit “technical” then you should do yourself the favor of getting familiar with the extremely powerful shell environment.

Even if you already know a dozen scripting languages far more expressive than the shell, there are still contexts in which the shell is just better suited for [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.macromates.com/wp-content/uploads/2008/02/from-bash-to-z-shell-book-cover.jpg" alt="From Bash to Z Shell Book Cover" height="110" width="83" align="right"></p>

<p>If your usage of Mac OS X is the slightest bit “technical” then you should do yourself the favor of getting familiar with the extremely powerful shell environment.</p>

<p>Even if you already know a dozen scripting languages far more expressive than the shell, there are still contexts in which the shell is just better suited for the job, and understanding the POSIX environment is knowledge that is very valuable even outside the shell.</p>

<p><a href="http://blog.grayproductions.net/">James Edward Gray</a> has a <a href="http://blog.grayproductions.net/articles/from_bash_to_z_shell">review of <em>From Bash to Z Shell</em></a> which sounds like just the book you want to pick up, quoting from his review:</p>

<blockquote>
  <p>I&#8217;ve already noticed dramatic differences. I&#8217;m using shell loops at the command-line now to process many files at once; I actually understand shell quoting and when to use which types of quotes and escapes to get the desired effect; I can easily strip off a file extension or get a directory name from a full path when I need one; I make constant use of the command history now whether I&#8217;m searching for a past command, correcting a typo, or just pulling a single argument out of a previous command for reuse in a new command; and I&#8217;ve written a few shell functions to provide shortcuts to my common tasks.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2008/from-bash-to-z-shell/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Eye on TextMate Bundles</title>
		<link>http://blog.macromates.com/2007/eye-on-textmate-bundles/</link>
		<comments>http://blog.macromates.com/2007/eye-on-textmate-bundles/#comments</comments>
		<pubDate>Fri, 07 Dec 2007 07:59:53 +0000</pubDate>
		<dc:creator>Allan Odgaard</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.macromates.com/2007/eye-on-textmate-bundles/</guid>
		<description><![CDATA[Luke Daley took initiative to have FishEye index the TextMate Bundles repository.

A neat thing about FishEye (in addition to the “lines of code”-graph shown below) is that it allows per-folder RSS feeds.





We have always offered a repository-wide RSS feed but if you only want to follow changes done to the LaTeX bundle then you can [...]]]></description>
			<content:encoded><![CDATA[<p>Luke Daley took initiative to have <a href="http://fisheye2.cenqua.com/browse/textmate-bundles/trunk/">FishEye index the TextMate Bundles repository</a>.</p>

<p>A neat thing about FishEye (in addition to the “lines of code”-graph shown below) is that it allows per-folder RSS feeds.</p>

<p><img src="http://fisheye2.cenqua.com/browse/textmate-bundles/trunk?linegraph" alt="Lines of code over time for the TextMate bundles" width="300" height="220"></p>

<p><span id="more-181"></span></p>

<p>We have always offered a <a href="http://macromates.com/svnlog/bundles.rss">repository-wide RSS feed</a> but if you only want to follow <a href="http://fisheye2.cenqua.com/browse/textmate-bundles/trunk/Bundles/Latex.tmbundle">changes done to the LaTeX bundle</a> then you can subscribe to just that. Go to the <a href="http://fisheye2.cenqua.com/browse/textmate-bundles/trunk/Bundles/">TextMate Bundles listing</a> and click the bundle you are interested in to see the history of that bundle. In the “Recent Changelog” box (to the left) is an RSS link in the upper right corner.</p>

<p>On the topic of data mining the TextMate bundles repository, <a href="http://www.ohloh.net/projects/9884?p=Macromates+TextMate+Bundles">ohloh.net estimates that it costs more than a million dollars to hire a team to create the code in the repository</a> (and their KLOC count seems to be only one fifth of what FishEye finds).</p>

<p>Another service we have been using to <a href="http://cia.vc/stats/project/TextMateBundles">keep track of our commits</a> is CIA.vc. This was motivated by their useful IRC bot that used to echo the commits to the <a href="irc://irc.freenode.net/##textmate">#textmate IRC channel</a> (their service has been having some problems lately).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.macromates.com/2007/eye-on-textmate-bundles/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
