Skip to Content
Writing GNU Emacs Extensions
book

Writing GNU Emacs Extensions

by Bob Glickstein
April 1997
Intermediate to advanced
240 pages
5h 56m
English
O'Reilly Media, Inc.
Content preview from Writing GNU Emacs Extensions

Data Representation

Let's start by choosing a data representation. An obvious approach is to store the cells of the crossword grid in a two-dimensional array, or matrix. Emacs Lisp doesn't have such a data type, but we can create one using vectors.

Vectors

A Lisp vector resembles a list, in that it is a sequence of zero or more arbitrary subexpressions (including nested vectors or lists). However, vectors permit random access to their elements, whereas one must traverse a list from its beginning to find a particular element. (That doesn't necessarily make vectors superior to lists. Unlike lists, vectors can't be lengthened or shortened except by copying. As always, use the right tool for the job.)

Vectors are written with square brackets instead of parentheses:

[a b c ...]

Vectors are self-evaluating; that is, the result of evaluating a vector is the vector itself. Its subexpressions are not evaluated. So if you write:

[a b c]

you'll get a vector containing the three symbols, a, b, and c. If you want a vector containing the values of variables a, b, and c, you must construct the vector using the vector function:

(vector a b c) ⇒ [17 37 42]       ;or whatever the values happen to be

Matrix Package

It is straightforward to design a matrix package using vectors. We'll choose to represent a matrix as a vector of rows, with each row being a nested vector of columns. Here's how to create one of these:

(defun make-matrix (rows columns &optional initial) "Create a ROWS by COLUMNS matrix." (let ((result ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

GNU Emacs Pocket Reference

GNU Emacs Pocket Reference

Debra Cameron
Learning GNU Emacs, Second Edition

Learning GNU Emacs, Second Edition

Debra Cameron, Bill Rosenblatt, Eric S. Raymond

Publisher Resources

ISBN: 9781449395056Errata Page