<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:cc="http://web.resource.org/cc/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>

<channel rdf:about="http://www.littleredbat.net/mk/blog/">
<title>littleredbat/mk: blog</title>
<link>http://www.littleredbat.net/mk/blog/</link>
<description>Matt Keller&#x27;s Blog</description>
<dc:language>en-us</dc:language>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/86/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/85/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/84/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/83/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/82/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/81/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/80/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/79/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/78/" />
  <rdf:li rdf:resource="http://www.littleredbat.net/mk/blog/story/77/" />
 </rdf:Seq>
</items>
</channel>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/86/">
<title>Announce: mk-project 1.5</title>
<link>http://www.littleredbat.net/mk/blog/story/86/</link>
<description>I&#x27;ve just pushed release 1.5.1 of mk-project to github and the emacs wiki . The changes since release 1.4 include ideas and code contributed by Andreas Raster. Here&#x27;s a summary of the improvements:


Previously, a project&#x27;s compile command could only be a string to be interpreted as a shell command (think &#x22;make&#x22;). Now the compile command can also be a Emacs lisp function name. Flexibility is good.
The project-status command now prints the project status to buffer *project-status* instead of *Messages*.
Several commands now have optional arguments which allow them to be called programmatically as well as interactively. The affected commands are project-load, project-grep, and project-ack. So now you can call (project-load &#x22;my-project&#x22;) or (project-grep &#x22;TODO&#x22;) from your own code.
The code will now ignore &#x22;_darcs&#x22; directories if you set the vcs type to &#x27;darcs.
Finally, mk-project now has a menu!




Enjoy!</description>
<dc:date>2010-10-23 11:53:48</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/85/">
<title>Emacs: Custom columns for Ibuffer</title>
<link>http://www.littleredbat.net/mk/blog/story/85/</link>
<description>Emacs 23.2 is out! To celebrate, I&#x27;ll write (yet) another Emacs
post. Please forgive the fact that the content has nothing to do
with version 23.2 in particular (you can read about all new stuff
in the NEWS file (C-h n)).

I&#x27;m very fond of
the Ibuffer
package. It lists all your buffers, and allows you to sort, filter,
and group them as you please. You can operate on multiple buffers by
marking a subset and then calling a command (think &#x22;delete&#x22; or
&#x22;replace-regexp&#x22;). Amazing! Ibuffer&#x27;s got it all.

I was reading Ibuffer&#x27;s source to see if I could add my own
information to the buffer listing. Specifically, I wanted to 
indicate that a file was part of my &#x22;project&#x22; (as defined
by mk-project ). Ibuffer
did not disappoint. It was trivial to create a new custom column with
the define-ibuffer-column macro.

In the &#x22;screenshot&#x22; below, I have a mk-project defined
which includes all the files in my ~/elisp directory. You&#x27;ll see a &#x22;p&#x22;
next to each of these files.



 MR P  Name                                Size Mode             Filename/Process
 ---  ----                                ---- ----             ----------------
[ Default ]
      z.clj                               2210 Clojure          ~/z.clj
      tmp.txt                             2915 Text             ~/tmp.txt
   p  projects.el                         3127 Emacs-Lisp       ~/elisp/projects.el
   p  mk-utils.el                         9968 Emacs-Lisp       ~/elisp/mk-utils.el
   p  basic.el                            7245 Emacs-Lisp       ~/elisp/basic.el
...

   

 In the code below, I create a column
named mk-proj-col , the column heading of which is simply
&#x22;P&#x22;, and if a particular buffer is a part of my project, it will print
&#x22;p&#x22; next to it.



(defun mk/proj-buffer-p (b)
  &#x22;Is the buffer `b&#x27; part of the project?&#x22;
  (and mk-proj-name 
       (or (mk-proj-buffer-p b)
           (string= (buffer-name b) mk-proj-fib-name)
           (string= (buffer-file-name b) mk-proj-tags-file))))

(define-ibuffer-column mk-proj-col
  (:name &#x22;P&#x22;)
  (if (mk/proj-buffer-p buffer) &#x22;p&#x22; &#x22;&#x22;))

;; Define 3 formats, each including the new mk-proj-col
;; column. Switch formats with ibuffer-switch-format (bound to &#x22;`&#x22;).
(setq ibuffer-formats
      &#x27;((mark modified read-only              
              (mk-proj-col 2 2 :left :elide) &#x22; &#x22;
              (name 30 30 :left :elide) &#x22; &#x22;
              (size 9 -1 :right) &#x22; &#x22;
              (mode 16 16 :left :elide) &#x22; &#x22;
              filename-and-process)
        (mark modified read-only
              (mk-proj-col 2 2 :left :elide) &#x22; &#x22;
              (name 45 -1 :left) &#x22; &#x22;
              filename-and-process)
        (mark modified read-only
              (mk-proj-col 2 2 :left :elide) &#x22; &#x22;
              filename-and-process)))



And it was even easier to define a filter command that displays
just the files in my project.


(define-ibuffer-filter project
  &#x22;Toggle current view to buffers in the defined mk-project.&#x22;
  (:description &#x22;mk-project&#x22;)
  (mk/proj-buffer-p buf))

(define-key ibuffer-mode-map (kbd &#x22;/ k&#x22;) &#x27;ibuffer-filter-by-project)


</description>
<dc:date>2010-05-10 20:36:32</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/84/">
<title>Announce: mk-project 1.4.0</title>
<link>http://www.littleredbat.net/mk/blog/story/84/</link>
<description>I&#x27;ve uploaded a new version of mk-project to the usual , places .

Enhancements

project-find-file-ido now displays relative filenames (relative to the project directory) rather than the absolute filenames. This cuts the visual clutter way down.
A brand new project function, project-multi-occur, searches all open project files for a regex using multi-occur.
A message is printed when the project is finished loading.
A new README file provides details of all the configuration options.


Bug Fixes

Now quoting filename arguments used in find commands. Filenames with spaces, for example, now won&#x27;t break the find commands we use to generate TAGS or the index file.


Enjoy!</description>
<dc:date>2010-04-18 19:21:50</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/83/">
<title>Announce: mk-project 1.3.1</title>
<link>http://www.littleredbat.net/mk/blog/story/83/</link>
<description>Version 1.3.1 of mk-project.el
is available from github or the Emacs
Wiki . David Findlay reported that project-grep and project-ack
where running from the project basedir&#x27;s parent directory, not the
project basedir. This behavior was possible on certain
versions of Emacs if the project&#x27;s basedir didn&#x27;t include a
trailing slash -- like this: 



(project-def &#x22;test-project&#x22;
  ((basedir &#x22;/home/me/test-project&#x22;) ; no trailing slash
   ...
   ))



The new version ensures that the trailing slash is appended to
basedir when it is used as the default-directory value.

Thanks much to David for the bug report and helping me test
potential solutions!
</description>
<dc:date>2010-02-10 06:59:26</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/82/">
<title>Announce: mk-project 1.3</title>
<link>http://www.littleredbat.net/mk/blog/story/82/</link>
<description>I&#x27;m pleased to announce the release of version 1.3 of
mk-project .
It offers several new features and a bug fix.

Feature: Custom Find Commands

Mk-project uses a &#x22;find&#x22; command in several scenarios: finding files
to pipe to etags (project-tags), finding files to pipe to
grep (project-grep) and finding files to index (project-index,
project-find-file). Until this release, the find commands used in
these situations where calculated using a combination of
the &#x22;basedir&#x22;, &#x22;src-patterns&#x22;, &#x22;ignore-patterns&#x22; and &#x22;vcs&#x22; project
settings. As nice and simple as this scheme was, there was no way to
customize these find commands for more complicated project
structures. For example, I&#x27;m currently working on a project with a
very large $basedir/thirdparty directory that I do not want to
include in TAGS, grep actions or the project index. With version 1.3,
I can specify custom find commands that will omit the thirdparty
directory:



(project-def &#x22;big-project&#x22;
  `((basedir         &#x22;~/big-project&#x22;)
    (src-patterns    (&#x22;*.java&#x22;))
    (ignore-patterns (&#x22;*.class&#x22;))
    (src-find-cmd    ,(concat &#x22;find ~/big-project \\( -path ~/big-project/thirdparty -prune \\) -o &#x22;
                              &#x22;\\( -type f -name \&#x22;*.java\&#x22; -o -print \\)&#x22;))
    (grep-find-cmd   &#x22;find . -type f | egrep -v thirdparty &#x22;)
    (index-find-cmd  (lambda (context) 
                       (concat &#x22;find ~/big-project &#x22;
                               &#x22;\\( -path ~/big-project/thirdparty -prune \\) -o -print&#x22;)))
    ...))



As you can see, there are 3 new &#x22;-find-cmd&#x22; project settings. The
values can be simple strings specifying a &#x22;find&#x22; command or a
function of 1 argument that returns the find command. The
argument will be &#x27;src, &#x27;grep or &#x27;index as appropriate, which
allows you to write a single function to generate all 3 find
commands if you&#x27;d like.
                                               
Feature: Relative paths in TAGS files

If your tags-file is located in your basedir (directly in the basedir,
not a subdirectory of basedir), the generated TAGS file will now use
relative file names. This makes the TAGS file portable. For example,
if you copied the basedir to a new location, you could copy the TAGS
file to the new directory and it would work without modification.

Feature: Custom ack command name

You can customize the ack-command name for your system. It defaults
to &#x22;ack.pl&#x22; (or &#x22;ack&#x22; on Windows systems).

Bug Fix

Fixed issue #1 : project-ack does not use the &#x22;confirmed&#x22; command.

...

mk-project.el 1.3 is available from
github or
the Emacs Wiki .
</description>
<dc:date>2010-01-30 10:37:42</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/81/">
<title>mk-project.el v1.2.1</title>
<link>http://www.littleredbat.net/mk/blog/story/81/</link>
<description>I&#x27;ve pushed mk-project version 1.2.1 to both the Emacs Wiki and github . It fixes a bug that was preventing mk-project from killing dired buffers open to a project&#x27;s basedir (or a subdirectory of the basedir) when the project was closed (and the user elects to close all project files). You can now also expect dired buffers belonging to the project to be restored when the project is re-opened.

Thanks much to aleblanc@cotse.net for the bug report and code.

For more info on mk-project, see its homepage .</description>
<dc:date>2009-12-16 17:14:18</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/80/">
<title>Switching to Atom from RSS</title>
<link>http://www.littleredbat.net/mk/blog/story/80/</link>
<description>I&#x27;ve added an Atom feed for this
blog that carries complete xHTML content. The old RSS feed carries just simple
text. I&#x27;ll leave the RSS feed in place for the time being, but I
will likely pull the plug on it in the future.

I&#x27;ve also created an Atom feed that carries just my Emacs-related content . This
might be useful for anyone following 
mk-project happenings.

Both feeds should be auto-discoverable by your browser.

--Matt</description>
<dc:date>2009-11-08 11:43:19</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/79/">
<title>etags-update: update TAGS when saving a file</title>
<link>http://www.littleredbat.net/mk/blog/story/79/</link>
<description>Here comes another Emacs post!

I&#x27;ve pushed etags-update to github .  It&#x27;s a global minor mode that updates your TAGS when you save a file. See the README for details.

While we&#x27;re on the subject of TAGS, I recommend etags-select.el which will show a menu of matching tags when you run etags-select-find-tag (which I&#x27;ve bound to M-.). Very handy.</description>
<dc:date>2009-09-28 15:36:29</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/78/">
<title>mk-project.el v1.2 -- ido integration</title>
<link>http://www.littleredbat.net/mk/blog/story/78/</link>
<description>I&#x27;ve pushed version 1.2 of mk-project to github. This version features integration with &#x27;ido&#x27; .

From the commit messages:


New defcustom mk-proj-use-ido-selection enables ido-completing-read in project-load and project-find-file (for multiple matches)
New fn project-find-file-ido allows selection of files using ido methods instead of a regex (as in project-find-file)
Small doc improvements


Download mk-project.el from the EmacsWiki or github .

</description>
<dc:date>2009-09-09 12:24:54</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
<item rdf:about="http://www.littleredbat.net/mk/blog/story/77/">
<title>mk-project.el v1.1: ack support</title>
<link>http://www.littleredbat.net/mk/blog/story/77/</link>
<description>I&#x27;ve pushed version 1.1 of mk-project.el ( homepage ) to github. The library now supports ack which is a cool replacement for the &#x22;find ... | xargs grep ...&#x22; idiom.

Default arguments to ack can be set per-project via the &#x22;ack-args&#x22; directive as seen below:


(project-def &#x22;my-proj&#x22;
      &#x27;((basedir          &#x22;/home/me/my-proj/&#x22;)
        (src-patterns     (&#x22;*.java&#x22; &#x22;*.jsp&#x22;))
        (ignore-patterns  (&#x22;*.class&#x22; &#x22;*.wsdl&#x22;))
        (tags-file        &#x22;/home/me/my-proj/TAGS&#x22;)
        (file-list-cache  &#x22;/home/me/.my-proj-files&#x22;)
        (open-files-cache &#x22;/home/me/.my-proj-open-files&#x22;)
        (vcs              git)
        (compile-cmd      &#x22;ant&#x22;)
        (ack-args         &#x22;--java&#x22;)
        (startup-hook     myproj-startup-hook)
        (shutdown-hook    nil)))


Also new in 1.1, both project-find and project-ack will search from the project&#x27;s basedir by default, but if given a C-u argument, they will search from the current buffer&#x27;s directory.

There are several small bug fixes included since version 1.0.3 as well. See the commit log for details.
</description>
<dc:date>2009-06-11 10:22:51</dc:date>
<cc:license>http://creativecommons.org/licenses/by/2.5/</cc:license>
</item>
</rdf:RDF>




