Emacs Lisp: why is the programming language Emacs Lisp so comfortable?
My thoughts about the programming language Emacs Lisp. Apparently and initially designed to extend the GNU Emacs Editor, Emacs Lisp has grown into fully fledged programming language. Things like CGI, database interfaces, contact management, customer relationship management, project management, and so many other features becomes possible within GNU Emacs. Here is the summary on what I think what makes GNU Emacs and Emacs Lisp so comfortable programming language.
I have tried to figure out what is making the GNU Emacs and Emacs Lisp so comfortable programming language. And then I was thinking of some other programming languages that I know.
Major qualities of Emacs Lisp
Programming language Emacs Lisp is well documented.
Documentation is integrated into programming environment.
Debugging is integrated within GNU Emacs.
GNU Emacs is GUI and UI for Emacs Lisp programming.
Suitable for beginners
GNU Emacs is integrated computing environment.
Community is maintaining large number of packages.
Programming language Emacs Lisp is well documented within the GNU Emacs editor itself. Every function of the language may be described with few keystrokes such as
C-h f or by
M-x describe-function. One may access description of every programming function almost within a second or two.
Other programming languages are also well documented, but documentation is too often not integrated into the programming environment.
What is real benefit of Emacs Lisp documentation is that such is integrated into the programming environment.
Help menu every GNU Emacs user may find various integrated documentation. There is no need to open up any browser or have Internet connection. This is huge benefit and advantage in comparison to many other programming languages which either requires from users to open up Internet pages or to download documentation. Browsing documentation is not as easy as within the GNU Emacs.
One other well documented language that I know is the implementation of Common Lisp as CLISP. Within the console REPL and by using TAB completion it offers direct access to its functions and also access to the Common Lisp Reference.
However, Common Lisp Reference is not a free documentation! Downloading and using it, distributing or modifying it is subject to proprietary conditions!
Within GNU Emacs itself and in connection with Emacs Lisp packages that allows referencing, also other programming languages become integrated and their documentation becomes easier accessible. One such example is SLIME: The Superior Lisp Interaction Mode for Emacs that allows programmer to quickly access the Common Lisp Reference.
Few other programming language documentation references can be also accessed when using GNU Emacs in easy manner.
But authors and designers or programming languages have not and maybe could not make the documentation well integrated.
One good example of integrated documentation for a programming language is Dr. Racket.
GNU Emacs has all of the documentation well integrated
GNU Emacs Tutorial is accessible from
The GNU Emacs tutorial is available in 20 international languages.
The GNU Emacs Frequently Asked Questions are directly accessible from
The Emacs News and Emacs Known Problems are also there.
Reporting a bug is easy from the
There is feature to search the documentation by various means.
The GNU Emacs Manual is directly accessible within the GNU Emacs editor.
The Introduction to Emacs Lisp is accessible within the
The Emacs Lisp Reference is accessible within the
Helpmenu within the GNU Emacs itself.
All other system Info pages are accessible within Emacs.
All other system manual pages are accessible within Emacs.
Browsing built-in packages and functions is extremely easy.
Additionally plethora of websites exist on Internet including books, videos and other media that are helpful to users and programmers of Emacs Lisp programming language.
Dr. Richard Stallman and hundreds of contributors have put a lot of attention and focus and efforts that the documentation for GNU Emacs Editor becomes available to everybody and free under the GNU Free Documentation License.
That the documentation for GNU Emacs editor and the Emacs Lisp programming language is so well integrated within the GNU Emacs editor itself is great advantage for beginners and Emacs Lisp programmers over many other programming languages.
When something is to break in your Emacs Lisp programming this is most probably not going to crash the GNU Emacs itself. And if does happen, you still have the option to
M-x report-emacs-bug to the community of developer who will genuinely look into it and correct whatever is necessary.
Debugging of Emacs Lisp functions is directly integrated into GNU Emacs editor. There is a built-in debugger, and options to debug functions as soon as it starts executing. You can watch step by step execution of a function. And there is edebug that is to display the source and help the programmer easily debug whatever is not working temporarily.
Debugging is interactive. Rarely some programming language but LISP families offer so much comfort while debugging.
And now we come to the fact that for Emacs Lisp programming a user does not need various third party User Interfaces or GUIs or Graphical User Interfaces and that is because the GNU Emacs editor itself is the user interface or graphical user interface, all in once!
Do you need a menu? You may install and configure your own menu for whatever function s you wish directly within the GNU Emacs. You may remove any menus or menu options from GNU Emacs. You could even use the GNU Emacs interface without any standard menus, all customized to your own needs.
GNU Emacs could easily be made the provide POS or Point of Sale software. It could be a catalog management interface. It could be a real estate or real property management or sales interface. The GNU Emacs editor acts and can act as your user interface for many life and business tasks.
Database entries may be conducted by using GNU Emacs editor. Now watch how I access database tables in my PostgreSQL database.
The GNU Emacs editor is the user interface itself. There is nothing to do on programmers behalf but to use the ready made options to interact with the user of software.
How cool is that?
Is it suitable for beginners?
I think it is. The GNU Emacs Editor with all the integrated documentation and Emacs Lisp Introduction is well suited for beginners in programming.
The LISP family of languages by tradition and practicality practices short definitions of programming functions.
Often a function is to fit within one visible screen within the editor. One function makes one thing. One function is usually short and easily understandable provided that a programmer does know how to read them. Example is here below.
defun read-from-buffer (value &optional buffer-name) ("Edits string and returns it" let ((this-buffer (buffer-name)) ( (new-value value)if buffer-name buffer-name "*edit-string*"))) (buffy ( (save-excursion (switch-to-buffer buffy) (set-buffer buffy) (text-mode)setq header-line-format "➜ Finish editing with C-c C-c or C-M-c") ("C-c C-c") 'exit-recursive-edit) (local-set-key (kbd if (stringp value) (insert value)) (;; (speak "You may quit the buffer with Control C Control C") "When you're done editing press C-c C-c or C-M-c to continue.") (message unwind-protect ( (recursive-edit)if (get-buffer-window buffy) (progn (setq new-value (buffer-substring (point-min) (point-max))) ( (kill-buffer buffy)))) (switch-to-buffer this-buffer) new-value)))
The concept of keeping functions simple is not a requirement as with any LISP programming language one can make it complex and not readable. Yet the convention and tradition is such that LISP and Scheme programmers keep their functions and procedures as short as possible doing one thing well.
This concept is important, as it is to help beginners to understand what is going on.
GNU Emacs editor itself is not just an editor. It is integrated computing environment. Integrated means formed into a whole. It allows any kind of computing work to be done within. The author of the Introduction to Emacs Lisp calls it extensible computing environment. It allows the user to manage files, databases, calendars, tasks, projects, companies, issue invoices, write books, typeset the text, debug the code, program in any programming language, evaluate from almost any programming languages within the GNU Emacs itself, it allows to publish files online, read letters, send emails, access news servers, send SMS or faxes, and so much more.
There is large number of communities all about and around the GNU Emacs and Emacs Lisp programming language. The users list for the GNU Emacs text editor is live group accessible by email for everybody. There exist number of websites all related to GNU Emacs, and various groups on social networks including the XMPP conference rooms about the GNU Emacs, including the Internet Relay Chat.
The large system and availability of various communities and groups and fans of GNU Emacs editor and Emacs Lisp programmers are big help that makes the Emacs Lisp most comfortable programming language that I know.
- How to insert new line in Emacs editor? - Several few ways are explained here on how to insert a new line before the current line while editing text with Emacs editor.
- Emacs Lisp: Tihs is itneretsing ftuncion taht wlil scarmble the txet in scuh a manenr taht it stlil ramiens readable. - This interesting Emacs Lisp function in scrambling text in such a manner that it still remains readable, so called jumbled letters. Use GNU Emacs to send funny text to your friends.
- Emacs Lisp: number-to-words-clisp and number-to-words functions using CLISP to get cardinal English numbers - Emacs Lisp does not have a built in function as Common Lisp to quickly return cardinal English numbers in words, so this function uses the external program CLISP or GNU Common Lisp to get the representation. Then a number 4 can be converted to word "four"
- Emacs Lisp: renumber-files, rename bunch of file names in Dired by date and number - This function works within Dired or Directory Editor in GNU Emacs. It will rename bunch of files and renumber them automatically by date and number of the file. It is useful when you are renaming less important images or bunch of files with irrelevant file names.
- Emacs Lisp: remove-emails, function for mutt email client to anonymize forwarded messages - This function is helpful when writing emails with mutt or maybe other email clients that are using Emacs editor for text or mail message composition. It removes all emails displayed from buffer. At some occasions user may want to forward email messages from other people without revealing their email addresses. The mutt email client usually displayes email addresses in this format and all such addresses may be easily removed with this interactive command.
- Emacs Lisp: kdeconnect-sms-send or sending SMS straight from Emacs - kdeconnect is great program to connect various mobile devices and computers. It works well between mobile devices as well. Emacs as text editor functions as advanced programmable framework that allows users to do just anything with programming language Emacs Lisp allows. Example is that Emacs could be converted into SMS gateway for marketing purposes. Only the concepts are described here.
- Emacs Lisp: age - Returns the age of people by using the PostgreSQL. It is very usable to find the age of children, relatives, friends.
- Emacs Lisp: Optimize JPG images within Dired with help of ImageMagick - This Emacs Lisp function is optimizing marked JPG images within Dired and GNU Emacs editor. It is using ImageMagick and web recommendation on how images shall be optimized. The quality of images will be 70% of the original and setttings for optimization are made for Internet. Do not use this function on images which quality shall remain intact for printing or publishing purposes others but web.
- Emacs Lisp: ffmpeg-cut-dired - This function is used with Dired within Emacs to cut video files from specific begin time for specific duration. Files are cut and saved in the directory. This may be handy to use your Emacs editor as movie editor application.
- Emacs Lisp: calculate interest rates on accrued HYIP investments - HYIP is High Yield Investment Program, a kind of a fraudulent scheme. We are not promoting such scheme rather dis-advising people who get caught by the greed and possibility to earn high income within few days. Sometimes the "yield" may be as much as 5% per week and more. And people investing into the HYIP or High Yield Investment Programs believe the nonsense. This Emacs Lisp function can demonstrate what money could the company earn would they be collecting money themselves, without asking public to receive more and more investments. Calculate yourself and compare it logically, and you will come to conclusion that a company offering that high interest rates would never ask public for new investments, they could be earning it themselves without sharing with anybody.
- Emacs Lisp: 𝕸𝖆𝖙𝖍𝖊𝖒𝖆𝖙𝖎𝖈𝖆𝖑 𝕴𝖓𝖕𝖚𝖙 𝕸𝖊𝖙𝖍𝖔𝖉 - This is 𝖒𝖆𝖙𝖍𝖊𝖒𝖆𝖙𝖎𝖈𝖆𝖑 𝖎𝖓𝖕𝖚𝖙 𝖒𝖊𝖙𝖍𝖔𝖉 for 𝕲𝕹𝖀 𝕰𝖒𝖆𝖈𝖘. If you wish to write with 𝖙𝖍𝖆𝖙 𝖙𝖞𝖕𝖊 𝖔𝖋 𝖑𝖊𝖙𝖙𝖊𝖗𝖘, 𝖞𝖔𝖚 𝖏𝖚𝖘𝖙 𝖑𝖔𝖆𝖉 𝖙𝖍𝖎𝖘 𝖋𝖎𝖑𝖊.
- Emacs Lisp: input method for ⒸⒾⓇⒸⓁⒺⒹ letters - This enables easy writing of ⒸⒾⓇⒸⓁⒺⒹ letters with GNU Emacs text editor.
- Emacs Lisp: input method for ＦＵＬＬＷＩＤＴＨ ＬＡＴＩＮ ＬＥＴＴＥＲＳ - This is input method for ＦＵＬＬＷＩＤＴＨ ＬＡＴＩＮ ＬＥＴＴＥＲＳ for easy writing whenever necessary.
- Emacs Lisp: Azбukцeдa or azbukceda is a new mixture of cyrillic and latin alphabet as used in Bosnia and Herzegovina. - Azбukцeдa or azbukceda is a new mixture of cyrillic and latin alphabet as used in Bosnia and Herzegovina. It is mixture that is readable by every citizen of the country. Instead of using two alphabets the members of the society Eko Kultura speak and write in one united alphabet named azbukceda. This is new Emacs Lisp input method to write Azбukцeдa.
- Emacs Lisp: The iota function for number ranges in Emacs Lisp - This is the iota function that I had to make today. I have shamelessly borrowed the description from Guile reference manual on iota function from SRFI-1 and tried to make it compliant. I guess this could be done more elegantly. For me is important that it gives me the same result as intended.
- Emacs Lisp: Record screen within GNU Emacs - The program third party program `recordmydesktop` is used for this function to invoke screen recording within GNU Emacs. You may wish to make a demonstration in video and publish such online. Record it while using few keybindings or `M-x record-screen`. This page is giving you the concept of a workflow. I consider workflow more important then the function itself. You please modify it to suit your own needs. The `screen-record-command` is spitting out the actual screen recording command, customize it as you wish.
- Emacs Lisp: Record voice notes within GNU Emacs - Sometimes you have no time to write and maybe you are talking or maybe you simply wish to record a voice note. Maybe you wish to send a voice message to somebody by email. Just use the `record-voice-note` function and it will invoke the shell command `rec` from SOX sound tools system package. Yes, you must have it or this will not work. It will record a sound note and open it in Dired. Press `q` to finish recording the sound.
- Emacs Lisp: Send Status to your GNU Social instance via XMPP or Jabber protocol - This is simple customization that helps the user to send status to GNU Social instance by using XMPP protocol. It means you could get notices over messenger from GNU Social and you could send notices over any XMPP or Jabber messenger to GNU Social instance. You are getting connected wherever you are. XMPP is much easier to use then web browser. The username `firstname.lastname@example.org` is your GNU social instance virtual friend. That is something you set up in your GNU Social profile under IM menu. Requirement is that administrator has enabled the menu and XMPP plugin for the GNU Social instance. As of now 2019-08-07 I just guess there are not so many GNU Social instances with XMPP connection. And then you need to have your own XMPP username or Jabber ID. Such need not be on GNU Social instance, it can be anywhere you wish, on any server, if you already have it, you can use your own Jabber ID to send status updates to GNU Social instance and vice versa, you can also receive messages over GNU Social instance. Change it to suit you. It is just a simplification of the `jabber-send-message` function in the Emacs Lisp package `jabber.el`. Great one! Coordinate with your team members, assign tasks directly from GNU Emacs to their messengers. Possibilities are wide to help in communication and coordination in any team. Otherwise have fun with decentralized GNU Social networks!
- Emacs Lisp: avoiding repetition in writing Nginx web server configurations - Imagine you are handling hundreds of domains, and each time you need to write pretty similar web server configuration for each new domain. GNU Emacs is extensible text editor and operating environment that helps you to speed up your editing. Nginx is a web server with pretty complex configuration syntax. Yet directives for each doman may be similar to each other. By adapting these functions to your own needs you may get some speed in preparation of Nginx configuration.
- Emacs Lisp: dig-txt and dig-txt-short as small extensions `dig` function - Extending the GNU Emacs built-in `dig` function is very easy with `C-h f` and function name and then inspecting how to make your extension. In this case `dig` is looking for text records which may be suitable to inspect SPF and other related DNS records.
- Emacs Lisp: duden-lookup opens up https://www.duden.de German dictionary to lookup definitions - This example demonstrates how easy it is to advise your GNU Emacs to query the word on any website. In this case it is https://www.duden.de/ German dictionary. To find a definition of a German word in German language, place your cursor on the word and run `M-x duden-lookup`. Adapt the function for your needs to open up any other website in similar fashion straight from Emacs.
- Emacs Lisp: opening media files straight from GNU Emacs Dired mode by using xdg-open - This is my personal GNU Emacs Dired setup on the V key that helps me to quickly open media files or external viewers by using xdg-open and EMMS the Emacs Multimedia System.
- Emacs Lisp: mark HTML on the web page and convert it quickly to Markdown format - Emacs Lisp: mark HTML on the web page and convert it quickly to Markdown format. This function needs your own customizations. You would mark the HTML on a web page within your browser. Then you run the Emacs Lisp function and the clipboard is converted into Markdown file. The file is opened for further editing and saved for future just as a note.
- Emacs Lisp: take a screenshot withing GNU Emacs and `maim` - `maim` is small shell utility that takes screenshots, and with the option `-s` it allows cropping of a screenshot. This makes it handy to bind the `
` key to `screenshot` function. After taking screenshot, Emacs is to open the Dired buffer with list of screenshots. From there you may send them by email or do whatever you want. If you are giving it the universal argument `C-u` it will crop the rectangle on the screen.
- Emacs Lisp: switch-to-scratch and return back to previous buffer - This function is using register 100 to `switch-to-scratch` and remembers where to return back. Global key binding is Hyper key and 8 and once in the `*scratch*` buffer, the local key binding is to return back to previous buffer.
- Emacs Lisp: using mutt within GNU Emacs under ansi-term - This function requires some modifications for your own usage. As small script has to be setup to run the mutt directly with the `ansi-term` function. The script named `emacs-mutt.sh` is executed under ansi-term emulation within GNU Emacs. Editor is set to emacsclient so that all editing takes place within the GNU Emacs. Configuration files without special colors are chosen.
- Emacs Lisp: Common Lisp solution to accept Org files from standard input and emit markdown output - This was my previous Common Lisp solution, using CLISP implementation, to accept the Org files on standard input and emit markdown export from Org files. This is still working well, but the new solution by using GNU Emacs directly is more elegant.
- Emacs Lisp: emacs-org-to-html.el on command line, convert your Org files on command line to HTML output - This is one way of converting the Org files on command line to HTML output. This is script that shall be made executable with chmod +x and it runs on command line. It may be used in website revision systems to feed Org input and get the HTML output. It could redirect to HTML file quickly, without launching full GNU Emacs. You may see inside that one function is to output full HTML and other only the body of the HTML. This is for those people who need to use templates.
- Emacs Lisp: quickly insert Openstreetmap location link - This function asks the user for location, opens the Openstreetmap and inserts the link into buffer. Imagine you wish to tell your friends where you are located, so you need to give them some pointers.
- Emacs Lisp: quickly remove menu items from GNU Emacs menus - This shows how one can quickly remove some items from GNU Emacs menus
- Emacs Lisp: stockpile.el calculates volumes of stockpiles, heaps, piles, mounds - This set of function is calculating stockpile volumes depending of sizes of piles, mounds, or heaps. Engineers may be able to dissect various parts of stockpiles and then calculate their volumes by using these functions.
- Emacs Lisp: mkdatedir works in Dired and quickly creates directory by date - Sorting files is one of tedious jobs we all do on the computer. Sorting is often best done chronologically by dates. Thus function creates directory within GNU Emacs Lisp, usually within Dired listings. Sort files by groups, people, and dates.
- Emacs Lisp: produce speech by using espeak shell command - Espeak shell command is often faster then using Festival Speech. This function may be used to quickly produce some speach. Global variables such as `*espeak-amplitude*` and `*espeak-voice*` can help you set it up for your own language and volume.
- Emacs Lisp: Get ATTENTION in those emails by using heading-underlined function - Sometimes you wish to really put attention in emails to certain facts or paragraphs of text. Using the heading-underlined function you quickly get upcased heading underlined that your reader cannot miss it!
- Emacs Lisp: strip-html by Sacha Chua, remove those tags! - Sacha Chua is wonderful woman that likes GNU Emacs, notes, she has her thoughts well organized and lives a happy life. Once I had to find the strip-html function and it was just there, on her website, thank you Sacha!
- Emacs Lisp: join-lines function - When there is need to join the lines, this handy function helps me in editing those formatted and wrapped lines into one single joined line.
- Emacs Lisp: string-to-file-force function writes string to file forcefully - I often need to write strings to file, and without looking if the file exists or not, this handy function is doing exactly that.
- Emacs Lisp: file-to-list function reads file line by line into a list - This Emacs Lisp function reads file line by line and returns list of lines. This may be handy when lines of the file need to be processed.
- Emacs Lisp: read-from-buffer versus read-from-minibuffer, returns string from editing - As I am often editing database fields, and such fields could represent Org Mode or Markdown documents, this function is handy to quickly edit the string and return it back. It has no version control, thus I must take care what I am doing and how I am editing the string. As if something is lost, is lost forever. Unlike the read-from-minibuffer function, this one will open full editing buffer. If I switch the mode I have to use C-M-c option to return back.
- Emacs Lisp: use speech on your computer by using festival.el and Festival Speech system - Festival already has its GNU Emacs Support, just install festival package in your GNU/Linux distribution and you will gain soon functions to output speech. Yes, instead of messages in your Emacs minibuffer, now you can hear the real speech and in several languages. Emacs could thus remind you of new emails or new messages coming and it could tell you about finished tasks or commands. Sounds nice?
- Emacs Lisp: quick publishing of Emacs Lisp function to Internet - This is new Emacs Lisp function invented on 2019-07-15 that I am using to publish Emacs Lisp functions to Internet on my gnu.support website. It may not mean much to you as you are not using the PostgreSQL database for WRS or Website Revision System. If you do have a website, you could adapt this function to your own needs and quickly publish functions to Internet without thinking. Forget about those third party websites, just host yourself web pages.
- Emacs Lisp: how to read file into a string? - GNU Emacs is the extensible, customizable, self-documenting real-time display editor with full programming language Emacs Lisp. This function file-to-string will show you how to quickly read file.
- Emacs Lisp - Various Emacs Lisp functions and resources that show how business processes and communication may be supported with programming within the GNU Emacs editor and programming lanugage.
- GNU Emacs and Emacs Lisp Resources - This category is about the GNU Emacs powerful piece of software and resources relating to handling business tasks and processes with GNU Emacs an Emacs Lisp.
Contact GNU.Support now. There is a simple rule at GNU.Support: if we can help you, we do, whenever and wherever necessary, and it's the way we've been doing business since 2002, and the only way we know