# 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
}