{"id":489,"date":"2012-08-08T00:00:00","date_gmt":"2012-08-08T05:00:00","guid":{"rendered":"http:\/\/www.alandmoore.com\/blog\/?p=489"},"modified":"2012-08-10T14:57:32","modified_gmt":"2012-08-10T19:57:32","slug":"how-and-why-to-dump-your-word-processor","status":"publish","type":"post","link":"https:\/\/alandmoore.com\/blog\/2012\/08\/08\/how-and-why-to-dump-your-word-processor\/","title":{"rendered":"How and Why to dump your Word Processor"},"content":{"rendered":"<p>The word processor has been a part of computing platforms since the earliest days of the home computer; I&#8217;ve used a number them over the years, including PFS-write on the Apple IIc, WordPerfect (both DOS and Windows versions), Microsoft Word, OpenOffice, and AbiWord.\n<\/p>\n<p>\nA couple years ago, though, I got frustrated with the whole word processor concept, and found a way to create text documents that works a lot better for me. This article aims to describe the how and why of that move, for the benefit of others who find they just don&#8217;t like working with word processing software.\n<\/p>\n<p><!--more--><\/p>\n<div id=\"outline-container-1\" class=\"outline-2\">\n<h2 id=\"sec-1\">Wait, what&#8217;s wrong with word processors??<\/h2>\n<div class=\"outline-text-2\" id=\"text-1\">\n<p>\nI&#8217;m sure someone reading this article is completely baffled at this point about what sort of problems I could possibly have with word processors.  I&#8217;ve met many people for whom a computer without Microsoft Office is practically a paper-weight, and for whom the primary purpose of a computer is the creation and modification of Office documents. For such a purpose, the word processor is generally accepted as a proven, highly evolved, and time-tested tool.\n<\/p>\n<p>\nWithout dwelling too much on the negative, I&#8217;ll go through some of the issues I have with word processors that eventually led me to look for an alternative way of creating documents.\n<\/p>\n<\/div>\n<div id=\"outline-container-1-1\" class=\"outline-3\">\n<h3 id=\"sec-1-1\">They use WYSIWYG editing<\/h3>\n<div class=\"outline-text-3\" id=\"text-1-1\">\n<p>WYSIWYG<sup><a class=\"footref\" name=\"fnr.1\" href=\"#fn.1\">1<\/a><\/sup> editing has been a standard method of document creation since the early 1990s.  Most people appreciate being able to directly work on the &#8220;end product&#8221; without going through some meta-data middleman or having to imagine what the end product could look like.\n<\/p>\n<p>\nI&#8217;ve discovered that I don&#8217;t like it.\n<\/p>\n<p>\nYou see, WYSIWYG assumes that you know or care what you&#8217;re going to &#8220;get&#8221; in the end.  Not every piece of text (nor even a significant minority of them) that I write is destined for paper.  In fact, often it&#8217;s not clear what the end format of a document is going to be.  It might get rendered to PDF for printing, or HTML for blog or online help content.  It might end up as part of a plain text README file bundled with source code, or it might just stay on disk as-is for me to refer to at a later time.\n<\/p>\n<p>\nEven when a document <i>is<\/i> bound for print, my brain doesn&#8217;t need the ever-present distraction of &#8220;what you get&#8221;.  I&#8217;ve found myself getting derailed from writing for hours looking for the perfect font for level three headers, or tweaking the perfect margin between paragraphs. Taking away this capability means I can focus on content and organization, rather than a final appearance which may not actually be the final appearance.\n<\/p>\n<p>\nAside from the distraction, though, WYSIWYG requires that a program do a whole lot of stuff &#8220;behind the scenes&#8221; to try to make editing as simple and straightforward as if you were working on the physical printout.  Sometimes it doesn&#8217;t do what you want, or sticks things in there you didn&#8217;t ask for<sup><a class=\"footref\" name=\"fnr.2\" href=\"#fn.2\">2<\/a><\/sup>.  I do not, in general, like programs that refuse to let me get under the hood, see what&#8217;s really going on, and edit the underlying nuts and bolts of my data directly.\n<\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-1-2\" class=\"outline-3\">\n<h3 id=\"sec-1-2\">They have serious mouse dependency<\/h3>\n<div class=\"outline-text-3\" id=\"text-1-2\">\n<p>When I compose a significant amount of text, I like to keep my hands on the keyboard.  Most modern word processors have some keyboard shortcuts, but they also seem to assume that you&#8217;re perfectly happy grabbing for the mouse when you need to do some moderately advanced editing routine.\n<\/p>\n<p>\nIt may seem trivial, but for me it&#8217;s highly non-ergonomic to constantly bounce between keyboard and mouse, especially when the mouse is a touchpad on a laptop.  Having to do it repeatedly is an exercise in frustration.\n<\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-1-3\" class=\"outline-3\">\n<h3 id=\"sec-1-3\">They have problems with File formats<\/h3>\n<div class=\"outline-text-3\" id=\"text-1-3\">\n<p>We finally, as of a couple years ago, have some open standards in the document arena; even so, modern word processing documents are so complex that the standards don&#8217;t seem to be able to accomplish what they fundamentally set out to do: enable people to exchange documents between different editors without losing or corrupting any work. That&#8217;s still pie in the sky.\n<\/p>\n<p>\nI&#8217;ve lost no small amount of work to the changing tides of file formats over the years.  Perhaps those days are behind us now, but with all the platform shifts going on right now, having your documents stuck in a format that only reliably opens in one program, which only runs on a certain platform, has got to be an inconvenience now and then.\n<\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-1-4\" class=\"outline-3\">\n<h3 id=\"sec-1-4\">They&#8217;re bloated, and command-line un-friendly.<\/h3>\n<div class=\"outline-text-3\" id=\"text-1-4\">\n<p>The older I get, and the more I need to get done, the less tolerant I am of software that wastes my time.  When I need to work on a file, I want to go from desktop to blinking cursor in as little time as possible.  Not after you&#8217;ve displayed your splash screen, read half a gigabyte off the hard drive, and painstakingly styled a bunch of widgets that I won&#8217;t even use.\n<\/p>\n<p>\nNot only that, but I&#8217;ve grown to be an old-school Linux user; I am never more than a keystroke or two from a BASH prompt, and I am just as comfortable with <i>grep<\/i> and <i>find<\/i> as you likely are with mouse clicks.\n<\/p>\n<p>\nIf I need to find a snippet of information in a file, I don&#8217;t want to have to load up some massive monolithic application just to get a piece of text.  I want to grep for it from a prompt and move on.  That&#8217;s and example of my workflow; it may be odd, but there you have it.  Word processing applications don&#8217;t fit into that workflow.\n<\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-1-5\" class=\"outline-3\">\n<h3 id=\"sec-1-5\">They aren&#8217;t Emacs<\/h3>\n<div class=\"outline-text-3\" id=\"text-1-5\">\n<p>If you aren&#8217;t an Emacs user, you might not understand; but once you start using Emacs, you eventually want to migrate all your computing tasks to it.  It&#8217;s an amazingly powerful editing environment, and as you begin to learn and use its more advanced editing features, you increasingly feel their absence in other environments.\n<\/p>\n<p>\nIn addition, a lot of the documents I have to prepare are technical documentation for code that I&#8217;m writing.  It&#8217;s nice to be able to do this in the same editor that I&#8217;m writing my actual code in, and not have to bounce between two big bloated programs with different behaviors and keyboard shortcuts.  I can use one program for everything I write, be it code, web pages, technical documentation, song lyrics, blog articles, etc.\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"outline-container-2\" class=\"outline-2\">\n<h2 id=\"sec-2\">The alternative<\/h2>\n<div class=\"outline-text-2\" id=\"text-2\">\n<p>\nSo maybe by now you&#8217;re wondering, if I don&#8217;t use a word processor, how do I compose documents?  In a word:  markup.\n<\/p>\n<p>\nIn a few more words, I use my \u00fcber-powerful text editor to compose documents in a lightweight markup language, which I can easily render to any end-format that I need.\n<\/p>\n<p>\nIf that sounds difficult, it&#8217;s not.  In fact, if you pick the right combination of text editor and markup language, it can be amazingly ergonomic and productive.\n<\/p>\n<p>\nSo let&#8217;s take a look at the choices you have with this approach.\n<\/p>\n<\/div>\n<div id=\"outline-container-2-1\" class=\"outline-3\">\n<h3 id=\"sec-2-1\">Text editor<\/h3>\n<div class=\"outline-text-3\" id=\"text-2-1\">\n<p>Is there really a choice here?  You want to use Emacs.  Of course you do.  OK, well, you don&#8217;t have to; but unless your text editor has some special modes for handling your chosen markup language, it&#8217;s going to be a bit tedious to do certain things.\n<\/p>\n<p>\nI suppose you&#8217;ll realize some of the benefits of the markup language approach even using notepad.exe, but what you really want is a text editor geared at programmers:  something that will at least give you syntax highlighting and the ability to run arbitrary shell commands on the current file (for quick rendering).\n<\/p>\n<p>\nI&#8217;m guessing you probably have a favorite editor already; but if not, it&#8217;s time to go Emacs, my friend.\n<\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-2-2\" class=\"outline-3\">\n<h3 id=\"sec-2-2\">Markup Language<\/h3>\n<div class=\"outline-text-3\" id=\"text-2-2\">\n<p>Here&#8217;s where you have some choices to make.  I haven&#8217;t tried every markup language under the sun, but I&#8217;ve been through a few.  Here are my impressions of some of the ones I tried.\n<\/p>\n<\/div>\n<div id=\"outline-container-2-2-1\" class=\"outline-4\">\n<h4 id=\"sec-2-2-1\">HTML\/XML<\/h4>\n<div class=\"outline-text-4\" id=\"text-2-2-1\">\n<p>When you hear &#8220;markup&#8221;, probably the first thing you think (if you actually know what common computing acronyms stand for) is HTML; or, if you&#8217;re a bit more modern and savvy, XML.  It&#8217;s the world&#8217;s most popular markup language, after all; and for a while, I attempted to compose documents directly in raw HTML.\n<\/p>\n<p>\nHonestly, though, HTML is not what you want to use.  It doesn&#8217;t matter if you&#8217;re a web developer extraordinaire who knows w3c specs inside and out, the fact is HTML and XML are equally painful both to type <i>and<\/i> to read in raw format.  All those angle brackets, verbose tags, and forward slashes get quickly painful to type, and it&#8217;s amplified by the fact that you need opening <b>and<\/b> closing tags.\n<\/p>\n<p>\nThe text itself is quickly buried in a forest of tags, making it difficult to read un-rendered.  Overall, despite its widespread popularity, HTML is just not a good markup for writing in.\n<\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-2-2-2\" class=\"outline-4\">\n<h4 id=\"sec-2-2-2\">Markdown<\/h4>\n<div class=\"outline-text-4\" id=\"text-2-2-2\">\n<p>Markdown is a popular markup language created mainly for blogging, with the express goal of making it simple to generate HTML with a simple, readable syntax.  So for example, if you had a bit of HTML like this:\n<\/p>\n<pre lang=\"html\">\r\n<h1>My super list of superness<\/h1>\r\n<p>This list is <em>SUPER<\/em><\/p>\r\n<ul>\r\n  <li>First List item<\/li>\r\n  <li>Second List item\r\n  <ul>\r\n    <li>First Sublist item<\/li>\r\n    <li>Second Sublist item<\/li>\r\n  <\/ul>\r\n  <\/li>\r\n  <li>Third list item<\/li>\r\n<\/ul>\r\n<\/pre>\n<p>\n&hellip;the equivalent Markdown would be more like this:\n<\/p>\n<pre lang=\"markdown\"> \r\n# My super list of superness\r\n\r\nThis list is _SUPER_\r\n\r\n+ First List item\r\n+ Second List item\r\n    + First sublist item\r\n    + second sublist item\r\n+ Third list item\r\n<\/pre>\n<p>\nAs you can see, the Markdown is much more type-able and readable than the HTML. Run this simple syntax through a Perl script, and you&#8217;ve got your HTML.  Markdown even allows you to insert raw HTML when its own syntax fails you,\n<\/p>\n<p>\nThe downside of Markdown is that it&#8217;s really only designed for writing simple HTML.  If you want to generate something else, or have a complex document, you may end up writing a significant amount of HTML (for instance, there&#8217;s no canonical way of creating tables in Markdown apart from using HTML tables&hellip; which I always found odd, since that&#8217;s one of the most painful aspects of writing raw HTML).\n<\/p>\n<p>\nMarkdown is quite popular, though; and for that reason, it was one of the first markup languages I looked at.  I didn&#8217;t get very far with it, though.\n<\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-2-2-3\" class=\"outline-4\">\n<h4 id=\"sec-2-2-3\">Restructured Text<\/h4>\n<div class=\"outline-text-4\" id=\"text-2-2-3\">\n<p>Restructured Text, or RST, was originally conceived of for the purpose of writing Python documentation; and all of Python&#8217;s built-in documentation is now written in it.  It shares a lot of syntax with Markdown, but it&#8217;s not specifically aimed at generating HTML (thought it often is used that way) and it boasts a few more features.  Here&#8217;s an example of RST, including a simple table:\n<\/p>\n<pre lang=\"rst\">\r\n==============================\r\nThe World's best document ever\r\n==============================\r\n\r\nChapter 1: Cool table, man\r\n==========================\r\n\r\nThe Characters\r\n--------------\r\n\r\n=====  ===========================\r\nName   Information\r\n=====  ===========================\r\nBob    Crazy wearer of pants\r\nRob    Bob's brother\r\nAmy    Odd nose-haver\r\nJed    Guy with old-fashioned name\r\n=====  ===========================\r\n\r\nThe Plot\r\n--------\r\n\r\nLots of **stuff** will happen to \/\/people\/\/ in this crazy crazy story.\r\n\r\n<\/pre>\n<p>\nBeing a bit of a Python hacker, and wanting something with some flexibility, I ultimately gravitated to RST and have been using it mostly happily for the last few years.  Most recently I was happy to find that <a href=\"http:\/\/github.com\">github<\/a> will automatically render my RST README files to HTML on my project sites.\n<\/p>\n<p>\nWhere RST started to let me down is in rendering.  The tools for rendering RST are a set of python scripts with names like rst2pdf, rst2html, etc.  These work decently, but it&#8217;s hard to get specific customization of the output without writing your own styles and templates (which is yet another API to learn&hellip;).  Most of the time I just end up going with the (rather &#8220;meh&#8221;) defaults.\n<\/p>\n<p>\nThe other area I grew disenchanted with RST about is the tools available.  Emacs has an RST mode available (rst.el), but apart from some (incomplete) syntax highlighting and some rendering shortcuts, it doesn&#8217;t offer much.  Finally, some of the syntax is just a little non-obvious (footnotes and URLs, for example), and I find myself looking it up all the time.\n<\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-2-2-4\" class=\"outline-4\">\n<h4 id=\"sec-2-2-4\">Emacs org-mode<\/h4>\n<div class=\"outline-text-4\" id=\"text-2-2-4\">\n<p>My current favorite, in which I&#8217;m writing this very text, is Emacs org-mode.\n<\/p>\n<p>\nFor the longest time, I thought org-mode was some kind of day-timer facility for Emacs, as that is how it&#8217;s often billed.  Since I seem to be allergic to any tool which promises to organize and schedule my life, I never quite took to org-mode.\n<\/p>\n<p>\nEven so, I kept hearing and reading about all the cool stuff you can do with org-mode, and got curious; I discovered that org-mode, really, is just a markup language.  It&#8217;s a very specific markup language for creating organized, hierarchical documents, yet it supports a huge range of features, and one can easily insert snippets of other markup languages.\n<\/p>\n<p>\nIt&#8217;s not just a markup language though; it&#8217;s also an extensive Emacs mode chock-full of tools to manipulate and use your org-mode documents.  It&#8217;s got nice features like being able to fold up sections or use includes. It has strong support for meta-data and things like tagging, which is how it came to be used as a scheduler\/calendar application (you can date-tag entries in various ways).  The Emacs community seems to have given org-mode a de-facto blessing simply on the basis of the number and variety of tools<sup><a class=\"footref\" name=\"fnr.3\" href=\"#fn.3\">3<\/a><\/sup> available for it.\n<\/p>\n<p>\nOrg documents can be exported to (reasonably clean) HTML, or (by way of LaTeX) PDF files.  I found the latter to be a little troublesome at first, since the default LaTeX template is ugly like the 1990s; but after applying some tweaks and copy-pasta&#8217;ing some alternate styles from various emacs blogs, I was able to make a default style that I liked.\n<\/p>\n<p>\nThe cons of org-mode are that some things require the use of metadata calls and other non-obvious syntax; I had to learn a bit more about LaTeX than I originally wanted to so that I could render PDFs the way I wanted.  I think RST is a bit cleaner in some situations, such as quoting blocks of code.\n<\/p>\n<p>\nOf course, outside of Emacs, I imagine that editing org-mode markup is rather a drag, and probably not supported at all.  So if you&#8217;re not an Emacser, it&#8217;s probably not going to make your short list.\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"outline-container-3\" class=\"outline-2\">\n<h2 id=\"sec-3\">The advantages<\/h2>\n<div class=\"outline-text-2\" id=\"text-3\">\n<p>\nRegardless of the chosen markup, the advantages of this method are mostly the same; in no particular order:\n<\/p>\n<ul>\n<li>My documents are readable and editable regardless of what device, OS, or applications are available to me (everything has a text editor, even phones nowadays).\n<\/li>\n<li>I can use the text editor of my choice, as well as any text-manipulation tool available to me (sed, grep, etc.)\n<\/li>\n<li>I can write without a thought or premature commitment to the cosmetics of the end result.\n<\/li>\n<li>It satisfies my programmer sense of separation (content is separate from presentation, mechanism from policy, data from logic).\n<\/li>\n<li>I don&#8217;t have to use a mouse.\n<\/li>\n<li>I can work on a document on a remote system across an SSH WAN link without the overhead of forwarding X11 (yes, I&#8217;ve done this).\n<\/li>\n<li>My documents can end up as PDF, ODF, HTML, nicely-formatted plain-text, or a number of other formats with just a few keystrokes.\n<\/li>\n<\/ul>\n<p>\nMost importantly, I enjoy writing now more than I ever did in my word-processor days; and that means more writing.  And that, after all, is the point, no?\n<\/p>\n<div id=\"footnotes\">\n<h2 class=\"footnotes\">Footnotes: <\/h2>\n<div id=\"text-footnotes\">\n<p class=\"footnote\"><sup><a class=\"footnum\" name=\"fn.1\" href=\"#fnr.1\">1<\/a><\/sup> &#8220;What-you-see-is-what-you-get&#8221; &ndash; do I really need to spell that out in this day and age? Better safe than sorry, I guess.\n<\/p>\n<p class=\"footnote\"><sup><a class=\"footnum\" name=\"fn.2\" href=\"#fnr.2\">2<\/a><\/sup> I&#8217;ve had the worst time with bullet and numbered lists in just about every word processor I&#8217;ve tried.  There never seems to be an easy way to get out of them.\n<\/p>\n<p class=\"footnote\"><sup><a class=\"footnum\" name=\"fn.3\" href=\"#fnr.3\">3<\/a><\/sup> The one I&#8217;m use just now, for instance, is org2blog, a mode for posting directly to WordPress blogs using org-mode.\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The word processor has been a part of computing platforms since the earliest days of the home computer; I&#8217;ve used a number them over the years, including PFS-write on the Apple IIc, WordPerfect (both DOS and Windows versions), Microsoft Word, OpenOffice, and AbiWord. A couple years ago, though, I got frustrated with the whole word [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[9,12,22,46],"class_list":["post-489","post","type-post","status-publish","format-standard","hentry","category-technology","tag-blogging-2","tag-emacs","tag-instructional","tag-tips"],"_links":{"self":[{"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/posts\/489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/comments?post=489"}],"version-history":[{"count":41,"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/posts\/489\/revisions"}],"predecessor-version":[{"id":573,"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/posts\/489\/revisions\/573"}],"wp:attachment":[{"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/media?parent=489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/categories?post=489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alandmoore.com\/blog\/wp-json\/wp\/v2\/tags?post=489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}