GNU Software

1. Emacs   emacs

properties


ID: 5fc53135-1b6c-4260-b264-66be7a2b8ff0
CREATED:


edges

GNU Emacs
Online Manuals
<< Elisp
– [BROKEN LINK: man:emacs]
>> IDE


1.1. Releases

properties


CUSTOM_ID: releases
ID: cfe9d1b9-f6f4-4866-8291-d125fc8b3eb6


For sanity checking, it's helpful to have access to older versions of Emacs. We can download and verify a version like this:

#aria2c https://ftp.gnu.org/gnu/gnu-keyring.gpg -d /tmp/
#gpg --import /tmp/gnu-keyring.gpg
VERSION=24.2
aria2c https://ftp.gnu.org/gnu/emacs/emacs-${VERSION}.tar.xz.sig -d /tmp/
gpg --verify /tmp/emacs-${VERSION}.tar.xz.sig
aria2c https://ftp.gnu.org/gnu/emacs/emacs-${VERSION}.tar.xz -d /tmp/
tar -xf emacs-${VERSION}.tar.xz

1.2. Building from Source

properties


CUSTOM_ID: building_from_source
ID: 31710a0d-bd27-4549-894e-62bb8ceaa015


First, clone the repo:

git clone https://git.savannah.gnu.org/git/emacs.git /tmp/emacs

Once the source is in hand, I strongly recommend making a separate build directory and calling the configure script from there.

mkdir /tmp/emacs-build && cd /tmp/emacs-build
../emacs/configure --with-mailutils --with-imagemagick --with-x-toolkit=athena --without-pop --without-sound --with-json --enable-link-time-optimization --with-native-compilation --with-modules
NATIVE_FULL_AOT=1 make -j8
# test the build with './src/emacs' (location of output binary)
# install emacs binaries on current system
make install

The configure script takes a bunch of different flags that customize the build, and generate a build-specific Makefile.

The next line compiles the source. Install with make install and you're done! A custom Emacs binary with all the fixings has just been installed for your current user. :)

Here are some of the other configuration flags worth investigating:

  • –without-all
  • –with-x-toolkit=no
  • –without-x
  • –without-dbus –without-gconf –without-gsettings

1.3. Diary

properties


ID: f344abcc-1a23-43cf-83fb-4a95b54c51ed
CREATED:


edges

info


1.4. Remember

properties


ID: 7a0c9956-16ee-4302-a152-c3c5f0f0bdbf
CREATED:


  • textmodes/remember.el

Hyperbole, as a data presentation tool, always struck me as being very powerful, but it seemed to require a lot of "front-end" work before that data was really available. The problem with BBDB, or keeping up a Bibl-mode file, is that you have to use different functions to record the data, and it always takes time to stop what you're doing, format the data in the manner expected by that particular data interface, and then resume your work.

With "remember", you just hit `M-x remember' (you'd probably want to bind this to an easily accessible keystroke, like C-x M-r), slam in your text however you like, and then hit C-c C-c. It will file the data away for later retrieval, and possibly indexing.

Indexing is to data what "studying" is in the real world. What you do when you study (or lucubrate, for some of us) is to realize certain relationships implicit in the data, so that you can make use of those relationships. Expressing that a certain quote you remembered was a religious quote, and that you want the ability to pull up all quotes of a religious nature, is what studying does. This is a more labor intensive task than the original remembering of the data, and it's typical in real life to set aside a special period of time for doing this work.

"Remember" works in the same way. When you enter data, either by typing it into a buffer, or using the contents of the selected region, it will store that data – unindexed, uninterpreted – in a data pool. It will also try to remember as much context information as possible (any text properties that were set, where you copied it from, when, how, etc). Later, you can walk through your accumulated set of data (both organized, and unorganized) and easily begin moving things around, and making annotations that will express the full meaning of that data, as far as you know it.

Obviously this latter stage is more user-interface intensive, and it would be nice if "remember" could do it as elegantly as possible, rather than requiring a billion keystrokes to reorganize your hierarchy. Well, as the future arrives, hopefully experience and user feedback will help to make this as intuitive a tool as possible.

1.5. Change Logs

properties


ID: cf1cdbeb-5042-453d-a80b-f40e07cd7959
CREATED:


edges

info


1.6. Eww   browser

properties


ID: 21adcc1c-67ee-4f50-9049-12794824b2c7
CREATED:


edges

EmacsWiki: eww


the Emacs Web Wowser, a browser written in elisp based on shr.el.

eww() {
 emacsclient -a '' -t -e '(eww-browse-url "'"$1"'")'
}

1.7. Pages

properties


ID: ce9a92b0-ad75-4ca1-8653-cad020514c66
CREATED:


edges

info


1.8. Speedbar

properties


ID: 2cebd8b2-615e-44b2-afd4-2e302f836dd3
CREATED:


edges

info


1.9. ERC   irc

properties


ID: a42c2aaa-8dda-40ca-b455-7511f0cb084a
CREATED:


edges

info
>> IRC


1.10. EUDC

properties


ID: b72f96f7-4040-4548-8da2-e619d26c4887
CREATED:


edges

info


Emacs Unified Directory Client

1.10.1. BBDB   bbdb

properties


ID: db8e43f4-78ec-4fb1-93e7-11ac7ee87799
CREATED:


edges

info
Insidious Big Brother Database - Summary [Savannah]​


1.11. SLIME   lisp cl

properties


ID: f499c680-9a01-4a11-bc69-81861fd864d0
CREATED:


edges

info
<- Swank


1.12. Eshell

properties


ID: 86dbf792-301b-405e-806b-3df7e9531279
CREATED:


edges

info
Mastering Eshell - Mastering Emacs
howardabrams/dot-files/emacs-eshell.org
Why use EShell?
EmacsWiki: Category Eshell
Don't be afraid of eshell


1.13. Eglot

properties


ID: 8b1452eb-fc57-4026-8587-91ff8ebccba6
CREATED:


edges

info


Eglot is the Emacs client for the “Language Server Protocol” (LSP). The name "Eglot" is an acronym that stands for "Emacs polyGLOT". (1) Eglot provides infrastructure and a set of commands for enriching the source code editing capabilities of Emacs via LSP. LSP is a standardized communications protocol between source code editors (such as Emacs) and language servers–programs external to Emacs which analyze the source code on behalf of Emacs. The protocol allows Emacs to receive various source code services from the server, such as description and location of function calls, types of variables, class definitions, syntactic errors, etc. This way, Emacs doesn't need to implement the language-specific parsing and analysis capabilities in its own code, but is still capable of providing sophisticated editing features that rely on such capabilities, such as automatic code completion, go-to definition of function/class, documentation of symbol at-point, refactoring, on-the-fly diagnostics, and more.

Eglot itself is completely language-agnostic, but it can support any programming language for which there is a language server and an Emacs major mode.

  • eglot-server-programs
    • alist of (major-mode . server)
  • eglot#Advanced server configuration
  • Featues

    • At-point documentation: when point is near a symbol or an identifier, information about the identifier's significance in the program (its function or method signature, its type, its custom documentation string, etc.) is made available via the ElDoc package (*note (emacs)Programming Language Doc::).

    • On-the-fly diagnostic annotations, via the Flymake package (*note (Flymake)Top::). Eglot's Flymake backend replaces other Flymake backends while it is managing a buffer, and enhances diagnostics with interactive server-suggested fixes (so-called “code actions”, *note Eglot Commands::).

    • Finding definitions and uses of identifiers, via Xref (*note (emacs)Xref::). Eglot provides a backend for the Xref capabilities which uses the language server's understanding of the program source. In particular, it eliminates the need to generate tags tables (*note (emacs)Tags tables::) for languages which are only supported by the ‘etags’ backend.

    • Buffer navigation by name of function, class, method, etc., via Imenu (*note (emacs)Imenu::). Eglot provides its own variant of ‘imenu-create-index-function’, which generates the index for the buffer based on the language server's program source analysis.

    • Enhanced completion of symbol at point by the ‘completion-at-point’ command (*note (emacs)Symbol Completion::). This uses the language server's parser data for the completion candidates.

    • Server-suggested code refactorings. The ElDoc package is also leveraged to retrieve so-called “code actions” nearby point. When such suggestions are available they are annotated with a special indication and can be easily invoked by the user with the ‘eglot-code-action’ command (*note Eglot Commands::).

    • On-the-fly succinct informative annotations, so-called “inlay hints”. Eglot adds special intangible text nearby certain identifiers, be it the type of a variable, or the name of a formal parameter in a function call. *Note Eglot Commands::, and the ‘eglot-inlay-hints-mode’ minor mode.

    • Enhanced source code fontification via LSP “semantic tokens”. Eglot can leverage the language server's understanding of the role and meaning of identifiers in the code to provide more accurate syntax highlighting. *Note Eglot Commands::, and the ‘eglot-semantic-tokens-mode’ minor mode.

    • Display of function call and type hierarchies via the ‘eglot-show-call-hierarchy’ and ‘eglot-show-type-hierarchy’ commands (*note Eglot Commands::).

    • Code reformatting via the ‘eglot-format’ and related commands (*note Eglot Commands::). Automatic reformatting of source code is also supported and is activated automatically as you type.

    • Eglot enhances symbol completion front-ends by providing completion candidates based on the language server's understanding of the source code (*note (emacs)Symbol Completion::). The Company package, installable from GNU ELPA, is a popular package known to work well with Eglot.

    • If YASnippet, a popular third-party package for automatic insertion of code templates (snippets), is installed, and the language server supports snippet completion candidates, Eglot arranges for the completion package to instantiate these snippets using YASnippet. (YASnippet can be installed from GNU ELPA.)

    • When the server provides at-point documentation formatted as Markdown in addition to plain text, Eglot arranges for the ElDoc package to enrich this text with fontifications, hyperlinks and other nice formatting before displaying it to the user. This makes the documentation shown by ElDoc look nicer on display.

    • In addition to enabling and enhancing other features and packages, Eglot also provides a number of user commands based on the capabilities of language servers. Examples include renaming symbols with ‘eglot-rename’ and asking to automatically correct problems with ‘eglot-code-actions’. *Note Eglot Commands::.

  • eglot is optimistic by default - to opt out of features use eglot-ignored-server-capabilities and eglot-managed-mode-hook
  • autostart: (add-hook 'foo-mode-hook 'eglot-ensure)
    • on first connection: eglot-connect-hook
  • some multiserver scenarios not supported by Eglot's architecture, better off building a LSP server multiplexer (hint hint)
  • extension documentation recommends just read the source
  • performance opts: eglot-events-buffer-config

1.14. Calc

properties


ID: 92ad7518-cf81-4aca-9940-bd40fb02f5dd
CREATED:


edges

info
-> CAS
EmacsWiki: Calc
Fun with Emacs Calc - Mastering Emacs
calc cheatsheet


24
3
'/
8
fsolve(x*2+x=4,x)
x = 1.33333333333
fsolve([x + y = a, x - y = b],[x,y])
[x = a + (b - a) / 2, y = (a - b) / 2]

1.15. dictionary

properties


ID: c344fc40-d6d8-4553-885b-fe8c55d6aa98
CREATED:


1.16. SES

properties


ID: c40383a3-c717-43c6-8188-e2a564a641a1
CREATED:


edges

info


Simple Emacs Spreadsheet

1.17. Packages

properties


ID: 8b2930be-e877-4e6b-aea4-372be3c8340c
CREATED:


1.17.1. Org-roam   org

properties


ID: 3bb08e71-1ce9-46ed-844a-31305162645e
CREATED:


edges

Org-roam
-> Knowledge System


A plain-text personal knowledge management system.

  • Popular extension which uses a sqlite backend to persist a Roam-like graph of Org-mode nodes.
  • Our own graph.el implementation in core/emacs is inspired by org-roam

1.17.2. emacs-scrum   org

properties


ID: 947597c2-8f17-4ba8-8af7-6d5784219b0c
CREATED:


edges

src


dynamic scrum report generation for org-mode buffers

1.17.3. vertico

properties


ID: b1c1d365-1983-4e63-8cf6-c032932ff1b9
CREATED:


edges

src


1.17.4. corfu

properties


ID: 371ff3e8-d0e0-4260-bc41-4ba53d635ce5
CREATED:


edges

src


Completion in Region Function

1.17.5. cape

properties


ID: c69f7d77-7ec1-4d7e-b70d-23e54cdced4b
CREATED:


edges

src


1.17.6. kanban.el   org

properties


ID: 5ff7407e-32a0-463b-bf59-9519875da655
CREATED:


edges

src


Parse org-todo headlines to use org-tables as Kanban tables

1.18. Apps

properties


ID: 1bbc8529-d207-4a7e-a72a-b231316c90e6
CREATED:


1.18.1. Cloudmacs

properties


ID: defa663e-3522-475c-ad44-615b64edabf1
CREATED:


edges

Cloudmacs: Emacs in your web browser | beepb00p


1.19. Blogs

properties


ID: 4d72736e-f3c1-4b6f-839d-474710771d78
CREATED:


1.19.1. Mastering Emacs

properties


ID: cf98496a-d864-4878-8401-ffaa73aa7d04
CREATED:


edges

Mastering Emacs


1.19.2. Sacha Chua

properties


ID: c6d79f1d-e5bd-479e-82fa-20df7e5dd83f
CREATED:


edges

Home :: Sacha Chua


2. GNU Radio

properties


ID: c92b3830-3836-41b0-a502-f04b44cd3292
CREATED:


edges

GNU Radio
What Is GNU Radio - GNU Radio


2.1. GRC   gui

properties


ID: c272a3f2-b0b0-4784-aeaf-4c677cbbd708
CREATED:


edges

– [BROKEN LINK: man:gnuradio-companion]


GNU Radio Companion

  • GUI tool for creating signal flowgraphs

3. Stow

properties


ID: 0b60eedf-686b-4f9a-bc2b-7cee2be7e828
CREATED:


edges

Stow - GNU Project - Free Software Foundation


GNU Stow is a symlink farm manager which takes distinct packages of software and/or data located in separate directories on the filesystem, and makes them appear to be installed in the same place. For example, /usr/local/bin could contain symlinks to files within /usr/local/stow/emacs/bin, /usr/local/stow/perl/bin etc., and likewise recursively for any other subdirectories such as .../share, .../man, and so on.