求一个Win10安装Emac及EAF-Browser的教程

各位大佬好,我是一个新手,十分喜欢Emacs,但是苦于个人技术水平实在太低了,在WIn10上面安装了好几天Emacs和EAF,都报了无数的错误,经过百度和本论坛(英文不好,翻译后依然看不懂StackOverflow)的搜索,解决了一些问题,目前依然有很多无法解决的问题,EAF-Browser这个浏览器我超级喜欢,可惜按照GIthub的命令安装后依然报错,并且Browser啥也不显示(只有个错误代码code 9),不知道是不是我没有编辑配置文件的原因,我纯小白也不会啊

所以,想要各位大佬帮帮我这个萌新以及以后其他想要修炼Emacs之道的萌新,发一篇具体的win10安装Emacs尤其是其中的EAF Browser、IRC、整体透明度的调整的教程,在此本萌新先感谢各位大佬啦!

那倒不如说下出了啥问题,给出错误截图和报错文本,这样更好解决

貌似挺好装的,我在 windows 上一下就装好了

膜拜大佬,大佬你在Windows10下可以运行eaf的浏览器嘛?可以有偿教教我不?这个论坛可以私信嘛?大佬可以私信我您的联系方式。

装个 eaf 是啥见不得人的事情吗 :rofl:

1 个赞

Debugger entered–Lisp error: (error “Process epc con 4 not running”) process-send-string(#<process epc con 4> “000045(call 10 send_key ("1838-4256-99b2-c184-0186…”) (let* ((msg (encode-coding-string (concat (eaf-epc-prin1-to-string sexp) “\n”) 'utf-8-unix)) (string (concat (format “%06x” (length msg)) msg)) (proc (progn (or (progn (and (memq … cl-struct-eaf-epc-connection-tags) t)) (signal 'wrong-type-argument (list 'eaf-epc-connection connection))) (aref connection 2)))) (eaf-epc-log “>> SEND : [%S]” string) (process-send-string proc string)) eaf-epc-net-send(#s(eaf-epc-connection :name “epc con 4” :process #<process epc con 4> :buffer # :channel (“epc con 4” nil (methods . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG METHODS: %S” args) (eaf-epc-handler-methods #s(eaf-epc-manager :title “python.exe c:/Users/loubuye/.emacs.d/site-lisp/ema…” :server-process #<process eaf> :commands … :port 9379 :connection #1 :methods nil :sessions … :exit-hooks nil) (caadr args))) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (epc-error . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG EPC-ERROR: %S” args) (apply 'eaf-epc-handler-epc-error #s(eaf-epc-manager :title “python.exe c:/Users/loubuye/.emacs.d/site-lisp/ema…” :server-process #<process eaf> :commands … :port 9379 :connection #1 :methods nil :sessions … :exit-hooks nil) (eaf-epc-args args))) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (return-error . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG RET-ERROR: %S” args) (apply 'eaf-epc-handler-return-error #s(eaf-epc-manager :title “python.exe c:/Users/loubuye/.emacs.d/site-lisp/ema…” :server-process #<process eaf> :commands … :port 9379 :connection #1 :methods nil :sessions … :exit-hooks nil) (eaf-epc-args args))) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (return . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG RET: %S” args) (apply 'eaf-epc-handler-return #s(eaf-epc-manager :title “python.exe c:/Users/loubuye/.emacs.d/site-lisp/ema…” :server-process #<process eaf> :commands … :port 9379 :connection #1 :methods nil :sessions … :exit-hooks nil) (eaf-epc-args args))) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status ok :value nil)) (call . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG CALL: %S” args) (apply 'eaf-epc-handler-called-method #s(eaf-epc-manager :title “python.exe c:/Users/loubuye/.emacs.d/site-lisp/ema…” :server-process #<process eaf> :commands … :port 9379 :connection #1 :methods nil :sessions … :exit-hooks nil) (eaf-epc-args args))) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)))) (call 10 send_key (“1838-4256-99b2-c184-0186-a806-ad9a” “”))) (let* ((conn (progn (or (progn (and (memq … cl-struct-eaf-epc-manager-tags) t)) (signal 'wrong-type-argument (list 'eaf-epc-manager mngr))) (aref mngr 5)))) (eaf-epc-net-send conn (cons method messages))) eaf-epc-manager-send(#s(eaf-epc-manager :title “python.exe c:/Users/loubuye/.emacs.d/site-lisp/ema…” :server-process #<process eaf> :commands (“python.exe” “c:/Users/loubuye/.emacs.d/site-lisp/emacs-applicat…” “1002” “769” “9376”) :port 9379 :connection #s(eaf-epc-connection :name “epc con 4” :process #<process epc con 4> :buffer # :channel (“epc con 4” nil (methods . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG METHODS: %S” args) (eaf-epc-handler-methods #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (epc-error . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG EPC-ERROR: %S” args) (apply … #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (return-error . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG RET-ERROR: %S” args) (apply … #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (return . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG RET: %S” args) (apply … #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status ok :value nil)) (call . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG CALL: %S” args) (apply … #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)))) :methods nil :sessions ((10 . #s(eaf-deferred-object :callback identity :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil))) :exit-hooks nil) call 10 send_key (“1838-4256-99b2-c184-0186-a806-ad9a” “”)) (let ((uid (eaf-epc-uid)) (sessions (progn (or (progn (and (memq … cl-struct-eaf-epc-manager-tags) t)) (signal 'wrong-type-argument (list 'eaf-epc-manager mngr))) (aref mngr 7))) (d (eaf-deferred-new))) (setq sessions (cons (cons uid d) sessions)) (progn (or (progn (and (memq (type-of mngr) cl-struct-eaf-epc-manager-tags) t)) (signal 'wrong-type-argument (list 'eaf-epc-manager mngr))) (let* ((v mngr)) (aset v 7 sessions))) (eaf-epc-manager-send mngr 'call uid method-name args) d) eaf-epc-call-deferred(#s(eaf-epc-manager :title “python.exe c:/Users/loubuye/.emacs.d/site-lisp/emacs-application-framework/eaf.py 1002 769 9376” :server-process #<process eaf> :commands (“python.exe” “c:/Users/loubuye/.emacs.d/site-lisp/emacs-applicat…” “1002” “769” “9376”) :port 9379 :connection #s(eaf-epc-connection :name “epc con 4” :process #<process epc con 4> :buffer # :channel (“epc con 4” nil (methods . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG METHODS: %S” args) (eaf-epc-handler-methods #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (epc-error . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG EPC-ERROR: %S” args) (apply … #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (return-error . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG RET-ERROR: %S” args) (apply … #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)) (return . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG RET: %S” args) (apply … #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status ok :value nil)) (call . #s(eaf-deferred-object :callback (lambda (args) (eaf-epc-log “SIG CALL: %S” args) (apply … #1 …)) :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil)))) :methods nil :sessions ((10 . #s(eaf-deferred-object :callback identity :errorback eaf-deferred-resignal :cancel eaf-deferred-default-cancel :next nil :status nil :value nil))) :exit-hooks nil) send_key (“1838-4256-99b2-c184-0186-a806-ad9a” “”)) (setq it (eaf-epc-call-deferred eaf-epc-process (read method) args)) (let (it) (setq it (eaf-epc-call-deferred eaf-epc-process (read method) args)) it) eaf-call-async(“send_key” “1838-4256-99b2-c184-0186-a806-ad9a” “”) eaf-send-key() funcall-interactively(eaf-send-key) command-execute(eaf-send-key)

应该…是这个报错吧,我是新手,其实不太知道怎么查看报错

你是按照README安装的吗

看上去是你的 python 或者 pyqt 的安装有问题。

我重新在 windows 装了一下 eaf,确实不成功,上一次安装的时候还是 pyqt5…

这里记录一下安装过程,等以后学了 pyqt 之后看看能不能找出问题来。

环境:

  • Windows 10
  • emacs 28.1 x86_64 on windows
  • python 3.10
  • npm 8.15.0
  • node v16.17.0

1.检查环境

在 cmd 中输入 python --version 来查看 python 的版本,当然 eaf 没有对 py 版本进行明确的要求,是 py3 即可。

在 cmd 中输入 pip 来观察是否能够使用 pip。

在 cmd 中输入 git 观察是否已安装了 git。

在 cmd 中输入 nodenpm 观察是否安装了它们。

这样就应该差不多了。

2.安装依赖

参考 eaf wiki 添上依赖项:

pip install epc
pip install wmctrl
pip install pygetwindow

因为不使用 mac 系统,mac-app-frontmost 我们不需要。

3.安装 eaf

根据 readme 内容,我们可以使用以下命令下载 eaf:

git clone --depth=1 -b master https://github.com/emacs-eaf/emacs-application-framework.git ~/.emacs.d/site-lisp/emacs-application-framework/

当然在 windows 上没有 ~ 目录,所以你在你的配置目录的某个子目录下执行即可,假设我的配置目录是 C:\Users\Y\yy-emacs ,那我就把 eaf 放在 C:\Users\Y\yy-emacs\local\eaf 里面。

# 然后在你想要放置 eaf 的当前目录下执行以下命令
git clone --depth=1 -b master https://github.com/emacs-eaf/emacs-application-framework.git

这样就得到了 eaf 包。

安装过程非常简单,直接运行 install-eaf.py 即可,安装时注意网络是否可用 在 eaf 目录执行以下命令:

python install-eaf.py

看到下面的结果说明安装成功了:

剩下的一些应用按自己需求安装

核心和应用安装完毕后大概是这个样子:

接下来的工作是给 emacs 添加 load-path 和 require,直接把刚才结果中得到的文本复制到配置文件中即可,记得把目录改成自己机器上的:

(add-to-list 'load-path "path/to/emacs-application-framework/")
(require 'eaf)
(require 'eaf-browser)

4.安装完成后的测试

首先,重启 emacs,然后 M-x ,观察能否找到 eaf:

没问题,接下来试一试浏览器:

8

好,非常成功地打不开,让我们看看 *eaf* 中的报错信息:

很显然我们没有安装 darkreader ,这里需要安装一下,首先来到 browser app 所在目录,即 path/to/eaf/app/browser ,然后使用 npm 安装 darkreader:

npm install darkreader

接着再次运行 eaf-open-browser 并观察结果:

11

又出错了,不过这一次我已经把 eaf-enable-debug 设为了 t ,让我们看看报错信息:

线程返回非零说明出现了问题,在我的环境中是能够正常使用 eaf-open-demo 的,那就应该是 eaf-browser 出了问题。下面我们做一些实验看看能不能定位错误:

当我们输入一个不能访问的网址时,eaf 是能够正确显示的,比如:

再拿一个纯文本网站试试:

5.使用 pyqt5 的 eaf 分支

重新下载 eaf,不过这次使用 qt5-legacy 分支:

git clone --depth=1 https://github.com/emacs-eaf/emacs-application-framework -b qt5-legacy

其他的操作同上面,然后应该就可以用了…然而并不。

6.总结

最后会出现如图所示的报错信息:

之后有时间了去学一下 eaf 和 pyqt,看能不能把原因找出来。

当然最简单还是 脱离 Windows 苦海

1 个赞

今晚回家就把电脑格式化了,直接转投arch :thinking:

2 个赞