summaryrefslogtreecommitdiff
path: root/app-emacs/gnuserv
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-10-10 00:07:53 +0100
committerV3n3RiX <venerix@koprulu.sector>2023-10-10 00:07:53 +0100
commit024d1b6f101ade7073320fba887d4808c933a8e8 (patch)
tree421168a6409273df1171f750816ce32dc2779a4f /app-emacs/gnuserv
parent4e4ee9865a958b6a854f9bca96637244c628d525 (diff)
gentoo auto-resync : 10:10:2023 - 00:07:53
Diffstat (limited to 'app-emacs/gnuserv')
-rw-r--r--app-emacs/gnuserv/Manifest4
-rw-r--r--app-emacs/gnuserv/files/gnuserv-3.12.8-advice.patch57
-rw-r--r--app-emacs/gnuserv/files/gnuserv-3.12.8-cl.patch251
-rw-r--r--app-emacs/gnuserv/files/gnuserv-3.12.8-emacs-29.patch135
-rw-r--r--app-emacs/gnuserv/gnuserv-3.12.8-r6.ebuild73
5 files changed, 520 insertions, 0 deletions
diff --git a/app-emacs/gnuserv/Manifest b/app-emacs/gnuserv/Manifest
index b797d08391b7..4889389f6a6a 100644
--- a/app-emacs/gnuserv/Manifest
+++ b/app-emacs/gnuserv/Manifest
@@ -1,9 +1,13 @@
AUX 50gnuserv-gentoo.el 237 BLAKE2B 53e2fb102e832b852ebd23d3a7cda10a1cde7e1733818dd357edaa0ba67e66d925ea589195dd5b797ba37e62f44e26706669594f875409fb6afb294bba05d549 SHA512 24edf596178da29d68add510382241bf257ccb6ed0f9bd1aa65a2bda268b2fa506be616f70c75628d82cc8fda06617f5a4b58e602a9dc082476ac4ad4f0e047d
AUX gnuclient.desktop 608 BLAKE2B b50695688d76ec34dae2fb68b4865769ab531a2a5add76a48c71eac6542ea3736f6e2239f1b05775e88bee3bc2ccfc6e50bc0c49a6eacbb277d822bb2cfb3003 SHA512 35616b5fe182f4127635454f4af89b307c0c52653878ef163efee4741c4b5fe5ab88d78f89ebfe499cc02516d2a7093c49dc2232a2768e952acd61651ff16468
+AUX gnuserv-3.12.8-advice.patch 1862 BLAKE2B f96771758e68523d2ad4d8cc69c9619e296917ad41aeca94f6b542260062830bd9f497542d9172b86fc1564c3e584ee867c64dbec7539a048fe69d54c3f4e172 SHA512 402e306ce311abba67a59f2d1c4eb2f1df334f1926579ba2da6c36ff15473d84dfde603066f1f68184f1aa280a9637e2d0b9d5f099097cbc8e691f741e6e1c6c
AUX gnuserv-3.12.8-backquotes.patch 509 BLAKE2B 4770c01e4650301d1922b2c87e5cd723feb016fb5d5224aec715761a81b4f66614c7a535101764432a80c26f8e9c13d2fc3cbd1ab8122b5e608d3aeea3de73b3 SHA512 9ccdf8b4fe0ce45528ecec67782785b5d1ec82e5fd14d444b3f091d9c76add8052de3384e0b54fff479f4bc5729966ce520e62343159a7e251fce1e3841b5229
+AUX gnuserv-3.12.8-cl.patch 8635 BLAKE2B ce01d314c445c99eac137c46e9a62c186aed21c8cd93fd3902da2fd5f9b0e7ad780faf909cbe07caaec615429adb77fdef75917cc663edf351d2596723ab52f4 SHA512 75e33e7fccdcefe9d4b0a8672a26eb31d48572fc0858aee94a1701f9b05f7b3358a67b437244635980d76e543e8cc4d7d25c4940e36202a552eb86289b37029e
AUX gnuserv-3.12.8-emacs-28.patch 1300 BLAKE2B b74b904b37af0460682d6c7c5b0b0d79ec41feb646f69bbe38c0db2698d3e8d133b56eb831c6149b0f22725ef5f85c2b27d60100b18ce5c62ce30ec18a928403 SHA512 1cf554a682254ea8c84b8e81e76a2cb08cee18e3b919a9889b745ea97234aad4e3e0099e48fd13a57b881cb2d17a495e59a42d8fbda30d94b2391d0d11ae2ba5
+AUX gnuserv-3.12.8-emacs-29.patch 4110 BLAKE2B d74da6c33d06c0832e5fbe84f5944014f1aea4d7261e7f2031df1a249c69ae6919dd6b559bd675c49edc69d99728602fcafe66418f366a229b7bd3b07804940c SHA512 b65a1fc66ca4fcc096d457b92e0e8157482b9ccbf719c55d57bbd4df5ce1467faae0813b00ca0645ef5863b3825959490d715aab55a32fd1f2face750d3b18bf
AUX gnuserv-3.12.8-gnudoit.patch 374 BLAKE2B 9c39f3fd1b881e4a2b4dde712b56824e99da89140d17b5a3996e35eb5d7c0a9d47933e041834c0249010c4932a69633aa93a38ce16bdd3158f52f22549f9db2f SHA512 ba3be5bee1bd23363dc41d77a45028497e1a4a8270358bf4c6eacacaca85e5b52717991885f8d4bb754c613f535d4934d0e199ccd088f78f15bcf78beaa524bd
AUX gnuserv-3.12.8-process-query.patch 554 BLAKE2B 94f09a1e86ea787a05e51ed5e2742174067b7cca0fbe2fe83619b6f829048172a9e46f70f8e2c22f2787f43390730f07520553e7d659ccfd451869b1a074d707 SHA512 bc01b928003cf5050934972eeb7830b14957693c1484b061dbcf1809176388b75297b6884b7f5c963e59d8ec4a7cc4d9bf9ec265b414574a7de6bb5875f6b607
DIST gnuserv-3.12.8.tar.gz 124070 BLAKE2B 7531d85f6cd1873f75499c37230907f96ac484e1d58a4a3459f44d3bfaa6a6124d44f99a7c27d1fa3deb16b1cc29d08313b911cdc1782a1c5b24bd702ef4c9ba SHA512 e8f387a554c22fb2eb166d388085b9d68a0d865ae56ab71f3ffe09ff46bef04a4ba5b05ca51a1110e1dff67ae2cd6acc8b18a0fb9df9299dbbf4a001f0924f31
EBUILD gnuserv-3.12.8-r5.ebuild 1752 BLAKE2B affe2261d573ec8d003c89fe509cb52f0d6237db66ae25e8716819e9e097639cd8d96899b119d7bd6058b132ca3cf5375a50083a9dd2d78d90ba201544c89a16 SHA512 5a9ecfb745a7d70da2cf367330a8505654dd0f05f61e884cd086844214689bb7ed7f0ca4f020825483bab6a73ac6b259d928803ba4bb13b4aceeadd7570a5e06
+EBUILD gnuserv-3.12.8-r6.ebuild 1901 BLAKE2B 5b5ad5b51a4f13a505247cf5d90df69e6218206e38205ffdfd47c8a17b1ee8ca56e2c2521bbd9d157c8ce3f1798769fcfd2b5183ab1a767e521b964f50bdd036 SHA512 d27f59062afef888341473b70b67c2d60e53aa968c902402af357e63f795643e37be99fb8558ba3d23307d5d9758853612e9be4baca0975446678c6d7277feb7
MISC metadata.xml 260 BLAKE2B a187a6020d68e0ac53c6bb25461b0988c938fb112a8a7e3a906b827269347d70f8366594d404329695b4fa52fff2cde7fbc51d501e674bf8adc821a4141ccfcf SHA512 2ff2d68bb3c552f006474e86ecab8ebbcfcb35588384c045a665d305f79c739c4d80c0ea639a71c39123b8c5c1b3a96977ee8c0c3e973449a732ac3ac8f2c3a3
diff --git a/app-emacs/gnuserv/files/gnuserv-3.12.8-advice.patch b/app-emacs/gnuserv/files/gnuserv-3.12.8-advice.patch
new file mode 100644
index 000000000000..e5f1cb9248f9
--- /dev/null
+++ b/app-emacs/gnuserv/files/gnuserv-3.12.8-advice.patch
@@ -0,0 +1,57 @@
+defadvice is obsolete in Emacs 30.
+
+--- gnuserv-3.12.8/gnuserv-compat.el
++++ gnuserv-3.12.8/gnuserv-compat.el
+@@ -112,38 +112,34 @@
+ ;; can do! If the device doesn't represent a live frame, we create
+ ;; the frame as requested.
+
+- (defadvice make-frame (around
+- gnuserv-compat-make-frame
+- first
+- (&optional parameters device)
+- activate)
++ (defun gnuserv-compat-make-frame (orig-fun &optional parameters device)
+ (if (and device
+ (frame-live-p device))
+ (progn
+ (if parameters
+ (modify-frame-parameters device parameters))
+- (setq ad-return-value device))
+- ad-do-it))
++ device)
++ (funcall orig-fun parameters)))
++
++ (advice-add 'make-frame :around #'gnuserv-compat-make-frame)
+
+ ;; Advise `delete-frame' to run `delete-device-hook'. This might be a
+ ;; little too hacky, but it seems to work! If someone actually tries
+ ;; to do something device specific then it will probably blow up!
+- (defadvice delete-frame (before
+- gnuserv-compat-delete-frame
+- first
+- nil
+- activate)
++ (defun gnuserv-compat-delete-frame (&optional frame _force)
+ (run-hook-with-args 'delete-device-hook frame))
+
++ (advice-add 'delete-frame :before #'gnuserv-compat-delete-frame)
++
+ ;; Advise `filtered-frame-list' to ignore the optional device
+ ;; argument. Here we don't follow the mapping of devices to frames.
+ ;; We just assume that any frame satisfying the predicate will do.
+- (defadvice filtered-frame-list (around
+- gnuserv-compat-filtered-frame-list
+- first
+- (predicate &optional device)
+- activate)
+- ad-do-it)
++ (defun gnuserv-compat-filtered-frame-list (orig-fun predicate
++ &optional _device)
++ (funcall orig-fun predicate))
++
++ (advice-add 'filtered-frame-list
++ :around #'gnuserv-compat-filtered-frame-list)
+ ;; )
+
+
diff --git a/app-emacs/gnuserv/files/gnuserv-3.12.8-cl.patch b/app-emacs/gnuserv/files/gnuserv-3.12.8-cl.patch
new file mode 100644
index 000000000000..df5d1098ce5e
--- /dev/null
+++ b/app-emacs/gnuserv/files/gnuserv-3.12.8-cl.patch
@@ -0,0 +1,251 @@
+Most Common Lisp macros want a cl- prefix in Emacs 27 and later
+
+--- gnuserv-3.12.8/devices.el
++++ gnuserv-3.12.8/devices.el
+@@ -31,7 +31,7 @@
+ ;; XEmacs 19.14. A 'device' for Emacs 19 is just a frame, from which we can
+ ;; determine the connection to an X display, etc.
+
+-(require 'cl)
++(require 'cl-macs)
+ (eval-when-compile
+ (if (string-match "XEmacs" (emacs-version))
+ (set 'byte-optimize nil)))
+@@ -220,43 +220,43 @@
+ (setq frames (cdr frames)))))
+
+ (defun device-color-cells (&optional device)
+- (case window-system
++ (cl-case window-system
+ ((x win32 w32 pm) (x-display-color-cells device))
+ (ns (ns-display-color-cells device))
+ (otherwise 1)))
+
+ (defun device-pixel-width (&optional device)
+- (case window-system
++ (cl-case window-system
+ ((x win32 w32 pm) (x-display-pixel-width device))
+ (ns (ns-display-pixel-width device))
+ (otherwise (frame-width device))))
+
+ (defun device-pixel-height (&optional device)
+- (case window-system
++ (cl-case window-system
+ ((x win32 w32 pm) (x-display-pixel-height device))
+ (ns (ns-display-pixel-height device))
+ (otherwise (frame-height device))))
+
+ (defun device-mm-width (&optional device)
+- (case window-system
++ (cl-case window-system
+ ((x win32 w32 pm) (x-display-mm-width device))
+ (ns (ns-display-mm-width device))
+ (otherwise nil)))
+
+ (defun device-mm-height (&optional device)
+- (case window-system
++ (cl-case window-system
+ ((x win32 w32 pm) (x-display-mm-height device))
+ (ns (ns-display-mm-height device))
+ (otherwise nil)))
+
+ (defun device-bitplanes (&optional device)
+- (case window-system
++ (cl-case window-system
+ ((x win32 w32 pm) (x-display-planes device))
+ (ns (ns-display-planes device))
+ (otherwise 2)))
+
+ (defun device-class (&optional device)
+- (case window-system
++ (cl-case window-system
+ (x ; X11
+ (cond
+ ((fboundp 'x-display-visual-class)
+--- gnuserv-3.12.8/gnuserv-compat.el
++++ gnuserv-3.12.8/gnuserv-compat.el
+@@ -49,7 +49,7 @@
+ ;; 20.3. Also, XEmacs preloads the common lisp stuff, and we might as
+ ;; well use it here.
+
+-(require 'cl)
++(require 'cl-macs)
+
+ (eval-and-compile
+ (unless (fboundp 'define-obsolete-variable-alias)
+@@ -66,7 +66,7 @@
+ (unless (fboundp 'add-minor-mode)
+ (defun add-minor-mode (toggle name)
+ "Register a new minor mode."
+- (pushnew (list toggle name)
++ (cl-pushnew (list toggle name)
+ minor-mode-alist
+ :test 'equal)))
+
+--- gnuserv-3.12.8/gnuserv.el
++++ gnuserv-3.12.8/gnuserv.el
+@@ -83,6 +83,8 @@
+
+ ;;; Code:
+
++(require 'cl-macs)
++
+ (defgroup gnuserv nil
+ "The gnuserv suite of programs to talk to Emacs from outside."
+ :group 'environment
+@@ -203,7 +205,7 @@
+
+ ;;; Internal variables:
+
+-(defstruct gnuclient
++(cl-defstruct gnuclient
+ "An object that encompasses several buffers in one.
+ Normally, a client connecting to Emacs will be assigned an id, and
+ will request editing of several files.
+@@ -289,7 +291,7 @@
+ (defun gnuserv-sentinel (proc msg)
+ (let ((msgstring (concat "Gnuserv process %s; restart with `%s'"))
+ (keystring (substitute-command-keys "\\[gnuserv-start]")))
+- (case (process-status proc)
++ (cl-case (process-status proc)
+ (exit
+ (message msgstring "exited" keystring)
+ (gnuserv-prepare-shutdown))
+@@ -403,7 +405,7 @@
+ If a flag is `view', view the files read-only."
+ (let (quick view)
+ (mapc (lambda (flag)
+- (case flag
++ (cl-case flag
+ (quick (setq quick t))
+ (view (setq view t))
+ (t (error "Invalid flag %s" flag))))
+@@ -419,7 +421,7 @@
+ (device (cond ((frame-live-p dest-frame)
+ (frame-device dest-frame))
+ ((null dest-frame)
+- (case (car type)
++ (cl-case (car type)
+ (tty (apply 'make-tty-device (cdr type)))
+ (gtk (make-gtk-device))
+ (x (make-x-device-with-gtk-fallback (cadr type)))
+@@ -456,7 +458,7 @@
+ (goto-line line)
+ ;; Don't memorize the quick and view buffers.
+ (unless (or quick view)
+- (pushnew (current-buffer) (gnuclient-buffers client))
++ (cl-pushnew (current-buffer) (gnuclient-buffers client))
+ (setq gnuserv-minor-mode t)
+ ;; Add the "Done" button to the menubar, only in this buffer.
+ (if (and (featurep 'menubar) current-menubar)
+@@ -510,9 +512,9 @@
+ ;; Like `gnuserv-buffer-clients', but returns a boolean; doesn't
+ ;; collect a list.
+ (defun gnuserv-buffer-p (buffer)
+- (member* buffer gnuserv-clients
+- :test 'memq
+- :key 'gnuclient-buffers))
++ (cl-member buffer gnuserv-clients
++ :test 'memq
++ :key 'gnuclient-buffers))
+
+ ;; This function makes sure that a killed buffer is deleted off the
+ ;; list for the particular client.
+@@ -525,7 +527,7 @@
+ editing has ended."
+ (let* ((buf (current-buffer)))
+ (dolist (client (gnuserv-buffer-clients buf))
+- (callf2 delq buf (gnuclient-buffers client))
++ (cl-callf2 delq buf (gnuclient-buffers client))
+ ;; If no more buffers, kill the client.
+ (when (null (gnuclient-buffers client))
+ (gnuserv-kill-client client)))))
+@@ -546,7 +548,7 @@
+
+ (defun gnuserv-kill-emacs-query-function ()
+ (or gnuserv-kill-quietly
+- (not (some 'gnuclient-buffers gnuserv-clients))
++ (not (cl-some 'gnuclient-buffers gnuserv-clients))
+ (yes-or-no-p "Gnuserv buffers still have clients; exit anyway? ")))
+
+ (add-hook 'kill-emacs-query-functions
+@@ -562,7 +564,7 @@
+ ;; killing the device, because it would cause a device-dead
+ ;; error when `delete-device' tries to do the job later.
+ (gnuserv-kill-client client t))))
+- (callf2 delq device gnuserv-devices))
++ (cl-callf2 delq device gnuserv-devices))
+
+ (add-hook 'delete-device-hook 'gnuserv-check-device)
+
+@@ -582,7 +584,7 @@
+ the function will not remove the frames associated with the client."
+ ;; Order is important: first delete client from gnuserv-clients, to
+ ;; prevent gnuserv-buffer-done-1 calling us recursively.
+- (callf2 delq client gnuserv-clients)
++ (cl-callf2 delq client gnuserv-clients)
+ ;; Process the buffers.
+ (mapc 'gnuserv-buffer-done-1 (gnuclient-buffers client))
+ (unless leave-frame
+@@ -593,15 +595,15 @@
+ ;; note: last frame on a device will not be deleted here.
+ (when (and (gnuclient-frame client)
+ (frame-live-p (gnuclient-frame client))
+- (second (device-frame-list device)))
++ (cl-second (device-frame-list device)))
+ (delete-frame (gnuclient-frame client)))
+ ;; If the device is live, created by a client, and no longer used
+ ;; by any client, delete it.
+ (when (and (device-live-p device)
+ (memq device gnuserv-devices)
+- (second (device-list))
+- (not (member* device gnuserv-clients
+- :key 'gnuclient-device)))
++ (cl-second (device-list))
++ (not (cl-member device gnuserv-clients
++ :key 'gnuclient-device)))
+ ;; `gnuserv-check-device' will remove it from `gnuserv-devices'.
+ (delete-device device))))
+ ;; Notify the client.
+@@ -610,7 +612,7 @@
+ ;; Do away with the buffer.
+ (defun gnuserv-buffer-done-1 (buffer)
+ (dolist (client (gnuserv-buffer-clients buffer))
+- (callf2 delq buffer (gnuclient-buffers client))
++ (cl-callf2 delq buffer (gnuclient-buffers client))
+ (when (null (gnuclient-buffers client))
+ (gnuserv-kill-client client)))
+ ;; Get rid of the buffer.
+@@ -639,19 +641,19 @@
+ ;; If we have a client belonging to this frame, return
+ ;; the first buffer from it.
+ ((setq client
+- (car (member* frame gnuserv-clients :key 'gnuclient-frame)))
++ (car (cl-member frame gnuserv-clients :key 'gnuclient-frame)))
+ (car (gnuclient-buffers client)))
+ ;; Else, look for a device.
+ ((and
+ (memq (selected-device) gnuserv-devices)
+ (setq client
+- (car (member* device gnuserv-clients :key 'gnuclient-device))))
++ (car (cl-member device gnuserv-clients :key 'gnuclient-device))))
+ (car (gnuclient-buffers client)))
+ ;; Else, try to find any client with at least one buffer, and
+ ;; return its first buffer.
+ ((setq client
+- (car (member-if-not #'null gnuserv-clients
+- :key 'gnuclient-buffers)))
++ (car (cl-member-if-not #'null gnuserv-clients
++ :key 'gnuclient-buffers)))
+ (car (gnuclient-buffers client)))
+ ;; Oh, give up.
+ (t nil))))
+@@ -759,7 +761,7 @@
+ (when (null count)
+ (setq count 1))
+ (cond ((numberp count)
+- (while (natnump (decf count))
++ (while (natnump (cl-decf count))
+ (let ((frame (selected-frame)))
+ (gnuserv-buffer-done (current-buffer))
+ (when (eq frame (selected-frame))
diff --git a/app-emacs/gnuserv/files/gnuserv-3.12.8-emacs-29.patch b/app-emacs/gnuserv/files/gnuserv-3.12.8-emacs-29.patch
new file mode 100644
index 000000000000..7b9c8d05cb07
--- /dev/null
+++ b/app-emacs/gnuserv/files/gnuserv-3.12.8-emacs-29.patch
@@ -0,0 +1,135 @@
+Fix collision of function device-class in Emacs 29.
+Fix some byte-compiler warnings.
+
+--- gnuserv-3.12.8/devices.el
++++ gnuserv-3.12.8/devices.el
+@@ -32,13 +32,7 @@
+ ;; determine the connection to an X display, etc.
+
+ (require 'cl-macs)
+-(eval-when-compile
+- (if (string-match "XEmacs" (emacs-version))
+- (set 'byte-optimize nil)))
+
+-(if (string-match "XEmacs" (emacs-version))
+- nil
+-'()
+ (defalias 'selected-device 'ignore)
+ (defalias 'device-or-frame-p 'framep)
+ (defalias 'device-console 'ignore)
+@@ -219,6 +213,10 @@
+ (delete-frame (car frames) force)
+ (setq frames (cdr frames)))))
+
++;; Apparently none of the functions below are used, and device-class
++;; collides with a function of the same name in frame.el of Emacs 29.
++'(
++
+ (defun device-color-cells (&optional device)
+ (cl-case window-system
+ ((x win32 w32 pm) (x-display-color-cells device))
+@@ -333,10 +331,6 @@
+ "Given a TYPE, return t if it is valid."
+ (memq type (device-type-list)))
+
+-) ; This closes the conditional on whether we are in XEmacs or not
++)
+
+ (provide 'devices)
+-
+-(eval-when-compile
+- (if (string-match "XEmacs" (emacs-version))
+- (set 'byte-optimize t)))
+--- gnuserv-3.12.8/gnuserv-compat.el
++++ gnuserv-3.12.8/gnuserv-compat.el
+@@ -100,8 +100,8 @@
+ ;; `delete-frame' and `filtered-frame-list' to handle some device
+ ;; stuff.
+
+-(if (string-match "XEmacs" (emacs-version))
+- nil
++;;(if (string-match "XEmacs" (emacs-version))
++;; nil
+
+ ;; XEmacs `make-frame' takes an optional device to create the frame
+ ;; on. Since `make-device' just calls 'make-frame', we don't want
+@@ -143,15 +143,16 @@
+ first
+ (predicate &optional device)
+ activate)
+- ad-do-it))
++ ad-do-it)
++;; )
+
+
+ ;; Emulate XEmacs devices. A device is just a frame. For the most
+ ;; part we use devices.el from the Emacs-W3 distribution. In some
+ ;; places the implementation seems wrong, so we "fix" it!
+
+-(if (string-match "XEmacs" (emacs-version))
+- nil
++;;(if (string-match "XEmacs" (emacs-version))
++;; nil
+
+ (require 'devices)
+ (defalias 'device-list 'frame-list)
+@@ -160,7 +161,8 @@
+ (list
+ (if device
+ device
+- (selected-frame)))))
++ (selected-frame))))
++;; )
+
+
+
+--- gnuserv-3.12.8/gnuserv.el
++++ gnuserv-3.12.8/gnuserv.el
+@@ -455,13 +455,14 @@
+ gnuserv-view-file-function
+ gnuserv-find-file-function)
+ path)
+- (goto-line line)
++ (goto-char (point-min))
++ (forward-line (1- line))
+ ;; Don't memorize the quick and view buffers.
+ (unless (or quick view)
+ (cl-pushnew (current-buffer) (gnuclient-buffers client))
+ (setq gnuserv-minor-mode t)
+ ;; Add the "Done" button to the menubar, only in this buffer.
+- (if (and (featurep 'menubar) current-menubar)
++ (if (and (eval-when-compile (featurep 'menubar)) current-menubar)
+ (progn (set-buffer-menubar current-menubar)
+ (add-menu-button nil ["Done" gnuserv-edit]))
+ ))
+@@ -616,12 +617,11 @@
+ (when (null (gnuclient-buffers client))
+ (gnuserv-kill-client client)))
+ ;; Get rid of the buffer.
+- (save-excursion
+- (set-buffer buffer)
++ (with-current-buffer buffer
+ (run-hooks 'gnuserv-done-hook)
+ (setq gnuserv-minor-mode nil)
+ ;; Delete the menu button.
+- (if (and (featurep 'menubar) current-menubar)
++ (if (and (eval-when-compile (featurep 'menubar)) current-menubar)
+ (delete-menu-item '("Done")))
+ (funcall (if (gnuserv-temp-file-p buffer)
+ gnuserv-done-temp-file-function
+@@ -685,7 +685,6 @@
+ ;; This serves to run the hook and reset
+ ;; `allow-deletion-of-last-visible-frame'.
+ (defun gnuserv-prepare-shutdown ()
+- (setq allow-deletion-of-last-visible-frame nil)
+ (run-hooks 'gnuserv-shutdown-hook))
+
+ ;; This is a user-callable function, too.
+@@ -716,7 +715,6 @@
+ (set-process-sentinel gnuserv-process 'gnuserv-sentinel)
+ (set-process-filter gnuserv-process 'gnuserv-process-filter)
+ (set-process-query-on-exit-flag gnuserv-process nil)
+- (setq allow-deletion-of-last-visible-frame t)
+ (run-hooks 'gnuserv-init-hook)))
+
+
diff --git a/app-emacs/gnuserv/gnuserv-3.12.8-r6.ebuild b/app-emacs/gnuserv/gnuserv-3.12.8-r6.ebuild
new file mode 100644
index 000000000000..644039c6feeb
--- /dev/null
+++ b/app-emacs/gnuserv/gnuserv-3.12.8-r6.ebuild
@@ -0,0 +1,73 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit elisp desktop xdg-utils
+
+DESCRIPTION="Attach to an already running Emacs"
+HOMEPAGE="https://web.archive.org/web/20160508134736/http://martin.meltin.net/hacks/emacs/
+ https://www.emacswiki.org/emacs/GnuClient"
+SRC_URI="https://web.archive.org/web/20150908031821/http://martin.meltin.net/sites/martin.meltin.net/files/hacks/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86 ~x86-linux ~ppc-macos"
+IUSE="gui"
+
+RDEPEND=">=app-eselect/eselect-emacs-1.15
+ gui? ( x11-libs/libXau )"
+DEPEND="${RDEPEND}
+ gui? ( x11-base/xorg-proto )"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-backquotes.patch
+ "${FILESDIR}"/${P}-process-query.patch
+ "${FILESDIR}"/${P}-gnudoit.patch
+ "${FILESDIR}"/${P}-emacs-28.patch
+ "${FILESDIR}"/${P}-cl.patch
+ "${FILESDIR}"/${P}-emacs-29.patch
+ "${FILESDIR}"/${P}-advice.patch
+)
+SITEFILE="50${PN}-gentoo.el"
+
+src_configure() {
+ econf $(use_enable gui xauth) \
+ --x-includes="${EPREFIX}"/usr/include \
+ --x-libraries="${EPREFIX}"/usr/$(get_libdir)
+}
+
+src_compile() {
+ emake gnuserv gnuclient
+ elisp-compile *.el
+}
+
+src_install() {
+ exeinto /usr/libexec/emacs
+ doexe gnuserv
+ newbin gnuclient gnuclient-emacs
+ newbin gnudoit gnudoit-emacs
+ # Don't install gnuattach, it is not functional with FSF GNU Emacs
+
+ newman gnuserv.1 gnuserv-emacs.1
+ echo ".so man1/gnuserv-emacs.1" | newman - gnuclient-emacs.1
+ echo ".so man1/gnuserv-emacs.1" | newman - gnudoit-emacs.1
+
+ elisp-install ${PN} *.el *.elc
+ elisp-site-file-install "${FILESDIR}/${SITEFILE}"
+ dodoc ChangeLog README README.orig
+
+ use gui && domenu "${FILESDIR}"/gnuclient.desktop
+}
+
+pkg_postinst() {
+ elisp-site-regen
+ use gui && xdg_desktop_database_update
+ eselect gnuclient update ifunset
+}
+
+pkg_postrm() {
+ elisp-site-regen
+ use gui && xdg_desktop_database_update
+ eselect gnuclient update ifunset
+}