# emacs

Published articles for emacs.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Emacs arbitrary code execution flaw

DevFeed: [Emacs arbitrary code execution flaw](<https://devfeed.tech/articles/emacs-arbitrary-code-execution-flaw-21541.md>)

Original publisher: [Read original article](<https://lwn.net/Articles/1094224/>)

Author: jzb

Published: 2026-09-14T15:20:00Z

Content type: news

Language: en

Sources: [LWN.net](<https://devfeed.tech/sources/lwn-net.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [vulnerability](<https://devfeed.tech/topics/vulnerability.md>), [Maintainers](<https://devfeed.tech/topics/maintainers.md>)

Tags: [cve](<https://devfeed.tech/tags/cve.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [maintainers](<https://devfeed.tech/tags/maintainers.md>), [release](<https://devfeed.tech/tags/release.md>), [vulnerability](<https://devfeed.tech/tags/vulnerability.md>)

### AI overview

An incomplete fix for the Emacs arbitrary code execution flaw CVE-2024-53920 has been identified. Viewing or editing untrusted files in modes other than Emacs's Lisp mode can also trigger arbitrary code execution. The issue affects Emacs 24 and newer, with a minimal fix queued for Emacs 31.2; upstream maintainers do not expect to backport it to older releases.

### Source excerpt

Sean Whitton has announced that the original fix for an arbitrary code execution flaw in Emacs (CVE-2024-53920) was incomplete. Bas Alberts discovered that viewing or editing untrusted files in modes other than Emacs's Lisp mode can also result in arbitrary code execution. This problem affects all Emacs versions affected by CVE-2024-53920. This means Emacs 24 and newer, and possibly also older versions. A minimal fix, attached, is queued up for release with Emacs 31.2. We (the Emacs upstream maintainers) don't expect to backport the fix to older Emacs releases ourselves. LWN covered the original vulnerability in December 2024.

## I have officially retired from Emacs

DevFeed: [I have officially retired from Emacs](<https://devfeed.tech/articles/i-have-officially-retired-from-emacs-20514.md>)

Original publisher: [Read original article](<https://nullprogram.com/blog/2026/04/26/>)

Published: 2026-04-26T00:00:00Z

Content type: article

Language: en

Sources: [Chris Wellons](<https://devfeed.tech/sources/chris-wellons.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [Vim](<https://devfeed.tech/topics/vim.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [GUI](<https://devfeed.tech/topics/gui.md>), [Maintainers](<https://devfeed.tech/topics/maintainers.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [article](<https://devfeed.tech/tags/article.md>), [blog](<https://devfeed.tech/tags/blog.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [cpp](<https://devfeed.tech/tags/cpp.md>), [elfeed](<https://devfeed.tech/tags/elfeed.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [gui](<https://devfeed.tech/tags/gui.md>), [maintainers](<https://devfeed.tech/tags/maintainers.md>), [net-11](<https://devfeed.tech/tags/net-11.md>)

### AI overview

The author describes retiring from Emacs after 20 years of daily use and gradually switching to modal editing and Vim. They replaced two Emacs-based applications they relied on, M-x calc and Elfeed, with stackcalc and Elfeed2, multi-platform native C++ GUI applications. The article also discusses the need for new maintainers and the trade-offs involved in achieving feature parity.

### Source excerpt

This article was discussed on reddit and on Hacker News. This past Tuesday I typed C-x C-c in Emacs for the last time after 20 years of daily use. Though nearly half that time was gradually retiring it, switching to modal editing, then to Vim. Emacs is a platform, and I'd grown accustomed to its applications, especially those I built myself. There was no particular hurry, so replacements came slowly. With my newly-acquired superpowers I could knock out the last two pieces in a few days' work, namely M-x calc with stackcalc and Elfeed with Elfeed2. I'm especially excited about the latter because it already exceeds the original. Both are multi-platform, native C++ GUI applications using native UI components. These actively-in-use packages require new maintainers (apply on the project's issues/discussion): @ (about) aio (about) bitpack Elfeed (apply here) Impatient (about) javadoc-lookup (about) json-rpc memoize (about) nasm-mode (about) simple-httpd (about) Skewer (about) weak-ref (about) x86-lookup (about) No wonder it took so long for me to move on! I'm not handing these off to just anyone, and you'll need to establish your reputation. Having already made contributions is a good sign, even if never merged. I'm willing to transfer them off my namespace, though you'll need to manage the Melpa hand-off (on which I'll sign-off). If there are no takers, these projects will be archived but not deleted. Trying out wxWidgets The Emacs Calculator is amazing and the best calculator I've ever used, which is why nothing I could find was going to replace it. My clone uses GMP and MPFR for multi-precision, so it's far faster, as to be expected, but it's not nearly at feature parity. It's missing esoteric features including symbolic processing. Though it's enough to cover all of my own usage. I can add more features later. The Emacs Calculator manual served as a specification when building stackcalc. Elfeed has been a cornerstone of my daily routines for the past 13 years. Nothing

## Building personal software with Claude

DevFeed: [Building personal software with Claude](<https://devfeed.tech/articles/building-personal-software-with-claude-21955.md>)

Original publisher: [Read original article](<https://blog.nelhage.com/post/personal-software-with-claude/>)

Author: Nelson Elhage

Published: 2025-01-27T20:00:00Z

Content type: article

Language: en

Sources: [Nelson Elhage](<https://devfeed.tech/sources/nelson-elhage.md>)

Topics: [Claude](<https://devfeed.tech/topics/claude.md>), [Rust](<https://devfeed.tech/topics/rust.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Obsidian](<https://devfeed.tech/topics/obsidian-md.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Markdown](<https://devfeed.tech/topics/markdown.md>), [Org mode](<https://devfeed.tech/topics/orgmode.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [claude](<https://devfeed.tech/tags/claude.md>), [code](<https://devfeed.tech/tags/code.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [json](<https://devfeed.tech/tags/json.md>), [markdown](<https://devfeed.tech/tags/markdown.md>), [profiling](<https://devfeed.tech/tags/profiling.md>), [rust](<https://devfeed.tech/tags/rust.md>), [software](<https://devfeed.tech/tags/software.md>)

### AI overview

The author describes using Claude, under supervision, to port parts of an Emacs package from Elisp to Rust. The resulting approach reduced one measured execution time from about 90 seconds to 15 milliseconds and changed the author's view of LLMs' role in software engineering.

### Source excerpt

Earlier this month, I used Claude to port (parts of) an Emacs package into Rust, shrinking the execution time by a factor of 1000 or more (in one concrete case: from 90s to about 15ms). This is a variety of yak-shave that I do somewhat routinely, both professionally and in service of my personal computing environment. However, this time, Claude was able to execute substantially the entire project under my supervision without me writing almost-any lines of code, speeding up the project substantially compared to doing it by hand.

## Between Editors and IDEs, Where Zed Falls

DevFeed: [Between Editors and IDEs, Where Zed Falls](<https://devfeed.tech/articles/between-editors-and-ides-where-zed-falls-13428.md>)

Original publisher: [Read original article](<https://zed.dev/blog/between-editors-and-ides>)

Author: Thorsten Ball

Published: 2024-03-13T00:00:00Z

Content type: article

Language: en

Sources: [Zed Industries - Blog](<https://devfeed.tech/sources/zed-industries-blog.md>)

Topics: [ide](<https://devfeed.tech/topics/ide.md>), [Vim](<https://devfeed.tech/topics/vim.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>)

Tags: [emacs](<https://devfeed.tech/tags/emacs.md>), [ide](<https://devfeed.tech/tags/ide.md>), [interviews](<https://devfeed.tech/tags/interviews.md>), [latency](<https://devfeed.tech/tags/latency.md>), [minimalism](<https://devfeed.tech/tags/minimalism.md>), [performance](<https://devfeed.tech/tags/performance.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [vim](<https://devfeed.tech/tags/vim.md>), [vs](<https://devfeed.tech/tags/vs.md>)

### AI overview

An interview with Zed's co-founders explores the product philosophy behind Zed, including where it sits between a lightweight editor and a full IDE. They discuss balancing powerful features with a fast, minimal user experience, as well as approaches to extensibility and scriptability.

### Source excerpt

Thorsten interviews co-founders Nathan, Max, Antonio about the product philosophy behind Zed and how they think about text editing along multiple axes: Emacs vs. Vim, IDE vs. Editor, Batteries included vs. Extensibility.

## We Have to Start Over: From Atom to Zed

DevFeed: [We Have to Start Over: From Atom to Zed](<https://devfeed.tech/articles/we-have-to-start-over-from-atom-to-zed-13565.md>)

Original publisher: [Read original article](<https://zed.dev/blog/we-have-to-start-over>)

Author: Thorsten Ball

Published: 2024-02-12T00:00:00Z

Content type: opinion

Language: en

Sources: [Zed Industries - Blog](<https://devfeed.tech/sources/zed-industries-blog.md>)

Topics: [Rust](<https://devfeed.tech/topics/rust.md>), [rustrover](<https://devfeed.tech/topics/rustrover.md>), [Atom](<https://devfeed.tech/topics/atom.md>), [ide](<https://devfeed.tech/topics/ide.md>), [Tree-sitter](<https://devfeed.tech/topics/tree-sitter.md>), [GPU](<https://devfeed.tech/topics/gpu.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>)

Tags: [electron](<https://devfeed.tech/tags/electron.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [gpu](<https://devfeed.tech/tags/gpu.md>), [ide](<https://devfeed.tech/tags/ide.md>), [interviews](<https://devfeed.tech/tags/interviews.md>), [rust](<https://devfeed.tech/tags/rust.md>)

### AI overview

An editorialized interview with Zed co-founders Nathan, Max, and Antonio examines the vision behind Zed and the technological choices that distinguish it from their earlier work on Atom. They discuss Rust, GPU acceleration, CRDTs, extensibility, and the goal of combining a lightweight text-editor experience with IDE capabilities.

### Source excerpt

Thorsten interviews co-founders Nathan, Max, Antonio about the vision and the technological choices behind Zed, how they went from Atom and Electron to Rust and GPUs with Zed.

## How Jane Street Uses Expect Tests for Fast, Interactive Test Development

DevFeed: [How Jane Street Uses Expect Tests for Fast, Interactive Test Development](<https://devfeed.tech/articles/what-if-writing-tests-was-a-joyful-experience-20214.md>)

Original publisher: [Read original article](<https://blog.janestreet.com/the-joy-of-expect-tests/>)

Author: James Somers

Published: 2023-01-09T00:00:00Z

Content type: article

Language: en

Sources: [Jane Street](<https://devfeed.tech/sources/jane-street.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Jupyter Notebook](<https://devfeed.tech/topics/jupyter-notebook.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [emacs](<https://devfeed.tech/tags/emacs.md>), [jest](<https://devfeed.tech/tags/jest.md>), [jupyter-notebook](<https://devfeed.tech/tags/jupyter-notebook.md>), [programming](<https://devfeed.tech/tags/programming.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

The article explains Jane Street's expect tests, a testing workflow that fills blank expected-output blocks with program results, shows diffs, and lets developers accept those changes directly in Emacs. It presents the approach as a fast way to explore examples and iteratively improve code.

### Source excerpt

At Jane Street we use a pattern/library called "expect tests" that makes test-writing feel like a REPL session, or like exploratory programming in a Jupyter notebook--with feedback cycles so fast and joyful that it feels almost tactile. Having used them for some time now this is the only way I'd ever want to write tests.

## Difftastic: A Structural Diff Tool for Programming Languages

DevFeed: [Difftastic: A Structural Diff Tool for Programming Languages](<https://devfeed.tech/articles/difftastic-the-fantastic-diff-22024.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2022/09/06/difftastic-the-fantastic-diff/>)

Author: Wilfred Hughes

Published: 2022-09-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [Tree-sitter](<https://devfeed.tech/topics/tree-sitter.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [Code](<https://devfeed.tech/topics/code.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [programming](<https://devfeed.tech/tags/programming.md>), [time](<https://devfeed.tech/tags/time.md>)

### AI overview

The article explains how difftastic implements structural diffs for programming languages. It describes parsing source code with tree-sitter, converting parse trees into a uniform s-expression representation, and calculating diffs as a shortest-path problem on a directed acyclic graph.

### Source excerpt

I've always wanted a structural diff tool, so I built difftastic. This has been the most fascinating, most frustrating, and most challenging program I've ever written. How Hard Could It Be? If you write Lisp code for a while, you start to see code like JSON. Everything is basically a list. json-diff example json-diff already exists, and it's pretty good. I wanted something similar for programming languages. After a huge amount of experimentation, I have something that works. In this post, I'll show you how it works. I won't show the many, many dead ends and failed designs along the way. We can pretend that I got it right first time. Parsing The Code If I want to compare two programs, I first need a parse tree for each program. I need an accurate lexer, a basic parser, and I need to preserve comments. tree-sitter was a great fit here. You define a grammar in JSON or JS, and it generates a C library that anyone can use. It's not 100% accurate (e.g. the C++ parser doesn't have preprocessor data) but it's more than good enough. list: ($) => seq("(", repeat($._sexp), ")"), vector: ($) => seq("[", repeat($._sexp), "]"), Here's an excerpt from my Emacs Lisp grammar. There's a ton of tree-sitter parsers available too. Difftastic now supports 44 different syntaxes, and adding new ones is so straightforward that my manual includes a worked example. Using difftastic with Emacs Lisp After parsing, difftastic converts the tree-sitter parse tree to an s-expression. Everything is a list or an atom. This uniform representation enables the diffing logic to work on any language that I can parse. For example, given a JavaScript program like this: foo(1, 2) tree-sitter parses it to this parse tree: expression_statement call_expression identifier "foo" arguments ( number "1" , number "2" ) difftastic then converts the tree to this s-expression representation: List { open_content: "", children: [ Atom "foo", List { open_content: "(", children: [ Atom "1", Atom ",", Atom "2", ], close_con

## 5 Tips to Boost Productivity When Working Remotely as an Engineer

DevFeed: [5 Tips to Boost Productivity When Working Remotely as an Engineer](<https://devfeed.tech/articles/5-tips-to-boost-productivity-when-working-remotely-as-an-engineer-27992.md>)

Original publisher: [Read original article](<https://tech.trivago.com/post/2020-04-17-5tipstoboostproductivitywhenworkingremot/>)

Author: Hendrik Kleinwächter

Published: 2020-04-17T00:00:00Z

Content type: tutorial

Language: en

Sources: [Trivago](<https://devfeed.tech/sources/trivago.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [async](<https://devfeed.tech/topics/async.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [Vim](<https://devfeed.tech/topics/vim.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>)

Tags: [async](<https://devfeed.tech/tags/async.md>), [code](<https://devfeed.tech/tags/code.md>), [communication](<https://devfeed.tech/tags/communication.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [engineering-culture](<https://devfeed.tech/tags/engineering-culture.md>), [pair-programming](<https://devfeed.tech/tags/pair-programming.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [programming](<https://devfeed.tech/tags/programming.md>), [terminal](<https://devfeed.tech/tags/terminal.md>), [tips](<https://devfeed.tech/tags/tips.md>), [vim](<https://devfeed.tech/tags/vim.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

An engineer shares practical advice for working remotely, including communicating more, using asynchronous communication, seeking help early on technical decisions, pairing through terminal sessions, and working together on calls.

### Source excerpt

Throughout my career, I've had times where I worked 100% remotely. Overall working remotely can have benefits and even make you more productive as an engineer. I would like to share 5 tips that ...

## Helpful: One Year On

DevFeed: [Helpful: One Year On](<https://devfeed.tech/articles/helpful-one-year-on-22021.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2018/06/22/helpful-one-year-on/>)

Author: Wilfred Hughes

Published: 2018-06-22T00:00:00Z

Content type: release

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>), [tracing](<https://devfeed.tech/topics/tracing.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [debugging](<https://devfeed.tech/tags/debugging.md>), [debugging-tools](<https://devfeed.tech/tags/debugging-tools.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [features](<https://devfeed.tech/tags/features.md>), [new-features](<https://devfeed.tech/tags/new-features.md>), [tracing](<https://devfeed.tech/tags/tracing.md>)

### AI overview

The article reviews Helpful one year after its first release, highlighting new Emacs debugging and tracing integration, buffer summaries, alias information, variable modification, expanded docstring handling, automatic links, and Info manual links. It also notes availability on MELPA and MELPA stable.

### Source excerpt

It's been a year since the first release of Helpful! It's gained a ton of new features, and I'd love to share the highlights with you. Tool Integration Emacs has some excellent built-in debugging tools that I wanted to expose within Helpful. These tools missed the first release, but I've now had the chance to build them. From a Helpful buffer, you can now toggle edebug on a function. This allows you to easily step through code. You can also toggle tracing. Tracing is an underrated built-in feature of Emacs. You can use it to confirm functions have the inputs and outputs you're expecting. It's really useful when exploring unfamiliar code. In this example, I've enabled tracing on projectile-project-root to see when it's called, and what values it's returning. Summaries After some great user feedback, Helpful buffers now start with a summary of what you're looking at. Users often want a direct link to the source code, so this is included in the summary. Helpful also mentions if a function is interactive or autoloaded, just like describe-function. If a user doesn't know what that means, those words now link to the relevant part of the Emacs manual! Aliases Helpful tries to show all relevant information for the current thing. I've overhauled aliases with this in mind. For example, if you view make-hash-table, you can now see that there is another alias of this function, but it's now deprecated. Modifying Variables It's now possible to set variables directly from Helpful buffers. This was inspired by counsel-set-variable, which has an excellent similar feature. If a variable is a defcustom, then Helpful also includes a link to the relevant part of Customize. Even Better Docstrings Helpful now handles all Emacs docstring syntax. It handles references to keybindings, keymaps, and even supports the obscure features like \<foo-map> and \='. fortran-mode is a great example of a docstring that uses a lot of Emacs docstring features. Recent versions of Helpful try even harder to

## Mastery, Confidence, and Learning Across Domains

DevFeed: [Mastery, Confidence, and Learning Across Domains](<https://devfeed.tech/articles/37-30368.md>)

Original publisher: [Read original article](<https://www.mdubakov.com/posts/mastery>)

Published: 2018-05-07T07:35:09Z

Content type: opinion

Language: ru

Sources: [Blog by Michael Dubakov](<https://devfeed.tech/sources/blog-by-michael-dubakov.md>)

Topics: [программирование](<https://devfeed.tech/topics/tag-2c039dce53be.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>)

Tags: [emacs](<https://devfeed.tech/tags/emacs.md>), [tag-2c039dce53be](<https://devfeed.tech/tags/tag-2c039dce53be.md>)

### AI overview

The author reflects on why deep mastery is rare and admirable, using examples from programming, design, service work, and other domains. The article argues that people can develop new skills by overcoming fear and entering unfamiliar areas themselves.

### Source excerpt

Заметка получилась несколько пафосной. Ну что же, иногда так бывает.

## Towards a GitHub Explorer: Deep editor integration for code review

DevFeed: [Towards a GitHub Explorer: Deep editor integration for code review](<https://devfeed.tech/articles/putting-the-i-back-in-ide-towards-a-github-explorer-20208.md>)

Original publisher: [Read original article](<https://blog.janestreet.com/putting-the-i-back-in-ide-towards-a-github-explorer/>)

Author: James Somers

Published: 2018-03-27T00:00:00Z

Content type: article

Language: en

Sources: [Jane Street](<https://devfeed.tech/sources/jane-street.md>)

Topics: [ide](<https://devfeed.tech/topics/ide.md>), [Code review](<https://devfeed.tech/topics/code-review.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Development](<https://devfeed.tech/topics/development.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [OCaml](<https://devfeed.tech/topics/ocaml.md>)

Tags: [code-review](<https://devfeed.tech/tags/code-review.md>), [developer](<https://devfeed.tech/tags/developer.md>), [development](<https://devfeed.tech/tags/development.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [github](<https://devfeed.tech/tags/github.md>), [ide](<https://devfeed.tech/tags/ide.md>), [ocaml](<https://devfeed.tech/tags/ocaml.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [web-browser](<https://devfeed.tech/tags/web-browser.md>)

### AI overview

Jane Street describes an editor-based workflow that combines branch sandboxes, pull request access, code review, editing, building, and collaboration in one environment. The system is built around Mercurial, Iron, OCaml, and Emacs, and the article presents it as an example that could inspire similar integrations for Git and other editors.

### Source excerpt

Imagine a system for editing and reviewing code where:

## The Emacs Guru Guide to Key Bindings

DevFeed: [The Emacs Guru Guide to Key Bindings](<https://devfeed.tech/articles/the-emacs-guru-guide-to-key-bindings-22020.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2018/01/06/the-emacs-guru-guide-to-key-bindings/>)

Author: Wilfred Hughes

Published: 2018-01-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>)

Tags: [beginners](<https://devfeed.tech/tags/beginners.md>), [commands](<https://devfeed.tech/tags/commands.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [guide](<https://devfeed.tech/tags/guide.md>), [mnemonic](<https://devfeed.tech/tags/mnemonic.md>), [shortcuts](<https://devfeed.tech/tags/shortcuts.md>)

### AI overview

This tutorial explains the logic behind Emacs key bindings. It covers mnemonic bindings, consistent patterns for movement and text operations, and ways to discover which commands and shortcuts are active.

### Source excerpt

Imagine that you hold Control and type your name into Emacs. Can you describe what will happen? - The 'Emacs Guru Test' Emacs shortcuts (known as 'key bindings') can seem ridiculous to beginners. Some Emacs users even argue you should change them as soon as you start using Emacs. They are wrong. In this post, I'll describe the logic behind the Emacs key bindings. Not only will you be closer to passing the guru test, but you might even find you like some of the defaults! There Are How Many? Emacs has a ton of key bindings. ELISP> (length global-map) 143 Emacs is a modal editor, so most key bindings are mode-specific. However, my current Emacs instance has well over a hundred global shortcuts that work everywhere. (Keymaps are nested data structures, so this actually undercounts! For example, C-h C-h and C-h f are not counted separately.) Even that is a drop in the bucket compared with how many commands we could define key bindings for. ELISP> (let ((total 0)) (mapatoms (lambda (sym) (when (commandp sym) (setq total (1+ total))))) total) 8612 How can we possibly organise all these commands? Mnemonic Key Bindings Basic commands are often given key bindings based on their name. You'll encounter all of these important commands in the Emacs tutorial. Command Key Binding eXecute-extended-command M-x Next-line C-n Previous-line C-p Forward-char C-f Backward-car C-b iSearch-forward C-s Mnemonics are a really effective way of memorising things. If you can remember the name of the command, you can probably remember the key binding too. Organised Key Bindings Many Emacs movement commands are laid out in a consistent pattern. For example, movement by certain amount: Command Key Binding forward-char C-f forward-word M-f forward-sexp C-M-f Moving to the end of something: Command Key Binding move-end-of-line C-e forward-sentence M-e end-of-defun C-M-e Transposing, which swaps text either side of the cursor: Command Key Binding transpose-chars C-t transpose-words M-t transpose-sexps

## These Weeks in Remacs III

DevFeed: [These Weeks in Remacs III](<https://devfeed.tech/articles/these-weeks-in-remacs-iii-22019.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2017/10/16/these-weeks-in-remacs-iii/>)

Author: Wilfred Hughes

Published: 2017-10-16T00:00:00Z

Content type: article

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [Rust](<https://devfeed.tech/topics/rust.md>), [pull-requests](<https://devfeed.tech/topics/pull-requests.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>), [Randomizer](<https://devfeed.tech/topics/randomizer.md>)

Tags: [contributions](<https://devfeed.tech/tags/contributions.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [floating-point](<https://devfeed.tech/tags/floating-point.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [rust](<https://devfeed.tech/tags/rust.md>)

### AI overview

This Remacs update reports contributions and feature progress, including Emacs functionality ported to Rust, new Rust APIs for elisp data structures, and evolving conventions for representing elisp types. It also discusses Rust-specific implementation techniques and an unsuccessful attempt to use a Rust hash map inside Remacs.

### Source excerpt

Time for another Remacs update: lots of contributions, a wide range of features, and even a logo! Contributing Since the last update, we've seen contributions from lots of new people. We've added @brotzeit and @shanavas786, bringing us to seven wonderful people who can approve your PRs. Speaking of PRs, we've merged an amazing 64 pull requests since the last update! If you're looking for a good feature for your first contribution, @brotzeit has been regularly adding new suggestions under the 'good first issue' label. Features Many Emacs features have now been ported to Rust, with new Rust APIs for accessing elisp datastructures. Here's an overview of the features that have landed. Arithmetic: arithmetic, floating point, random number generation (using a Rust RNG!), and comparisons. Symbols: symbol properties, interning, obarrays unbinding, keywords and indirect symbols. Checksums: MD5sum (using a Rust MD5 crate!). Windows: liveness check, type check, overlays and minibuffer, minibuffer check positions and margins. Processes: accessing, type check, data structures and names. Buffers: for the current thread, accessing, file names, size and modification. Point: bobp, bolp, eolp, markers, point-min, point-max forward-point and goto-char. Hash tables: copying and accessing. Characters: multibyte conversions, character tables, category tables Fonts: type checks. Miscellaneous: prefix arguments and identity. We're also periodically pulling GNU Emacs features into Remacs, so all the features available GNU Emacs trunk are included in Remacs. Idiomatic Rust in Remacs Remacs has gradually developed a set of conventions for elisp data types. For each type Foo, we define a LispObject::as_foo, LispObject::as_foo_or_error and a FooRef when you know your elisp datatype is actually a Foo. For example, here's how overlay-start was implemented in C: DEFUN ("overlay-start", Foverlay_start, Soverlay_start, 1, 1, 0, doc: /* Return the position at which OVERLAY starts. */) (Lisp_Object ov

## Helpful: Adding Contextual Help to Emacs

DevFeed: [Helpful: Adding Contextual Help to Emacs](<https://devfeed.tech/articles/helpful-adding-contextual-help-to-emacs-22018.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2017/08/30/helpful-adding-contextual-help-to-emacs/>)

Author: Wilfred Hughes

Published: 2017-08-30T00:00:00Z

Content type: release

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [Code](<https://devfeed.tech/topics/code.md>), [debug](<https://devfeed.tech/topics/debug.md>)

Tags: [closure](<https://devfeed.tech/tags/closure.md>), [code](<https://devfeed.tech/tags/code.md>), [debug](<https://devfeed.tech/tags/debug.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [files](<https://devfeed.tech/tags/files.md>), [function](<https://devfeed.tech/tags/function.md>), [source](<https://devfeed.tech/tags/source.md>)

### AI overview

The article announces Helpful v0.1, an Emacs package that adds contextual help for functions and symbols. It reports keybindings across keymaps, discoverable debugging actions, focused and fontified docstrings, symbol references through elisp-refs, and source recovery or formatting for interactively defined, closure, and byte-compiled functions.

### Source excerpt

I've just released Helpful, a new way of getting help in Emacs! The *Help* built-in to Emacs is already pretty good. Helpful goes a step further and includes lots of contextual info. Let's take a look. Have you ever wondered which major modes have a keybinding for a function? Helpful reports keybindings in all keymaps! When you're hacking on some new code, you might end up with old function aliases after renaming a function. Helpful provides discoverable debug buttons, so you don't need to remember fmakunbound. Helpful also has strong opinions on viewing docstrings. Summaries are given focus, and text is fontified. We solve the text-quoting-style debate by removing superfluous puncuation entirely. Helpful will even show all the references to the symbol you're looking at, using elisp-refs. This is great for understanding how and where a function is used. Finally, Helpful will rifle through your Emacs instance to find source code to functions: If you've defined a function interactively, Helpful will use edebug properties to find the source code. If Emacs can only find the raw closure, helpful will convert it back to an equivalent defun. If Emacs can only find the byte-compiled files, helpful will just pretty-print that. I've just released v0.1, so there will be bugs. Please give it a try, and let me know what you think, or how we can make it even more, well, helpful!

## Optimising Dash.el

DevFeed: [Optimising Dash.el](<https://devfeed.tech/articles/optimising-dash-el-22016.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2017/07/29/optimising-dash-el/>)

Author: Wilfred Hughes

Published: 2017-07-29T00:00:00Z

Content type: tutorial

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [Library](<https://devfeed.tech/topics/library.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [library](<https://devfeed.tech/tags/library.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [optimisation](<https://devfeed.tech/tags/optimisation.md>)

### AI overview

This tutorial examines performance optimization techniques in Dash.el and Emacs Lisp. It benchmarks iterative code against mapcar, compares wrapper functions, aliases, and primitives, and explains how Emacs byte compilation can improve or eliminate function calls. The article notes that the latest Dash.el version includes these improvements.

### Source excerpt

Dash.el is a lovely library, and one of the most popular on MELPA. If we can squeeze every last drop of performance out of it, everyone benefits. Let's take a look at the black art of making elisp faster. Measure First! Chris Wellons has a great optimisation blog post that discusses the performance overhead of creating lambdas with mapcar. If we look at --map, it does indeed create anonymous functions: (defmacro --map (form list) "Anaphoric form of `-map'." `(mapcar (lambda (it) ,form) ,list)) Creating anonymous functions instantiates a closure, which isn't free. Let's write an iterative equivalent: (defmacro --map-loop (form list) (declare (debug (form form))) (let ((result-sym (make-symbol "result"))) `(let (,result-sym) (dolist (it ,list) (push ,form ,result-sym)) (nreverse ,result-sym)))) List Length mapcar (seconds) dolist (seconds) 1 0.000010 0.000028 1,000 0.0027 0.0079 100,000 0.74 1.24 (Full benchmark code here.) Surprisingly, mapcar is consistently faster in this particular benchmark! Other Emacsers have observed dolist outperforming mapcar for short lists. mapcar is primitive, and primitives tend to be fast. dolist clearly isn't a speedup in all situations. Let's try something else. Matching Primitive Performance Some dash.el functions are equivalent to primitive functions. For example, -first-item is equivalent to car, -drop is equivalent to nthcdr. We could write -first-item like this: (defun -first-item (lst) (car lst)) However, this adds the overhead of an extra function call compared with calling car directly. Instead, dash.el does this: (defalias '-first-item 'car) Let's do a small benchmark, to ensure that defalias giving us the peformance we want: Approach time (seconds) wrapper function 0.1399 alias 0.0055 use car directly 0.0050 (Full benchmark code here.) For shame! Our alias still isn't as fast as using the primitive. Let's compare the disassembly using M-x disassemble. (defalias 'car-alias 'car) (defun use-car-alias (x) (car-alias x)) ;; byte

## Remacs II: New Rust Features, GNU Emacs Compatibility Updates, and Build Improvements

DevFeed: [Remacs II: New Rust Features, GNU Emacs Compatibility Updates, and Build Improvements](<https://devfeed.tech/articles/these-weeks-in-remacs-ii-22015.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2017/07/15/these-weeks-in-remacs-ii/>)

Author: Wilfred Hughes

Published: 2017-07-15T00:00:00Z

Content type: release

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Rust](<https://devfeed.tech/topics/rust.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Docker Compose](<https://devfeed.tech/topics/docker-compose.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [macOS](<https://devfeed.tech/topics/macos.md>)

Tags: [docker](<https://devfeed.tech/tags/docker.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [github](<https://devfeed.tech/tags/github.md>), [linux](<https://devfeed.tech/tags/linux.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [macos](<https://devfeed.tech/tags/macos.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [rust](<https://devfeed.tech/tags/rust.md>)

### AI overview

This Remacs project update describes new Elisp primitive functions, Rust support, GNU Emacs compatibility documentation, platform fixes, a restructured codebase, procedural macros, Rust crates, and Docker Compose support for building without a local development toolchain.

### Source excerpt

It's been six months since the last Remacs update, and many new features have landed! Community We now have a Gitter chat room! Do drop by if you have any questions or wish to discuss Remacs. There's a low traffic Remacs Subreddit too. We've added @jeandudey and @birkenfeld to the GitHub collaborators, bringing us to five fine people who can approve your pull requests. Elisp Features We're still tracking upstream GNU Emacs master, so new features there are landing in Remacs (1, 2). We've added a lot new elisp primitive functions: Strings: characterp, multibyte conversions (1, 2, 3), and comparisons Vectors: type definitions, functions Buffers: type definitions, functions Symbols: various functions A much requested feature, adding Rust support to find-function, has been added. This was an unusual PR as it includes some elisp changes in Remacs. We now have documentation on our compatibility with GNU Emacs. This covers all known implementation differences, platform support differences, and describes how to detect Remacs in elisp code. Cleanup Platforms: We've dropped MS-DOS support. The Remacs build has been fixed on 32-bit Linux and 32-bit macOS. The codebase has been split out: remacs-lib (Rust equivalents of gnulib) remacs-sys (type definitions of Emacs types and C functions) remacs-macros (procedural macros supporting elisp primitive functions in Rust) src (Rust implementation code of elisp) Signal name mapping is pure Rust code. We now run rustfmt on every PR. If you fancy building Remacs without installing a dev toolchain (compilers, C libraries etc), there's now a docker-compose.yml to make your life easy. Macros It wouldn't be a proper lisp project without some macro magic. After several PRs and discussions, Remacs now includes a procedural macro to simplify defining elisp functions in Rust. For example, here's vectorp: /// Return t if OBJECT is a vector. #[lisp_fn] fn vectorp(object: LispObject) -> LispObject { LispObject::from_bool(object.is_vector()) } Lever

## IDEs and Productivity

DevFeed: [IDEs and Productivity](<https://devfeed.tech/articles/ides-and-productivity-24947.md>)

Original publisher: [Read original article](<https://codeahoy.com/2016/06/10/ides-and-developer-productivity/>)

Author: umer

Published: 2016-06-10T00:00:00Z

Content type: opinion

Language: en

Sources: [Code Ahoy - Articles](<https://devfeed.tech/sources/code-ahoy-articles.md>)

Topics: [ide](<https://devfeed.tech/topics/ide.md>), [code productivity](<https://devfeed.tech/topics/code-productivity.md>), [Vim](<https://devfeed.tech/topics/vim.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [code-completion](<https://devfeed.tech/topics/code-completion.md>), [Maven](<https://devfeed.tech/topics/maven.md>)

Tags: [code-completion](<https://devfeed.tech/tags/code-completion.md>), [developer-productivity](<https://devfeed.tech/tags/developer-productivity.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [ide](<https://devfeed.tech/tags/ide.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [vim](<https://devfeed.tech/tags/vim.md>)

### AI overview

This opinion article argues that learning an IDE's features can improve developer productivity, particularly in complex enterprise applications. It describes benefits including debugging, dependency-graph analysis, refactoring, code completion, and boilerplate generation, while acknowledging that experienced Vim or Emacs users may already be productive with their chosen editor.

### Source excerpt

I used to be neutral on the choice and even the use of an IDE for writing code. In university, I learned and used Vim for assignments. When I started my first job, I switched to a popular Java IDE because everyone at work was using it and it featured a nice debugger. Other than debugging and basic auto-completion, I didn't learn the IDE much in terms of its features. But that changed one day when I ran into an issue compiling a Java project. I went over to the developer's desk who had made the most recent commit. He opened up the project in his IDE and in just a few keystrokes, he had the entire maven dependency graph displayed on his screen. Just like magic. Few more keystrokes and he was able to locate the root cause. I was surprised because after months of using the IDE, I had no idea it had that feature. Two things happened: I realized that up until that point, I was using the IDE like a text editor and missing out on many of its powerful features. I became convinced that knowing how to effectively use an IDE has a profound impact on developer productivity. This is especially true for complex enterprise applications, where superior knowledge of IDE can provide a significant boost in productivity. I started out with Vim and loved it. When I first tried Eclipse/NetBeans for Java development, I was overwhelmed by the number things that were cluttered on the screen. The second thing that put me off was that I had to use the mouse a lot for navigation. But I saw the value in refactoring, code-completion and generating boiler-plate code so I decided to bite the bullet and switched to it from Vim. In retrospect, it was a good decision. Many developers who become proficient in text editors like Vim or Emacs don't switch to an IDE. I worked with a developer who wrote code exclusively in Emacs. When I hired him, he told that he'll use nothing but Emacs. I was sure that in time I'll be able to 'show him the light' and that he'll see the value in using an IDE. But after wat

## Convert Firefox into Emacs

DevFeed: [Convert Firefox into Emacs](<https://devfeed.tech/articles/convert-firefox-into-emacs-20299.md>)

Original publisher: [Read original article](<https://parkouss.wordpress.com/2015/12/30/convert-firefox-into-emacs/>)

Author: parkouss

Published: 2015-12-30T15:49:44Z

Content type: tutorial

Language: en

Sources: [Mozilla Automation](<https://devfeed.tech/sources/mozilla-automation.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [Firefox](<https://devfeed.tech/topics/firefox.md>), [browser](<https://devfeed.tech/topics/browser.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [commands](<https://devfeed.tech/tags/commands.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [github](<https://devfeed.tech/tags/github.md>), [incremental](<https://devfeed.tech/tags/incremental.md>), [mozilla](<https://devfeed.tech/tags/mozilla.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

This tutorial explains how to use the KeySnail Firefox add-on to apply Emacs-style key bindings and workflows in Firefox. It describes tab switching and selection, buffer-like tab management, incremental search, command execution, and keyboard-based link navigation.

### Source excerpt

Firefox is a great browser. One of the reasons I really love it is because it is highly configurable: as an Emacs user, I wanted to use emacs key bindings inside Firefox - well, it's easy to do that. And much more! Most of the magic for me comes from the awesome keysnail addon. It ... Continue reading Convert Firefox into Emacs

## REPL Driven Development

DevFeed: [REPL Driven Development](<https://devfeed.tech/articles/repl-driven-development-31904.md>)

Original publisher: [Read original article](<http://blog.jayfields.com/2014/01/repl-driven-development.html>)

Author: Jay (noreply@blogger.com)

Published: 2014-01-27T17:53:00Z

Content type: opinion

Language: en

Sources: [Jay Fields](<https://devfeed.tech/sources/jay-fields.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>), [Software](<https://devfeed.tech/topics/software.md>), [Test-driven development](<https://devfeed.tech/topics/tdd.md>)

Tags: [application](<https://devfeed.tech/tags/application.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [code](<https://devfeed.tech/tags/code.md>), [development](<https://devfeed.tech/tags/development.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [evaluation](<https://devfeed.tech/tags/evaluation.md>), [expression](<https://devfeed.tech/tags/expression.md>), [java](<https://devfeed.tech/tags/java.md>), [junit](<https://devfeed.tech/tags/junit.md>), [nunit](<https://devfeed.tech/tags/nunit.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [repl](<https://devfeed.tech/tags/repl.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [running](<https://devfeed.tech/tags/running.md>), [software](<https://devfeed.tech/tags/software.md>), [verification](<https://devfeed.tech/tags/verification.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

The article explains REPL Driven Development (RDD), a workflow in which developers craft s-expressions, evaluate them immediately in a REPL, inspect the results or apply changes to a running application, and repeat until the problem is solved. The author argues that avoiding application restarts, separate verification tools, and leaving the source enables faster feedback while writing production code.

### Source excerpt

When I describe my current workflow I use the TLA RDD, which is short for REPL Driven Development. I've been using REPL Driven Development for all of my production work for awhile now, and I find it to be the most effective workflow I've ever used. RDD differs greatly from any workflow I've used in the past, and (despite my belief that it's superior) I've often had trouble concisely describing what makes the workflow so productive. This entry is an attempt to describe what I consider RDD to be, and to demonstrate why I find it the most effective way to work. RDD Cycle First, I'd like to address the TLA RDD. I use the term RDD because I'm relying on the REPL to drive my development. More specifically, when I'm developing, I create an s-expression that I believe will solve my problem at hand. Once I'm satisfied with my s-expression, I send that s-expression to the REPL for immediate evaluation. The result of sending an s-expression can either be a value that I manually inspect, or it can be a change to a running application. Either way, I'll look at the result, determine if the problem is solved, and repeat the process of crafting an s-expression, sending it to the REPL, and evaluating the result. If that isn't clear, hopefully the video below demonstrates what I'm talking about. If you're unfamiliar with RDD, the previous video might leave you wondering: What's so impressive about RDD? To answer that question, I think it's worth making explicit what the video is: an example of a running application that needs to change, a change taking place, and verification that the application runs as desired. The video demonstrates change and verification; what makes RDD so effective to me is what's missing: (a) restarting the application, (b) running something other than the application to verify behavior, and (c) moving out of the source to execute arbitrary code. Eliminating those 3 steps allows me to focus on what's important, writing and running code that will be executed in

## El-Get is now Rolling Releases

DevFeed: [El-Get is now Rolling Releases](<https://devfeed.tech/articles/el-get-is-now-rolling-releases-34531.md>)

Original publisher: [Read original article](<https://tapoueh.org/blog/2014/01/el-get-is-now-rolling-releases/>)

Author: Dimitri Fontaine PostgreSQL Major Contributor; Author

Published: 2014-01-11T20:34:00Z

Content type: release

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [releases](<https://devfeed.tech/topics/releases.md>), [Git](<https://devfeed.tech/topics/git.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [patches](<https://devfeed.tech/topics/patches.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [emacs](<https://devfeed.tech/tags/emacs.md>), [git](<https://devfeed.tech/tags/git.md>), [patches](<https://devfeed.tech/tags/patches.md>), [releases](<https://devfeed.tech/tags/releases.md>), [software](<https://devfeed.tech/tags/software.md>)

### AI overview

El-Get moves to a rolling release model after a long period of stability. Its master Git branch becomes the stable branch and will accept bug fixes or proven patches, while the project continues adding recipes.

### Source excerpt

The code of El-Get has been pretty stable for a long time now. About the whole set of patches against the 4.x series has been about bug fixing corner cases (sometimes cases that had nothing cornery about them too) and providing more and more recipes. That's what you expect from a stable software, and that what allows us to move to a rolling releases model. In practice, it means that you won't have to suffer from using a badly maintained stable branch anymore. The El-Get scratch installer is now targetting the master branch of the git repository, and this branch is now going to only accept either bug fixes or proven patches.

## Emacs Muse meets Common Lisp

DevFeed: [Emacs Muse meets Common Lisp](<https://devfeed.tech/articles/emacs-muse-meets-common-lisp-34507.md>)

Original publisher: [Read original article](<https://tapoueh.org/blog/2013/07/emacs-muse-meets-common-lisp/>)

Author: Dimitri Fontaine PostgreSQL Major Contributor; Author

Published: 2013-07-08T11:34:00Z

Content type: article

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [Common Lisp](<https://devfeed.tech/topics/common-lisp.md>), [Publishing](<https://devfeed.tech/topics/publishing.md>), [HTML](<https://devfeed.tech/topics/html.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [emacs](<https://devfeed.tech/tags/emacs.md>), [git](<https://devfeed.tech/tags/git.md>), [hooks](<https://devfeed.tech/tags/hooks.md>), [html](<https://devfeed.tech/tags/html.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [muse](<https://devfeed.tech/tags/muse.md>), [static](<https://devfeed.tech/tags/static.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

The article describes using Emacs Muse to write and publish a blog, including support for inline images and static website generation. It then explains replacing the Emacs Lisp-based setup with a Common Lisp project that parses Muse files, generates HTML, and dynamically adds site sections through server-side includes.

### Source excerpt

This blog of mine is written in the very good Emacs Muse format, that I find much more friendly to writing articles than both org-mode and markdown-mode that I both use in a regular basis too. The main think that I like in Muse that those two others lack is the support for displaying images inline. *Here's what it looks like to edit with Emacs Muse* The Muse publishing system The idea is that you edit .muse files in Emacs then use a command to publish your file to some format like HTML. You can also publish a whole project, and then enjoy a fully static website that you can deploy on some URL.

## Coding: Increase Your Reading and Writing Speed

DevFeed: [Coding: Increase Your Reading and Writing Speed](<https://devfeed.tech/articles/coding-increase-your-reading-and-writing-speed-31903.md>)

Original publisher: [Read original article](<http://blog.jayfields.com/2013/06/coding-increase-your-reading-and.html>)

Author: Jay (noreply@blogger.com)

Published: 2013-06-11T17:31:00Z

Content type: tutorial

Language: en

Sources: [Jay Fields](<https://devfeed.tech/sources/jay-fields.md>)

Topics: [coding](<https://devfeed.tech/topics/coding.md>), [Snippet](<https://devfeed.tech/topics/snippet.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [ide](<https://devfeed.tech/topics/ide.md>), [optimize](<https://devfeed.tech/topics/optimize.md>), [Clojure](<https://devfeed.tech/topics/clojure.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [coding](<https://devfeed.tech/tags/coding.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [ide](<https://devfeed.tech/tags/ide.md>), [optimize](<https://devfeed.tech/tags/optimize.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [snippet](<https://devfeed.tech/tags/snippet.md>)

### AI overview

The article explains how to use code-frequency analysis to choose a small number of editor shortcuts, snippets, and custom font locks. It illustrates the approach with Clojure code, Emacs, and IntelliJ examples.

### Source excerpt

A teammate of mine recently expressed a desire for a shortcut for something we type often. I started looking into our shortcut options and came to a common determination: We can do this, but the number of 2 key shortcuts available to us is finite, so we better use them wisely. I wrote the following unix to give me a rough idea of what we type frequently. find . -name "*.clj" | xargs cat | tr -s '[:space:]:#()[]{}\"' '\n' | sort | uniq -c | sort -nnote: If you're not writing clojure you'll want to look for something other than .clj files, and you might also want to tweak what you replace with a new line. The above unix gave me an ordered list of the most typed 'words' across all of my codebases. At this point I had some science for setting up some shortcuts. Writing You'll want to look into whatever editor/ide you use and see if you can find key shortcuts and snippet expansion. My editor is emacs; I assigned some key-chords and some yasnippets. If you're not using emacs you should have something similar in whatever you are using. While I wanted to define some shortcuts, I also didn't want to create so many that I was constantly wasting time looking up what I'd created. Based on that desire I created: 2 shortcuts (key-chords) for two of the most duplicated words. The shortcuts are concise by design, but that makes them a bit harder to remember. You can probably get started with more than 2, but I didn't see much harm in starting there. a dozen snippets for the next most used words. These snippets are descriptive enough to easily remember, thus I felt comfortable defining several of them. e.g. pps expands to (println (pr-str )). Having shortcuts and snippets will obviously make me more productive, and the unix helped me figure out which words were the most important to optimize for. Reading Most editors/ides also give you a summary view for common code patterns. For example, IntelliJ displays lambdas when the actual code is actually an anonymous class. Emacs gives you

## Emacs Lisp: Font Lock for Clojure's Partial

DevFeed: [Emacs Lisp: Font Lock for Clojure's Partial](<https://devfeed.tech/articles/emacs-lisp-font-lock-for-clojure-s-partial-31900.md>)

Original publisher: [Read original article](<http://blog.jayfields.com/2013/05/emacs-lisp-font-lock-for-clojures.html>)

Author: Jay (noreply@blogger.com)

Published: 2013-05-15T12:00:00Z

Content type: tutorial

Language: en

Sources: [Jay Fields](<https://devfeed.tech/sources/jay-fields.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [function](<https://devfeed.tech/topics/function.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [code](<https://devfeed.tech/tags/code.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [emacs-lisp](<https://devfeed.tech/tags/emacs-lisp.md>), [emacs-live](<https://devfeed.tech/tags/emacs-live.md>), [function](<https://devfeed.tech/tags/function.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>)

### AI overview

The article explains how to use Clojure mode font locking in Emacs to display the standard Clojure partial function in a single character space while retaining the familiar partial function in the code.

### Source excerpt

I love using partial, but I dislike the length of the function name. There's a simple solution, define another function with a shorter name that simply calls (or is) partial. This is exactly what I did in the jry library. I liked the use of % due to partial feeling similar to creating a function using #(), and % having a special meaning inside #(). I thought they tied well together. Unfortunately, there's an obvious problem, things would be very broken if you tried to use the '%' function in an anonymous function defined with #(). Somewhere along the way this issue caused me to stop using jry/%. Using partial is great: it's part of the standard lib, and I don't need to explain it to anyone who joins my team or any future maintainers of the code I write. Still, I want something shorter, and I've always had a background thread looking for another shorter-than-partial solution. While recently contributing to emacs-live I found the solution I was looking for: clojure-mode font lock. The following code can now be found in my emacs configuration. This solution feels like the best of both worlds. My code still uses the function from the standard library, my colleagues still see a function they already know, and 'partial' only takes up one character space in my buffer. The image below is what you'll see if you put the above emacs-lisp in your config. © Jay Fields - www.jayfields.com

## Emacs Lisp: Toggle Between a Clojure String and Keyword

DevFeed: [Emacs Lisp: Toggle Between a Clojure String and Keyword](<https://devfeed.tech/articles/emacs-lisp-toggle-between-a-clojure-string-and-keyword-31901.md>)

Original publisher: [Read original article](<http://blog.jayfields.com/2013/05/emacs-lisp-toggle-between-clojure.html>)

Author: Jay (noreply@blogger.com)

Published: 2013-05-02T14:41:00Z

Content type: tutorial

Language: en

Sources: [Jay Fields](<https://devfeed.tech/sources/jay-fields.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [ClojureScript](<https://devfeed.tech/topics/clojurescript.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [conversion](<https://devfeed.tech/tags/conversion.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [emacs-lisp](<https://devfeed.tech/tags/emacs-lisp.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [string](<https://devfeed.tech/tags/string.md>)

### AI overview

This article presents an Emacs Lisp solution for toggling between Clojure strings and keywords, motivated by a refactoring task that required converting multiple Clojure keywords to strings. It also references a video demonstrating the behavior.

### Source excerpt

When I was doing a fair bit of Ruby I often used the TextMate's shortcut (Ctrl+:) to convert a Ruby String to a Symbol or a Ruby Symbol to a String. It's something I've periodically missed while doing Clojure, and yesterday I found myself in the middle of a refactoring that was going to force the conversion of 5+ Clojure Keywords to Strings. The following emacs lisp is my solution for toggling between Clojure Strings and Keywords. The standard disclaimers apply - it works on my machine, and I've never claimed to know emacs lisp well. A quick video of the behavior: © Jay Fields - www.jayfields.com

[Next page](<https://devfeed.tech/tags/emacs.md?cursor=WyIyMDEzLTA1LTAyVDE0OjQxOjAwKzAwOjAwIiwgImVlMTk2Njg5LWY3OWQtNGY0Mi04NjYwLTg4YjJkNzI4MmE2NiJd>)