Subject: Re: bug#26454: [PATCH 2/2] gnu: add emacs-exwm

From: "Feng Shu" <[email-masked]>
Date: Fri, 14 Apr 2017 23:13:01 +0800

Sadly, I have found that I can not let exwm work well in guixsd, maybe
it is exwm's bug, but it surely beyond my ability, the below is my
lastest patch, which may be useful for future ...

>From b815a6adb8e8b08bb856e2b9e22ddf31324af101 Mon Sep 17 00:00:00 2001
From: Feng Shu <[email-masked]>
Date: Fri, 14 Apr 2017 23:06:15 +0800
Subject: [PATCH] gnu: add emacs-exwm and emacs-xelb

* gnu/packages/emacs.scm (emacs-xelb, emacs-exwm): New variables.
---
 gnu/packages/emacs.scm | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 71058136a..87dcdc8f2 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -4348,3 +4348,76 @@ commands are also offered as part of the AUCTeX package, but it is not
 the same - CDLaTeX focuses on speediness for inserting LaTeX
 constructs.")
     (license license:gpl3+)))
+
+(define-public emacs-xelb
+  (package
+    (name "emacs-xelb")
+    (version "0.12.d1d6b6c")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ch11ng/xelb")
+                    (commit "d1d6b6cb48a6a9562252be20ab49f24708b34335")))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "0sxx2n3mi90dz66yi4xya89jrznyixfbmnj8b84l6qbkdp9iwd91"))))
+    (build-system emacs-build-system)
+    ;; The following functions or variables is need by emacs-xelb,
+    ;; which is not included in 'emacs-minimal'.
+    ;; x-display-screens x-keysym-table x-alt-keysym x-meta-keysym
+    ;; x-hyper-keysym x-super-keysym libxml-parse-xml-region
+    ;; x-display-pixel-width x-display-pixel-height
+    (arguments
+     `(#:emacs ,emacs
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'regenerate-el-files
+           (lambda _
+             (let ((xcb-proto-xml-path (string-append (assoc-ref %build-inputs
+                                                                 "xcb-proto")
+                                                      "/share/xcb"))
+                   (emacs-path         (string-append (assoc-ref %build-inputs
+                                                                 "emacs")
+                                                      "/bin/emacs")))
+               (substitute* "Makefile"
+                 (("PROTO_PATH := ../xcb-proto/src")
+                  (string-append "PROTO_PATH := " xcb-proto-xml-path))
+                 (("EMACS_BIN := emacs -Q")
+                  (string-append "EMACS_BIN := " emacs-path "  -Q")))
+               (system* "make" "all"))
+             #t)))))
+    (inputs `(("xcb-proto" ,xcb-proto)))
+    (home-page "https://github.com/ch11ng/xelb")
+    (synopsis "X protocol Emacs Lisp Binding")
+    (description "@code{emacs-xelb} is a pure Emacs Lisp implementation
+of the X11 protocol based on the XML description files from the XCB
+project. It features an object-oriented API and permits a certain degree
+of concurrency. It should enable you to implement low-level X11 applications.")
+    (license license:gpl3+)))
+
+(define-public emacs-exwm
+  (package
+    (name "emacs-exwm")
+    (version "0.13.7a5bb11")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ch11ng/exwm")
+                    (commit "7a5bb1156d07848e465f55fd31f8ec755b52aa01")))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "0cbaq2ls8pivz4h8hwgn9ldvg16pwlisdf047civvilqiqczw31w"))))
+    (build-system emacs-build-system)
+    (propagated-inputs `(("emacs-xelb" ,emacs-xelb)))
+    ;; The following functions or variables is need by emacs-exwm,
+    ;; which is not included in 'emacs-minimal'.
+    ;; scroll-bar-mode, fringe-mode
+    ;; x-display-pixel-width x-display-pixel-height
+    (arguments `(#:emacs ,emacs))
+    (home-page "https://github.com/ch11ng/exwm")
+    (synopsis "Emacs X Window Manager")
+    (description "EXWM (Emacs X Window Manager) is a full-featured
+tiling X window manager for Emacs built on top of XELB.")
+    (license license:gpl3+)))
-- 
2.12.2

--