elnode icon indicating copy to clipboard operation
elnode copied to clipboard

Elnode is unusable on Emacs 26+

Open jcaw opened this issue 6 years ago • 2 comments

Because of a quirk in how Emacs 25.1+ creates network processes, the flags server and nowait cannot both be set in make-network-process. Elnode sets both.

On Emacs 26.1, this is formalised and supplying both flags results in an error. This makes Elnode unusable on Emacs 26.1+. It crashes when it tries to start the server.

~~There's an open pull request, #105, which appears to fix this issue.~~

I've opened two pull requests to fix this, one for Master (#107) and one for MELPA (#108).

jcaw avatar May 20 '19 06:05 jcaw

In the meantime, overriding the method elnode/make-service with a patched version allows Elnode to be used. Add this to your init file to get Elnode working again:

;; Elnode doesn't work on Emacs 25.1+, because it sets both the `:server` and
;; `:nowait` flags. They can't both be set on Emacs 25.1+, so `:nowait` has to be 
;; dropped.
;;
;; Make sure the patch is applied *after* elnode is loaded.
(with-eval-after-load 'elnode
  (defun elnode/make-service (host port service-mappings request-handler defer-mode)
    "Make an actual TCP server."
    (let ((an-buf (get-buffer-create "*elnode-webserver*")))
      (make-network-process
       :name "*elnode-webserver-proc*"
       :buffer an-buf
       :server t
       ;; This flag is the only change in the patched in this version of the method.
       :nowait nil
       :host (cond
              ((equal host "localhost") 'local)
              ((equal host "*") nil)
              (t host))
       :service port
       :coding '(raw-text-unix . raw-text-unix)
       :family 'ipv4
       :filter 'elnode--filter
       :sentinel 'elnode--sentinel
       :log 'elnode--log-fn
       :plist (list
               :elnode-service-map service-mappings
               :elnode-http-handler request-handler
               :elnode-defer-mode defer-mode)))))

jcaw avatar May 21 '19 14:05 jcaw

The MELPA Recipe has been updated in leui of inactivity: https://github.com/melpa/melpa/issues/6184

Active fork here: https://github.com/jcaw/elnode

@nicferrier - I've given you push access to the forked Repo. Let me know if you'd like to move it back here when you have more time.

jcaw avatar Jun 08 '19 14:06 jcaw