求一个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 的安装有问题。

1 个赞

我重新在 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 苦海

6 个赞

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

3 个赞

回复很 6 :sweat_smile:

这eaf也太难搞了,我archlinux也搞不起来 :sweat_smile:

一般都是代理没有配好导致中途安装失败。

现在windows 10上面的EAF Browser可以正常安装使用啦,我这个回贴就是在win10 上面的EAF browser回复的 :grin:

安装过程就是使用官方的python安装脚本,然后就是这里大佬提到的npm 安装 darkreader。

建议使用官方编译的emacs29.1,使用下来更流畅,目前第三方编译的emacs30还是有点问题。

目前个人用EAF browser emacs上一边google,一边用org-mode做笔记,体验很棒!

唯一的不足就是有时候操作公司的ERP网页系统,用键盘操作网页上的按钮,不能成功执行,但用鼠标是可以按的。。。

1 个赞

可以写一个js脚本,快捷键定位到dom元素坐标,然后通过qt发送一个伪造的鼠标事件过去。

这样就可以解决要用鼠标的问题了。

不懂啊,特地花钱买vpn,挂梯子进入网站都好好的,git总是卡住,wsl 装成功了pdf,虚拟机archlinux装成功了浏览器 然后第二个软件总是卡住

所以还是代理没有配置好呀, git不行就装不了eaf.

感谢 include-yy分享!用这个流程 求一个Win10安装Emac及EAF-Browser的教程 - #9,来自 include-yy 试着安装了 eaf,把自己的遇到的问题及解决方法贴出来给同样的新手参考!

相同的地方就略过,主要写不同的地方,因为我是在 win10 下的 msys2 中安装的Emacs,出现的问题和直接在 win10中用 Emacs有些不同。

  1. 环境

    • Windows 10
      • Python 3.11.5
      • msys2
        • mingw64 emacs29.1

        • node v18.17.1

          npm 9.6.7。npm 在安装 Node.js 时会连带被安装,但有可能不是最新版本,需要 npm install npm@latest -g 升级到最新版本。

        • pip 23.3.1

        • git 2.42.0

  2. 检查环境 略

  3. 安装依赖 略

  4. 安装 EAF

    • 虽然 msys2中也安装了 python,但经实践 msys2中的 python存在问题。在运行脚本 ./install-eaf.py 时会在 PyQt6处报错 error: --plat-name must be one of (‘win32’, ‘win-amd64’, ‘win-arm32’, ‘win-arm64’)
    • 因此这步是在 powershell 中运行 install-eaf.py 脚本完成的,命令为:python install-eaf.py, 顺利完成。
      • 安装 winpython 建议用 scoop 工具。
  5. 测试

    • pdf 能正常打开,个人感觉挺不错,(❁´◡`❁)。
    • browser 这里出了问题,在装完 darkreader后,仍然无法使用 eaf-open-browser。提示的错误信息为:

    " File “…\emacs\plugin\esFramework\emacs-application-framework\core\webengine.py”, line 768, in init_dark_mode_js self.dark_mode_js = open(os.path.join(os.path.dirname(module_path), “node_modules”, “darkreader”, “darkreader.js”)).read() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: ‘…/emacs/plugin/esFramework/emacs-application-framework/app/browser\node_modules\darkreader\darkreader.js’ "

    顺利解决!安装 darkreader一定要注意必须在“path/to/eaf/app/browser”下执行 npm install darkreader 命令,路径不要搞错了!重新安装后,能在 GUI中正常打开百度,开心~

你是通过 npm 全局安装的 darkreader 吗,这里需要单独安装

额,这个问题没注意哎,我试试!

折腾了半天,又看了一遍你的教程,才发现原来是我一开始就搞错了 :joy:。 安装 darkreader 一定要 “首先来到 eaf browser app 所在目录,即 path/to/eaf/app/browser” 。 而我是在 path/to/eaf/ 下执行的 npm install darkreader, 所以才有上面说的那个问题。 我这里尝试了一下,不用全局安装也行,可以打开 baidu。 @include-yy 再次表示感谢!