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

<rss version='2.0'
     xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
    <channel>
        <!-- This XML Feed shows details for the page Emacs Community on LiveJournal -->
        <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/
          </creativeCommons:license>
        <title>Emacs Community on LiveJournal</title>
        <description></description>
        
        <pubDate>Mon, 26 Sep 2005 16:21:12 -0700</pubDate>
        <lastBuildDate>Mon, 26 Sep 2005 18:20:39 -0700</lastBuildDate>
            
        <item>
            <title>emacs logo in svg</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/emacs+logo+in+svg/ccaqm</link>
            <description>&lt;a href=&quot;http://xahlee.org/emacs/emacs_logo.html&quot;&gt;http://xahlee.org/emacs/emacs_logo.html&lt;/a&gt;</description>
            
            <pubDate>Tue, 12 Aug 2008 08:13:06 -0700</pubDate>
        </item>
            
        <item>
            <title>generating sitemap with emacs lisp</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/generating+sitemap+with+emacs+lisp/b84gp</link>
            <description>Here&#039;s a little tutorial on text processing with emacs lisp.&lt;br/&gt;&lt;br/&gt;I want to use elisp to create a sitemap. More specifically, generate a list all files of a given directory including its subdirectories, for each file create a url string in some particualr XML form, and put the whole result into a file with proper header and footer texts.&lt;br/&gt;&lt;br/&gt;HTML version with syntax coloring and links is at: &lt;a href=&quot;http://xahlee.org/emacs/make_sitemap.html&quot;&gt;http://xahlee.org/emacs/make_sitemap.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;livejournal screws up raw html source code so no text version here.&lt;br/&gt;&lt;br/&gt;Also, my emacs and elisp tutorial is now downladable. Download link at bottom of &lt;a href=&quot;http://xahlee.org/emacs/emacs.html&quot;&gt;http://xahlee.org/emacs/emacs.html&lt;/a&gt;</description>
            
            <pubDate>Thu, 03 Jul 2008 04:44:22 -0700</pubDate>
        </item>
            
        <item>
            <title></title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal//b7f59</link>
            <description>Here&#039;s a short tutorial i wrote up today that is a basic collection of Emacs Lisp Idioms.&lt;br/&gt;&lt;br/&gt;The HTML version with links, syntax coloring, is at: &lt;a href=&quot;http://xahlee.org/emacs/elisp_idioms.html&quot;&gt;http://xahlee.org/emacs/elisp_idioms.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The text version follows. Comments, corrections, suggestions welcome.&lt;br/&gt;&lt;br/&gt;(line endings in the following are eaten up by lj)&lt;br/&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;----------------------------- This page collects some basic emacs lisp programing patterns related to text processing.&lt;br/&gt;&lt;br/&gt;This page is grouped into 2 sections: Interactive and Batch. The Interactive section focuses on idioms of writing the type of commands you call when actively editing. For example, looking up the word under cursor in google search, replace certain words in current region, insert XML template, rename a given function in the current programing project, etc. The Batch section focuses on batch style text processing, typically the type of tasks one would do in unix shell tools or Perl. For example, find and replace on a list of given files or dir, run XML validation on a bunch of files.&lt;br/&gt;&lt;br/&gt;The idioms on this page contains only very basic ones, suitable for beginning elisp programer.&lt;br/&gt;&lt;br/&gt;You should first be familiar with basic emacs functions that get cursor position, move cursor, search text, inserting and deleting text. See Elisp Common Functions Reference.&lt;br/&gt;&lt;br/&gt;------------------------------ Interactive Command Idioms&lt;br/&gt;&lt;br/&gt;Grabbing Text&lt;br/&gt;&lt;br/&gt;Grab the text of given beginning position and ending position.&lt;br/&gt;&lt;br/&gt;; get the string from buffer (setq myStr (buffer-substring myStartPos myEndPos)) (setq myStr (buffer-substring-no-properties myStartPos myEndPos))&lt;br/&gt;&lt;br/&gt;Emacs&#039;s string can have properties for the purposes of syntax coloring, active button, hypertext, etc. The “buffer-substring-no-properties” function just return a plain string without these properties. However, most functions that takes string as argument can also accept strings that has properties.&lt;br/&gt;&lt;br/&gt;Reference: Elisp Manual: Buffer-Contents.&lt;br/&gt;&lt;br/&gt;------------------------------&lt;br/&gt;&lt;br/&gt;Grabbing the current word, line, sentence, url, file name etc.&lt;br/&gt;&lt;br/&gt;; grab a thing at point. The “thing” is a semantic unit. It can be a ; word, symbol, line, sentence, filename, url and others.  (setq myStr (thing-at-point &#039;word)) ; grab the current word (setq myStr (thing-at-point &#039;symbol)) ; grab the current word with hyphens or underscore (setq line (thing-at-point &#039;line)) ; grab the current line&lt;br/&gt;&lt;br/&gt;; grab the start and end positions of a line (or any other thing) (setq myBoundaries (bounds-of-thing-at-point &#039;line)) Note that, when the thing is a “symbol”, it usually means any alphanumeric sequence with dash “-” or underscore “_” characters. For example, if you are writing php reference lookup command, and the cursor is on p in “ print_r($y);”, you want to grab the whole “print_r” not just “print”. The exact meaning of symbol depends on the mode&#039;s Syntax Table.&lt;br/&gt;&lt;br/&gt;Reference: Elisp Manual: Syntax-Tables.&lt;br/&gt;&lt;br/&gt;------------------------------ Here&#039;s a example of php reference lookup command that grabs by “symbol”.&lt;br/&gt;&lt;br/&gt;(defun php-lookup () &quot;Look up current word in PHP ref site in a browser.\n If a region is active (a phrase), lookup that phrase.&quot;  (interactive) (let (myword myurl) (setq myword (if (and transient-mark-mode mark-active) (buffer-substring-no-properties (region-beginning) (region-end)) (thing-at-point &#039;symbol))) (setq myurl (concat &quot;&lt;a href=&quot;http://us.php.net/&quot;&gt;http://us.php.net/&lt;/a&gt;&quot; myword)) (browse-url myurl))) Reference: Elisp Manual: Buffer-Contents.&lt;br/&gt;&lt;br/&gt;------------------------------ Grab Between Matching Pairs&lt;br/&gt;&lt;br/&gt;Grab the current text between delimiters such as between angle brackets “&amp;lt;&amp;gt;”, parens “()”, double quotes “&quot;&quot;”, etc.&lt;br/&gt;&lt;br/&gt;(defun select-inside-quotes () &quot;Select text between double straight quotes on each side of cursor.&quot;  (interactive) (let (p1 p2) (skip-chars-backward &quot;^\&quot;&quot;) (setq p1 (point)) (skip-chars-forward &quot;^\&quot;&quot;) (setq p2 (point))&lt;br/&gt;&lt;br/&gt;    (goto-char p1) (push-mark p2) (setq mark-active t) ) )&lt;br/&gt;&lt;br/&gt;------------------------------ Acting on Region&lt;br/&gt;&lt;br/&gt;Idiom for a command that works on the current region.&lt;br/&gt;&lt;br/&gt;Let your function have 2 parameters, such as “start” and “end”, then use “(interactive &quot;r&quot;)”, then the parameters will be filled with beginning and ending positions of the region. Example:&lt;br/&gt;&lt;br/&gt;(defun remove-hard-wrap-region (start end) &quot;Replace newline chars in region by single spaces.&quot;  (interactive &quot;r&quot;) (let ((fill-column 90002000)) (fill-region start end)))&lt;br/&gt;&lt;br/&gt;------------------------------ Idiom for acting on the region, if there&#039;s one, else, on the current word or thing.&lt;br/&gt;&lt;br/&gt;(defun down-case-word-or-region () &quot;Make current word or region into lower case.&quot;  (interactive) (let (pos1 pos2) (if (and transient-mark-mode mark-active) (setq pos1 (region-beginning) pos2 (region-end)) (setq pos1 (car (bounds-of-thing-at-point &#039;word)) pos2 (cdr (bounds-of-thing-at-point &#039;word)))) (downcase-region pos1 pos2) ) )&lt;br/&gt;&lt;br/&gt;------------------------------ Prompting and Getting Input&lt;br/&gt;&lt;br/&gt;Idiom for promping user for input as the argument to your command.&lt;br/&gt;&lt;br/&gt;Use this code “(interactive &quot;‹code›‹promp string›&quot;)”. Example:&lt;br/&gt;&lt;br/&gt;(defun query-friends-phone (name) &quot;...&quot;  (interactive &quot;sEnter friend&#039;s name: &quot;) (message &quot;Name: %s&quot; name) )&lt;br/&gt;&lt;br/&gt;What the “(interactive &quot;sEnter friend&#039;s name:&quot;)” does is that it will ask user to input something, taken as string, and becomes the value of your command&#039;s parameter.&lt;br/&gt;&lt;br/&gt;The “interactive” can be used to get other types of input. Here are some basic examples of using “interactive”.&lt;br/&gt;&lt;br/&gt;“(interactive)” makes the function available thru interactive use, where user can call it with execute-extended-command (M-x).&lt;br/&gt;&lt;br/&gt;“(interactive &quot;s&quot;)” will prompt the user to enter a argument, taken as string, as argument to the function.&lt;br/&gt;&lt;br/&gt;“(interactive &quot;n&quot;)” will prompt the user to enter a argument, taken as number, as argument to the function.&lt;br/&gt;&lt;br/&gt;The prompt text can follow the single-letter code string.&lt;br/&gt;&lt;br/&gt;If your function takes multiple inputs, you can promp user multiple times, using a single call “interactive”, by joining the promp code string with “\n” in between, like this:&lt;br/&gt;&lt;br/&gt;(defun query-friends-phone (name age) &quot;...&quot;  (interactive &quot;sEnter friend&#039;s name: \nnEnter friend&#039;s age: &quot;) (message &quot;Name: %s, Age: %d&quot; name age) )&lt;br/&gt;&lt;br/&gt;Reference: Elisp Manual: Defining-Commands.&lt;br/&gt;&lt;br/&gt;------------------------------ Batch Style Text Processing Idioms&lt;br/&gt;&lt;br/&gt;Open a file, process it, save, close it&lt;br/&gt;&lt;br/&gt;; open a file, process it, save, close it (defun my-process-file (fpath) &quot;process the file at fullpath fpath ...&quot;  (let (mybuffer) (setq mybuffer (find-file fpath)) (goto-char (point-min)) ;; in case buffer already open ;; do something (save-buffer) (kill-buffer mybuffer)))&lt;br/&gt;&lt;br/&gt;For processing hundreds of files, you don&#039;t need emacs to keep undo info or fontification. This is more efficient:&lt;br/&gt;&lt;br/&gt;(defun my-process-file (fpath) &quot;process the file at fullpath fpath ...&quot;  (let () ;; create temp buffer without undo record. first space is necessary (set-buffer (get-buffer-create &quot; myTemp&quot;)) (insert-file-contents filePath nil nil nil t) ;; process it ...  (kill-buffer &quot; myTemp&quot;)))&lt;br/&gt;&lt;br/&gt;------------------------------ Find Replace strings:&lt;br/&gt;&lt;br/&gt;; idiom for string replacement in current buffer; ; use search-forward-regexp if you need regexp (goto-char (point-min)) (while (search-forward &quot;myStr1&quot; nil t) (replace-match &quot;myReplaceStr2&quot;)) (goto-char (point-min)) (while (search-forward &quot;myStr2&quot; nil t) (replace-match &quot;myReplaceStr2&quot;)) ;; repeat for other strings ...&lt;br/&gt;&lt;br/&gt;Calling a shell command.&lt;br/&gt;&lt;br/&gt;; idiom for calling a shell command (shell-command &quot;cp /somepath/myfile.txt /somepath&quot;)&lt;br/&gt;&lt;br/&gt;; idiom for calling a shell command and get its output (shell-command-to-string &quot;ls&quot;) Both shell-command and shell-command-to-string will wait for the shell process to finish before continuing. To not wait, use start-process or start-process-shell-command.&lt;br/&gt;&lt;br/&gt;Reference: Elisp Manual: Asynchronous-Processes.&lt;br/&gt;&lt;br/&gt;------------------------------ Traverse a directory recursively.&lt;br/&gt;&lt;br/&gt;In the following, my-process-file is a function that takes a file full path as input. The find-lisp-find-files will generate a list of full paths, using a regex on file name. The “mapc” will apply the function to elements in a list.&lt;br/&gt;&lt;br/&gt;; idiom for traversing a directory (require &#039;find-lisp) (mapc &#039;my-process-file (find-lisp-find-files &quot;~/web/emacs/&quot; &quot;\\.html$&quot;))&lt;br/&gt;&lt;br/&gt;------------------------------&lt;br/&gt;&lt;br/&gt;  Xah ∑ &lt;a href=&quot;http://xahlee.org/&quot;&gt;http://xahlee.org/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;☄</description>
            
            <pubDate>Sat, 14 Jun 2008 07:13:20 -0700</pubDate>
        </item>
            
        <item>
            <title>emacs wiki problem</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/emacs+wiki+problem/b633m</link>
            <description>Emacs wiki Problems&lt;br/&gt;&lt;br/&gt;Xah Lee, 2008-06-10&lt;br/&gt;&lt;br/&gt;Some personal experiences on tutorials and documentations related to emacs.&lt;br/&gt;&lt;br/&gt;perm url: &lt;a href=&quot;http://xahlee.org/emacs/emacs_wiki_problem.html&quot;&gt;http://xahlee.org/emacs/emacs_wiki_problem.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;-------------------------------------&lt;br/&gt;&lt;br/&gt;Emacs Tutorial Experiences&lt;br/&gt;&lt;br/&gt;i started to use emacs in 1998. Was a full time user and beta tester for BBEdit for several years before that.&lt;br/&gt;&lt;br/&gt;The first tutorial i read is the bundled tutorial (C-h t, M-x help-with-tutorial).&lt;br/&gt;&lt;br/&gt;This tutorial is the way to get you started with emacs from the ground up. It in written in 1980&#039;s mindset, gets you started to learn all the emacs ways and terminologies. It is not a practicality oriented one though.&lt;br/&gt;&lt;br/&gt;Once you&#039;ve read the bundled tutorial, you&#039;ll know about info (C-h i) and how to use its navigation shortcuts, which you can read the whole one-thousand pages of emacs manual. The emacs manual is a bit quaint in today, but it is very well written and complete. It is systematic, topics well organized, jargons are well defined and has several comprehensive index, the writing is clear, is well cross-linked. The technology used for the manual, the texinfo, is a excellent technology at the time. It has hyperlinks preceding its popularity in html by maybe 10 years. (one can think of it as plain-text system with hyperlinks and document hierarchy/paging and navigation shortcuts) The writing quality and content of emacs manual, is far better than most OpenSource docs such as perl, python, apache, unix man.&lt;br/&gt;&lt;br/&gt;This only drawback today, in my opinion, is that its largely written in the 1980s, using terms and jargons that today are not used elsewhere, verbose, and often has sections that discuss systems that are obsolete for 20 years.&lt;br/&gt;&lt;br/&gt;Sometimes in 1999 i also read “Learning GNU Emacs” (O&#039;Reilly) by Debra Cameron et al. This book is more practicality oriented (as with most commercial tutorials), and it did gave me a good intro.&lt;br/&gt;&lt;br/&gt;The book now is out dated though. Last edition, the 2nd edition, published in 1996. Since then, emacs has gone to version 20, 21, and 22. Lots of features are added, and lots of new computing technologies have become important that didn&#039;t exist in mid 1990s.&lt;br/&gt;&lt;br/&gt;-------------------------&lt;br/&gt;&lt;br/&gt;Emacs wiki Problems&lt;br/&gt;&lt;br/&gt;The emacs wiki ( &lt;a href=&quot;http://www.emacswiki.org/&quot;&gt;http://www.emacswiki.org/&lt;/a&gt; ), started by Alex Schroeder sometimes in 2005 or before, is great. However, i think it could&#039;ve been better.&lt;br/&gt;&lt;br/&gt;(1) The wiki software used is Oddmuse, which is a perl script of 4k lines, using flat files as database. As such, it is not comprehensive or powerful.&lt;br/&gt;&lt;br/&gt;(2) The content, is kinda haphazard. It is somewhat in-between of a encyclopedia-style treatment like Wikipedia and a chaotic online forum. Specifically, when you visit a article, half of article will be dialogues between different users on tips or issues or preferences.&lt;br/&gt;&lt;br/&gt;I commented to Alex about these problems. I suggest that it should use the same software Wikipedia uses, the MediaWiki↗. So that, it is far more powerful, with large scale programer support, and the user interface for the wiki will be one that&#039;s widely known to millions of users world-wide. (note: Oddmuse↗ is something written by Alex himself, a pet love of sorts)&lt;br/&gt;&lt;br/&gt;I also suggested that the writing guidelines should follow Wikipedia&#039;s style. Specifically, the content editing should be one with the goal of creating a comprehensive, coherent, article that gives readers info or tutorial about the subject. (as opposed to, maintaining the coherence of a dialogue and comments between wiki users)&lt;br/&gt;&lt;br/&gt;I think there&#039;s a lot potential to emacs wiki. It could, for example, develop into a comprehensive elisp library archive (e.g. CPAN↗). Listing packages by category, with each package come with a article that discuss its author, purpose, status, caveats, tutorial, similar packages ...etc. And the packages needs not just be modes... but libraries as in most languages. (for example, js2 and nxml modes are both complete parsers for javascript and xml, each of thousands lines of elisp code. They should actually be several libraries, so that these parsers can be widely deployed as language modules for many purposes. Such is largely not done in emacs/elisp community due to emacs being primarily a text-editor with relatively few elisp programers... but is slowing happening anyway (it is something that eventually must happen). A good wiki can be great help in ushering necessary improvements)&lt;br/&gt;&lt;br/&gt;For the above to take shape, the wiki must adopt a style so that articles aim to be a coherent treatment of the subject (as opposed to dialogue and random tips). (and this is done by crafting the contribution guidelines or rules; exemplarily done by Wikipedia) Also, i&#039;d think the wiki&#039;s software should adopt MediaWiki, as opposed to one-man&#039;s pet love.</description>
            
            <pubDate>Tue, 10 Jun 2008 18:18:51 -0700</pubDate>
        </item>
            
        <item>
            <title>effective emacs</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/effective+emacs/b56an</link>
            <description>Effective Emacs&lt;br/&gt;&lt;br/&gt;(Long term emacs productivity tips.)&lt;br/&gt;&lt;br/&gt;Xah Lee, 2008-05-29&lt;br/&gt;&lt;br/&gt;I have used emacs daily since 1998. Typically, i spent several hours inside emacs, everyday, for the past 10 years.&lt;br/&gt;&lt;br/&gt;Here are 6 general emacs tips i felt that&#039;s the most important in emacs productivity, among all other emacs tips and tricks of my decade-long experience. If you use emacs only occasionally, these tips may not be very meaningful because they are general and does not solve any specific problems. If you have used emacs over a year, or is a dedicated emacs user, you might find these tips helpful.&lt;br/&gt;&lt;br/&gt;perm url: &lt;a href=&quot;http://xahlee.org/emacs/effective_emacs.html&quot;&gt;http://xahlee.org/emacs/effective_emacs.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;following in a text version. (table formatting are screwed, no images, and no links)&lt;br/&gt;&lt;br/&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;------------------------------------------------- UNDERSTAND THE IMPORTANCE OF EMACS&#039;S COMMANDS&lt;br/&gt;&lt;br/&gt;In emacs, every keystroke is bound to a command (practically speaking). For example, when you type a key “e”, emacs actually runs the command self-insert-command. In other words, any key or key combination or key sequence you press is bound to a command. There are about 3000 commands in emacs. Most commonly used commands have a keyboard shortcut. For example, moving the cursor, opening file, copy paste, close a file, search text. To execute a command in emacs, type “Alt+x” followed by the command name.&lt;br/&gt;&lt;br/&gt;The following will let you execute any command, or cancel it.&lt;br/&gt;&lt;br/&gt;Command Name Shortcut Purpose execute-extended-command Alt+x Execute a given command keyboard-quit Ctrl+g cancel any key sequence or command in progress&lt;br/&gt;&lt;br/&gt;The following will let you find out any command&#039;s name of a given shortcut, or a shortcut of a given command name.&lt;br/&gt;&lt;br/&gt;Command Name Shortcut Purpose describe-key Ctrl+h k find out what command is associated with a shortcut describe-function Ctrl+h f find out what shortcut is bound to a function, and what the function do&lt;br/&gt;&lt;br/&gt;The following will let you find out any features or shortcuts of a mode, and any command that you forgot the name.&lt;br/&gt;&lt;br/&gt;Command Name Shortcut Purpose describe-mode Ctrl+h m read the inline doc of the current mode. For example, find out what features and shortcuts it provides.  apropos-command Ctrl+h a list all commands who&#039;s name contains a given string.&lt;br/&gt;&lt;br/&gt;Any operation in emacs is ultimately a command, and most of them are bound by a keyboard shortcut. By mastering the above commands, you will become self-sufficient.&lt;br/&gt;&lt;br/&gt;Emacs provides a lot more other helping commands. For example, looking up variable, searching emacs manual, launching the emacs manual, searching commands with a given option, launching the emacs FAQ, launching emacs tutorial...etc, but the above i relied on for my first 5 years of using emacs, and still is most useful among all the help commands.&lt;br/&gt;&lt;br/&gt;------------------------------------------------- MASTER WINDOW SPLITTING&lt;br/&gt;&lt;br/&gt;Use split-window-vertically extensively, and give it a easy shortcut, such as “Alt+2” for spliting into 2 top and bottom panes, “Alt+1” to expand the pane the cursor is on, “Alt+0” to get rid of the current pane, and “Alt+o” for moving cursor to the next pane.&lt;br/&gt;&lt;br/&gt;;;; WINDOW SPLITING (global-set-key (kbd &quot;M-2&quot;) &#039;split-window-vertically) ; was digit-argument (global-set-key (kbd &quot;M-1&quot;) &#039;delete-other-windows) ; was digit-argument (global-set-key (kbd &quot;M-0&quot;) &#039;delete-window) ; was digit-argument (global-set-key (kbd &quot;M-o&quot;) &#039;other-window) ; was prefix&lt;br/&gt;&lt;br/&gt;In emacs, the window is split into panes frequently. It may be split by a shell-command&#039;s output, by various emacs grep command (e.g. list-matching-lines, grep-find), by emacs&#039;s various diff commands, by viewing man page (“Alt+x manual-entry”), by list-buffers, by viewing inline help (e.g. describe-function), by calc or calendar, or by lisp error messages. In many of the split pane situation, you can type “q” to exit the pane, but not always. And, some of the split panes put your cursor in the pane, but not all.&lt;br/&gt;&lt;br/&gt;By mastering the above 4 generic window splitting commands, with easy-to-press shortcuts, you&#039;ll save a lot time opening or closing split panes. Also, by having a easy shortcut, now you can split and unsplit panes whenever you want and frequently. For example, i constantly have one pane showing dired and another pane showing a file content, or one pane of shell. A Top-Bottom-split window is extremely useful when coding. (for example, when i need to edit part of a file based on the current location, i often do a split pane first, then use isearch-forward to the location and edit, while viewing the original position.)&lt;br/&gt;&lt;br/&gt;------------------------------------------------- MASTER DIRED&lt;br/&gt;&lt;br/&gt;In coding, almost every hour you need to look at different files or directories, or do copying, deleting, renaming files or directories. Emacs provides a file management mode, called “dired”. (“dired” is acronym for DIRectory EDit. “Directory Editing” is 1980&#039;s term for file management.)&lt;br/&gt;&lt;br/&gt;Dired is very useful. Once you master it, you will almost never use a graphical desktop. The only time i need to switch to OS&#039;s graphical desktop is when dealing with special files such as video, sound, images, etc. (Since emacs now can view images files too, so i almost don&#039;t go to desktop for image files now.) Also, emacs use the same interface of dired for ftp/sftp. So, for example, you can copy, move, delete, change file owner/perm, or edit files on remote servers.&lt;br/&gt;&lt;br/&gt;For details about dired, see File Management with Emacs.&lt;br/&gt;&lt;br/&gt;Also, in combination of dired, you should master the command “shell-command” (Alt+!) and “shell”. (For more detail about using shell commands, see Emacs and Unix Tips).&lt;br/&gt;&lt;br/&gt;------------------------------------------------- REMAP MOST FREQUENTLY USED SHORTCUTS&lt;br/&gt;&lt;br/&gt;The cursor moving commands are the most frequently used shortcuts. You use them every few seconds.&lt;br/&gt;&lt;br/&gt;Emacs&#039;s default cursor moving shortcuts are “Ctrl+f”, “Ctrl+b”, “Ctrl+n”, “Ctrl+p”. The keys f, b, n, p are scattered around the keyboard and are not under the home row. Also, Control key is typed by the weak pinky finger. The Meta key (the Alt under thumb) is much easier to type. So, remap keys so that Alt with a home-row key moves the cursor.&lt;br/&gt;&lt;br/&gt;;; make cursor movement keys under right hand&#039;s home-row.  (global-set-key (kbd &quot;M-j&quot;) &#039;backward-char) ; was indent-new-comment-line (global-set-key (kbd &quot;M-l&quot;) &#039;forward-char) ; was downcase-word (global-set-key (kbd &quot;M-i&quot;) &#039;previous-line) ; was tab-to-tab-stop (global-set-key (kbd &quot;M-k&quot;) &#039;next-line) ; was kill-sentence&lt;br/&gt;&lt;br/&gt;(global-set-key (kbd &quot;M-SPC&quot;) &#039;set-mark-command) ; was just-one-space (global-set-key (kbd &quot;M-a&quot;) execute-extended-command) ; was backward-sentence&lt;br/&gt;&lt;br/&gt;For more extensive remapping, see: A Ergonomic Keyboard Shortcut Layout For Emacs.&lt;br/&gt;&lt;br/&gt;------------------------------------------------- MASTER EMACS REGEX AND FIND-REPLACE COMMANDS&lt;br/&gt;&lt;br/&gt;Searching text and find-replace text is tremendously useful. I use it just about every hour. (Many find-replace commands has a regex version) The following are the most useful search or find-replace commands:&lt;br/&gt;&lt;br/&gt;Command Name Shortcut Target Description isearch-forward “Ctrl+s” cursor point to end (cycles back to file beginning) interactive search query-replace “Alt+%” region, or cursor point to end interactive find and replace query-replace-regexp “Ctrl+Alt+%” region, or cusor point to end interactive find and replace with regex pattern dired-do-query-replace-regexp In dired, “Q” multiple files interactive find and replace with regex pattern on multiple files&lt;br/&gt;&lt;br/&gt;For detail about using these commands, in particular, how to control whether the search is case-sensitive, or whether the replacement is case-sensitive, see: Find and Replace with Emacs.&lt;br/&gt;&lt;br/&gt;Many emacs find-replace commands uses a regex. Emacs has many other commands that uses regex. For example, list-matching-lines, delete-matching-lines, highlight-regexp, grep-find, dired-do-rename-regexp. Mastering emacs regex will be a good investment. Also, you should know how to enter TAB or Return character in emacs regex. (“\t” or “\n” does not work) For a short tutorial on most important tips of emacs&#039;s regex, see: Text Pattern Matching in Emacs.&lt;br/&gt;&lt;br/&gt;------------------------------------------------- GET A GOOD KEYBOARD&lt;br/&gt;&lt;br/&gt;You switch to different applications all day. Web browsers, emacs, terminal, Desktop, music player, image editor, ...etc. Their usage and interface changes, but there is one thing that does not change: Your keyboard.&lt;br/&gt;&lt;br/&gt;Your keyboard is a intimate item. You touch it every minute. Emacs in particular, use modifier keys extensively. This may sound silly, but a good keyboard is one of the most important thing in productivity with emacs.&lt;br/&gt;&lt;br/&gt;A good keyboard for emacs, should be one with large Alt and Control keys, and they should be available on both sides (one set for each hand, just like Shift key), and the right side&#039;s set should be positioned symmetrically (that is, the distance from your left index finger to the left Alt, should be the same to the distance from your right hand&#039;s index finger to the right Alt).&lt;br/&gt;&lt;br/&gt;BAD&lt;br/&gt;&lt;br/&gt;above: The Apple keyboard as of 2006. Note the ridiculous distance of the right side&#039;s modifier keys. It is not possible, to use the right thumb to press the alt key while the index finger remains on the J.&lt;br/&gt;&lt;br/&gt;GOOD Microsoft Natural Multimedia keyboard&lt;br/&gt;&lt;br/&gt;above: The Microsoft Natural Multimedia keyboard. Note, the keys are split and oriented for each hand. And, the Ctrl, Alt are very large and symmetrically positioned with respect to each hand&#039;s thumb. (See A Review of Microsoft Natural Keyboards)&lt;br/&gt;&lt;br/&gt;Doesn&#039;t matter whether you like ergonomic keyboards, you should take a closer look at your keyboard, and see if it works with emacs well. Also, it&#039;s good to develop good habits when pressing the Control key. You should avoid pressing it with pinky, and should learn using alternate hand for Control-key combination, like you would with Shift key. For detail, see: How To Avoid The Emacs Pinky Problem.&lt;br/&gt;&lt;br/&gt;------------------------------------------------- STEVE YEGGE&#039;S EFFECTIVE EMACS&lt;br/&gt;&lt;br/&gt;This article is inspired by Steve Yegge&#039;s Effective Emacs: &lt;a href=&quot;http://steve.yegge.googlepages.com/effective-emacs&quot;&gt;http://steve.yegge.googlepages.com/effective-emacs&lt;/a&gt;. I like to thank Steve for his article.&lt;br/&gt;&lt;br/&gt;However, I disagree with some of his tips strongly. In particular, his tips about Swapping Cap-lock and Control key, Invoking M-x without the Alt key, the “Lose the UI”. In the following, i give a brief explanation why i disagree.&lt;br/&gt;&lt;br/&gt;Swapping Cap-lock and Control is not a good solution because it puts all the burden on the left pinky. The Control key on most PC keyboard is at the corner, and is very easy to press with palm. Also, there are 2 Control keys, on both sides. One should use them both like how Shift key is used, by using one hand for the modifier key and the other hand for the letter key. Alternating hands ease the repetitive burden, and avoids the awkward pinky-stretch. Swapping Cap-lock and Control can be a good solution on laptop keyboards. I think better is to actually swap Control and Alt. For detail, see How To Avoid The Emacs Pinky Problem and Why Emacs&#039;s Keyboard Shortcuts Are Painful.&lt;br/&gt;&lt;br/&gt;Related to the above, i don&#039;t find the advice of “Invoking M-x without the Alt key”, by remapping to a Control key combination, a very good one. Personally, i remap M-x to M-a, since the “a” key is in the home row, and Meta (the Alt key under thumb) is easier to press then Control.&lt;br/&gt;&lt;br/&gt;Steve advices users to “Lose the UI”. In general, i also work in emacs exclusively using keyboards. My emacs career, from 1998 to 2004 inclusive, are exclusive with text-terminals only (thru telnet/ssh on remote servers). Only after 2004, i started to use emacs in a graphical setting, under Mac OS X. I think graphical user interface is very helpful, because it gives a listing of the most useful commands, and can serve as a reminder or cheat-sheet. For example, i&#039;ve been using dired for over 10 years. Some of dired features i hardly ever use. For example, looking at the dired “Operate” menu, i see that i&#039;ve actually never used the shortcuts S, H, B, L, T, C-t D, C-t a, C-t t, C-t r. Under its “Mark” menu, i never used “* /”, “.”, “* *”, “M-{”, “M-}”. Similarly, there are many commands i&#039;ve never used, or aware, that are listed under its Regexp, Immediate, Subdir menus. Maybe i&#039;ve been missing out something, but emacs has 3000+ commands and lots of modes. Few people need to master all features. But occasionally, i can browse the graphical menu and find out the command that i kept forgetting to use, or see what most important commands are available for a new mode i just installed. I think graphical menus are quite useful in this aspect. Losing them doesn&#039;t save much screen space. I would agree that tool bar (the one with icons for opening file, copy/cut/paste, printing, help) is not much useful.</description>
            
            <pubDate>Fri, 30 May 2008 04:40:14 -0700</pubDate>
        </item>
            
        <item>
            <title>emacs lisp manual for download</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/emacs+lisp+manual+for+download/b5svx</link>
            <description>~850 pages of emacs lisp manual, now available for download, at:&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://xahlee.org/diklo/elisp_manual.zip&quot;&gt;http://xahlee.org/diklo/elisp_manual.zip&lt;/a&gt;</description>
            
            <pubDate>Sat, 24 May 2008 13:11:29 -0700</pubDate>
        </item>
            
        <item>
            <title>Texinfo Problems</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/Texinfo+Problems/b489s</link>
            <description>Texinfo Problems&lt;br/&gt;&lt;br/&gt;Xah Lee, 2008-05&lt;br/&gt;&lt;br/&gt;The Texinfo software produces invalid HTML documents. The following gives some detail.&lt;br/&gt;&lt;br/&gt;In around 2006-09, i have created a HTML version of the GNU Emacs Lisp Reference Manual for my website, with corrections to the HTML and cleaned up CSS, so that the HTML are valid HTML documents and the CSS is handcrafted for better online presentation.&lt;br/&gt;&lt;br/&gt;The version can be seen here: GNU Emacs Lisp Reference Manual. The story of my motivation is documented here (warning: rant): A Record of Frustration in IT Industry.&lt;br/&gt;&lt;br/&gt;In the process of creating this cleaned up HTML version, there are several problems i found generated by the texinfo software. I thought i&#039;d write a short summary of what they are, so that others who want to convert GNU docs to valid html might benefit, or that texinfo2html might fix these problems.&lt;br/&gt;&lt;br/&gt;perm link: &lt;a href=&quot;http://xahlee.org/emacs/texinfo_problems.html&quot;&gt;http://xahlee.org/emacs/texinfo_problems.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Invalid HTML&lt;br/&gt;&lt;br/&gt;Problems with texinfo generated html, with respect to html 4 transitional:&lt;br/&gt;&lt;br/&gt;    * there&#039;s no doctype declaration.&lt;br/&gt;    * when there&#039;s a footnote, it is generated as ‹p›‹hr›‹/div› which is invalid.&lt;br/&gt;&lt;br/&gt;Problems with respect to html4 strict:&lt;br/&gt;&lt;br/&gt;    * “‹ol type=1 start=1›” should just be “‹ol›”.&lt;br/&gt;    * sometimes there&#039;s “‹/p›‹/blockquote›” but missing a opening “‹p›”.&lt;br/&gt;    * whenever there&#039;s a “‹b›Common Lisp note:‹/b›”, it should have a “‹p›” wrapped around the block, since it&#039;s inside “‹blockquote›” and html4strict requires it.&lt;br/&gt;&lt;br/&gt;General HTML issues&lt;br/&gt;&lt;br/&gt;    * the css is plastered into every page. It should be one css file instead.&lt;br/&gt;    * it should declare utf8 as the charset. (so that it doesn&#039;t need to do a lot html character encoding)&lt;br/&gt;&lt;br/&gt;Dead Links&lt;br/&gt;&lt;br/&gt;In the elisp manual (one node per html page, roughly 850 html pages), there are 70 (local) links to other GNU documents. The local links are nice in that they provide cross-reference, but if one hosts only the elisp doc, all these local links will be dead.&lt;br/&gt;&lt;br/&gt;Therefore, it would be nice, to have perhaps at texinfo level to embed markers to links that cross-ref to external docs, or perhaps at the html conversion level to provide a option to filter local links, so that local links can replaced as non-links (such as “See Emacs manual node on Abbrev”) or full http links to the right uri at gnu.org.&lt;br/&gt;&lt;br/&gt;Vast majority of the 70 local links in the elisp doc are references to Emacs doc, but there are 6 that refers to widget, ses, cl, libc.&lt;br/&gt;&lt;br/&gt;    * problem link: elisp/Buttons.html ../widget/index.html&lt;br/&gt;    * problem link: elisp/Customization-Types.html ../widget/index.html&lt;br/&gt;    * problem link: elisp/Defining-New-Types.html ../widget/index.html&lt;br/&gt;    * problem link: elisp/Function-Safety.html ../ses/index.html&lt;br/&gt;    * problem link: elisp/Lisp-History.html ../cl/index.html&lt;br/&gt;    * problem link: elisp/Locales.html ../libc/Locales.html&lt;br/&gt;    * problem link: elisp/Time-Parsing.html ../libc/Formatting-Calendar-Time.html&lt;br/&gt;&lt;br/&gt;I presume that people who wishes to host GNU doc do not want to host the entire set of GNU&#039;s documentation.&lt;br/&gt;Use of ASCII&lt;br/&gt;&lt;br/&gt;Also, the texinfo still use the convention of backtick ` and straight single quote &#039; to emulate curly ones “” and ‘’, and other ascii kludge such as “=›” instead of “⇒”. The ability to displaying these chars has been widely available on commercial platforms since mid 1990s, and on linuxes since about 2003 or so (emacs itself support unicode to a practical degree since emacs 21, released in 2001). It is perhaps time to update gnu doc convention to utf8 and use the proper characters.</description>
            
            <pubDate>Sat, 17 May 2008 09:10:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Elisp Lesson: Writing make-html-table</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/Elisp+Lesson%3A+Writing+make-html-table/b4phy</link>
            <description>Elisp Lesson: Writing make-html-table&lt;br/&gt;&lt;br/&gt;Xah Lee, 2008-04&lt;br/&gt;&lt;br/&gt;This page shows a example of writing a emacs lisp function that turns the current block of text into a HTML table. If you don&#039;t know elisp, first take a look at Emacs Lisp Basics.&lt;br/&gt;&lt;br/&gt;The Problem&lt;br/&gt;&lt;br/&gt;I want to write a function, such that, when called, the current block of text the cursor is on, becomes a HTML table. Suppose the block of text is this:&lt;br/&gt;&lt;br/&gt;&lt;pre&gt;
a b c
1 2 3
this and that
&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;after, pressing a button, it becomes html table.&lt;br/&gt;&lt;br/&gt;(raw code contains too many html code that screws up livejournal, and lj doesn&#039;t have a raw mode.  Full text at &lt;a href=&quot;http://xahlee.org/emacs/elisp_make-html-table.html&quot;&gt;http://xahlee.org/emacs/elisp_make-html-table.html&lt;/a&gt; )</description>
            
            <pubDate>Mon, 28 Apr 2008 21:21:43 -0700</pubDate>
        </item>
            
        <item>
            <title>Find and Replace with Emacs</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/Find+and+Replace+with+Emacs/b3mpb</link>
            <description>This page shows you how to use emacs to do find and replace operations, and tells you how to do case-sensitive or case-insensitive match or replacement, and how to force captured regex text pattern into upper or lower case.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://xahlee.org/emacs/emacs_find_replace.html&quot;&gt;http://xahlee.org/emacs/emacs_find_replace.html&lt;/a&gt;</description>
            
            <pubDate>Wed, 12 Mar 2008 20:43:14 -0700</pubDate>
        </item>
            
        <item>
            <title>useful link</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/useful+link/b2ika</link>
            <description>&lt;p&gt;&lt;a href=&quot;http://tiny-tools.sourceforge.net/emacs-keys.html&quot;&gt;Emacs keybinding guide&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;This document explains how do you deal with Emacs key bindings. In addition, you will find step by step how you use your X window&#039;s xmodmap program to start using emacs better in X. Document also explains how to set up special xterm for telnet connections -- running remote emacs with transparent key binding. Finally includes many ready examples and questions and answers compiled from Usenet emacs newsgroups.&lt;/blockquote&gt;

&lt;p style=&quot;font-size:x-small&quot;&gt;[ via &lt;a href=&quot;http://www.faqs.org/faqs/GNU-Emacs-FAQ/keybindings-pointer/&quot;&gt;GNU-Emacs-FAQ/keybindings-pointer&lt;/a&gt; ]&lt;/p&gt;</description>
            
            <pubDate>Tue, 05 Feb 2008 02:35:42 -0800</pubDate>
        </item>
            
        <item>
            <title>jabber-gmail.el</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/jabber-gmail.el/bzuv7</link>
            <description>&lt;p&gt;Some time ago
my &lt;a href=&quot;http://checkgmail.sourceforge.net/&quot;&gt;checkgmail&lt;/a&gt; began
to misbehave. It kept prompting for password, didn&#039;t connect to Gmail
and raised CPU usage to 100%. I deleted the package and a bunch of
assisting libraries.&lt;/p&gt;

&lt;p&gt;But. I couldn&#039;t find appealing alternative.&lt;/p&gt;

&lt;p&gt;Fortunately, my friend
uses &lt;a href=&quot;http://www.gajim.org/&quot;&gt;gajim&lt;/a&gt; and gets gmail
notifications. From jabber client!&lt;/p&gt;

&lt;p&gt;That&#039;s the way to go. Several hours of happy hacking, and...&lt;/p&gt;

&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;pre style=&quot;overflow:auto; border:thin solid #808080&quot;&gt;
&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;jabber-gmail.el - Gmail notifications via emacs-jabber
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Copyright (c) 2007 Valery V. Vorotyntsev &amp;lt;valery.vv&lt;i&gt;&amp;#64;&lt;/i&gt;gmail.com&amp;gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;* USAGE
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Add the following line to your ~/.emacs:
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;   &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(when (string= jabber-server &quot;gmail.com&quot;) (require &#039;jabber-gmail))
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;If you prefer on demand loading
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(see &lt;a href=&quot;http://a-nickels-worth.blogspot.com/2007/11/effective-emacs.html&quot;&gt;http://a-nickels-worth.blogspot.com/2007/11/effective-emacs.html&lt;/a&gt;):
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;   &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(when (string= jabber-server &quot;gmail.com&quot;)
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;     &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(autoload &#039;jabber-gmail-query     &quot;jabber-gmail&quot;)
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;     &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(autoload &#039;jabber-gmail-subscribe &quot;jabber-gmail&quot;)
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;     &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(add-hook &#039;jabber-post-connect-hook &#039;jabber-gmail-subscribe))
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;You may wish to bind a shortcut for `&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;span class=&quot;constant&quot;&gt;jabber-gmail-query&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&#039;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;   &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(global-set-key (kbd &quot;&amp;lt;f9&amp;gt; g&quot;) &#039;jabber-gmail-query)
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;or to customize `&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;span class=&quot;constant&quot;&gt;jabber-gmail-dothreads&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&#039;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;   &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(defun jabber-gmail-dothreads (ts)
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;     &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(let ((msg (format &quot;%d new messages in gmail inbox&quot; (length ts))))
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;       &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(message msg)
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;       &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(jabber-screen-message msg)))
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;* BUGS
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;span class=&quot;constant&quot;&gt;jabber-gmail-dothreads&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&#039; depends on third party `&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;span class=&quot;constant&quot;&gt;osd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&#039; function
&lt;/span&gt;&lt;span class=&quot;comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;(see &lt;a href=&quot;http://community.livejournal.com/ru_emacs/11737.html&quot;&gt;http://community.livejournal.com/ru_emacs/11737.html&lt;/a&gt;).
&lt;/span&gt;
&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;###&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;span class=&quot;warning&quot;&gt;autoload&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;jabber-gmail-subscribe&lt;/span&gt; ()
  &lt;span class=&quot;doc&quot;&gt;&quot;Subscribe to gmail notifications.
See &lt;a href=&quot;http://code.google.com/apis/talk/jep_extensions/usersettings.html#4&quot;&gt;http://code.google.com/apis/talk/jep_extensions/usersettings.html#4&lt;/a&gt;&quot;&lt;/span&gt;
  (jabber-send-iq (concat jabber-username &lt;span class=&quot;string&quot;&gt;&quot;@&quot;&lt;/span&gt; jabber-server) &lt;span class=&quot;string&quot;&gt;&quot;set&quot;&lt;/span&gt;
                  &#039;(usersetting ((xmlns . &lt;span class=&quot;string&quot;&gt;&quot;google:setting&quot;&lt;/span&gt;))
                                (mailnotifications ((value . &lt;span class=&quot;string&quot;&gt;&quot;true&quot;&lt;/span&gt;))))
                  #&#039;jabber-report-success &lt;span class=&quot;string&quot;&gt;&quot;Gmail subscription&quot;&lt;/span&gt;
                  #&#039;jabber-process-data   &lt;span class=&quot;string&quot;&gt;&quot;Gmail subscription&quot;&lt;/span&gt;)

  &lt;span class=&quot;comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Looks like &quot;one shot&quot; request is still needed to activate
&lt;/span&gt;  &lt;span class=&quot;comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;notifications machinery.
&lt;/span&gt;  (jabber-gmail-query))

(add-to-list &#039;jabber-iq-set-xmlns-alist
             (cons &lt;span class=&quot;string&quot;&gt;&quot;google:mail:notify&quot;&lt;/span&gt; #&#039;jabber-gmail-process-new-mail))
(&lt;span class=&quot;keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;jabber-gmail-process-new-mail&lt;/span&gt; (xml-sexp)
  &lt;span class=&quot;doc&quot;&gt;&quot;Process new gmail notification.
See &lt;a href=&quot;http://code.google.com/apis/talk/jep_extensions/gmail.html#notifications&quot;&gt;http://code.google.com/apis/talk/jep_extensions/gmail.html#notifications&lt;/a&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;respond to server
&lt;/span&gt;  (jabber-send-iq (concat jabber-username &lt;span class=&quot;string&quot;&gt;&quot;@&quot;&lt;/span&gt; jabber-server) &lt;span class=&quot;string&quot;&gt;&quot;result&quot;&lt;/span&gt; nil
                  #&#039;jabber-report-success &lt;span class=&quot;string&quot;&gt;&quot;Responding gmail notification&quot;&lt;/span&gt;
                  #&#039;jabber-process-data   &lt;span class=&quot;string&quot;&gt;&quot;Responding gmail notification&quot;&lt;/span&gt;)

  (jabber-gmail-query))

&lt;span class=&quot;comment-delimiter&quot;&gt;;;;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;###&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;span class=&quot;warning&quot;&gt;autoload&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;
&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;jabber-gmail-query&lt;/span&gt; ()
  &lt;span class=&quot;doc&quot;&gt;&quot;Request mail information from the Google Talk server (a.k.a. one shot query).
See &lt;a href=&quot;http://code.google.com/apis/talk/jep_extensions/gmail.html#requestmail&quot;&gt;http://code.google.com/apis/talk/jep_extensions/gmail.html#requestmail&lt;/a&gt;&quot;&lt;/span&gt;
  (interactive)
  (jabber-send-iq (concat jabber-username &lt;span class=&quot;string&quot;&gt;&quot;@&quot;&lt;/span&gt; jabber-server) &lt;span class=&quot;string&quot;&gt;&quot;get&quot;&lt;/span&gt;
                  &#039;(query ((xmlns . &lt;span class=&quot;string&quot;&gt;&quot;google:mail:notify&quot;&lt;/span&gt;)))
                  #&#039;jabber-gmail-process-mailbox nil
                  #&#039;jabber-process-data &lt;span class=&quot;string&quot;&gt;&quot;Gmail query&quot;&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;gmail-query&quot;&lt;/span&gt;))

(&lt;span class=&quot;keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;jabber-gmail-process-mailbox&lt;/span&gt; (xml-sexp &lt;span class=&quot;type&quot;&gt;&amp;amp;rest&lt;/span&gt; ignore)
  &lt;span class=&quot;doc&quot;&gt;&quot;Process gmail query response.
See &lt;a href=&quot;http://code.google.com/apis/talk/jep_extensions/gmail.html#response&quot;&gt;http://code.google.com/apis/talk/jep_extensions/gmail.html#response&lt;/a&gt;&quot;&lt;/span&gt;
  (&lt;span class=&quot;keyword&quot;&gt;let&lt;/span&gt; ((threads (jabber-xml-node-children
                  (car (jabber-xml-get-children xml-sexp &#039;mailbox)))))
    (&lt;span class=&quot;keyword&quot;&gt;when&lt;/span&gt; threads (jabber-gmail-dothreads threads))))

(&lt;span class=&quot;keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;jabber-gmail-dothreads&lt;/span&gt; (threads)
  &lt;span class=&quot;doc&quot;&gt;&quot;Process &amp;lt;mail-thread-info/&amp;gt; elements.
THREADS is a list of XML sexps, corresponding to &amp;lt;mail-thread-info/&amp;gt; elements.
See &lt;a href=&quot;http://code.google.com/apis/talk/jep_extensions/gmail.html#response&quot;&gt;http://code.google.com/apis/talk/jep_extensions/gmail.html#response&lt;/a&gt;

XXX TODO: make customizable&quot;&lt;/span&gt;
  (osd &lt;span class=&quot;string&quot;&gt;&quot;gmail: %d&quot;&lt;/span&gt; (length threads)))

(&lt;span class=&quot;keyword&quot;&gt;provide&lt;/span&gt; &#039;&lt;span class=&quot;constant&quot;&gt;jabber-gmail&lt;/span&gt;)
&lt;/pre&gt;

&lt;p&gt;The module is not planted nicely into emacs-jabber&#039;s code, but it
works well.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.ljplus.ru/img4/v/o/vorotylo/jabber-gmail.png&quot;&gt;&lt;img src=&quot;http://www.ljplus.ru/img4/v/o/vorotylo/jabber-gmail_small.png&quot; title=&quot;screenshot&quot; alt=&quot;jabber-gmail.el screenshot&quot; width=&quot;400&quot; height=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your suggestions and patches are welcome. Have fun!&lt;/p&gt;</description>
            
            <pubDate>Tue, 08 Jan 2008 10:58:37 -0800</pubDate>
        </item>
            
        <item>
            <title>text process a few thousand files with elisp</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/text+process+a+few+thousand+files+with+elisp/bzuv6</link>
            <description>Elisp Lesson: Process A Thousand Files&lt;br/&gt;&lt;br/&gt;Xah Lee, 2008-01&lt;br/&gt;&lt;br/&gt;This page shows a real-world example using emacs lisp to process a HTML files in a directory recursively, searching for a text pattern, and generate a report. If you don&#039;t know elisp, first take a gander at Emacs Lisp Basics.&lt;br/&gt;&lt;br/&gt;The Problem&lt;br/&gt;&lt;br/&gt;Summary&lt;br/&gt;&lt;br/&gt;I want to write a elisp program, that visit all HTML files in a directory (and all sub dirs), and extract all links to a particular website, then print a nice report of links and the files it is linked from. The expected number of files is about 3500.&lt;br/&gt;&lt;br/&gt;In this lesson, you&#039;ll learn how to use elisp to traverse into a directory recursively, and how to build a hash-table in elisp, and a idiom for programmatically processing a large number of files.&lt;br/&gt;&lt;br/&gt;Detail&lt;br/&gt;&lt;br/&gt;As of today, i have over 3500 links to Wikipedia on my site xahlee.org, scattered over in about 2500 files. I want to know what Wikipedia articles i&#039;ve linked to, from what file. The final report should be a HTML file. Once i&#039;ve written a program to extract this info, i can create a nice report in HTML. In the HTMl report, i can use a HTML table, where each row has 2 columns, the first column is a link to the Wikipedia article, the second column is a link to the file containing the Wikipedia link.&lt;br/&gt;&lt;br/&gt;Normally, one can just do a grep like this: “grep -r &#039;wikipedia\.org/&#039; dir”. This can give me a nice overview, however, the result of grep also contains adjacent texts. If i want to know which link are duplicated, or if i want to organize the output by file names the link originated from, a simple grep cannot solve the problem. Typically, one can write a perl program, but as previously indicated (See Text Processing with Elisp), doing this in elisp is easier and more flexible.&lt;br/&gt;&lt;br/&gt;Solution&lt;br/&gt;&lt;br/&gt;(the html code screws up blog post. See&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://xahlee.org/emacs/elisp_link_report.html&quot;&gt;Elisp Lesson: Process A Thousand Files&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;instead.&lt;br/&gt;)</description>
            
            <pubDate>Tue, 08 Jan 2008 10:58:37 -0800</pubDate>
        </item>
            
        <item>
            <title>can&#039;t resist</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/can%27t+resist/byput</link>
            <description>&lt;p&gt;&lt;a href=&quot;http://www.lispcast.com/index.php/2007/12/9-tips-for-the-aspiring-emacs-playboy/&quot;&gt;&lt;img src=&quot;http://www.lispcast.com/wp-content/uploads/2007/12/manwith3women2.png&quot; title=&quot;Emacs effect&quot; alt=&quot;9 Tips for the aspiring Emacs playboy&quot; width=&quot;400&quot; height=&quot;343&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;;)&lt;/p&gt;</description>
            
            <pubDate>Thu, 27 Dec 2007 04:45:29 -0800</pubDate>
        </item>
            
        <item>
            <title>Emacs games</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/Emacs+games/bylm7</link>
            <description>So ... playing Gomoku in Emacs.  Has anyone ever won?</description>
            
            <pubDate>Wed, 26 Dec 2007 01:45:09 -0800</pubDate>
        </item>
            
        <item>
            <title>http-emacs</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/http-emacs/bwkg6</link>
            <description>While readers here who use Emacs to post to LiveJournal using LJUpdate are probably already reading the &lt;span class=&quot;ljuser&quot; style=&quot;white-space: nowrap;&quot;&gt;&lt;a href=&quot;http://community.livejournal.com/ljupdate/profile&quot;&gt;&lt;img src=&quot;http://p-stat.livejournal.com/img/community.gif&quot; alt=&quot;[info]&quot; width=&quot;16&quot; height=&quot;16&quot; style=&quot;vertical-align: bottom; border: 0; padding-right: 1px;&quot;/&gt;&lt;/a&gt;&lt;a href=&quot;http://community.livejournal.com/ljupdate/&quot;&gt;&lt;b&gt;ljupdate&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; community, there may be some who aren&#039;t.  Or there may be some who tried installing it, but encountered problems with the http-emacs project&#039;s elisp files and abandoned it.&lt;br/&gt;&lt;br/&gt;The main problem with the http-emacs project is that it appears to be abandoned and none of the links to a complete downloadable package currently work.  As I have already stated on my &lt;a href=&quot;http://community.livejournal.com/ljupdate/33645.html&quot;&gt;recent post&lt;/a&gt; to &lt;span class=&quot;ljuser&quot; style=&quot;white-space: nowrap;&quot;&gt;&lt;a href=&quot;http://community.livejournal.com/ljupdate/profile&quot;&gt;&lt;img src=&quot;http://p-stat.livejournal.com/img/community.gif&quot; alt=&quot;[info]&quot; width=&quot;16&quot; height=&quot;16&quot; style=&quot;vertical-align: bottom; border: 0; padding-right: 1px;&quot;/&gt;&lt;/a&gt;&lt;a href=&quot;http://community.livejournal.com/ljupdate/&quot;&gt;&lt;b&gt;ljupdate&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;.&lt;br/&gt;&lt;br/&gt;So for those interested, I&#039;ve made my own &lt;a href=&quot;http://www.adversary.org/files/http-emacs.tar.gz&quot;&gt;gzipped tarball&lt;/a&gt; and &lt;a href=&quot;http://www.adversary.org/files/http-emacs.zip&quot;&gt;zip archive&lt;/a&gt; available for download.</description>
            
            <pubDate>Sat, 08 Dec 2007 06:24:20 -0800</pubDate>
        </item>
            
        <item>
            <title>Firefox and Emacs</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/Firefox+and+Emacs/btdzs</link>
            <description>Once again, this isn&#039;t really directly an Emacs-specific thing, but it&#039;s something which Emacs users may find useful.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/4125&quot;&gt;It&amp;apos;s All Text&lt;/a&gt; is a plugin for Mozilla Firefox (but not yet SeaMonkey) which allows a user to edit HTML text editor boxes with the text editor of their choice.  Thus making things like LiveJournal comment fields far less painful than they might otherwise be.&lt;br/&gt;&lt;br/&gt;Personally I find it invaluable, especially when a comment thread starts getting on a bit (it&#039;s nice to be able to paste what I&#039;m responding to into the scratch pad and just swap between buffers when checking details).&lt;br/&gt;&lt;br/&gt;EDIT: If you install it, it&#039;s worth customising it and changing the order of file extensions to place &quot;.html&quot; before &quot;.txt&quot; so that  C-x 8 character encoding is supported properly (for which you&#039;ll also want the language environment in Emacs to match that in Firefox; I use UTF-8).  It shouldn&#039;t adversely affect text only boxes and doesn&#039;t require all HTML tags to be included in something like an LJ comment.</description>
            
            <pubDate>Fri, 09 Nov 2007 09:09:26 -0800</pubDate>
        </item>
            
        <item>
            <title>The Joys of PCL-CVS</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/The+Joys+of+PCL-CVS/bsofh</link>
            <description>Since the switch to Emacs 22.1, I&#039;ve made a change in my VC practices for interfacing with CVS.  I was disappointed to see that Dired-under-VC no longer seemed to show files that needed a patch or merge.  I started using PCL-CVS and found that it had some very nice tricks up its sleeve.  I was particularly impressed that the *cvs* buffer automatically updated itself as I made edits, compared to the need to hit the CVS repository to refresh a Dired-under-VC buffer.&lt;br/&gt;&lt;br/&gt;So now that I&#039;m all jazzed about PCL-CVS, I&#039;m finally starting to work with a Subversion repository for one of my projects.  Dired-under-VC does an OK job there, but nowhere near as good as PCL.  Does anyone have any suggestions for better SVN interfacing?</description>
            
            <pubDate>Sun, 04 Nov 2007 21:51:34 -0800</pubDate>
        </item>
            
        <item>
            <title></title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal//bsl21</link>
            <description>So I&#039;m going to pop in because I feel like I kind of maybe have something to contribute. Maybe I don&#039;t. Whatevs.&lt;br/&gt;&lt;br/&gt;I always thought the emacs manual was a big scarey thing that I couldn&#039;t possibly ever find anything useful in. And then one night I randomly decided to read through it, and stumbled upon a bunch of commands I had no idea about that could make life 10x easier. &lt;br/&gt;&lt;br/&gt;And so I give you my small cheat sheet card of amazing emacs functions:&lt;br/&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;&lt;b&gt;C-x C-o&lt;/b&gt; - delete blank lines&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;b&gt;M-#&lt;/b&gt; - where # is a number. repeats the next sequence # times&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;b&gt;C-x z&lt;/b&gt; - repeat the last action&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;b&gt;M-Del&lt;/b&gt; - kill backwards word&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;b&gt;C-x r SPC &lt;i&gt;r&lt;/i&gt;&lt;/b&gt; - point to register&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;b&gt;C-x r j &lt;i&gt;r&lt;/i&gt;&lt;/b&gt; - jump to register&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;b&gt;C-x r s &lt;i&gt;r&lt;/i&gt;&lt;/b&gt; - region to register&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;b&gt;C-x r i &lt;i&gt;r&lt;/i&gt;&lt;/b&gt; - insert register&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;</description>
            
            <pubDate>Sun, 04 Nov 2007 07:51:54 -0800</pubDate>
        </item>
            
        <item>
            <title>Some actual content</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/Some+actual+content/bskvp</link>
            <description>This isn&#039;t an actually an issue with Emacs, but it&#039;s something I encountered when upgrading two of my machines to the latest version (22.1.1, which is very nice) and others might see from time to time.&lt;br/&gt;&lt;br/&gt;Both installations worked fine, but when using X11 forwarding via SSH to the server I encountered the following error: &quot;X protocol error: BadWindow (invalid Window parameter) on protocol request 38&quot;&lt;br/&gt;&lt;br/&gt;The issue is caused in OpenSSH 3.8 and later and is not related to the specific OS used.  In my case I&#039;m using a couple of different versions of Slackware, but most of the search results were discussing it in relation to the Mac OS, Tiger.&lt;br/&gt;&lt;br/&gt;The solution is to use the SSH flag &quot;-Y&quot; for forwarding X11 connections from trusted hosts instead of the more traditional &quot;-X&quot; flag.  So the command would be something like &quot;ssh -Y [-l user | user@]hostname.example.com&quot; instead of &quot;ssh -X [-l user | user@]hostname.example.com&quot; to have everything behave as intended.</description>
            
            <pubDate>Sat, 03 Nov 2007 22:53:22 -0700</pubDate>
        </item>
            
        <item>
            <title>Poll: The purpose of the Emacs community</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/Poll%3A+The+purpose+of+the+Emacs+community/bshph</link>
            <description>I&#039;ve been wondering how many people still subscribed to this community would participate more, or possibly find it more useful, if it returned to being dedicated to Emacs?  Rather than primarily being used by &lt;span class=&quot;ljuser&quot; style=&quot;white-space: nowrap;&quot;&gt;&lt;a href=&quot;http://xah-lee.livejournal.com/profile&quot;&gt;&lt;img src=&quot;http://p-stat.livejournal.com/img/userinfo.gif&quot; alt=&quot;[info]&quot; width=&quot;17&quot; height=&quot;17&quot; style=&quot;vertical-align: bottom; border: 0; padding-right: 1px;&quot;/&gt;&lt;/a&gt;&lt;a href=&quot;http://xah-lee.livejournal.com/&quot;&gt;&lt;b&gt;xah_lee&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; to repost the entire content of his website, even if Emacs is his religion.&lt;br/&gt;&lt;br/&gt;&lt;div&gt;&lt;a href=&quot;http://www.livejournal.com/poll/?id=1082092&quot;&gt;View Poll: Emacs vs. Xah Lee&lt;/a&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;EDIT:  Oh, I forgot to mention, he&#039;s a &lt;a href=&quot;http://xahlee.org/Netiquette_dir/troll.html&quot;&gt;self-confessed troll&lt;/a&gt; and proud of it.</description>
            
            <pubDate>Fri, 02 Nov 2007 23:50:19 -0700</pubDate>
        </item>
            
        <item>
            <title>Text Processing with Emacs Lisp</title>
            <link>http://swik.net/Emacs/Emacs+Community+on+LiveJournal/Text+Processing+with+Emacs+Lisp/brw8b</link>
            <description>Text Processing with Emacs Lisp &lt;br/&gt;Xah Lee, 2007-10-29 &lt;br/&gt;&lt;br/&gt;This page gives a outline of how to use emacs lisp to do text &lt;br/&gt;processing, using a specific real-world problem as example. If you &lt;br/&gt;don&#039;t know elisp, first take a gander at Emacs Lisp Basics. &lt;br/&gt;&lt;br/&gt;THE PROBLEM &lt;br/&gt;&lt;br/&gt;Summary &lt;br/&gt;&lt;br/&gt;I want to write a elisp program, that process a list of given files. &lt;br/&gt;Each file is a HTML file. For each file, i want to remove the link to &lt;br/&gt;itself, in its page navigation bar. More specifically, each file have &lt;br/&gt;a page navigation bar in this format: &lt;br/&gt;&lt;br/&gt;...&lt;br/&gt;&lt;br/&gt;HTML version with links and colors is at: &lt;br/&gt;&lt;a href=&quot;http://xahlee.org/emacs/elisp_text_processing.html&quot;&gt;http://xahlee.org/emacs/elisp_text_processing.html&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;how to stop livejournal from interpreting angle brackets as html tags?</description>
            
            <pubDate>Mon, 29 Oct 2007 17:09:03 -0700</pubDate>
        </item>
            
    </channel>
</rss>
