<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3610844988855884806</id><updated>2012-02-16T16:19:43.185-08:00</updated><category term='regex'/><category term='term'/><category term='emacs'/><category term='comment'/><category term='terminal'/><category term='php'/><category term='QandA dired'/><category term='spam'/><category term='awesome'/><category term='video'/><category term='jira'/><category term='moderation'/><category term='regexp'/><category term='maps'/><category term='regular expression'/><category term='zend'/><category term='demo'/><category term='zf-mode'/><category term='google'/><title type='text'>Emacs Journey</title><subtitle type='html'>An on-going "blogumentary", if you will, of my experiences with Emacs.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-7612971170388111450</id><published>2012-01-10T07:25:00.000-08:00</published><updated>2012-01-10T07:25:23.171-08:00</updated><title type='text'>Search Your Open Buffers</title><content type='html'>I've been using emacs for &lt;i&gt;years&lt;/i&gt;, and it still amazes me how many features that I would consider "basic" I'm still learning about even now. For a while I've always thought it would be handy to search my open buffers. However, since I'm typically programming, most of the buffers I want to search are tied to files, so in the past I've just made sure all my buffers are saved and used with rgrep or find-grep-dired.&lt;br /&gt;&lt;br /&gt;Now, I know there's a way to do what I originally wanted. Using multi-occur or multi-occur-in-matching-buffers you can search your open buffers for a regular expressing, and limit the searched buffers by regular expressing using the latter. I foresee this being very handy, and thought I'd share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-7612971170388111450?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/7612971170388111450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2012/01/search-your-open-buffers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/7612971170388111450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/7612971170388111450'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2012/01/search-your-open-buffers.html' title='Search Your Open Buffers'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-1172909680660874624</id><published>2012-01-05T04:49:00.000-08:00</published><updated>2012-01-05T04:49:06.555-08:00</updated><title type='text'>It's 2012!</title><content type='html'>Where's my flying car?&lt;br /&gt;&lt;br /&gt;Seriously, though, I haven't had much time to do much with emacs over the holidays, other than use it at work. We're still working on zf-mode, and I've improved my emacs-setup package a bit (not sure if I've ever mentioned that on this blog before, but its another emacs package I wrote).&lt;br /&gt;&lt;br /&gt;Basically, long story short, emacs still rocks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-1172909680660874624?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/1172909680660874624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2012/01/its-2012.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1172909680660874624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1172909680660874624'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2012/01/its-2012.html' title='It&apos;s 2012!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-2132379765789473411</id><published>2011-11-16T14:48:00.001-08:00</published><updated>2011-11-16T14:51:20.572-08:00</updated><title type='text'>Pondering the future of this blog</title><content type='html'>So, I'm torn on a decision about the blog. It seems that lately I'm doing so much with zf-mode that's all I really post about. That's not necessarily a bad thing. However, the point of this blog was to post neat things about emacs that I've learned or discovered, not just to post about zf-mode.&lt;br /&gt;&lt;br /&gt;So, I'm trying to decide if I should:&lt;br /&gt;&lt;br /&gt;a.) convert this blog to a zf-mode blog,&lt;br /&gt;b.) keep this blog a combination of zf-mode and non-zf-mode posts, or&lt;br /&gt;c.) create a separate blog entirely for zf-mode and continue using this blog for other miscellaneous emacs posts.&lt;br /&gt;&lt;br /&gt;Decisions, decisions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-2132379765789473411?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/2132379765789473411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2011/11/pondering-future-of-this-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/2132379765789473411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/2132379765789473411'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2011/11/pondering-future-of-this-blog.html' title='Pondering the future of this blog'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-6072744150491467867</id><published>2011-11-16T14:30:00.001-08:00</published><updated>2011-11-16T14:47:33.584-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='zf-mode'/><title type='text'>zf-mode features teaser #1</title><content type='html'>Interactive class/method modification.&lt;br /&gt;&lt;br /&gt;Oh yeah. That's right. Be jealous. ^_^&lt;br /&gt;&lt;br /&gt;We're working on getting it out. I promise it will be worth the wait.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-6072744150491467867?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/6072744150491467867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2011/11/zf-mode-features-teaser-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/6072744150491467867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/6072744150491467867'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2011/11/zf-mode-features-teaser-1.html' title='zf-mode features teaser #1'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-1291204370625254032</id><published>2011-11-01T12:44:00.000-07:00</published><updated>2011-11-16T14:47:54.385-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='zf-mode'/><title type='text'>We've created a monster... and it's call zf-mode!</title><content type='html'>Ok, so it's been quite a while since I've posted anything here. I've been busy. Sue me. However, I've been busy writing php apps with zf-mode. Why, you may ask? Because 1.) it's awesome, 2.) I'm testing it for bugs, and 3.) its the single most useful emacs mode I've ever used.&lt;br /&gt;&lt;br /&gt;Here's the exciting part: I think we're getting really close to a release! I still don't have a date, but it's definitely coming. Prepare yourselves; this is not the little zf-mode you knew before. Here's just a few of the new abilities you can look forward to:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;Automatic, correct line/statement breaking (with customizable options)&lt;/li&gt;&lt;li&gt;&amp;nbsp;Integrated support for php testing using phpunit, phpcs, and phpmd&lt;/li&gt;&lt;li&gt;&amp;nbsp;Easy navigation between files and parts of files (methods, properties, etc).&lt;/li&gt;&lt;li&gt;&amp;nbsp;Project handling&lt;/li&gt;&lt;li&gt;&amp;nbsp;So much more....&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;We're really excited about releasing zf-mode, but we really want to make sure we have as many bugs worked out as we can find prior to release. We're working on the last couple of features we want for the first release right now, so it can't be *too* long before the release. Please, be patient.&lt;br /&gt;&lt;br /&gt;Also, just as a side note, zf-mode is now its own major-mode, no longer dependent upon using php-mode. zf-mode is currently well over 7000 lines of code (actual lines of code, not including comments or blank lines). Its hard to believe its come so far since its initial creation back in 2008 as a single function to insert a Zend_Debug::dump() statement with or without a die afterwards. My little program is all grown up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-1291204370625254032?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/1291204370625254032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2011/11/weve-created-monster-and-its-call-zf.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1291204370625254032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1291204370625254032'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2011/11/weve-created-monster-and-its-call-zf.html' title='We&apos;ve created a monster... and it&apos;s call zf-mode!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-5750398455888417054</id><published>2011-07-17T07:23:00.000-07:00</published><updated>2011-07-17T07:37:59.802-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regexp'/><category scheme='http://www.blogger.com/atom/ns#' term='regular expression'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Regular Expressions made easy!</title><content type='html'>I'm still fairly new to regular expressions. I've read many tutorials and web pages on how to use them, and while I understand and remember a lot of what I read, I often find myself using regular expressions incorrectly. I often find myself writing a regular expression, testing it, finding out its wrong, and starting over.&lt;br /&gt;&lt;br /&gt;Once again, emacs has come to my rescue! There is an emacs function called `re-builder` and it is a life saver when it comes to building regular expressions. Say you're in a buffer and trying to write a regular expression to match certain point(s) inside the buffer. Just run `M-x re-builder` and you'll get a small window below the one you're in. That is the re-builder window. It should be empty except for two double-quotes. &lt;br /&gt;&lt;br /&gt;You can begin typing a regular expression in between the quotes and the appropriate matches to the expression will be instantly highlighted and filtered as you type! If you have any sub-expressions, they'll even be highlighted in different colors so you can see exactly what each sub-expression is matching! If you type something that is wrong, you'll know immediately since the correct match will no longer be highlighted in the buffer. Once you have the perfect regular expression, you can simply copy and paste (*ahem* sorry, kill and yank) it to where you need it, be it a function you're writing, input to an interactive function call via M-x, or somewhere else.&lt;br /&gt;&lt;br /&gt;There are a couple of things to remember when using re-builder. If you start a grouping (brackets) or a sub-expression (parentheses), nothing will be matched or highlighted in the target buffer until you close it. So, when you're writing those, don't think its all wrong when all the highlighting goes away. re-builder just can't match anything until you close off the expression.&lt;br /&gt;&lt;br /&gt;Secondly, when working in re-builder, you'll need to escape backslash. For instance, sub-expressions would be \\(...\\) as opposed to \(...\). However, if you are going to use the finished regular expression as an argument to, say, M-x query-replace-regexp, you'll need to remove the extra slashes (and the beginning and ending quotes, for that matter). &lt;br /&gt;&lt;br /&gt;Also, if you need to match a newline, you can do so with [\n]. The \n needs to be in a grouping brackets. However, once again, if you'll be using the expression with, for instance, M-x query-replace-regexp, after you put the expression into the minibuffer, you'll need to delete the \n and type C-q C-j to put a literal newline in its place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-5750398455888417054?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/5750398455888417054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2011/07/regular-expressions-made-easy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/5750398455888417054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/5750398455888417054'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2011/07/regular-expressions-made-easy.html' title='Regular Expressions made easy!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-1715195244908308924</id><published>2011-06-27T14:17:00.000-07:00</published><updated>2011-06-27T14:18:57.560-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Demo video of zend-mode now available!</title><content type='html'>You can check it out &lt;a href="http://www.youtube.com/watch?v=X6vs4cEajQA"&gt;here on YouTube&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-1715195244908308924?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/1715195244908308924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2011/06/demo-video-of-zend-mode-now-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1715195244908308924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1715195244908308924'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2011/06/demo-video-of-zend-mode-now-available.html' title='Demo video of zend-mode now available!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-5135971898203064113</id><published>2011-06-24T07:32:00.000-07:00</published><updated>2011-06-24T07:41:46.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>I'm not dead... I feel happy! Especially for my zend-mode updates!</title><content type='html'>Well, I've put in quite a bit of time with zend-mode. Hopefully I'm getting close to a public release.&lt;br /&gt;&lt;br /&gt;For those who don't know, zend-mode is a minor-mode for use with php-mode in emacs. Simple enough, right? O_o&lt;br /&gt;&lt;br /&gt;Anyway, Zend Framework is a PHP framework that I have taken to using which incorporates a pretty strict but quite customizable MVC/templating system that just makes writing applications in PHP nicer, in my opinion. Of course, there's a lot of duplication of efforts (e.g. creating classes, creating php-doc blocks, etc) when writing PHP apps, with or without Zend.&lt;br /&gt;&lt;br /&gt;That's why I began working on zend-mode. To make myself more productive, and boy have I succeeded. What started out as just a few elisp functions in a single file has turned into a suite of functions and customizable variables that make up what I now call zend-mode.&lt;br /&gt;&lt;br /&gt;Don't let the name fool you, though. While zend-mode is developed with Zend in mind, it can be used by any PHP developers as there are plenty of non-Zend-specific functions and abilities, including php lint, phpunit, and phpcs support.&lt;br /&gt;&lt;br /&gt;Like I said, I hope to be coming out with a public release soon. I'll most likely put it on &lt;a href="http://www.emacswiki.org/"&gt;Emacs Wiki&lt;/a&gt;. Also, I'm thinking that I may make a screencast soon basically showing zend-mode in action. Haven't decided for sure, yet, so if it doesn't happen don't sue me. If it does happen, I'll put it on my personal YouTube channel and link to it here.&lt;br /&gt;&lt;br /&gt;P.S. shameless lulz@my own Holy Grail reference...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-5135971898203064113?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/5135971898203064113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2011/06/im-not-dead-i-feel-happy-especially-for.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/5135971898203064113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/5135971898203064113'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2011/06/im-not-dead-i-feel-happy-especially-for.html' title='I&apos;m not dead... I feel happy! Especially for my zend-mode updates!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-5405148816066308905</id><published>2011-06-09T14:50:00.000-07:00</published><updated>2011-06-09T14:57:51.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='term'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><title type='text'>Back to the Terminal</title><content type='html'>Well, I've decided to start using emacs via the terminal again, for a few reasons. &lt;br /&gt;&lt;br /&gt;1.) Performance&lt;br /&gt;&lt;br /&gt;Keeping in mind I run Mac OS X and use the emacs from MacPorts, the terminal emacs loads much quicker than Emacs.app.&lt;br /&gt;&lt;br /&gt;2.) Portability&lt;br /&gt;&lt;br /&gt;I've recently begun using tmux (like screen, but in my opinion better). I can run my emacs inside tmux at work, then if I need to do some work remotely, I can just ssh into my work computer and reattach the tmux session to continue my work. At least, that's the theory. Haven't actually done this yet.&lt;br /&gt;&lt;br /&gt;3.) Because I Want To&lt;br /&gt;&lt;br /&gt;Really, I just felt like getting back to a terminal work style, partially for reason numbers 1 and 2 above, and partially just to do it because I can.&lt;br /&gt;&lt;br /&gt;I've had a couple of hiccups here and there, and I've definitely had to relearn and unlearn habits (its amazing how much I use the mouse, even though I consider myself a mostly keyboard kinda guy). So far, though, just about everything seems to be working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-5405148816066308905?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/5405148816066308905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2011/06/back-to-terminal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/5405148816066308905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/5405148816066308905'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2011/06/back-to-terminal.html' title='Back to the Terminal'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-6476257765813544472</id><published>2011-02-10T17:49:00.000-08:00</published><updated>2011-02-10T17:59:11.346-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='term'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Proper (Ansi-)Term Yank/Paste</title><content type='html'>So, I've found myself using ansi-term quite a bit, including to run finch for my instant messaging needs. However, there's one main issue with which I found myself becoming frustrated: yanking (aka pasting).&lt;br /&gt;&lt;br /&gt;Ansi-term has two "mode": line and char. One acts as a terminal would (e.g. the up arrow will scroll through the output, as in scrolling through a call to `less`), and the other acts as an emacs buffer. The default is to be in the former, which sort of traps the cursor (mostly correctly), since no raw cursor movement commands are sent to the terminal just because you click elsewhere in the buffer.&lt;br /&gt;&lt;br /&gt;This becomes mostly frustrating because it keeps yank from working properly. For example, if I wish to copy/paste a url into an instant message to a friend using finch inside ansi-term, the paste part doesn't work unless I enter the second ansi-term "mode". However, this makes the buffer not treat anything as special (i.e. window bounds, text areas, etc) and can wreak havoc on the message I'm trying to send. &lt;br /&gt;&lt;br /&gt;For this reason, I wrote a quick little function that allows me to yank text into a terminal properly without switch modes. I present to you, my-term-paste:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defun my-term-paste (&amp;optional string)&lt;br /&gt;  (interactive)&lt;br /&gt;  (process-send-string&lt;br /&gt;   (get-buffer-process (current-buffer))&lt;br /&gt;   (if string string (current-kill 0))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Basically all this does is send the current copied text (current-kill 0) to the terminal using process-send-string which sends it as raw terminal input, as if I had manually typed each letter. The result? I can copy some text, for instance a url from Chrome, then focus my ansi-term and run (my-term-paste) to paste the copied text properly into the buffer. Very handy for those who use terminal modes in emacs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-6476257765813544472?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/6476257765813544472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2011/02/proper-ansi-term-yankpaste.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/6476257765813544472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/6476257765813544472'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2011/02/proper-ansi-term-yankpaste.html' title='Proper (Ansi-)Term Yank/Paste'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-8513170560388071387</id><published>2010-11-10T20:30:00.000-08:00</published><updated>2010-11-10T20:31:29.216-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><category scheme='http://www.blogger.com/atom/ns#' term='awesome'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Maps in Emacs</title><content type='html'>&lt;a href="http://julien.danjou.info/google-maps-el.html" target="_blank"&gt;Awesome.&lt;/a&gt; 'nuff said...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-8513170560388071387?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/8513170560388071387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2010/11/google-maps-in-emacs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/8513170560388071387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/8513170560388071387'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2010/11/google-maps-in-emacs.html' title='Google Maps in Emacs'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-1105448475549849254</id><published>2010-10-25T07:30:00.000-07:00</published><updated>2010-10-25T07:34:01.060-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Bring out your dead!</title><content type='html'>I'm not dead. Honest.&lt;br /&gt;&lt;br /&gt;I've just been really busy with a lot of things. I hadn't posted here in a while, so I thought I'd at least let you all know that I haven't stopped. In fact, I been spending a lot of time working on a new suite for emacs that makes it a lot better for programming in PHP, especially (but not necessarily) if you use the Zend Framework.&lt;br /&gt;&lt;br /&gt;I've still got some tweaks and testing to do, but I'm really excited about this. Trust me, when I have something I feel comfortable releasing, I will post about it here.&lt;br /&gt;&lt;br /&gt;Until then, sorry for the lack of posts or updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-1105448475549849254?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/1105448475549849254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2010/10/bring-out-your-dead.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1105448475549849254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1105448475549849254'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2010/10/bring-out-your-dead.html' title='Bring out your dead!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-2556221577602507489</id><published>2010-05-24T11:27:00.001-07:00</published><updated>2010-05-24T11:29:15.339-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comment'/><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><category scheme='http://www.blogger.com/atom/ns#' term='moderation'/><title type='text'>Comment Moderation</title><content type='html'>Well folks, I don't get many comments, but I do get quite a few spam comments (which I try to promptly delete). I have therefore enabled comment moderation. Please, still feel free to comment on posts, but know that the comment will not show up immediately anymore.&lt;br /&gt;&lt;br /&gt;It saddens me that I have to do this, but at this point its less work adding proper comments than deleting spam comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-2556221577602507489?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/2556221577602507489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2010/05/comment-moderation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/2556221577602507489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/2556221577602507489'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2010/05/comment-moderation.html' title='Comment Moderation'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-3849559309137324177</id><published>2010-05-11T15:04:00.000-07:00</published><updated>2010-05-11T15:11:08.005-07:00</updated><title type='text'>I'm Slowly Getting ORGanized</title><content type='html'>I've found myself using ORG mode a LOT lately, mostly at work. I'm really come to like it, and it has basically because my todo list for work. Of all the useful features ORG has, there is one that I never learned about until recently: links. I'm sure I should have known about these long ago, but for some reason I didn't.&lt;br /&gt;&lt;br /&gt;Anyway, links are just what the name implies: clickable links to other places (though, the mouse is not necessary). This can be to a url, a file, or even a specific place in a file (i.e. line number, certain word, etc). I find this extremely useful as a programmer.&lt;br /&gt;&lt;br /&gt;For example, I find a bug in a program. I place a TODO item in my org document to fix the bug. Inside the description, I can then place a link to the file where the code to be fixed is, or more specifically, I can link it to an exact function/method or even line number! Then, when I get around to that TODO item, I simply activate the link, and the file loads up, ready to fix!&lt;br /&gt;&lt;br /&gt;There is one small caveat though. By default, org will open the file in a different window. Some might like this, but I have one main window in my emacs frame that is for working in (org files, source code, etc). So, when I've viewing my org document and activate a link, I want the file to load in that same window. A quick Google search revealed a simple fix for this: customize the variable `org-link-frame-setup` and change `file` to use the function `find-file` instead of `find-file-other-window`. Easy enough!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-3849559309137324177?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/3849559309137324177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2010/05/im-slowly-getting-organized.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/3849559309137324177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/3849559309137324177'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2010/05/im-slowly-getting-organized.html' title='I&apos;m Slowly Getting ORGanized'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-3529123540079663159</id><published>2010-03-30T14:17:00.000-07:00</published><updated>2010-03-30T14:43:58.646-07:00</updated><title type='text'>Robust Startup</title><content type='html'>I've spent quite a bit of time working on my start-up files for emacs. Maybe its my OCD, but I want them as clean as possible (using customize and the &lt;a href="http://tromey.com/elpa/"&gt;ELPA&lt;/a&gt; helps) and I want as few annoyances as possible.&lt;br /&gt;&lt;br /&gt;One thing that really annoys me is when I take my .emacs to a different computer or emacs installation, emacs tends to complain about missing libraries and such. Then it just stops loading the rest of the .emacs file and often I'm stuck with default emacs, which defeats the purpose of me using the .emacs file at all. The way I see it, if a library doesn't load, go ahead and let me know, but continue on, because the next might load just fine!&lt;br /&gt;&lt;br /&gt;That's why I wrote the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(let ((invalid-packages '())&lt;br /&gt;      (invalid-found nil))&lt;br /&gt;  (dolist (package-to-load packages-to-load)&lt;br /&gt;    (condition-case nil&lt;br /&gt;        (progn &lt;br /&gt;          (require (intern (car package-to-load)))&lt;br /&gt;          (if (cdr package-to-load)&lt;br /&gt;              (mapcar 'eval (cdr package-to-load))))&lt;br /&gt;      (error&lt;br /&gt;       (setq invalid-found t)&lt;br /&gt;       (setq invalid-packages (push (car package-to-load) invalid-packages)))))&lt;br /&gt;  (if invalid-found&lt;br /&gt;      (progn&lt;br /&gt;        (get-buffer-create "*invalid-packages*")&lt;br /&gt;        (switch-to-buffer "*invalid-packages*")&lt;br /&gt;        (let ((package-names ""))&lt;br /&gt;          (dolist (package-name invalid-packages)&lt;br /&gt;            (setq package-names (concat package-names package-name ", ")))&lt;br /&gt;          (setq package-names (substring package-names 0 -2))&lt;br /&gt;          (insert (concat "These packages were not loaded: " package-names "\n"))))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I have this just before the Custom section of my .emacs file. This will take a variable called &lt;pre&gt;packages-to-load&lt;/pre&gt; and load the libraries it references. It also will run any extra commands for a library (like turning on a mode). The defined variable looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(setq packages-to-load &lt;br /&gt;      '(("my-setup-emacs")&lt;br /&gt;        ("my-funcs" &lt;br /&gt;         (load-library "my-keymap"))&lt;br /&gt;        ("hideshow")&lt;br /&gt;        ("revive")&lt;br /&gt;        ("uniquify")&lt;br /&gt;        ("window-number")&lt;br /&gt;        ("ido" &lt;br /&gt;         (ido-mode)&lt;br /&gt;         (icomplete-mode 99))&lt;br /&gt;        ("smex-autoloads" &lt;br /&gt;         (smex-initialize))&lt;br /&gt;        ("org" &lt;br /&gt;         (setq org-directory "~/Documents/org")&lt;br /&gt;         (add-hook 'org-mode-hook&lt;br /&gt;                   (lambda ()&lt;br /&gt;                     (auto-fill-mode t))))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Notice I'm loading several libraries (ido, smex, my own my-setup, etc) and that some of them after post-load configurations. Ido, for instance, gets turned on and icomplete-mode gets set to 99.&lt;br /&gt;&lt;br /&gt;Now, so far nothing is different than the standard "require package, run config". However, the difference comes when a package fails to load or an initialization fails to execute. Instead of completely stopping the execution of .emacs, the emacs stores the name of the library in a variable, then if any libraries failed by the time execution is done, a buffer called *invalid-packages* is created to tell you which libraries did not load. This way, all possible libraries will load, even if one fails.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;Another change I've made to my .emacs is setting the load path. Its easy enough to just set each directory and sub-directory, but I found this ugly and annoying, especially when I have to load, for instance, ~/.emacs.d/org/lisp and ~/.emacs.d/org/contrib/lisp. The following code lets me just add paths to (or remove paths from) a list that will be added to the load path (relative to the given elisp directory). It makes more sense when you see/use it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;; adds the elisp directories to the load path if they are existing directories&lt;br /&gt;; and not already in the load path&lt;br /&gt;(let ((el-dir (file-name-as-directory "~/.emacs.d"))&lt;br /&gt;      (el-subdirs (list "jira"&lt;br /&gt;                        "mmm-mode" &lt;br /&gt;                        "org-6.34c/lisp"&lt;br /&gt;                        "org-6.34c/contrib/lisp"&lt;br /&gt;                        "php")))&lt;br /&gt;  (setq load-path (cons el-dir load-path))&lt;br /&gt;  (dolist (subdir el-subdirs)&lt;br /&gt;    (setq dir-to-load (file-name-as-directory (concat el-dir subdir)))&lt;br /&gt;    (if (file-directory-p dir-to-load)&lt;br /&gt;        (unless (member dir-to-load load-path)&lt;br /&gt;          (setq load-path (cons dir-to-load load-path))))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Adding a sub-directory (for instance, ~/.emacs.d/mypackage) is as simple as adding "mypackage" to the el-subdirs list and executing the code. The code checks to make sure it doesn't place duplicates in the load-path, so running this several times will not infinitely increase the size of the load-path with paths that are already a part of the string. Also, this code checks to make sure that the sub-directory actually exists. If it doesn't , once again, emacs doesn't complain and stop executing, it just skips it and goes along its merry way.&lt;br /&gt;&lt;br /&gt;I'm working on a nice way to be able to remove sub-directories from the list, execute the code, and have them removed from the load-path. I can think of a few ways, I just have to figure out which is most elegant.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;A couple of other side notes:&lt;br /&gt;&lt;br /&gt;I always have toolbars and scrollbars turned off. This can cause a problem when running emacs in a terminal. The following code takes care of that:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;; get rid of scroll bars and menus&lt;br /&gt;; check for each function because window-system doesn't seem to work in macosx&lt;br /&gt;(if (fboundp 'toggle-scroll-bar)&lt;br /&gt;    (toggle-scroll-bar nil))&lt;br /&gt;(if (fboundp 'tool-bar-mode)&lt;br /&gt;    (tool-bar-mode 0))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you use ELPA like I do, they standard code they give you to place in .emacs references a particular file. If this file exists, once again, emacs complains. Wrapping this in a statement that checks for the existence of the file solves this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(let ((elpa-dir "~/.emacs.d/elpa/package.el"))&lt;br /&gt;  (if (file-exists-p elpa-dir)&lt;br /&gt;      (when&lt;br /&gt;          (load&lt;br /&gt;           (expand-file-name "~/.emacs.d/elpa/package.el"))&lt;br /&gt;        (package-initialize))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;&lt;br /&gt;Well, that all I've got for now. Stay tuned for more, and as always feel free to comment!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-3529123540079663159?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/3529123540079663159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2010/03/robust-startup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/3529123540079663159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/3529123540079663159'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2010/03/robust-startup.html' title='Robust Startup'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-1647647315338943295</id><published>2009-12-21T14:49:00.000-08:00</published><updated>2009-12-21T15:11:42.497-08:00</updated><title type='text'>Seek and Hide</title><content type='html'>Recently I've found myself using &lt;a href="http://www.emacswiki.org/emacs/HideShow"&gt;HideShow&lt;/a&gt; more. Its a package that makes it easy to hide or show blocks of code. However, I found it a bit lacking in a particular manner. I wanted to be able to hide all PHP doc blocks and the contents of all methods in a class. There's no one command in HideShow to do this, so I wrote my own (and then added it to my php-mode hook). Here's the code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defun hide-class-contents ()&lt;br /&gt;  (interactive)&lt;br /&gt;  (save-excursion&lt;br /&gt;    (beginning-of-buffer)&lt;br /&gt;    (while (re-search-forward "[ \t]+{\\|/\\*\\*" nil t)&lt;br /&gt;      (hs-hide-block)&lt;br /&gt;      (move-end-of-line nil))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To really get a feel for what this function does, get HideShow and use it a bit, then use my function. You'll see that HideShow can do a "hide all", but in a class that simply hides everything in the class. You can do a "hide level" inside a class, but that will hide all the function's contents, but not the doc blocks. It also *will* hide the arguments to a function if they are on multiple lines. My function is, in my opinion and for my usage at least, cleaner and more exact in what i want to hide (or not hide) when first opening a php code file.&lt;br /&gt;&lt;br /&gt;You might notice that in the regexp, I search for opening curly braces with at least one space or tab in front. I do this to bypass the opening class brace, since hiding that will hide everything in the class. Of course, this regexp can be change to meet your coding style. I put my class and function opening curly braces on the line below the definition, like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class SomeClass &lt;br /&gt;{&lt;br /&gt;    function someFunction()&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you code like this instead (which I used to):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class SomeClass {&lt;br /&gt;    function someFunction() {&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;you can change the regexp to search for something like &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"\\(function\\)[ \t.]+{|/\\*\\*"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I haven't tested this, but it gives you an idea for a starting point, at least. Don't take it as a copy/paste, as its probably wrong.&lt;br /&gt;&lt;br /&gt;Of course, there's nothing saying this only for PHP, as HideShow is generic. I find this function useful and hope others will too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-1647647315338943295?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/1647647315338943295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/12/seek-and-hide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1647647315338943295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1647647315338943295'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/12/seek-and-hide.html' title='Seek and Hide'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-7450891987868664203</id><published>2009-11-27T05:34:00.000-08:00</published><updated>2009-11-27T05:40:15.529-08:00</updated><title type='text'>Version Control Conundrum</title><content type='html'>Ok, so its not really a conundrum, so much as a simple question.&lt;br /&gt;&lt;br /&gt;Recently, I've found myself using emacs to program both on my MacBook at home, as well as my Gentoo Linux box at work. I've noticed that when I make changes to my .emacs file, add a .el file to my .emacs.d, etc. on one machine, I manually make the same changes to the other. This had made me begin thinking about putting my .emacs and .emacs.d into version control, probably either svn or git, though I'm open to others.&lt;br /&gt;&lt;br /&gt;My question to you all is: should I just set up my own at home (on my &lt;7MB cable connection) or are there any free version control services out there any of you would recommend? I want my data safe and secure, not shared unless I share it, and up when I need it to be.&lt;br /&gt;&lt;br /&gt;Happy belated Thanksgiving (to all who celebrate it), and I hope the shoppers among you survive this Black Friday!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-7450891987868664203?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/7450891987868664203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/11/version-control-conundrum.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/7450891987868664203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/7450891987868664203'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/11/version-control-conundrum.html' title='Version Control Conundrum'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-5218495015357359318</id><published>2009-10-12T14:30:00.000-07:00</published><updated>2009-10-12T14:32:53.790-07:00</updated><title type='text'>jira-mode 0.3.3 available!</title><content type='html'>I have uploaded the latest version of jira-mode (0.3.3) to &lt;a href="http://www.emacswiki.org"&gt;Emacs Wiki&lt;/a&gt;. Information about jira-mode, including the newest features, can be found &lt;a href="http://www.emacswiki.org/emacs/JiraMode"&gt;here&lt;/a&gt;. The source can be downloaded &lt;a href="http://www.emacswiki.org/emacs/jira.el"&gt;here&lt;/a&gt;. Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-5218495015357359318?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/5218495015357359318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/10/jira-mode-033-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/5218495015357359318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/5218495015357359318'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/10/jira-mode-033-available.html' title='jira-mode 0.3.3 available!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-3943993145435880341</id><published>2009-09-25T20:25:00.000-07:00</published><updated>2009-09-25T20:38:13.427-07:00</updated><title type='text'>Oh yeah.... its a text editor!</title><content type='html'>First off, so much for trying to have weekly posts. Sorry for slacking so bad. It's a fail on my end.&lt;br /&gt;&lt;br /&gt;However, my lack of anything to post got me thinking. The reason I haven't posted is because I haven't really been doing anything that interesting, different, or in the spirit of learning and exploration as far as Emacs is concerned. I just haven't been playing with it. Instead, I've found myself simply using it, mostly for work. No playing around, no trying out new elisp files or functions, no new customizing.&lt;br /&gt;&lt;br /&gt;This has been good for me, though, as its helped remind me of something that I was definitely taking for granted and almost forgetting altogether: Emacs is a text editor. It's so easy to get caught up in the fun of using Emacs as an email client, or a web browser, or a twitter client, or lots of other things and have the very base function of Emacs become overshadowed by all the extensions available.&lt;br /&gt;&lt;br /&gt;Yes, Emacs can do lots of things (dare I say, almost anything). It even does a lot of these things extremely well (others, though, not so much). Let us not forget, though, that Emacs is, first and foremost, a really, really good text editor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-3943993145435880341?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/3943993145435880341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/09/oh-yeah-its-text-editor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/3943993145435880341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/3943993145435880341'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/09/oh-yeah-its-text-editor.html' title='Oh yeah.... its a text editor!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-1905386690682100664</id><published>2009-08-18T14:21:00.000-07:00</published><updated>2009-08-19T07:02:39.000-07:00</updated><title type='text'>Let's Tag and Load!</title><content type='html'>Not too long ago, I learned the wonders of using tags for programming projects, in my case, PHP applications. I read &lt;a href="http://weierophinney.net/matthew/archives/134-exuberant-ctags-with-PHP-in-Vim.html"&gt;an article&lt;/a&gt; (geared towards VIM, actually) that talked about tags and how they can be used for completion, reference, etc. I was intrigued and looked into using tags for Emacs.&lt;br /&gt;&lt;br /&gt;Before I knew it, I had tagged a project and was able to auto-complete function and variable names and could even jump to a function definition if I forgot its arguments or just needed to see its code! Very handy. However, I realized that every time I switched projects, I had to load the correct tags file. Sometimes I forgot and still have the tags for the other project loaded. Also, it was a pain having to manually load a tags file every time I switched projects. Sure, I could have one big tags file for all projects, but what if I have the same function name in both? Plus, that just seems like a waste of resources.&lt;br /&gt;&lt;br /&gt;That prompted me to look for a way to auto-load the correct tags for a given buffer or file. I didn't really find any solutions, though I did find bits of code and script that helped me write my own. I figured I'd share this with you all so you can use or improve it.&lt;br /&gt;&lt;br /&gt;First of all, I keep all my tags in one location, specifically a folder named "tags". I name them whatever the project is called. So inside "tags" I might have, for example, "app1", "myproject", "phpgame", etc. (All fake names, of course). I modified the linux script I got from the article above to make my tags: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;exec exuberant-ctags -e -f /path/to/tags/$1 \&lt;br /&gt;-h ".php" -R \&lt;br /&gt;--exclude="\.svn" \&lt;br /&gt;--totals=yes \&lt;br /&gt;--tag-relative=yes \&lt;br /&gt;--PHP-kinds=+cf \&lt;br /&gt;--regex-PHP='/abstract class ([^ ]*)/\1/c/' \&lt;br /&gt;--regex-PHP='/interface ([^ ]*)/\1/c/' \&lt;br /&gt;--regex-PHP='/(public |static |abstract |protected |private )+function ([^ (]*)/\2/f/'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This script will also work on Mac OS X. Windows users: sorry, you'll have to make your tags another way. You can modify this script to suit your own needs. Make sure you have exuberant-ctags installed (I don't use the etags that comes with Emacs) and check the documentation for how to change the script.&lt;br /&gt;&lt;br /&gt;I named the script "tag-php". This script takes one argument: the tag file name to create. You go to to the top directory of the project in a terminal, and run: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ tag-php tag-file-name&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Next, I needed a way to get Emacs to load the tags for a buffer or file when I open it. That way, I'll always have the right tags for the file/buffer I'm current working on. In order for that to work, I wrote this bit of code in my .emacs file:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(setq tags-directory "/path/to/tags/")&lt;br /&gt;(setq tag-list &lt;br /&gt;  (list&lt;br /&gt;   (cons '"/path/to/project1" (concat tags-directory "tags1"))&lt;br /&gt;   (cons '"/path/to/project2" (concat tags-directory "tags2"))))&lt;br /&gt;&lt;br /&gt;(defun load-tags ()&lt;br /&gt;  (interactive)&lt;br /&gt;  (if (buffer-file-name)&lt;br /&gt;      (progn&lt;br /&gt;        (dolist (tag-cons tag-list)&lt;br /&gt;          (if (string-match (regexp-quote (car tag-cons)) (buffer-file-name))&lt;br /&gt;              (progn&lt;br /&gt;                (if (not (equal tags-file-name (cdr tag-cons)))&lt;br /&gt;                  (progn&lt;br /&gt;                    (message (concat "loading tags" (cdr tag-cons)))&lt;br /&gt;                    (setq tags-file-name nil)&lt;br /&gt;                    (setq tags-table-list nil)&lt;br /&gt;                    (visit-tags-table (cdr tag-cons))))))))))&lt;br /&gt;&lt;br /&gt;(defun switch-to-buffer-and-load-tags ()&lt;br /&gt;  (interactive)&lt;br /&gt;  (ido-switch-buffer)&lt;br /&gt;  (load-tags))&lt;br /&gt;&lt;br /&gt;(add-hook 'find-file-hook 'load-tags)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;***&lt;br /&gt;Note that I typically only work on one file/buffer at a time, and only change to another via switching buffers or opening files. I never have two windows or frames with code open. That's why I only have the function running when I switch buffers or find a file. This function could probably be set to run when switching windows or frames, but I haven't tried it.&lt;br /&gt;***&lt;br /&gt;&lt;br /&gt;Anyway, the last line hooks the "load-tags" function to "find-file" so tags are loaded whenever a files is opened. The function above that is a custom buffer switching function. Since I use &lt;a href="http://www.emacswiki.org/emacs/InteractivelyDoThings"&gt;ido-mode&lt;/a&gt; and couldn't find an hook that would work (like the find-file-hook does), I wrote the function "switch-to-buffer-and-load-tags" and rebound the normal "C-x b" to perform that function instead:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(global-set-key "\C-xb" 'switch-to-buffer-and-load-tags)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Obviously, the "tags-directory" variable needs to be set to the path where the tag files are located. The "tag-list" variable is a list that associates project directories with their tag file. Just fill them in appropriately.&lt;br /&gt;&lt;br /&gt;What happens here is that when I switch buffers or open files, load-tags looks to see if the directory of the buffer/file is one of the directories in "tag-list". If so, it loads the appropriate tags file, overwriting the previously loaded one so you don't waste resources.&lt;br /&gt;&lt;br /&gt;Ok. You've got your tags file. You've got your directories and projects all set up in your .emacs file. You've loaded a file and the tags were automatically loaded. Now what?&lt;br /&gt;&lt;br /&gt;The two main uses I get from tags are completion and reference. For this, Emacs actually has two built-in commands: "complete-tag" and "find-tag". I bind these to keys:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(global-set-key "\C-cj" 'find-tag)&lt;br /&gt;(global-set-key [(control tab)] 'complete-tag)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;When typing a function or variable name, "complete-tag" will attempt to complete the name. Simple enough. &lt;br /&gt;&lt;br /&gt;However, "find-tag" is an interesting function. Let's say I define a function in a file. Then, in another file, I am using that function. If I put the point somewhere on the function name and call "find-tag" (which takes one argument: a tag name, in this case a function, and will default to whatever is under the point), Emacs will actually load the file where the function is defined, and put focus at the definition. &lt;br /&gt;&lt;br /&gt;Its difficult to describe it in writing, so just go try it out! Its really neat and very handy. It's not perfect, mind you. I do suggest reading &lt;a href="http://www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html#Tags"&gt;what the GNU Emacs Manual has to say about using tags in Emacs&lt;/a&gt;. There are more functions that I haven't covered (because I rarely make use of them).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-1905386690682100664?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/1905386690682100664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/08/lets-tag-and-load.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1905386690682100664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1905386690682100664'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/08/lets-tag-and-load.html' title='Let&apos;s Tag and Load!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-7882359188728419880</id><published>2009-08-04T07:32:00.000-07:00</published><updated>2009-08-04T07:38:36.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QandA dired'/><title type='text'>Q&amp;A: To dired or Not To dired</title><content type='html'>Ok, emacs community, it's Q&amp;A time. I ask the question, and you answer!&lt;br /&gt;&lt;br /&gt;Q: It seems everywhere I look, I keep seeing people discussing dired: irc, forums, blogs, etc. I don't use dired, as I don't really see its purpose when I have a perfectly good terminal (both inside and outside of emacs). Do you use dired? If so/not, why/why not? Looking for insight here folks.&lt;br /&gt;&lt;br /&gt;Keep in mind, I'm not looking to be swayed one way or the other, so please don't try. I just want to know what other people think of dired, how they find it useful (or not), how they use it to GTD, etc. Opinions, examples, anecdotes, references, etc. are all welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-7882359188728419880?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/7882359188728419880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/08/q-to-dired-or-not-to-dired.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/7882359188728419880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/7882359188728419880'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/08/q-to-dired-or-not-to-dired.html' title='Q&amp;A: To dired or Not To dired'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-328492558143538766</id><published>2009-07-10T09:42:00.000-07:00</published><updated>2009-07-10T09:51:41.584-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jira'/><title type='text'>jira-mode pt. 2</title><content type='html'>Well, folks, you asked and I'm delivering! I've creating a page on EmacsWiki for &lt;a href="http://www.emacswiki.org/emacs/JiraMode"&gt;jira-mode&lt;/a&gt;. There you will find information, instructions, and a link to the source code!&lt;br /&gt;&lt;br /&gt;Many thanks go to Dave Benjamin, who first wrote jira.el and has allowed me to improve it and, basically, take over the project code and wiki page.&lt;br /&gt;&lt;br /&gt;A bit of a bad news, though. As stated in the known issues section of the wiki page, XMLRPC (which jira-mode uses) does not support all functions, for instance, resolving tickets or changing status. There is nothing I can do about this. Therefore, as long as jira-mode uses XMLRPC, these abilities will never be available.&lt;br /&gt;&lt;br /&gt;However, many other functions are there, and are quite usable and just a keystroke away! I figure I spend more time working on tickets (i.e. creating, commenting, assigning, etc.) than closing them anyway, so jira-mode still has some use.&lt;br /&gt;&lt;br /&gt;So, please, check it out and let me know what you think! If anyone wants to improve on it, let me know as I am definitely interested. Also, if anyone wants to convert jira-mode to use SOAP instead of XMLRPC, by all means do! Supposedly, Jira allows SOAP access to the functions that XMLRPC can not perform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-328492558143538766?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/328492558143538766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/07/jira-mode-pt-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/328492558143538766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/328492558143538766'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/07/jira-mode-pt-2.html' title='jira-mode pt. 2'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-331749623560225665</id><published>2009-06-30T20:23:00.000-07:00</published><updated>2009-06-30T21:35:51.251-07:00</updated><title type='text'>I Got This (key)Board On Lockdown</title><content type='html'>The longer I use emacs, I find myself sticking to my keyboard's home row. Even in my pre-emacs days I was already starting to ignore my mouse, but these days if I can't do something without mostly remaining on "asdf" and "jkl;", I either find a way, create a way, or (rarely) learn to deal with it (and/or try to avoid it). That is not just for emacs either. Other programs, even my tiling window manager, are all used mostly by keyboard. As you can imagine, I've learned a lot of keyboard shortcuts.&lt;br /&gt;&lt;br /&gt;As a side note (but not a tangent, I promise!), one of the things I like about vi and vim (yeah, yeah, boo, hiss, etc.) is its use of h, j, k, and l for movement. (I don't like having to switch modes to do so, however, which requires leaving the home row to press escape [though I have read of techniques to set, for instance, 'jj' or 'jk' (typed really fast) to the same as escape for going from insert mode back to visual mode], but that's getting into tangent land, so I digress.) I like using these keys for movement because it allows me to stay on the home row and not have to move my hands to the arrow keys. While I have thought about what emacs would be like if its movement keybindings were closer to vi's (i.e. C-j instead of C-n for next-line), I've become quite accustomed to using emacs' defaults for moving around.&lt;br /&gt;&lt;br /&gt;This, of course, sometimes requires extended and extensive holding down of the control key. This is also true when doing something like cutting/pasting lines and moving. For instance, to switch two lines of text, I have to go to the beginning of the first line then press: C-k, C-n, C-y. Of course, I don't actually press control three times, since I (improperly, I think) use only my left hand for control. I hold down control and press k, n, y, then release. While this small, three command example is no problem, sometimes I do major editing which requires holding down the control key for quite some time. This can be uncomfortable, problematic, and lead to the infamous &lt;a href="http://en.wikipedia.org/wiki/Emacs#Emacs_Pinky"&gt;emacs pinky&lt;/a&gt;, even if &lt;a href="http://www.emacswiki.org/emacs/MovingTheCtrlKey"&gt;using caps lock as a control key&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Certain that someone else has found this a hassle and done something about it, I looked around and found &lt;a href="http://www.emacswiki.org/emacs/ControlLock"&gt;control-lock&lt;/a&gt;. It works much like caps lock: you turn it on (with C-z) then all keys pressed are interpreted as if control is being pressed. So, instead of pressing C-n ten times to move down ten lines (I know, I know, prefix arguments and all that... this is just an example!), I can simply press C-z, then press (or hold down) n. Pressing z, which translates into C-z, exits control-lock.&lt;br /&gt;&lt;br /&gt;I have to say, I have found control-lock extremely helpful mostly when editing a file. Typically, when I'm writing or coding, I don't do much that requires the control key except deleting a few characters and slight cursor movement. It's when I'm going back and editing that I use a lot of control commands back-to-back. That is where control-lock comes in very handy. It saves time, effort, and discomfort. I highly recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-331749623560225665?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/331749623560225665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/06/i-got-this-keyboard-on-lockdown.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/331749623560225665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/331749623560225665'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/06/i-got-this-keyboard-on-lockdown.html' title='I Got This (key)Board On Lockdown'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-7213122967390419344</id><published>2009-06-25T16:13:00.000-07:00</published><updated>2009-07-03T08:37:03.662-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jira'/><title type='text'>jira-mode pt. 1</title><content type='html'>Well, folks, it's been only a matter of time. I've begun working on my first major mode project. Where I work we use &lt;a href="http://www.atlassian.com/software/jira/"&gt;Jira&lt;/a&gt; for bug tracking, ticketing, and support requests. Naturally, like any obsessed emacs user, I found myself wondering "how can I work with Jira without leaving emacs?" Of course, the first obvious answer was to use the Jira web interface via the w3m web browser in emacs. However, not everything worked.&lt;br /&gt;&lt;br /&gt;So, I did what I always do in situations like these: I went to &lt;a href="www.emacswiki.org"&gt;EmacsWiki&lt;/a&gt;. After a quick search I found &lt;a href="http://www.emacswiki.org/emacs/jira.el"&gt;jira.el&lt;/a&gt;, an elisp file for working with Jira via XMLRPC written by Dave Benjamin. I tried it out, and it worked. It is quite incomplete, though. Therefore, I decided to start adding to it.&lt;br /&gt;&lt;br /&gt;For instance, it could get the information for a ticket, but couldn't add comments or even add new tickets. I started adding all this functionality and found myself thinking it would be great to have a jira-mode that I could set in a buffer where I could do things like press "r" to refresh a ticket, "c" to create a new one, etc. I looked around, and noone else seems to have made anything like this, so I decided I would. &lt;br /&gt;&lt;br /&gt;As of now, I have a working mode, with some customizable faces, that can create tickets, refresh tickets, update tickets, list projects, and a few other basic functions. I am adding more and more to jira-mode and will definitely keep an update on it. I will probably re-post it back to EmacsWiki at some point. For now, I just want to get it useable and practical.&lt;br /&gt;&lt;br /&gt;That said, I have to say, its incredibly easier to write a major mode than I had anticipated. Of course, the more complicated the application, the more complicated the mode will be to write. I'm rather pleased with what I've done so far and, as I've said, will post updates about jira-mode here as I make more breakthroughs. &lt;br /&gt;&lt;br /&gt;So, keep an eye out for pt. 2!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-7213122967390419344?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/7213122967390419344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/06/jira-mode-pt-1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/7213122967390419344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/7213122967390419344'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/06/jira-mode-pt-1.html' title='jira-mode pt. 1'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-8171344250095511070</id><published>2009-06-16T16:13:00.000-07:00</published><updated>2009-06-16T16:46:46.135-07:00</updated><title type='text'>Buffers and Windows and Frames, Oh My!</title><content type='html'>One thing that I really like about emacs is how it manages open files (buffers) and the diversity one has in customizing the workspace. Of course, I didn't always like it. It took some getting used to, but after not that long of a time frame I got the hang of it and started to enjoy it. Soon after that, I started customizing my emacs workspace to be even more efficient and productive for me.&lt;br /&gt;&lt;br /&gt;One thing I've found is that I really like to see everything thats going on, if possible. This is why I typically use a tiling window manager (preferably &lt;a href="http://www.nongnu.org/stumpwm/"&gt;StumpWM&lt;/a&gt; or &lt;a href="http://www.nongnu.org/ratpoison/"&gt;Ratpoison&lt;/a&gt;). I also try to avoid using the mouse. This has been the basis for the way I work in emacs and has led to the setup I'm current using. I run lots of processes inside emacs: &lt;a href="http://www.mew.org/"&gt;Mew&lt;/a&gt; for email, &lt;a href="http://www.mew.org/"&gt;elim&lt;/a&gt; for instant messaging, &lt;a href="http://www.busydoingnothing.co.uk/twitter-el/"&gt;twitter.el&lt;/a&gt; for checking Twitter, &lt;a href="http://www.emacswiki.org/emacs/AnsiTerm"&gt;ansi-term&lt;/a&gt; for a terminal, etc. (I'm sure I'll go into more detail on these in later posts). Of course, in order to see all these at once, I have two choices: multiple frames or multiple windows.&lt;br /&gt;&lt;br /&gt;First things first: what emacs calls a "frame" and a "window" is opposite of what just about every other program calls them. For instance, a web browser "window" can be split into multiple "frames" (top heading, menu on the left, copyright footer, content in the middle, etc). A "window" is usually thought of as being one of the windows open in a window manager, complete with maximize, minimize, and close buttons. Emacs is the reverse. When you first open emacs, the "window" that pops up is actually called a "frame". There can be multiple frames open that can be switched between like normal "windows", using Alt-&lt;Tab&gt;. Each of these "frames" can then be split into "windows" of various sizes. Each window can show a different (or the same) buffer: whether its a source code file, a terminal, or a web browser, whatever. &lt;br /&gt;&lt;br /&gt;I think that most people work with mutliple frames and a few windows in some frames. I work with one maximized frame (at my work, this means 1900x1280) split into many windows, and I mean many. My current setup uses 17 different windows inside one emacs frame. &lt;a href="http://sites.google.com/site/bzwahr/emacs-screenshot-1/2009-06-12-100259_1920x1200_scrot.png?attredirects=0"&gt;(Screenshot)&lt;/a&gt; If I has multiple frames, I would have to Alt-&lt;Tab&gt; a bunch of times or use the mouse to switch between the frames. My way, I can use emacs commands to switch between windows in the same frame. The basic command is C-x o (other-window) which basically moves focus to the next window. With 17 windows, that's no better than using Alt-&lt;Tab&gt; as I would have to type C-x o many times, or prefix it with a number of times (i.e. C-u 1 0 C-x o to run other-window 10 times). The latter, of course, requires me to know exactly how many windows are in between where I am and where I want to be.&lt;br /&gt;&lt;br /&gt;This brings me to a very useful mode I have found and was actually brought up in the comments of my last post: &lt;a href="http://www.emacswiki.org/emacs/window-number.el"&gt;window-number-mode&lt;/a&gt;. This is a wonderful minor mode that gives each window in a frame a number (in red in the mode line by default) from the top-left to the bottom-right. You can then use a command (mine is C-x j &lt;number&gt;) to switch directly to the window with number &lt;number&gt;. There is a short version allowing M-&lt;number&gt;, but it has the drawback (for me, anyway) of only taking one digit, meaning it is only useful for 10 or less windows. I suggest window-number-mode to anyone who works with any number of multiple-window frames regularly.&lt;br /&gt;&lt;br /&gt;Somehow, though, 17 windows isn't always enough to show me every buffer I have open! (Ok, granted, I don't always want to see *every* buffer, and of the 17 windows, only one is used for editing/programming). Therefore, I still have to do some buffer switching. The standard C-x b (switch-to-buffer) works fine for a bit, but I found myself wanting to type less and be more efficient. I found several switch-to-buffer modifiers and replacements, and I've come to really enjoy and rely on &lt;a href="http://www.emacswiki.org/emacs/InteractivelyDoThings"&gt;ido-mode&lt;/a&gt;. Ido-mode adds context and matching to switch-to-buffer. Using ido-mode, when I type C-x b, I get (in the echo area) a list of the files in the current directory. I can start typing to filter the list (typing 'ser' would match, for instance, User.php, server.txt, etc.). I can use C-s and C-r to cycle through the currently shown files, so if I type 'ser' and am left with User.php first and server.txt second, I can hit enter to open the first item or type C-s to "slide over" to the second item, and press enter to open it instead. Ido also has "smart matching" (I can't remember what its actually called off hand) meaning I can type U.p and basically get matches for U*.p* (i.e. User.php, Ultimate.perl, etc). One of my favorite features is that, if I want to go back a directory, I only have to type delete once instead of once for each letter in the directory name. Finally, ido-mode works when opening new files, not just switching buffers. Ido offers many other features and commands as well.&lt;br /&gt;&lt;br /&gt;I've heard some people speak ill of ido-mode. Some people prefer iswitchb, others prefer other solutions. Ido-mode works great for me and I really enjoy it. It has definitely made switching buffers much faster, easier, and more efficient for me.&lt;br /&gt;&lt;br /&gt;So, that's a breakdown of how I handle all of the buffers I usually have open in emacs. I hope that it provides some insight into one of many ways of Getting Things Done in emacs, even if my way is (most likely) not a very common practice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-8171344250095511070?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/8171344250095511070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/06/buffers-and-windows-and-frames-oh-my.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/8171344250095511070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/8171344250095511070'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/06/buffers-and-windows-and-frames-oh-my.html' title='Buffers and Windows and Frames, Oh My!'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-1322574271185569619</id><published>2009-05-26T09:55:00.000-07:00</published><updated>2009-05-26T10:12:59.714-07:00</updated><title type='text'>Some Improved Navigation</title><content type='html'>I've added some functions and keybindings to my .emacs file that make navigation quite a bit better for me. Of course, you can bind them to whatever you like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(global-set-key (kbd "C-v") 'my-scroll-up)&lt;br /&gt;(global-set-key (kbd "M-v") 'my-scroll-down)&lt;br /&gt;(global-set-key (kbd "M-n") 'scroll-up-without-moving-point)&lt;br /&gt;(global-set-key (kbd "M-p") 'scroll-down-without-moving-point)&lt;br /&gt;(global-set-key "\C-xp" 'other-window-backwards)&lt;br /&gt;(global-set-key (kbd "C-o") 'open-new-line)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;By default, scroll-up and scroll-down will not move to the bottom or top of the buffer if you are already on the last or first page. This adds that functionality:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defun my-scroll-up ()&lt;br /&gt;  "Scroll unless on last page of buffer, in which case go to end of buffer."&lt;br /&gt;  (interactive)&lt;br /&gt;  (condition-case nil&lt;br /&gt;      (scroll-up)&lt;br /&gt;    (error &lt;br /&gt;     (goto-char (point-max)))))&lt;br /&gt;&lt;br /&gt;(defun my-scroll-down ()&lt;br /&gt;  "Scroll unless on first page of buffer, in which case go to beginning of buffer."&lt;br /&gt;  (interactive)&lt;br /&gt;  (condition-case nil&lt;br /&gt;      (scroll-down)&lt;br /&gt;    (error &lt;br /&gt;     (goto-char (point-min)))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Sometimes its nice to scroll without moving the cursor/point. This can be done easily, I just added it as a function to I could bind it. I realize I could add it as a lambda function directly in the global-set-key call, but I prefer to have it as a separate function.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defun scroll-up-without-moving-point ()&lt;br /&gt;  "Scroll up without moving the cursor/point."&lt;br /&gt;  (interactive)&lt;br /&gt;  (scroll-up 1))&lt;br /&gt;&lt;br /&gt;(defun scroll-down-without-moving-point ()&lt;br /&gt;  "Scroll down without moving the cursor/point."&lt;br /&gt;  (interactive)&lt;br /&gt;  (scroll-down 1))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;other-window is nice, but only for going forwards. This is an easy function for binding going backwards with other-window:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defun other-window-backwards ()&lt;br /&gt;  "Move to the previous window."&lt;br /&gt;  (interactive)&lt;br /&gt;  (other-window -1))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As blasphemous as it might be, I like a little more "vi-like" functionality when I open a new line. Try open-line in the middle of a line, then try this one to get a feel for the differences. Got this one from &lt;a href="http://www.emacswiki.org/emacs/OpenNextLine"&gt;EmacsWiki&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defun open-new-line (arg)&lt;br /&gt;  "Move to the next line and then opens a line. See also `newline-and-indent'."&lt;br /&gt;  (interactive "p")&lt;br /&gt;  (beginning-of-line)&lt;br /&gt;  (open-line arg)&lt;br /&gt;  (when newline-and-indent&lt;br /&gt;    (indent-according-to-mode)))&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-1322574271185569619?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/1322574271185569619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/05/some-improved-navigation.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1322574271185569619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/1322574271185569619'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/05/some-improved-navigation.html' title='Some Improved Navigation'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3610844988855884806.post-2839349485239802037</id><published>2009-05-26T09:17:00.001-07:00</published><updated>2009-05-26T09:36:25.875-07:00</updated><title type='text'>The Journey Begins (sort of...)</title><content type='html'>Welcome to my new blog: Emacs Journey! I'd like to take some time at first to explain what this blog is and will be. (If you care, my personal blog is &lt;a href="http://bzwahr.blogspot.com/"&gt;here&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;In the past couple of years, I have become an avid user of Emacs. I use it mostly at work to code PHP, check mail, instant message, browse the web, and be productive in a number of other ways. One thing I've learned about Emacs is that there is always something new to learn and try. These days, I spend more time on &lt;a href="http://www.emacswiki.org"&gt;EmacsWiki&lt;/a&gt; than I do on &lt;a href="http://www.wikipedia.org"&gt;Wikipedia&lt;/a&gt;, finding new modes, functions, and packages to try out in Emacs.&lt;br /&gt;&lt;br /&gt;What this has lead me to believe is that Emacs is a journey, at least for me. I'm constantly updating my .emacs file and trying out different modes and .el files, and I never cease to be amazed at just how versatile Emacs can be (even the default emacs: check out &lt;a href="http://www.emacswiki.org/emacs/ArtistMode"&gt;artist-mode&lt;/a&gt;!).&lt;br /&gt;&lt;br /&gt;However, I have a terrible memory, so I have decided to start this blog to record my experiences with Emacs for future reference. I invite anyone and everyone to read my posts and share them: new packages and elisp files I've tried, functions and macros I've written, modes I'm using (or not), etc. One caveat: I will be posting things as I discover them, so don't be surprised if one week I post how great some new package is, then the next week post about how I had to fix it or stop using it. Like I said, this is a journey, and I am inviting everyone along!&lt;br /&gt;&lt;br /&gt;The title of this entry says "sort of". This is just my way of reminding that my emacs journey is not beginning now, just the blog I will use to keep track of it. Better late than never, right?&lt;br /&gt;&lt;br /&gt;Finally, here's some generic information about my emacs setup: I run GNU Emacs 22.3.1 on &lt;a href="http://www.gentoo.org"&gt;Gentoo Linux&lt;/a&gt;.  Any and all information posted on this site will pertain to this version only, as I can't guarantee that anything will work on previous or future versions. If I update versions, or have something to say about any other emacs version, I will make sure to clarify it.&lt;br /&gt;&lt;br /&gt;So, off we go into the wild GNU yonder...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3610844988855884806-2839349485239802037?l=emacs-journey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emacs-journey.blogspot.com/feeds/2839349485239802037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://emacs-journey.blogspot.com/2009/05/journey-begins-sort-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/2839349485239802037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3610844988855884806/posts/default/2839349485239802037'/><link rel='alternate' type='text/html' href='http://emacs-journey.blogspot.com/2009/05/journey-begins-sort-of.html' title='The Journey Begins (sort of...)'/><author><name>Brian Zwahr</name><uri>https://profiles.google.com/111299187812335372965</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-G9cmtGHNgg4/AAAAAAAAAAI/AAAAAAAABVg/XPQLU1tZTvs/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
