How do you take notes now? Do you jot your notes on a scrap of paper or into a leather notebook? Do you copy and paste what you're looking at into a plain text file or document? Do you scribble things into a personal digital assistant?
I've tried different note-taking strategies: colorful mindmaps, outlined text files, even voice recordings. I felt frustrated every time I had to write down whose e-mail or which webpage prompted the note (shouldn't the computer do that automatically?), but I was even more frustrated when I'd come across a note and not remember why I wrote it.
Remember changed all that for me. The key ideas behind Remember are that you should be able to write notes with minimal distraction, and that as the context should be automatically picked up so that you don't have to write it down. If you're writing a note based on a mail message, Remember will pick up the details of the message and create a hyperlink so that you can view the original message when reviewing your notes. If you're working on a file, Remember will link to it so that you can jump back to it. If you're browsing a web page (in Emacs, of course), Remember will remember the title and URL, so that you can go back to the page when you want to clarify something in your notes. And after you save the note, you'll be back in the same environment you were: no need to switch applications and no need to remember different keyboard shortcuts.
You might think that Remember's only worth it if you do _everything_ in Emacs. For me, it worked the other way around. I started by using Remember to take notes in Planner, a personal information manager available for Emacs. As I got accustomed to the way Remember and Planner just automatically hyperlinked to whatever I was looking at, I thought: Why doesn't my mail client do this? Why doesn't my web browser do this? Why doesn't my chat client do this? So I ended up reading through the manuals, figuring out how to do all these things in Emacs—and I loved it, eventually doing most of my work (and play!) within an Emacs frame. Although I use other applications now, like Lotus Notes for work mail and Mozilla Firefox for browsing, I still switch back to Emacs for my notes.
In this section, you'll learn how to set up Remember and take quick notes in Emacs. We'll start by configuring Remember to save your notes to a file, and how to configure Remember to save to different places depending on the content. You'll also learn how to quickly search your notes file for entries.
You can also integrate Remember into other note-taking systems in Emacs. The sections that cover those systems will also show you how to configure Remember to save your notes there.
Remember is a separate package, which you can download from https://gna.org/projects/remember-el . As of this writing, the latest stable release is Remember 1.9. Download the latest version and unpack it into your ~/elisp directory. You should end up with a new directory, ~/elisp/remember-1.9 .
To configure Remember to save to plain text files, add this code to your ~/.emacs and evaluate it:
(add-to-list 'load-path "~/elisp/remember-1.9") ;; (1) (require 'remember-autoloads) (setq remember-data-file "~/notes.txt") ;; (2) (global-set-key (kbd "C-c r") 'remember) ;; (3) (defun wicked/remember-review-file () "Open `remember-data-file'." (interactive) (find-file-other-window remember-data-file)) (global-set-key (kbd "C-c r") 'wicked/remember-review-file) ;; (4)
After you've configured Remember, try it out by typing C-c r (remember). Your Emacs frame will be split in two, and one of the windows will be a *Remember* buffer. Type your note. The first line will be the headline, and the rest of the buffer will be the body of the note. If you call C-c r (remember) from a file, the filename will automatically be included at the end of the buffer. Type C-c C-c (remember-buffer) to save the note.
Try it now by typing C-c r (remember) to bring up the buffer, typing in a short note, and using C-c c (remember-buffer) to save it. If you open ~/notes.txt to review your note, you'll find something like this:
** Sat Jan 12 14:43:02 2008 (Your headline goes here) Your note body goes here /home/sacha/.emacs
You can even save yourself some copying and pasting. Mark a region of text and use C-u C-c r (remember). The selected text will be included in the buffer, so all you have to do is comment on it.
Make a habit of typing C-c C-r or C-u C-c C-r (remember) when you need to remember something. Type C-c C-c (remember-buffer) to get back to work, knowing that your notes have been safely saved in your ~/notes.txt file.
Use C-c R (wicked/remember-review-file) to check your notes, or open ~/notes.txt yourself.
To search your notes, use C-c R (wicked/remember-review-file) to open the file, then use C-s (isearch-forward) to search for words interactively, or use M-x occur to find all lines containing a word.
You may notice that the default format that Remember uses is an outline format that is compatible with Org and Allout, both of which have powerful outline-editing tools. I prefer Org's outline-editing commands, and you'll learn about them in the "Outline Notes with Org" section. Here's a quick summary.
First, you need to switch the buffer to Org mode by typing M-x org-mode. To automatically open your notes file in Org mode, add
-*- mode: org -*-
to the first line of your ~/notes.txt. Then, when you open your ~/notes.txt file, it will be in Org mode.
You can quickly collapse or expand all the outline entries by pressing S-TAB (org-shifttab). To collapse or expand a single entry, move the point to the headline (the line beginning with *, **, or any number of asterisks), then press TAB (org-cycle). To move an entry up or down, move the point to the headline and press S-UP (org-shiftup) or S-DOWN (org-shiftdown). To demote or promote a heading, press M-RIGHT (org-metaright) or M-LEFT (org-metaleft).
You can treat ~/notes.txt as your inbox, and keep your organized notes in another file or groups of files. Cut and paste the text between the files to clear your inbox, and use M-x grep to search multiple files. Alternatively, you can keep all of your notes in one large text file, and use C-s (isearch-forward) and M-x occur to search for information.
Now you know the basics of remembering information, saving it into a file, and reviewing the file. By default, Remember annotates your notes with a filename, if you were looking at a file when you called C-c r (remember). As you learn more about Emacs, you may want to configure Remember to add more intelligent annotations and other text to the Remember buffer. The more work Remember does for you, the less work you have to do!
The easiest way to get Remember to automatically understand mail messages, Web pages, info files, BBDB contact records, and other sources of information in Emacs is to use either Org or Planner. To learn how to integrate Remember with either Org or Planner, read the section on "Outline Your Notes with Org" and "Writing Your Journal with Planner".
You can also define your own annotation functions. When you call C-c r (remember) from a buffer, Remember goes through each of the functions in remember-annotation-functions, and it uses the first non-nil value returned.
For example, you may work with many temporary buffers that don't have filenames. To create an annotation function that adds buffer names, add the following code to your ~/.emacs after the basic Remember configuration code:
(eval-after-load 'remember
'(progn
(add-to-list 'remember-annotation-functions 'buffer-name t)))
This adds buffer-name to the end of the annotation list, making it a last resort.
What if you want line numbers included with the filename or buffer name? You could replace the previous code with this:
(defun wicked/remember-line-numbers-and-file-names ()
"Return FILENAME line NUMBER."
(save-restriction
(widen)
(format " %s line %d"
(or (buffer-file-name) (buffer-name))
(line-number-at-pos))))
(eval-after-load 'remember
'(progn
(add-to-list 'remember-annotation-functions
'wicked/remember-line-numbers-and-file-names)))
With that code, C-c r (remember) will automatically pick up the line number from your file or buffer.
By default, Remember saves your notes to a plain-text file, so you'll have to open the files manually. The command M-x ffap or find-find-file-at-point may be convenient. If you want hyperlinks that you can visit easily, consider saving your notes in an Org or Planner file instead.
Now you've got context. What else can you do with the Remember buffer?
Remember has plenty of hooks that let you modify the behavior. For example, you might want to insert a random tagline or fortune-cookie saying whenever you create a note. This is a fun way to encourage yourself to write more, because then there's a little surprise every time you open a Remember buffer.
Here is a totally small-scale way to use random lines from a text file. Let's say that you have a text file made up of movie quotes, taglines, knock-knock jokes, or short fortune-cookie sayings. When I wrote this code, I used Japanese/English sentence pairs about cats, because I was studying Japanese. You can use whatever tickles your fancy, as long as this text file (~/taglines.txt) has one line per saying.
(defun wicked/random-tagline (&optional file)
"Return a random tagline."
(with-current-buffer (find-file-noselect (or file "~/taglines.txt"))
(goto-char (random (point-max)))
(let ((string
(buffer-substring (line-beginning-position)
(line-end-position))))
string)))
(eval-after-load 'remember
'(progn
(defadvice remember (after wicked activate)
"Add random tagline."
(save-excursion
(goto-char (point-max))
(insert "\n\n" (wicked/random-tagline) "\n\n")))))
If you want multi-line sayings, look into the Emacs fortune cookie package, and replace wicked/random-tagline with a function that returns a random string.
This code modifies the behavior of C-c r (remember) by inserting a random tagline after the buffer has been prepared. You can use the same idea to insert a timestamp noting you started, a template figuring or modify the text in other ways.
You can also change how Remember saves its notes. For example, if you want all of the notes that contain the word ":EMACS:" or ":WORK:" to go into separate files, you can add this code to your ~/.emacs:
(defvar wicked/remember-keywords
'((":EMACS:" . "~/emacs.txt")
(":WORK:" . "~/work.txt"))
"*List of (REGEXP . FILENAME).
If an entry matches REGEXP, it will be storied in FILENAME.
The first regular expression that matches is used.")
(eval-after-load 'remember
'(progn
(defadvice remember-region (around wicked activate)
"Save notes matching `wicked/remember-keywords' elsewhere."
(let* ((b (or beg (min (point) (or (mark) (point-min)))))
(e (or end (max (point) (or (mark) (point-max)))))
(string (buffer-substring-no-properties b e))
(done nil)
(keywords wicked/remember-keywords))
(while keywords
(when (string-match (caar keywords) string)
(let ((remember-data-file (cdar keywords)))
ad-do-it)
(setq keywords nil done t))
(setq keywords (cdr keywords)))
(unless done
ad-do-it)))))
You can even configure Remember to use different handler functions. This chapter covers several note-taking systems for Emacs, and you may want to use Remember to save to more than one note-taking system. For example, you can set up C-c r p to start a Remember buffer that saves to Planner, and C-c r o to start a Remember buffer that saves to Org. Here's the code for your ~/.emacs:
(defun wicked/remember-to-org ()
"Remember to Org."
(let ((remember-annotation-functions ;; (1)
(cons 'org-remember-annotation
remember-annotation-functions)))
(remember)
(set (make-variable-buffer-local
'remember-handler-functions)
'(org-remember-handler)))) ;; (2)
(defun wicked/remember-to-planner ()
"Remember to Planner."
(let ((remember-annotation-functions ;; (3)
(append planner-annotation-functions
remember-annotation-functions)))
(remember)
(set (make-variable-buffer-local
'remember-handler-functions)
'(remember-planner-append)))) ;; (4)
(global-unset-key (kbd "C-c r")) ;; (5)
(global-set-key (kbd "C-c r o") 'wicked/remember-to-org)
(global-set-key (kbd "C-c r p") 'wicked/remember-to-planner)
To learn more about configuring Remember with the different note-taking systems, read on!
On Technorati: wickedcoolemacs, book, emacs, remember
Random Emacs symbol: compilation-find-file - Function: Find a buffer for file FILENAME.
]]>
- [ ] Keeping Notes in Emacs
Structured vs Unstructured (outline, free-form)
Flat vs Hyperlinked
Private vs Public
File structure (one file, daily, snippets)
- [ ] Outline Notes with Org, Blorg
- [ ] Daily Notes with Planner
- [ ] Hyperlinked Notes and Muse
- [ ] Publishing Muse
- [ ] Publishing Planner, RSS
- [ ] Remember: quick note entry
- [ ] Snippets with Howm
- [ ] Blogging from Emacs - Wordpress, LJ, Blogger,Muse-Blosxom, EmacsAtomAPI
- [ ] Encrypted Notes (full file, segments) - MOSTLY WRITTEN
I find that thinking of a book as a collection of articles works out well for me. Starting with a rough outline like this, I'll write 2000-word articles of the kind that I'd write for Linux Journal or LinuxWorld, and then I'd put them into my outline and add transitions. After I write all the pieces, then I can write the introduction and the wrap-up sections.
Slowly getting the hang of this writing thing... =)
On Technorati: emacs, writing, wickedcoolemacs
Random Emacs symbol: message-narrow-to-headers-or-head - Function: Narrow the buffer to the head of the message.
]]>The feedback I'm looking for right now is:
Fiddly bits like formatting will wait for the second pass.
If you leave your feedback as comments on this post, I'm less likely to lose it in all the mail that's piling up in my inbox! =)
On Technorati: wickedcoolemacs, emacs, org, planner, writing
Random Emacs symbol: widget-specify-secret - Function: Replace text in FIELD with value of `:secret', if non-nil.
]]>Organizing your tasks into projects can help you plan ahead, track your progress, and stay motivated. Working from a project list allows you to plan your day or week instead of just reacting to other people's requests. Keeping your projects and tasks in Org makes it easier for you to review your completed tasks and plan the next step. If you include some text describing why you want to do the project and what your intended outcome is, this can help you stay motivated throughout a long project.
Projects can take a single day or several years. They can be large projects involving lots of other people and resources, or small projects that you do on your own. Projects may involve a handful of separate steps or a hundred things you need to do in order to achieve your goal. The important thing is that there is more than one step. If you organize your task list so that related tasks are together, then you'll find it easier to get a sense of where you are, where you're going, and what you need to do next.
In this section, you will learn how to:
I'll assume that you're using Emacs 22, and that you've set up Org using an ~/organizer.org agenda file and the basic configuration suggested in either "Org and GTD" or "Org as a Day Planner." I'll also assume that you're familiar with switching between the Org agenda view and the Org organizer file, and that you're comfortable navigating around Emacs.
The examples I'll use focus on yearly goals. You might also have short-term projects or long-term plans. Feel free to adapt the examples as needed.
Open your ~/organizer.org file. If you've collected your tasks as suggested in the previous sections on Using Org as a Day Planner or Using Org for GTD, your ~/organizer.org file might look something like this:
* Inbox ** TODO Read Emacs Lisp intro ** TODO Write yearly review ** TODO Exercise ** TODO Browse the Emacs Wiki
Create new top-level headings for this year's goals or the projects that you're working on. You can create a top-level heading by typing * and the heading, like this:
* Learn more about Emacs * Go on vacation ... * Inbox ** TODO Read Emacs manual ...
It's a good idea to add the projects to the beginning of the file (before your Inbox) because M-x remember adds new tasks or notes to the end of the file. If the last major heading as * Inbox, then the tasks and notes are automatically added to it. If the last major heading is a project, the tasks and notes may get misfiled.
If you're a top-down planner, you'll find it easy to list your projects. In fact, you might have a ten- or even twenty-year plan already written down. You'll find this section straightforward, because you're already used to planning in terms of projects. Go ahead and adapt the examples to your long-term plans.
If you're a bottom-up planner, you might be giving me a weird look right now. "Yearly goals? I'm lucky if I can figure out how to get through the next day!" This section will also show you how to find the recurring themes in your task list and organize them into projects. Give project-based planning a try for a month. If this way of thinking doesn't work for you, Org will work just fine without projects.
You probably have projects, even if you can't think of any right now. Review your ~/organizer.org file. If you haven't written down everything you needed to do yet, go through the section on basic configuration for your planning style (GTD or day planning). Once you have a list of things to do, you can then review it for big tasks, related tasks, and other project clues.
Read your tasks and ask yourself the following questions:
Big tasks need to be broken down into smaller tasks anyway, and organizing them into projects will help you make them more manageable. You may not want to organize all of your other tasks into projects. If you can pick some major themes to focus on, though, then you'll be able to see how the different things you do are related to each other, and you'll be able to think of other ways to work on those projects. If you're starting out with project-based thinking, maybe you can pick three to five projects and try to do a little work on each of them every day.
If you still don't identify any projects, that's okay. You can use Org as a straightforward task list. Jump ahead to the section on "Tags", as you'll probably find that useful.
On the other hand, if this step turns up plenty of projects, resist the temptation to over-correct and end up with hundreds of projects. I find that more than 7 active projects gets hard to manage. Pick a few main themes that you'd like to work on, and make everthing else something you plan to do someday.
Now that you have project headings, think of the next thing you need to do in order to move those projects forward. If you've already written down those tasks, move them under the appropriate project heading. If not, type them in.
In order for a task to belong to a project, it needs to be under the heading and at a lower level. For example, if your project heading has one star, like this:
* Learn Emacs
then your TODO headings should have two stars, like this:
* Learn Emacs ** TODO Read the Emacs manual ** TODO Read the Emacs Lisp Intro manual (eintr) ** TODO Install the Emacs source code
If your tasks are not at the right level, you can add the star manually by editing the heading. You can also use M-right and M-left (org-metaright and org-metaleft) while on a heading in order to promote or demote it, and you can use M-S-right and M-S-left (org-shift-metaright and org-shift-metaleft) to promote or demote entire subtrees.
To move tasks up and down within the project, you can copy and paste the text. You can use M-Up and M-Down (org-metaup and org-metadown) to move subtrees.
Think of tasks you can do within the next week in order to move each of your projects forward. Add next actions to all of your active projects. Creating next actions for each of your projects makes it easier to remember to keep moving forward.
If you have many tasks in a project, you may want to organize them into sub-projects. For example, you might divide a software project into components. If you're starting from scratch, you can create the project structure by typing in more stars for sub-project headings. For example:
* Learn Emacs ** Read mail *** TODO Choose a mail client *** TODO Install and configure the mail client *** TODO Send a message ... ** Browse the Web *** Read through the w3m documentation ...
You can also demote an existing project into a subproject. Use M-S-right (org-shift-metaright) on the current project headline in order to demote it to a sub-project. This will also demote the tasks within the project. For example, demoting this:
* Learn Emacs ** TODO Choose a mail client ** TODO Install and configure the mail client ** TODO Send a message
will result in this:
** Learn Emacs *** TODO Choose a mail client *** TODO Install and configure the mail client *** TODO Send a message
Then you can change the heading and add another heading above it, like this:
* Learn Emacs ** Read mail *** TODO Choose a mail client *** TODO Install and configure the mail client *** TODO Send a message
This kind of organization is optional, but it can help you get an idea of the overall structure of your project. Using different levels allows you to hide and show groups of headings by pressing TAB on the heading.
Now that you've created your project tasks and organized them the way you want, it's time to actually do the work.
If you use Org as a day planner, you may also want to schedule the tasks onto specific days with C-c C-s (org-schedule). You can review your daily or weekly agenda with C-c a a (org-agenda, org-agenda-list), switching between daily and weekly views with d and w (org-agenda-day-view and org-agenda-week-view).
You can work with the next actions in the same way you work with other tasks, rescheduling them or marking them as STARTED, WAITING or DONE with the keyboar shortcuts introduced in the previous section on Org and GTD or Org as a Day Planner.
When you finish a project task, think of the next action you can do in order to move that project forward. If you use Org as a day planner, schedule the next action onto your calendar as well.
You can review your projects by opening your ~/organizer.org and browsing through the headings. S-tab (org-shifttab) changes the visibility of headings, so you can see just the top-level headings or all the details. You can use TAB (org-cycle) on a headline to show or hide subtrees.
If you have many projects, you'll want a shorter view of just your active projects. To make it easier to review projects, add a PROJECT tag to all your active project headlines. You can add a tag by editing your ~/organizer.org and moving your cursor to the headline and typing C-c C-c (org-ctrl-c-ctrl-c), followed by the name of the tag (PROJECT). You can also manually type :TAGNAME: at the end of the headings, like this:
* Learn more about Emacs :PROJECT: ** TODO Read the Emacs manual ** TODO Read the Emacs Lisp Intro manual (eintr) ... * Go on vacation :PROJECT: ... * Inbox ...
You might classify some of your projects as someday/maybe - things that are nice to think about, but which you aren't acting on right now. Tag your inactive or someday/maybe projects with PROJECT and MAYBE. If you're editing the ~/organizer.org file, just add :PROJECT:MAYBE: to the heading. If you're tagging it with C-c C-c (org-ctrl-c-ctrl-c), specify PROJECT:MAYBE as the tag.
* Learn more about Emacs :PROJECT: * Go on vacation :PROJECT:MAYBE: ... * Inbox ** TODO Read Emacs manual ...
Now that you've tagged your projects, you can view just your project headlines with a custom agenda command. Custom agenda views are a terrific feature in Org, and you can do a lot with them if you know a little Emacs Lisp. Here's what you need to add to your ~/.emacs in order to get a list of your active projects and your someday/maybe projects:
(setq org-agenda-custom-commands
'(("p" tags "PROJECT-MAYBE-DONE" nil) ;; (1)
("m" tags "PROJECT&MAYBE" nil) ;; (2)
;; ... put your other custom commands here
))
With these two commands, you can quickly review your active and inactive projects. To jump to a project from the agenda view, move your cursor to the heading and press RET (org-agenda-switch-to). If you want to scan through the projects quickly, use f (org-agenda-follow-mode) in the agenda view to turn on follow mode, then move to different headlines. Another window will show the headline at point.
If you review your projects at least once a week, you'll find it easier to make regular progress. If you want to combine your weekly/daily review with your project list, you can do that with org-agenda-custom-commands as well. Here's what you'd put in your ~/.emacs:
(setq org-agenda-custom-commands
'(("p" tags "PROJECT-MAYBE-DONE" nil)
("m" tags "PROJECT&MAYBE" nil)
("a" "My agenda" ;; (1)
((org-agenda-list) ;; (2)
(tags "PROJECT-MAYBE-DONE"))) ;; (3)
;; ... put your other custom commands here
))
This configures C-c a a (org-agenda, "My agenda") to display your agenda and a list of your project headings. Again, you can press RET (org-agenda-switch-to) to jump to a project from its heading in the agenda view.
You might have forgotten to create next actions for some of your active projects. Org can help you find projects which don't have next actions. You can then decide if the project is complete or if it needs further action.
To list stuck projects, you first need to tell Org what a stuck project is. The following code defines a stuck project as an active project (not tagged "maybe" or "done") that doesn't have a TODO or STARTED action, if the body of the project doesn't contain "*lt;IGNORE>". Add this to your ~/.emacs and evaluate it:
(setq org-stuck-projects
'("+PROJECT/-MAYBE-DONE" ("TODO" "STARTED") nil "\\<IGNORE\\>"))
Then you can use M-x org-agenda-list-stuck-projects or C-a a # (org-agenda, org-agenda-list-stuck-projects) to show only the stuck projects. Review this list and jump to the headlines.
Want to add that to your custom agenda view? Modify the org-agenda-custom-commands value in your ~/.emacs to be like this:
(setq org-agenda-custom-commands
'(("p" tags "PROJECT-MAYBE-DONE" nil)
("m" tags "PROJECT&MAYBE" nil)
("a" "My agenda"
((org-agenda-list)
(org-agenda-list-stuck-projects) ;; (1)
(tags "PROJECT-MAYBE-DONE")))
;; ... put your other custom commands here
))
What about finished projects? You might want to keep them in your Org file, but they shouldn't show up in your active and inactive project lists. Org can keep track of those projects too.
If you look at the custom commands above, you'll notice the "-DONE" specifier. "DONE" is the tag we'll use to indicate done projects. To tag a project as done, move the point to the project heading and type C-c C-c (org-ctrl-c-ctrl-c). The tag prompt will default to the current tags. Just add "DONE" and press Enter. With the custom commands we've set up, projects tagged DONE will not show in your active, inactive, or stuck project lists.
You can also add the tag manually. For example, if the project heading is
* Learn Emacs :PROJECT:
and you're happy with your level of Emacs proficiency, then you can mark it as done by changing it to
* Learn Emacs :PROJECT:DONE:
If you have plenty of completed projects, your Org file might be quite large. You can mark a subtree for archiving by typing C-c C-x C-a (org-toggle-archive-tag). This hides it from most Org commands. You can also archive a tree into a different file with C-c C-x C-s (org-advertized-archive-subtree).
Now you can create projects, manage your project tasks, and review your active, inactive, and stuck projects in Org. You know how to mark projects as completed and how to archive them. You've also started using tags to dynamically generate reports from your Org file.
Tags can do a lot more. To find out what else you can do with tags, read the next section on "Tagging in Org".
On Technorati: wickedcoolemacs, emacs, org
]]>This program looks complicated, but it really isn't. In fact, I could have probably done something just as powerful with keyboard macros, not writing a single line of code. But the code was easy to write, and I figured that I'd keep it around just in case I needed to do something like this again.
After a little bit of manual tweaking, I got all the entries into http://sachachua.com/wp/ .
The ability to write short programs quickly and interactively has not only saved me so much time, but it's also made it possible for me to even _think_ of doing some things. =) I could probably have written the same snippets in Perl or Ruby, but being able to combine manual editing and automated operations in the text editor made it just so much faster. I really like being able to scan back and forth in buffers easily in Emacs, instead of thinking in terms of file streams as in other programming languages.
If you work with lots of text, I definitely recommend learning Emacs Lisp, or whatever language your editor can be programmed in. I started by reading other people's source code and the Emacs Lisp Intro and Emacs Lisp info files. I reread them countless times, picking up a little more each time I went through. Now Emacs Lisp is one of the first things I turn to whenever I want to save time doing something complex and repetitive on the computer, such as adding everyone's pictures to a wiki page. (That's a story for next time!)
Emacs is awesome stuff. More than 20 years old, it's the most advanced program I've ever used. What makes it special? It's _definitely_ optimized for the power user, and it provides so many reasons to become one.
Random Emacs symbol: gnus-summary-goto-last-article - Command: Go to the previously read article.