Bending Emacs – Episode 2

Álvaro Ramírez is back with the second video in his new series. This video is about making some simple UI adjustments to Emacs to bend it into looking and acting in a way meets your needs. That doesn’t sound too exciting except that Ramírez shows all this by doing something that many of us will find useful: He starts a separate Emacs instance and arranges for the changes he specifies in the first instance to appear in the second instance.

That’s actually easier than it seems. Starting the second instance is just a matter of calling Emacs with some command line arguments to specify where to find init.el and where to put temporary Emacs variables, such as the lock files and socket pointers. If you need to invoke independent instances of Emacs, it’s probably worthwhile capturing the command into an Emacs function or shell script.

Arranging for commands to take place in the second instance is also easier than you might think. For that Ramírez defines a macro that takes the command as an argument and makes a call to the other instance via emacsclient asking it to execute the command. If that sounds mysterious, take a look at the code. It’s straightforward and easy to understand.

Looking at the code for all these snippets is easy because Ramírez has it all in a blog entry. You can capture the code for invoking another Emacs instance and the macro for sending commands to it and use them in your own work.

The particular customizations that Ramírez makes are beside the point. They’re what works for him and even if you want to steal some of them, your ideal Emacs UI almost certainly differs. The real value of his video, I think, is that it shows you an easy way to set up an environment to try prospective changes.

The video is 14 minutes, 37 seconds so it should be reasonably easy to fit into your schedule. It’s definitely worth 15 minutes of your time.

Posted in General | Tagged | Leave a comment

Why RSS Is The Right Thing

Tom Burkert has a nice post in which he extols the virtues of RSS. You might wonder what there is to extol. RSS is a simple protocol—the “simple” is in its name, after all—and it’s pretty easy to implement. That and the fact that it was free and open source was why it beat the industry attempt to preempt and monetize syndication.

Like many people, Burkert started off using Facebook to locate and consume content but he soon found that Facebook was making choices on which content he should see that he didn’t agree with. The problem with Facebook and most other social media is that they consider you the product, not the customer. That means that everything they do is focused on increasing engagement and serving ads. You and your needs don’t matter at all, only your eyeballs do.

As Burkert says, the solution to the junk content and user hostile feed algorithms, ironically, predates social media. It is, of course, RSS. There are no algorithms mandating what you see: you are in complete control.

I, of course, use the excellent elfeed to read my RSS feed from within Emacs but you don’t have to be an Emacs user—Burkert doesn’t seem to be—to enjoy the advantages of RSS. There are plenty of RSS readers available for all platforms and despite Google’s attempt to kill RSS by abandoning Google Reader, the protocol is still in wide use because, it seems, not everyone likes being a product.

Take a look at Burkert’s post for more reasons that you, too, should embrace RSS and for some suggestions for getting started with RSS if you’re a new user. If you’re stuck on Facebook or some other social media for your content, you really need to take a look at his post. And if you’re an Emacs user you really need to check out elfeed. Take a look at these excellent videos [1, 2, 3] from Mike Zamansky if you want to learn more and see it in action.

Posted in General | Tagged , , | Leave a comment

Printf Style Debugging Of Elisp

All the cool kids use debuggers for debugging their code. In most situations that’s the right answer. After all, you can set breakpoints, step through your code, and examine values at each step. If you want a detailed view into what your code is doing, debuggers are the best solution.

Sometimes, though, they’re a bit heavy weight and way more than you need. Often all you need is a few strategically placed printf​s to get the necessary information to solve the problem. Sometimes, for various reasons, you can’t use a debugger so you’re forced to fall back on printf.

Marcin Borkowski (mbork) has a nice example of the latter. He was debugging an Elisp function that messed with windows and that interfered with Edebug’s use of those windows. The answer, of course, was to fall back to the printf method. The natural solution was to use the Elisp message function but there were some problems. The first problem was easy. The messages appeared in the minibuffer and disappeared before he could read them. He fixed that by wrapping message in a function that waited for a key press before continuing.

Then he noticed that virtually all his invocations were of the form (message "var1: %s, var2: %s" var1 var2), and that it made sense to abstract that a bit into a new function. That brought a couple of new problems but they were also easily dealt with.

Mbork’s post is well worth reading and his code is worth a bit of study too. I like the way he just digs in and solves the problems without too much worry about whether or not it’s the best way. At the end of the day, he solved his problem and that’s what matters.

Posted in General | Tagged , | Leave a comment

Capturing Fleeting iOS Notes Org Mode

Over at the Emacs subreddit, ValuableBuffalo is looking for a way of taking what he describes as “fleeting notes” on his iPhone and capturing them to an Org file in his Git repository. As soon as I saw that, I immediately thought of Álvaro Ramírez’s Journelly. It’s an app that Ramírez describes as “like tweeting but for your eyes only”.

Irreal readers know that I’m a huge fan of Journelly and have written about it extensively. My use case is similar to what ValuableBuffalo is looking for: I use Journelly as a memo book so I capture random notes during the day and they are automatically exported to all my Apple devices. My typical is invocation is to bring up Journelly, press the dictation button, record my entry, and save it. Journelly captures the time and my location automatically so I don’t have to worry about that.

Ramírez himself answered ValuableBuffalo and pointed him to working copy to help with the Git interface. I’m happy to have my entries collected in a single Org file on my laptop so I don’t bother with collecting them into Git directly. I suppose I could capture the journelly.org file to Git but I haven’t yet bothered.

Another user, JDRiverRun, mentions using the Apple Notes app for capturing the notes. That’s what I used to do but Journelly automatically adds a date/time stamp and records my location when taking the note. Journelly really is much better for this type of application than Notes.

If you have a need similar to ValuableBuffalo’s, take a look at Journelly. You’ll probably find that it’s a good fit for your needs.

Posted in General | Tagged , | Leave a comment

How RSS Beat Microsoft

As many of you know, I’m a big fan of RSS and use it everyday to scour the Internet for potential Irreal topics and also just for topics that I find interesting or useful. I was there at the beginning—although I wasn’t an early adopter—but I’d never heard of its erstwhile big company competitor Information and Content Exchange (ICE). Big name companies like Microsoft, Adobe, CNET, and others early on smelt the potential for monetizing content syndication and financed the development of ICE.

It was the typical big company fever dream: large, complicated, expensive, and with a protocol that had lots of fields that worried about things like licensing the content. A year later, RSS hit the scene and was an immediate success with “small” publishers like bloggers. Unlike ICE, it was small, easy to implement, and open. Anyone could, and did, make their own implementation.

This interesting, but little known, story is told in a blog post over at Buttondown.com. The post makes the comparison of RSS versus ICE to that of VHS versus Betamax. Although there are all sorts of theories as to why VHS won that particular battle, the Buttondown post claims that it was because VHS was cheaper, simpler and open. Just like RSS.

It’s a story that we see repeated often in our field: some basically freelance guys for their own reasons and often on their own time put together an ad hoc solution to some problem and their solution takes over the world. Even the OSI-TCP/IP wars can be squeezed into this paradigm. The large, complex, government committee designed OSI protocols were expected by many to swamp the TCP/IP upstarts and yet many of today’s younger engineers have probably never heard of OSI and certainly don’t know any of its details except, perhaps, for its famous 7 layer model.

The ICE-RSS wars is an interesting story that I haven’t come across before. It’s definitely worth a couple of minutes of your time if only to see Microsoft and other big companies taking their lumps.

Posted in General | Tagged , | Leave a comment

Ashton Wiersdorf On Organizing Papers For Research

Ashton Wiersdorf has a nice post on how he organizes papers, notes, and citations for his research. Of course, Emacs is at the center of that process and it’s another aspect of Emacs use that fascinates me. A couple of weeks ago I wrote about Kiran Gopinathan’s method of doing paper reviews, which overlaps considerably with Wiersdorf’s post. Two and a half years ago, I wrote how John Kitchin does the same thing.

Wiersdorf is a self-described Emacs maximalist but he is, nevertheless, also a heavy Zotero user. I’ve written about Zotero many times before. It a package for storing, managing, and building the bibliographies for papers. See this Wikipedia article for details. Wiersdorf’s post describes how he combines Zotero and Emacs to manage his research papers.

He also recommends the citar package for handling citations. John Kitchin’s Org-ref is another excellent choice for this but the citar package works well with Zotero. Lots of folks swear by Zotero and if you’re one of those people, citar may be for you.

The other major package that Wiersdorf uses is Protesilaos Stavrou’s Denote. He describes it as a Zettelkasten-like package. Gopinathan uses Org-roam for the same thing so you should take a look at both packages to see which you like best.

Finally, Wiersdorf uses the citar-denote package to integrate denote and citar. It ties citar and denote together and allows you to easily access papers from their citation. Take a look at Wiersdorf’s post for some details.

The most important thing, Wiersdorf says, is to use Emacs to build your own system. It’s not an editor, he says, but a toolkit to build your ideal editor. That’s differs a bit from my usual definition but is certainly a good description. Regardless, the goal is to make Emacs into an editor that meets your exact needs.

Posted in General | Tagged | Leave a comment

Blogging With Emacs

Chris over at Entropic Thoughts has some thoughts on blogging and Emacs. He’s conflicted. On the one hand, he yearns for a simple, static blog generator that he can understand. On the other hand, he uses Org Babel a lot and it’s an important part of his blogging workflow, which involves generating graphs in R for a lot of his posts.

He’d like to write a simple blog exporter that he understands and can modify but feels that it’s too hard to include the Org Babel functionality. I feel his pain. I use WordPress for Irreal and although it mostly works well, I sometimes wish I had a simple static generator that didn’t depend on a complicated infrastructure like WordPress. But every time I look into it, the effort doesn’t seem worth the gain and, as I say, WordPress mostly does a good job of meeting Irreal’s needs.

On the positive side, I do write my blogs in Org mode and have access to all its tools. Before my provider started blocking the XML-RPC protocol, I simply used Org2blog, which took an Org buffer and took care to exporting it directly to WordPress. These days I have a slightly more complicated process. I have a command that converts my Org buffer to HTML and saves it to the clipboard. Then I invoke WordPress and paste the HTML into its HTML input buffer. That’s not ideal but it’s pretty simple and I certainly understand it, at least until I push the WordPress publish button. Every once in while I try publishing with Org2blog because that is truly easiest way to go from Org to WordPress. Maybe I try that with this post.

In any event, it is possible to publish directly from Org even to a static blog fairly easily simply by converting the buffer to HTML and then doing whatever yo need to do to push it to your site.

Posted in General | Tagged | Leave a comment

Org-transclusion

Over at the OrgRoam subreddit, thephatmaster asks for some help in using org-roam to organize and write his research. As of this writing, he hasn’t gotten much response but there is a comment that recommends he take a look at org-transclusion. I hadn’t heard of it so I took a look.

The idea is that you can include content from another file in an org document by means of a link. It’s sort of like a # INCLUDE: but a bit more flexible. You can, for example, make changes in the destination file and have them reflected back to the source file.

You can also specify which lines you want from the source file and have only those imported. There’s also a nice integration with code blocks that the author, nobiot, talks about in this video (9 minutes, 45 seconds).

This looks like a mature package that’s been around for at least 4 years and is still be maintained with the last update 9 months ago. There’s a comprehensive manual available online as well as an info file. The software is available from GNU ELPA and so is easy to install.

This seems like a really good package that can help organize research and serve as a way of reusing research notes. Take a look at the GitHub repository for a list of ways you can use it.

Posted in General | Tagged , | Leave a comment

Bending Emacs: Episode 1

Álvaro Ramírez is trying a different way of communicating his ideas and projects to us. He has a new YouTube channel for this and has posted his first video, Bending Emacs – Episode 1.

It’s a very nice step-by-step explication of how to use his DWIM shell command to translate one or more video files to animated GIFs. I first wrote about DWIM shell command three years ago and have mentioned it several times since.

This problem was just what DWIM shell command was developed for: getting a handle on the complexity and confusion of FFmpeg command line options. Even though Ramírez does this sort of thing all the time, he has trouble remembering all the FFmpeg options. For this particular project he fell back on relying on an LLM to give him the magic formula but if you’re not an AI user, you can always read through the documentation.

After that, it’s a simple matter of using DWIM to capture the process. Ramírez also shows how to capture the process as an Elisp function so that it can be invoked seamlessly from Emacs whenever it’s needed.

Those of you who like to get your tech hits visually will enjoy this video. The blog post has a good précis of the video and the video itself is only 6 minutes, 15 seconds long so it’s easy to fit into your schedule.

Posted in General | Tagged | Leave a comment

The Author On Inhibit Mouse

Note

Sorry this is late. The Internet has been out all day here.

Post

James Cherti, the author of inhibit-mouse, has a blog post that talks about the package. Irreal wrote about the package last week but you may enjoy learning a little bit more about it first hand from its author.

Cherti discusses why you might want to disable the mouse and why he believes that inhibit-mouse is a better solution than the disable-mouse package. The majority of his post explains how to configure the package: it turns out that it’s very configurable. The information in Cherti’s blog post is much the same as the README on his GitHub respository for the package so you can read either one.

As I said last week, it’s really easy to generate unintended mouse actions especially if you’re working on a laptop with a trackpad. Inhibit-mouse is an easy way of preventing that and helping you wean yourself from Emacs mouse usage.

Despite what you read here on Irreal and elsewhere, there isn’t really anything wrong with using a mouse with Emacs or any other app but if you prefer not to or, if like me, you find yourself making inadvertent mouse clicks, inhibit-mouse or disable-mouse are fairly easy ways to solve the problem.

Posted in General | Tagged | Leave a comment