Add Emacs PKGBUILD with native-comp branch, update spacemacs conf

I will now try to use Emacs on the native-comp branch, after using it
for a bit it seems a lot faster than your usual Emacs.

Also update Emacs config, with some fixes provided and some overall
improvement.
This commit is contained in:
Lucien Cartier-Tilet 2020-08-13 14:19:14 +02:00
parent 589b31632e
commit 42d32d31fe
Signed by: phundrak
GPG Key ID: BD7789E705CB8DCA
2 changed files with 369 additions and 22 deletions

View File

@ -0,0 +1,325 @@
# Maintainer: Jack Random <https://aur.archlinux.org/account/jackrandom/>
# Maintainer of emacs-git: Pedro A. López-Valencia <https://aur.archlinux.org/users/vorbote>
################################################################################
# The difference between this PKGBUILD and the one from `emacs-git` is that:
# - this one builds emacs from `emacs-27` release branch.
# - link-time optimization and use of clang are disabled by default.
#
# It hence should be more stable and less frequently updated than `emacs-git`.
#
# `Starting the Emacs 27 release cycle` announcement on emacs-devel:
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00635.html
################################################################################
################################################################################
# CAVEAT LECTOR: This PKGBUILD is highly opinionated. I give you
# enough rope to hang yourself, but by default it
# only enables the features I use.
#
# TLDR: yaourt users, cry me a river.
#
# Everyone else: do not update blindly this PKGBUILD. At least
# make sure to compare and understand the changes.
#
################################################################################
################################################################################
# Assign "YES" to the variable you want enabled; empty or other value
# for NO.
#
# Where you read experimental, replace with foobar.
# =================================================
#
################################################################################
CHECK= # Run tests. May fail, this is developement after all.
CLANG="YES" # Use clang.
LTO="YES" # Enable link-time optimization. Not that experimental anymore.
# Seems fixed in GCC, so I've reenabled binutils support, please
# report any bug, to make it use clang by default again.
CLI= # CLI only binary.
NOTKIT= # Use no toolkit widgets. Like B&W Twm (001d sk00l).
LUCID= # Use the lucid, a.k.a athena, toolkit. Like XEmacs, sorta.
#
# Read https://wiki.archlinux.org/index.php/X_resources
# https://en.wikipedia.org/wiki/X_resources
# and https://www.emacswiki.org/emacs/XftGnuEmacs
# for some tips on using outline fonts with
# Xft, if you choose no toolkit or Lucid.
#
GTK2= # GTK2 support. Why would you?
M17N= # Enable m17n international table input support.
# You are far better off using harfbuzz+freetype2
# But this gives independence if you need it.
# In fact, right now harfbuzz is hardwired, I have to
# be convinced it should be refactored.
CAIRO="YES" # GOOD NEWS! No longer experimental and fully supported.
# This is now, along with harfbuzz, the prefered font
# and text shaping engine.
# If using GTK+, you'll get printing for free.
XWIDGETS= # Use GTK+ widgets pulled from webkit2gtk. Usable.
DOCS_HTML="YES" # Generate and install html documentation.
DOCS_PDF="YES" # Generate and install pdf documentation.
MAGICK= # ImageMagick 7 support. Deprecated (read the logs).
# ImageMagick, like flash, is a bug ridden pest that
# won't die; yet it is useful if you know what you
#are doing.
# -->>If you just *believe* you need it, you don't.<<--
NOGZ="YES" # Don't compress .el files.
################################################################################
################################################################################
pkgname="emacs-native-comp-git"
pkgver=.143015
pkgrel=1
pkgdesc="GNU Emacs. native-comp branch."
arch=('x86_64' )
url="http://www.gnu.org/software/emacs/"
license=('GPL3' )
depends=('alsa-lib' 'gnutls' 'libxml2' 'jansson' 'libotf' 'harfbuzz' 'gpm' 'libgccjit')
makedepends=('git')
provides=('emacs' 'emacs-seq')
conflicts=('emacs' 'emacs26-git' 'emacs27-git' 'emacs-git' 'emacs-seq')
replaces=('emacs26-git' 'emacs-git' 'emacs-seq')
source=("emacs-git::git://git.savannah.gnu.org/emacs.git#branch=feature/native-comp")
md5sums=('SKIP')
# If Savannah access is blocked for reasons, use Github instead.
# Edit the config file of your local repo copy as well.
#source=("emacs-git::git://github.com/emacs-mirror/emacs.git")
options=(strip docs emptydirs zipman)
################################################################################
################################################################################
if [[ $LTO == "YES" ]] && [[ $CLANG != "YES" ]]; then
CFLAGS+=" -g -flto -fuse-linker-plugin"
CXXFLAGS+=" -g -flto -fuse-linker-plugin"
else
CFLAGS+=" -g -flto"
CXXFLAGS+=" -g -flto"
fi
if [[ $CLANG == "YES" ]]; then
export CC="/usr/bin/clang" ;
export CXX="/usr/bin/clang++" ;
export CPP="/usr/bin/clang -E" ;
export LD="/usr/bin/lld" ;
export AR="/usr/bin/llvm-ar" ;
export AS="/usr/bin/llvm-as" ;
export CCFLAGS+=' -fuse-ld=lld' ;
export CXXFLAGS+=' -fuse-ld=lld' ;
makedepends+=( 'clang' 'lld' 'llvm') ;
fi
if [[ $NOTKIT == "YES" ]]; then
depends+=( 'dbus' 'hicolor-icon-theme' 'libxinerama' 'libxrandr' 'lcms2' 'librsvg' );
elif [[ $LUCID == "YES" ]]; then
depends+=( 'dbus' 'hicolor-icon-theme' 'libxinerama' 'libxfixes' 'lcms2' 'librsvg' 'xaw3d' 'xorgproto' );
makedepends+=( 'xorgproto' );
elif [[ $GTK2 == "YES" ]]; then
depends+=( 'gtk2' );
makedepends+=( 'xorgproto' );
else
depends+=( 'gtk3' );
makedepends+=( 'xorgproto' );
fi
if [[ $M17N == "YES" ]]; then
depends+=( 'm17n-lib' );
fi
if [[ $MAGICK == "YES" ]]; then
depends+=( 'imagemagick' 'libjpeg-turbo' 'giflib' );
elif [[ ! $NOX == "YES" ]]; then
depends+=( 'libjpeg-turbo' 'giflib' );
else
depends+=();
fi
if [[ $CAIRO == "YES" ]]; then
depends+=( 'cairo' );
fi
if [[ $XWIDGETS == "YES" ]]; then
if [[ $GTK2 == "YES" ]] || [[ $LUCID == "YES" ]] || [[ $NOTKIT == "YES" ]] || [[ $CLI == "YES" ]]; then
echo "";
echo "";
echo "Xwidgets support *requires* gtk+3!!!";
echo "";
echo "";
exit 1;
else
depends+=( 'webkit2gtk' );
fi
fi
if [[ $DOCS_PDF == "YES" ]]; then
makedepends+=( 'texlive-core' );
fi
################################################################################
################################################################################
pkgver() {
cd "$srcdir/emacs-git"
printf "%s.%s" \
"$(grep AC_INIT configure.ac | \
sed -e 's/^.\+\ \([0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?\).\+$/\1/\')" \
"$(git rev-list --count HEAD)"
}
# There is no need to run autogen.sh after first checkout.
# Doing so, breaks incremental compilation.
prepare() {
cd "$srcdir/emacs-git"
[[ -x configure ]] || ( ./autogen.sh git && ./autogen.sh autoconf )
}
if [[ $CHECK == "YES" ]]; then
check() {
cd "$srcdir/emacs-git"
make check
}
fi
build() {
cd "$srcdir/emacs-git"
local _conf=(
--prefix=/usr
--sysconfdir=/etc
--libexecdir=/usr/lib
--localstatedir=/var
--mandir=/usr/share/man
--with-gameuser=:games
--with-sound=alsa
--with-modules
--with-nativecomp
--with-json
# Beware https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25228
# dconf and gconf break font settings you set in ~/.emacs.
# If you insist you'll need to read that bug report in *full*.
# Good luck!
--without-gconf
--without-gsettings
)
################################################################################
################################################################################
if [[ $CLANG == "YES" ]]; then
_conf+=(
'--enable-autodepend'
);
fi
if [[ $LTO == "YES" ]]; then
_conf+=(
'--enable-link-time-optimization'
);
fi
if [[ $CLI == "YES" ]]; then
_conf+=( '--without-x' '--with-x-toolkit=no' '--without-xft' '--without-lcms2' '--without-rsvg' );
elif [[ $NOTKIT == "YES" ]]; then
_conf+=( '--with-x-toolkit=no' '--without-toolkit-scroll-bars' '--with-xft' '--without-xaw3d' );
elif [[ $LUCID == "YES" ]]; then
_conf+=( '--with-x-toolkit=lucid' '--with-xft' '--with-xaw3d' );
elif [[ $GTK2 == "YES" ]]; then
_conf+=( '--with-x-toolkit=gtk2' '--without-gsettings' '--without-xaw3d' );
else
_conf+=( '--with-x-toolkit=gtk3' '--without-xaw3d' );
fi
if [[ ! $M17N == "YES" ]]; then
_conf+=( '--without-m17n-flt' );
fi
if [[ $MAGICK == "YES" ]]; then
_conf+=( '--with-imagemagick');
else
_conf+=();
fi
if [[ $CAIRO == "YES" ]]; then
_conf+=( '--with-cairo' );
fi
if [[ $XWIDGETS == "YES" ]]; then
_conf+=( '--with-xwidgets' );
fi
if [[ $NOGZ == "YES" ]]; then
_conf+=( '--without-compress-install' );
fi
################################################################################
################################################################################
# Use gold with gcc, unconditionally.
#
if [[ ! $CLANG == "YES" ]]; then
export LD=/usr/bin/ld.gold
export CFLAGS+=" -s -fuse-ld=gold";
export CXXFLAGS+=" -s -fuse-ld=gold";
fi
./configure "${_conf[@]}"
# Using "make" instead of "make bootstrap" enables incremental
# compiling. Less time recompiling. Yay! But you may
# need to use bootstrap sometimes to unbreak the build.
# Just add it to the command line.
#
# Please note that incremental compilation implies that you
# are reusing your src directory!
#
make
# You may need to run this if 'loaddefs.el' files become corrupt.
#cd "$srcdir/emacs-git/lisp"
#make autoloads
#cd ../
# Optional documentation formats.
if [[ $DOCS_HTML == "YES" ]]; then
make html;
fi
if [[ $DOCS_PDF == "YES" ]]; then
make pdf;
fi
}
package() {
cd "$srcdir/emacs-git"
make DESTDIR="$pkgdir/" install
# Install optional documentation formats
if [[ $DOCS_HTML == "YES" ]]; then make DESTDIR="$pkgdir/" install-html; fi
if [[ $DOCS_PDF == "YES" ]]; then make DESTDIR="$pkgdir/" install-pdf; fi
# remove conflict with ctags package
mv "$pkgdir"/usr/bin/{ctags,ctags.emacs}
if [[ $NOGZ == "YES" ]]; then
mv "$pkgdir"/usr/share/man/man1/{ctags.1,ctags.emacs.1};
else
mv "$pkgdir"/usr/share/man/man1/{ctags.1.gz,ctags.emacs.1.gz}
fi
# fix user/root permissions on usr/share files
find "$pkgdir"/usr/share/emacs/ | xargs chown root:root
# fix permssions on /var/games
mkdir -p "$pkgdir"/var/games/emacs
chmod 775 "$pkgdir"/var/games
chmod 775 "$pkgdir"/var/games/emacs
chown -R root:games "$pkgdir"/var/games
}
################################################################################
# vim:set ft=sh ts=2 sw=2 et:

View File

@ -1937,7 +1937,7 @@
which gets updated with the ~mbsync~ command from ~isync~. It has a lot of which gets updated with the ~mbsync~ command from ~isync~. It has a lot of
neat features, but I guess my favorite ones are: neat features, but I guess my favorite ones are:
1. the search query feature 1. the search query feature
2. being able to send an HTML email either to the browser or 2. being able to send an HTML email either to the browser
Due to mu sitting on top of a Maildir, I need to tell mu4e where said maildir Due to mu sitting on top of a Maildir, I need to tell mu4e where said maildir
is, and point it the trash, archive, and sent folders as well as the refresh is, and point it the trash, archive, and sent folders as well as the refresh
@ -1971,16 +1971,27 @@
~bu~. ~bu~.
#+BEGIN_SRC emacs-lisp #+BEGIN_SRC emacs-lisp
(setq mu4e-bookmarks (setq mu4e-bookmarks
`(("maildir:/Inbox" "Inbox" ?i) `(("maildir:/Inbox AND NOT flag:trashed" "Inbox" ?i)
("maildir:/Sent" "Sent messages" ?s) ("maildir:/Sent" "Sent messages" ?s)
("flag:unread AND NOT flag:trashed" "Unread messages" ?u) ("flag:unread AND NOT flag:trashed" "Unread messages" ?u)
("date:today..now" "Today's messages" ?t) ("date:today..now" "Today's messages" ?t)
("date:7d..now" "Last 7 days" ?w) ("date:7d..now" "Last 7 days" ?w)
("date:1m..now" "Last month" ?m) ("date:1m..now" "Last month" ?m)
("date:1y..now" "Last year" ?y) ("date:1y..now" "Last year" ?y)
("flag:trashed" "Trash" ?T)
("mime:image/*" "Messages with images" ?p))) ("mime:image/*" "Messages with images" ?p)))
#+END_SRC #+END_SRC
In the header view, Id like the name of my mailing lists to be clear. Mu4e
tries its best to provide them one, but its not always perfect, so lets fix
that.
#+BEGIN_SRC emacs-lisp
(setq mu4e-user-mailing-lists
'(("ateliers-emacs.framalistes.org" . "EmacsFR")
("CONLANG@LISTSERV.BROWN.EDU" . "Conlang")
("AUXLANG@LISTSERV.BROWN.EDU" . "Auxlang")))
#+END_SRC
On new email arrival, Emacs can send the system a notification which will be On new email arrival, Emacs can send the system a notification which will be
handled as any other notification received by the system and will display the handled as any other notification received by the system and will display the
number of unread emails to the user; in my case, notifications are handled by number of unread emails to the user; in my case, notifications are handled by
@ -2013,10 +2024,10 @@
mu4e-headers-visible-columns 140) mu4e-headers-visible-columns 140)
#+END_SRC #+END_SRC
Finally but very importantly, this is the setup I have for my SMTP mail This is the setup I have for my SMTP mail server: I point Emacs SMTP
server: I point Emacs SMTP services to my private mail server on its SMTP services to my private mail server on its SMTP port, which should be used
port, which should be used with a STARTTLS stream. And I tell Emacs this is with a STARTTLS stream. And I tell Emacs this is the default way to send an
the default way to send an email. email.
#+BEGIN_SRC emacs-lisp #+BEGIN_SRC emacs-lisp
(setq smtpmail-smtp-server "mail.phundrak.com" (setq smtpmail-smtp-server "mail.phundrak.com"
smtpmail-smtp-service 587 smtpmail-smtp-service 587
@ -2052,6 +2063,15 @@
(setq paragraph-start "\f\\|[ \t]*$\\|[ \t]*[-+*] ") (setq paragraph-start "\f\\|[ \t]*$\\|[ \t]*[-+*] ")
#+END_SRC #+END_SRC
There is currently [[https://github.com/syl20bnr/evil-iedit-state/issues/27][an open issue]] with ~evil-iedit-state~ where exiting the
iedit state calls ~iedit-cleanup~ despite this function being renamed
~iedit-lib-cleanup~. So, waiting for the fix to be pushed upstream, lets
declare an alias so Spacemacs understands what I want to do when I hit ~ESC~
while in iedit state.
#+BEGIN_SRC emacs-lisp
(defalias 'iedit-cleanup 'iedit-lib-cleanup)
#+END_SRC
*** Evil *** Evil
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: User_Configuration-Miscellaneous-Evil-ab8a36e3 :CUSTOM_ID: User_Configuration-Miscellaneous-Evil-ab8a36e3
@ -2585,10 +2605,13 @@
Both these classes have to be added to ~org-latex-classes~ like so: Both these classes have to be added to ~org-latex-classes~ like so:
#+BEGIN_SRC emacs-lisp :noweb yes #+BEGIN_SRC emacs-lisp :noweb yes
(eval-after-load "ox-latex" (eval-after-load "ox-latex"
'(phundrak/add-all-to-list org-latex-classes '(progn
(add-to-list 'org-latex-classes
<<org-latex-class-conlang>> <<org-latex-class-conlang>>
)
(add-to-list 'org-latex-classes
<<org-latex-class-beamer>> <<org-latex-class-beamer>>
)) )))
#+END_SRC #+END_SRC
*** Org agenda *** Org agenda
@ -2854,7 +2877,6 @@
,* %^{Title} ,* %^{Title}
:PROPERTIES: :PROPERTIES:
:CAPTURED: %U :CAPTURED: %U
:FROM: %f
:END: :END:
%? %?
#+END_SRC #+END_SRC
@ -2864,7 +2886,6 @@
,* %^{Title} ,* %^{Title}
:PROPERTIES: :PROPERTIES:
:CAPTURED: %U :CAPTURED: %U
:FROM: %f
:END: :END:
Possible inspiration: Possible inspiration:
,#+begin_quote ,#+begin_quote
@ -3296,8 +3317,9 @@
First, here are my shortcuts for opening my private files described above: First, here are my shortcuts for opening my private files described above:
#+NAME: private-files-open-shortcuts #+NAME: private-files-open-shortcuts
| Shortcut | Name | File | | Shortcut | Name | File |
|----------+-------------------+----------------------------| |----------+-------------------+---------------------------------|
| of | files | | | of | files | |
| ofb | blog.org | ~/org/blog/content-org/blog.org |
| ofC | conlanging.org | ~/org/conlanging.org | | ofC | conlanging.org | ~/org/conlanging.org |
| ofe | elfeed.org | ~/org/elfeed.org | | ofe | elfeed.org | ~/org/elfeed.org |
| ofj | journal.org | ~/org/journal.org | | ofj | journal.org | ~/org/journal.org |
@ -3322,7 +3344,7 @@
*The following code is not tangled into my Spacemacs config.* However, it is *The following code is not tangled into my Spacemacs config.* However, it is
used to generate shortcuts and configuration code from the above table: used to generate shortcuts and configuration code from the above table:
#+NAME: shortcuts-gen #+NAME: shortcuts-gen
#+BEGIN_SRC emacs-lisp :tangle no :noweb yes :var table=private-files-open-shortcuts :exports code :results replace #+BEGIN_SRC emacs-lisp :tangle no :noweb yes :var table=[] :exports code :results replace
(concat (mapconcat (lambda (x) (concat (mapconcat (lambda (x)
(let* ((shortcut (nth 0 x)) (let* ((shortcut (nth 0 x))
(name (nth 1 x))) (name (nth 1 x)))