mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2025-12-21 21:17:37 -08:00
Escape any backslash and double quote characters, before passing the URI to emacsclient. Signed-off-by: Ulrich Müller <ulm@gentoo.org>
62 lines
1.7 KiB
Bash
62 lines
1.7 KiB
Bash
# Copyright 1999-2023 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
EAPI=8
|
|
NEED_EMACS=28
|
|
|
|
inherit elisp desktop xdg-utils
|
|
|
|
DESCRIPTION="Desktop entries for handling mailto URIs with GNU Emacs"
|
|
HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Emacs"
|
|
S="${WORKDIR}"
|
|
|
|
LICENSE="GPL-2+"
|
|
SLOT="0"
|
|
KEYWORDS="~amd64 ~x86"
|
|
|
|
src_compile() { :; }
|
|
|
|
src_install() {
|
|
newmenu - emacs-mail.desktop <<-EOF
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=GNU Emacs (mail)
|
|
NoDisplay=true
|
|
Exec=${EPREXIX}/usr/bin/emacs -f message-mailto %u
|
|
Terminal=false
|
|
MimeType=x-scheme-handler/mailto;
|
|
EOF
|
|
|
|
# The Desktop Entry Specification does not allow field codes like %u
|
|
# inside a quoted argument, therefore we need a shell wrapper.
|
|
# We pass the following commands to it, in order to backslash-escape
|
|
# any special characters '\' and '"' that occur in %u:
|
|
# u=${1//\\/\\\\}
|
|
# u=${u//\"/\\\"}
|
|
# exec emacsclient --eval "(message-mailto \"$u\")"
|
|
# However, in the desktop entry '"', '\', and '$' must be escaped
|
|
# as '\\"', '\\\\', and '\\$', respectively. Yet another level of
|
|
# backslash escapes is needed for '\' and '$' in the here-document.
|
|
newmenu - emacsclient-mail.desktop <<-EOF
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=Emacsclient (mail)
|
|
NoDisplay=true
|
|
Exec=${EPREFIX}/bin/bash -c \
|
|
"u=\\\\\${1//\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}; \
|
|
u=\\\\\${u//\\\\\\\\\\\\"/\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}; \
|
|
exec ${EPREFIX}/usr/bin/emacsclient \
|
|
--eval \\\\"(message-mailto \\\\\\\\\\\\"\\\\\$u\\\\\\\\\\\\")\\\\"" bash %u
|
|
Terminal=false
|
|
MimeType=x-scheme-handler/mailto;
|
|
EOF
|
|
}
|
|
|
|
pkg_postinst() {
|
|
xdg_desktop_database_update
|
|
}
|
|
|
|
pkg_postrm() {
|
|
xdg_desktop_database_update
|
|
}
|