b’\n \n
\n
\n \n \n \n
\n
\n
- Váženie a balenie\n \n
\n
-
Skladovanie\n \n
\n
- Prospekty \n
\n \n \n
\n
\n \n \n
Compiling GNU Emacs 30 on Debian 12
\n \n \n
\n
\n
\n
\n \n
\n
\n \n \n
Prologue
\n\t
\n\t In this blog, I'll show you how to compile Emacs on\nGNU/Linux Debian
12. But the procedure is of course easily adaptable\nto any GNU/Linux OS,
since we'll only be installing a few packages\nusing their package manager.
To make everything tutti , we will also\n\t add a native compiler and
tree-sitter.\n
\n
Native compilation
\na¦in Emacs is the process of translating and converting Emacs Lisp source
code to machine code, which allows Emacs Lisp to run more efficiently and
faster each time it is run.\n
\nNative compilation in Emacs is not a new feature; it was introduced in
version 28.1.\n
\nThe result of native compilation is a binary blob that (can) be subsequently
loaded when Emacs starts.\n
\n
\n
Tree-sitter
\n\nTree-sitter is a syntax tree analysis library used to parse code as it\nis
manipulated. It is a tool that allows you to analyze the syntax\nstructure of
a programming language and provides an interface to\nperform various
operations such as code refactoring, dependency\nvisualization, or
documentation generation.\n\nTree-sitter supports different programming
languages and allows users\nto define their own “recipes”.\n\nNormally, when
working with code (meaning highlighting it, folding it,\nmoving it to
definitions,a¦) some kind of parser working with regular\nexpressions was
used.\n\nTree-sitter (supposedly) provides better parsing than a
regular\nexpression parser. Regular expressions work with characters or a
group\nof characters, and these must appear in the displayed text in
a\ndefined order. However, a tree-sitter is capable of parsing
and\nrecognizing more complex patterns of structured language,
including\nsyntax.\n\nThe regular expression parser requires that the entire
input text be\nread and processed at once, which is memory and computing
power\nintensive when dealing with large files. Tree-sitter
works\nincrementally and performs parsing without the need to load the
entire\ntext at once.\n\nThe regular expression parser only works with the
linear structure of\nthe text and cannot capture its hierarchy. Tree-sitter is
able to\nunderstand the hierarchical structure of the text and
provide\ninformation about different levels of structure - such as nested
code\nblocks and so on.\n
\n
\n
Installation
\n
\n
Installing the necessary tools and libraries
\n\nTo successfully compile GNU Emacs, we will need some additional tools\nand libraries that may not be present in a normal OS installation.\n\n \n\nThese are:\n\n
\n| git | tool for storing, managing and tracking changes to project source code |\n| autoconf | (simplified) used to generate a Makefile file for compilation |\n| texinfo | tool for working with and converting documentation |\n| gnutls-bin | libraries for using SSL/TLS protocols (if we want to use Emacs as a mail client) |\n| libgccjit-12-dev | library containing the language independent JIT (Just-In-Time) compiler needed for native compilation |\n| gcc | is probably not necessary to introduce the C compiler |\n| libgtk2.0-dev | GTK libraries if Emacs is to run in its own rendered window and not in the terminal |\n| libgnutls28-dev | libraries for compiling for gnutls-bin |\n| libxpm-dev | libraries to support xpm graphics filesknižnice pre podporu xpm grafických súborov |\n| libgif-dev | a¦ and detto for gif |\n| libtinfo-dev | transition package for libncurses |\n
\n
\nWithout hesitation or second thoughts ð, we copy the command:\n
\n sudo apt install git autoconf make texinfo gnutls-bin libgccjit-12-dev gcc libgtk2.0-dev libgnutls28-dev lib libxpm-dev libgif-dev
\n
\n\n
Tree-sitter
\n\nAccording to the tutorial on [Mastering Emacs: How to Get Started with
Tree-Sitter](https://www.masteringemacs.org/article/how-to-get-started-tree-
sitter):\n
\nDownload the latest version of tree-sitter:\n\n
\n git clone https://github.com/tree-sitter/tree-sitter.git
\n
\nAnd compile the program using the familiar three-line magic:\n
\n
\n cd tree-sitter/\n make\n sudo make install\n
\n
\nAnd (if we haven't already) if we define one more variable so that Emacs
doesn't fiddle during starting up:\n
\n export LD_LIBRARY_PATH=/usr/local/lib/\n
\n
\n\n
GNU Emacs 30
\n\nFrom the savannah repositories we'll download the Emacs source code:\n
\n git clone -b master git://git.sv.gnu.org/emacs.git\n
\n
\nNext up:\n
\n cd emacs\n
\n
\nRun autogen.sh , which is used to generate configuration files and
scripts for compilation and installation\n
\n
\n ./autogen.sh\n
\n
\nAnd then we run configure , with parameters\nfor tree-sitter support
and native compilation. \n\n
\n
\n ./configure --with-tree-sitter --with-native-compilation --with-mailutils --with-pop\n
\n\n( --with-pop - if we also require POP3 protocol when downloading
emails)\n
\n \nFollowed by the classic:\n
\n make\n sudo make install\n
\n
\n
Tree-sitter setting
\n
\n\nSomewhere in the initialization file, we put a list of addresses from
where the rules for that language can be downloaded:\n
\n (setq treesit-language-source-alist\n \'((bash "https://github.com/tree-sitter/tree-sitter-bash"))\n (cmake "https://github.com/uyha/tree-sitter-cmake")\n (c "https://github.com/tree-sitter/tree-sitter-c")\n (css "https://github.com/tree-sitter/tree-sitter-css")\n (elisp "https://github.com/Wilfred/tree-sitter-elisp")\n (go "https://github.com/tree-sitter/tree-sitter-go")\n (html "https://github.com/tree-sitter/tree-sitter-html")\n (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "master" "src")\n (json "https://github.com/tree-sitter/tree-sitter-json")\n (make "https://github.com/alemuller/tree-sitter-make")\n (markdown "https://github.com/ikatyang/tree-sitter-markdown")\n (python "https://github.com/tree-sitter/tree-sitter-python")\n (toml "https://github.com/tree-sitter/tree-sitter-toml")\n (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src")\n (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src")\n (yaml "https://github.com/ikatyang/tree-sitter-yaml")))\n
\n
\nAnd run the\n
\n M-x treesit-install-language-grammar\n
command.\n
\n
\n\nWell, we have compiled Emacs in versiona¦ well, last version, for me it
was testing version 30.\n\nBut I haven't deployed it to full operation
yet.\n\n\t
\n\t
\nA couple of pictures at the end:\n
\n
\n![Fig. 1: Installed version 30](https://famme.sk/blog- obr/emacs29/00-emacs_30.png) Fig. 1: Installed version 30 \n
\n\n![Fig. 2: ts-c-mode](https://famme.sk/blog-obr/emacs29/01-treesiter- pre-c.png) Fig. 2: ts-c-mode \n\n\n\n\t\n
\n
\n \n
\n
\n \n
\n
\n \n \n
O naÅ¡ej spoloÄnosti
\n NaÅ¡a firma TRITON FAMME s.r.o., ako nasledovnÃk firiem TRITON\n a FAMME
pôsobà na trhu od roku 2005 (firma FAMME od roku\n 1996). Orientujeme sa na
predaj poľnohospodárskej, lesnÃckej a\n komunálnej techniky, na návrhy,
realizáciu prÃpadne\n rekonÅ¡trukcie technologických liniek na pozberové
spracovanie\n zemiakov spolu so skladovými technológiami na Slovensku i v\n
zahraniÄÃ.
\n Vykonávame tiež servisnú ÄinnosÅ¥ technologických liniek, nielen\n na
Slovensku, ale aj v okolitých krajinách, a v krajinách\n bývalého
Sovietskeho zväzu. \n
\n \n
\n
- Obchodné meno spoloÄnosti:
\n
\n
-
IÄO: \n
-
DIÄ / IÄ DPH \n
\n \n \n
\n
- Triton Famme s.r.o.
\n
\n
-
48 320 404 \n \n
- 2120129781 / SK2120129781 \n \n
\n \n
\n \n
\n
\n \n \n
Kontaktujte nás
\n pre viac informácià a poradenstvo \n
\n
- SÃdlo LevoÄská 862/28,
\n 058 01 Poprad
\n \n
* Kancelária JilemnickÃ(C)ho\n 307/77
\n 059 51 Veľká Lomnica
\n \n
-
E-mail triton (zav.)\n famme.sk \n
-
Telefóny Richard Fabo:\n +421 905 829 763
\n Miroslav Fabo: +421 905 381 924
\n
\n \n
\n
\n \n
Design: TEMPLATED\n Images: Unsplash (CC0)\n
\n
\n
\n
\n \n’
Oh, I am sorry! That was me experimenting with Lemmy’s SDK to see if I could create a post out of a reddit submission. My original idea was to use the output from readability, convert it to markdown and then save in the “body” field, but only after I ran it on some of posts I noticed that I was getting a byte stream instead of a string. This is why the body starts with \b and has all the \n.
I edited the body on my post, but it seems that the updated has propagated through the different instances?