• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

emacs-application-framework: EAF 是一个全新的图形应用框架,通过扩展Emacs的多媒体 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

emacs-application-framework

开源软件地址:

https://gitee.com/KiteAB/emacs-application-framework

开源软件介绍:

English | 简体中文

Emacs Application Framework

Emacs Application Framework (EAF) 是一个全新的图形应用框架,通过扩展Emacs的多媒体能力,最终达到 Live in Emacs 的终极目标。

EAF 应用展示

EAF是一个可编程扩展的框架,你可以开发自己的Qt5应用并集成在Emacs中。

浏览器Markdown预览(支持Mermaid和PlantUML)
图片浏览器视频播放器
PDF阅读器摄像头程序
二维码下载文件 (PC到手机)二维码上传文件 (手机到PC)
无线文字传输程序Org预览
终端模拟器RSS阅读器 (集成Elfeed)
Aria2 下载管理器思维导图
Jupyter笔记管理系统

EmacsConf2020 - Extend Emacs to Modern GUI Applications with EAF(暂无中文字幕)

EmacsConf2020 - Extend Emacs to Modern GUI Applications with EAF

安装

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

你也可以通过Quelpa来下载

(quelpa '(eaf :fetcher github              :repo  "manateelazycat/emacs-application-framework"              :files ("*")))
  1. 通过M-x eaf-install-dependencies安装EAF依赖,

如果你更喜欢手动执行安装脚本,

  • GNU/Linux用户:
cd emacs-application-frameworkchmod +x ./install-eaf.sh./install-eaf.sh
  • Windows用户:
>>>>>>> Update README and eaf-install-dependencies (need Windows testing)cd emacs-application-frameworknode ./install-eaf-win32.js

脚本里安装的每一个依赖的解释可以在依赖列表找到。

  1. 安装Elisp依赖包:
  1. 从这里开始,你可以把EAF加入Emacs的 load-path,然后在 init.el 中写入:
(add-to-list 'load-path "~/.emacs.d/site-lisp/emacs-application-framework/")(require 'eaf)

或者,如果你使用use-package,下面有一个简单的配置文件供你参考:

(use-package eaf  :load-path "~/.emacs.d/site-lisp/emacs-application-framework" ; Set to "/usr/share/emacs/site-lisp/eaf" if installed from AUR  :init  (use-package epc :defer t)  (use-package ctable :defer t)  (use-package deferred :defer t)  (use-package s :defer t :ensure t)  :custom  (eaf-browser-continue-where-left-off t)  :config  (eaf-setq eaf-browser-enable-adblocker "true")  (eaf-bind-key scroll_up "C-n" eaf-pdf-viewer-keybinding)  (eaf-bind-key scroll_down "C-p" eaf-pdf-viewer-keybinding)  (eaf-bind-key take_photo "p" eaf-camera-keybinding)  (eaf-bind-key nil "M-q" eaf-browser-keybinding)) ;; unbind, see more in the Wiki

依赖列表

核心 分类代表必备依赖,这些包必须安装好EAF才能工作。其余依赖都可选,若想其使用对应的应用时,你才需要安装这些依赖。当然我们推荐先把所有依赖都安装好,等到真正使用的时候就不用再次折腾。

包名依赖解释
python-epc核心EPC Python端
python-pyqt5, python-pyqt5-sip核心GUI图形库
python-pyqtwebengine核心基于Chromium的浏览器引擎
wmctrl, xdotool核心激活Emacs窗口输入焦点
pygetwindow核心从Windows中eaf激活WSL中Emacs窗口输入焦点
nodejs核心下载依赖与应用交互
python-pymupdfPDF阅读器解析PDF文件
python-qrcode文件上传,文件下载,文字传输根据文件信息生成二维码
aria2浏览器下载网络文件
libreoffice办公文档阅读器转换doc文件为pdf格式
filebrowser-bin文件浏览器在电脑和手机之间快速共享文件
python-qtconsolejupyter提供RichJupyterWidget
python-retryingMarkdown浏览器提供@retry

EAF应用启动命令

应用名称启动命令
浏览器M-x eaf-open-browser 在浏览器中打开或搜索
M-x eaf-open-browser-with-history 搜索历史或者打开URL
HTML邮件渲染M-x eaf-open-mail-as-htmlgnusmu4enotmuch 等邮件客户端中执行
PDF阅读器M-x eaf-open 输入PDF文件
视频播放器M-x eaf-open 输入视频文件
图片浏览器M-x eaf-open 输入图片文件
Markdown预览M-x eaf-open 输入Markdown文件
Org预览M-x eaf-open 输入Org文件
摄像头程序M-x eaf-open-camera
终端模拟器M-x eaf-open-terminal
二维码下载文件M-x eaf-file-sender-qrcode or eaf-file-sender-qrcode-in-dired
二维码在线浏览器M-x eaf-file-browser-qrcode
无线分享M-x eaf-open-airshare 输入要分享给手机的字符串
思维导图M-x eaf-create-mindmap or M-x eaf-open-mindmap
微软Office阅读器M-x eaf-open-office
jupyterM-x eaf-open-jupyter
音乐M-x eaf-open-music
演示程序M-x eaf-open-demo
  • EAF浏览器以及PDF浏览器支持Emacs内置书签操作,通过使用M-x bookmark-set(默认C-x r m)以及M-x bookmark-bmenu-list(默认C-x r l)。

Wiki

强烈建议使用EAF之前浏览一遍Wiki

Wiki囊括了各种你想了解的EAF相关文档,包括了:

  1. 按键绑定
  2. 自定义选项
  3. 架构设计
  4. 任务列表

你还会在Wiki发现很多有用的技巧,如Docker,Helm等,

常用问题

EAF是怎么工作的?

EAF主要实现这几个功能:

  1. 利用QWindow的Reparent技术来实现PyQt应用进程的窗口粘贴到Emacs对应的Buffer区域
  2. 通过Python EPC来实现Emacs进程和Python进程的控制指令和跨进程消息通讯
  3. 通过Qt5的QGraphicsScene来实现镜像窗口,以对应Emacs的Buffer/Window模型

若想了解更多EAF设计背景,请看Wiki

EAF vs EXWM?

  1. EAF和EXWM的共同点都是:“提升Emacs和别的程序的协作效率“
  2. EXWM是一个X11窗口管理器,通过X11协议来控制Emacs和其他程序,但是EXWM只是管理其他程序,但是它并不会修改应用程序的内在行为。
  3. EAF不是一个窗口管理器,EAF只是依赖Emacs自身的窗口管理功能显示自己
  4. EAF的目标是通过PyQt创造新的应用来扩展Emacs的多媒体能力。从Emacs本身的Buffer/Mode设计上看,它和你平常用的 xx-mode 插件没有啥区别,只是它用Qt来绘制内容,而不是Emacs自身的文本库来绘制内容
  5. EAF通过造轮子的方式,把大多数程序员常用的应用写出来以后,达到Live in Emacs的最终目标
  6. 基于EAF的架构设计,我们可以通过Elisp来控制Python,JavaScript和其他命令行工具,实现多语言扩展Emacs的编程模型。在坚持Emacs黑客文化和Elisp社区兼容性的前提下,让Emacs的多媒体能力能够跟上时代的发展

或许EAF和EXWM看起来有点相似,但它们在设计和理念上是两个完全不同的项目。所以请大家多多学习X11和Qt的区别,理解技术的本质,避免无意义的比较和争论。

为什么EAF无法在MacOS下工作?

  1. Qt5的QGraphicsScene技术无法在MacOS下正常工作,也就无法实现Qt5应用的镜像窗口以支持Emacs的Buffer/Window模型
  2. QWindow Reparent技术无法在MacOS下正常工作,也就无法实现Qt应用进程的窗口粘贴到Emacs对应的Buffer区域

为什么EAF的js-video-player在Windows下无法播放视频文件?

js-video-player需要qtwebengine编译时链接到ffmpeg,才能支持额外的编码如h264/aac.

为什么通过窗口管理器使用EAF无法接收输入信息?

EAF确认可以工作的桌面环境或者窗口管理器包括:KDE、Gnome2、Gnome3、Mate、XFce、LXDE、i3、QTile、Xpra.

我们认为不同的窗口管理器对于X11协议的支持不够完善才导致这样的问题。

现在的解决方案是将命令wmctrl -m中Name的值加入eaf-wm-focus-fix-wms,如果还有问题,请在Github提出issue。

代理

可以通过下面设置来通过代理访问互联网:

(setq eaf-proxy-type "http")(setq eaf-proxy-host "127.0.0.1")(setq eaf-proxy-port "1080")

如果你使用Socks5代理,你可以设置代理类型为:

(setq eaf-proxy-type "socks5")

EAF社区

下面列表列展示了EAF在Emacs社区的应用。如果我们遗漏你的应用,欢迎提交PR来加到下面列表中。

反馈问题

反馈安装和配置问题之前,请一定先阅读Wiki!!!

如果你使用中遇到任何问题,并且问题是git pull后出现的,请先阅读Discussions页面。

关于其他问题,请用命令 emacs -q 并只添加EAF配置做一个对比测试,如果 emacs -q 可以正常工作,请检查你个人的配置文件。

如果emacs -q环境下问题依旧,请到这里反馈, 并附带 *eaf* 窗口的内容给我们提交issue,那里面有很多线索可以帮助我们排查问题。。

如果你遇到崩溃的问题, 请用下面的方式来收集崩溃信息:

  1. 先安装gdb并打开选项 eaf-enable-debug
  2. 使用命令 eaf-stop-process 停止EAF进程
  3. 重新打开EAF, 并在下次崩溃时发送 *eaf* 的内容

加入我们

你想把Emacs开发成一个操作系统吗?

想要在Emacs里面生活的更舒适吗?

想要创建下一个激动人心的Emacs插件吗?

一起疯吧!

打赏

如果我的作品让你的生活充满快乐,欢迎请我喝瓶啤酒,哈哈哈哈

ManateeLazyCat


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap