Revise README

master
Matthew 6 years ago
parent 2253ca501d
commit fdc6a73584
  1. 117
      README.md
  2. 138
      README_CN.md

@ -1,10 +1,10 @@
### You're reading the English version, Chinese users, please read [中文版本](https://github.com/manateelazycat/emacs-application-framework/blob/master/README_CN.md)
### You're reading the English README. Chinese users please read [中文版本](https://github.com/manateelazycat/emacs-application-framework/blob/master/README_CN.md)
# What is Emacs Application Framework (EAF)?
EAF extends GNU Emacs to an entire universe of powerful GUI applications.
EAF is a new GUI application framework that revolutionizes Emacs graphical capabilities to ultimately achieve the goal of *Living in Emacs*.
## EAF Application Overview
EAF is extensible, you can develop any PyQt application and integrate it into Emacs.
EAF is an extensible framework, one can develop any Qt5 application and integrate it into Emacs.
| Browser | Markdown Previewer |
| :--------: | :----: |
@ -36,18 +36,22 @@ EAF is extensible, you can develop any PyQt application and integrate it into Em
| <img src="./screenshot/terminal.gif" width="400"> | <img src="./screenshot/rss_reader.gif" width="400"> |
| | |
## Install EAF
1. For Arch Linux users, you can find [emacs-eaf](https://aur.archlinux.org/packages/emacs-eaf/) in AUR. Install it and jump to step 4.
## Install
1. For Arch Linux users, one can install [emacs-eaf](https://aur.archlinux.org/packages/emacs-eaf/) in AUR and jump to step 4.
2. Make sure to have ```python3``` installed, and use ```pip3``` to install all EAF dependencies (see below list for details)
```Elisp
```Bash
sudo pip3 install dbus-python python-xlib pyqt5 pyqtwebengine pymupdf grip qrcode feedparser aria2p
```
3. Clone this git repository.
3. Clone this repository.
4. Add the full path to the EAF installation directory to your Emacs ```load-path```, then add the following to your Emacs config:
```Bash
git clone https://github.com/manateelazycat/emacs-application-framework.git
```
4. Add the full path to the EAF installation directory to your Emacs ```load-path```, then add the following to `init.el`:
```Elisp
(require 'eaf)
@ -61,8 +65,6 @@ If you use [use-package](https://github.com/jwiegley/use-package), a sample conf
:custom
(eaf-find-alternate-file-in-dired t)
:config
(eaf-bind-key scroll_up "RET" eaf-pdf-viewer-keybinding)
(eaf-bind-key scroll_down_page "DEL" eaf-pdf-viewer-keybinding)
(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))
@ -84,21 +86,21 @@ echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc
6. For EAF Browser download to work, please install ```aria2```.
### Dependency List
Packages listed as **Core** are mandatory to make EAF to work, whereas packages listed as **Application** are optional - install if you want the corresponding EAF feature.
| Package | Package Repo | Classification | Description and Depended by ... |
| :-------- | :---- | :------ | :------ |
| pyqt5 | pip3 | Core | Essential GUI library |
| dbus-python | pip3 | Core | DBus IPC to connect Python with Elisp |
| python-xlib | pip3 | Core | Stick application window into Emacs frame |
| pyqtwebengine | pip3 | Core | Depended by EAF Browser and some other EAF Applications |
| pymupdf | pip3 | Application | Depended by EAF PDF Viewer |
| grip | pip3 | Application | Depended by EAF Markdown Previewer |
| qrcode | pip3 | Application | Depended by EAF File Transfer |
| feedparser | pip3 | Application | Depended by EAF RSS Reader |
| aria2p | pip3 | Application | Depended by EAF Browser |
| aria2 | pacman | Application | Depended by EAF Browser |
| wetty | yarn | Application | Depended by EAF Terminal |
Packages listed as **Core** are mandatory for EAF to work, whereas other packages are optional - install if you want to use corresponding EAF Application.
| Package | Package Repo | Dependent | Description |
| :-------- | :---- | :------ | :------ |
| pyqt5 | pip3 | Core | Essential GUI library |
| dbus-python | pip3 | Core | DBus IPC to connect Python with Elisp |
| python-xlib | pip3 | Core | Stick application window into Emacs frame |
| pyqtwebengine | pip3 | Browser, Image Viewer, RSS Reader, <br>Terminal, Org Previewer, Markdown Previewer | Chromium based web rendering engine |
| pymupdf | pip3 | PDF Viewer | PDF rendering engine |
| grip | pip3 | Markdown Previewer | Markdown rendering server |
| qrcode | pip3 | File Sender, File Receiver, Airshare | Render QR code pointing to local files |
| feedparser | pip3 | RSS Reader | Parse RSS feeds |
| aria2p | pip3 | Browser | Send download requests to Aria2 daemon |
| aria2 | pacman (Arch) | Browser | Download files from the web |
| wetty | yarn | Terminal | Communicate between browser and local TTY |
## Launch EAF Applications
| Application Name | Launch |
@ -119,74 +121,74 @@ Packages listed as **Core** are mandatory to make EAF to work, whereas packages
| RSS Reader | `M-x eaf-open-rss-reader` |
| Demo | `M-x eaf-open-demo` to verify basic functionality |
- To open the file under the cursor in `dired` using EAF, use `eaf-open-this-from-dired` instead.
- To open the file under the cursor in `dired` using appropriate EAF Application, use `eaf-open-this-from-dired` instead.
```
NOTE:
EAF use DBus' session bus, it must run in general user.
Please don't run EAF with root user, a root user can only access DBus's system bus.
EAF use DBus' session bus, it must run by a general user.
Please don't use EAF when Emacs is started with sudo or root user, a root user can only access DBus's system bus.
```
## Wiki
Please check the [Wiki](https://github.com/manateelazycat/emacs-application-framework/wiki) for documentations on Keybinding, Customization, EAF Structure and TODOLIST.
It is **highly** suggested to read the [Wiki](https://github.com/manateelazycat/emacs-application-framework/wiki) first before using EAF.
You can also find helpful config tips to make EAF work with Docker, Helm.
Wiki consists of documentations on Keybinding, Customization, Design and TODOLIST. There also are some helpful tips to make EAF work with Docker, Helm, etc.
## FAQ and Support
## FAQ
### How does EAF make this possible?
### How does EAF work?
EAF implements three major functionalities:
1. Integrate PyQt program window into Emacs frame using Xlib Reparent technology.
2. Listen to EAF buffer's keyboard event flow and control the keyboard input of PyQt program via DBus IPC.
3. Create a window compositer to make a PyQt program window adapt Emacs's Window/Buffer design.
### EAF vs EXWM?
1. The goal of EAF and EXWM are to improve collaboration efficiency Emacs and other tools.
2. EXWM is a X11 Window Manager, control other tools by keyboard; EAF is not a Window Manager, it use Emacs as a Window Manager.
3. The goal of EAF is create PyQt5 application to expand the multimedia capabilities of Emacs, the ultimate goal is "Live In Emacs".
4. According to EAF programming model, you can use Elisp control Python code, vice versa, you even can use Elisp control JavaScript code in browser, or any other tools.
1. EAF and EXWM share a common goal: enhance collaboration between the standard GNU Emacs with other GUI tools.
2. EXWM is an X11 Windows Manager, it manages and controls other software using a keyboard, but it cannot modify, customize and extend the behavior of other software. For example, it cannot modify the behavior when you press a key in Chrome or a PDF viewer.
3. EAF is *not* a Windows Manager, it utilizes the windows managing capabilities of Emacs to display its applications.
4. The intention of EAF is to provide a framework to write PyQt5 applications that extends the multimedia experience of Emacs. From the perspective of Emacs' buffer/mode design, EAF is not different from any other package, with the former uses Qt for drawing contents while the latter uses Emacs' built-in text libraries instead.
5. Through EAF's design, one can use Elisp to control Python and vice versa, and even able to use Elisp to control JavaScript in EAF Browser. EAF enables Emacs to the world of **multi-language scripting**.
Both projects only from the interface is very similar to the senses, EAF and EXWM on the design goals are two completely different projects, please do not do meaningless comparison, thanks!
Both projects are similar in terms of interface, but they are two completely different projects with different goals in mind. Sometimes one may find EAF is more suitable than EXWM, sometimes it's the other way around. Please do not meaninglessly compare them.
### EAF is (currently) Linux only. Why?
Below are mainly obstacles:
1. None of EAF's core developers use MacOS or Windows or BSD family OS.
2. EAF uses X11 Reparent to stick Qt5 window to Emacs frame, we know that other OS how to implement similar techniques.
3. DBus is Linux-specific technical, it's difficult to support DBus in other OS.
4. Qt5's QGraphicsScene technology not work on MacOS.
1. As of now, none of EAF's core developers use MacOS or Windows or BSD family OS.
2. EAF uses X11 Reparent to stick Qt5 window to Emacs frame. Other operating systems may implement similar features, but the core developers don't know how to work with them.
3. DBus is Linux-specific technology, it's difficult to support DBus in other operating systems.
4. Qt5's QGraphicsScene technology does not work on MacOS.
If you've figure them out, PRs are always welcome
If you've figure them out, PRs are always welcome!
### How about Wayland?
EAF use X11 XReparent, Wayland doesn't support it as of now.
EAF use X11 XReparent technology, Wayland doesn't support it (right now).
We recommend to use KDE or Xfce, they supports X11 XReparent and handling of keyboard focus events correctly. Other DE, LightDE or TileWM not support EAf very well, such as ```i3wm``` or ```awesome```.
We recommend to use KDE or Xfce, they supports X11 XReparent and handling of keyboard focus events correctly. Other Lighter DEs or Tiling WMs do not support EAF very well, such as ```i3wm``` or ```awesome```.
### `[EAF] *eaf* aborted (core dumped)`
### `[EAF] *eaf* aborted (core dumped)` error
Please check the `*eaf*` buffer, something is wrong on the Python side. Usually due to Python dependencies are not installed correctly.
If Python dependences is ok, please send issue `*eaf*` buffer content, it contains many clues that can help us locate the problem faster.
If you're sure Python dependences are installed correctly, please create an issue with the `*eaf*` buffer content, it contains many clues that can help us locate the problem faster.
### "undefined symbol" error
### `undefined symbol` error
If you got "undefined symbol" error after start EAF, and you use Arch Linux, yes, it's a bug of Arch.
You need use pip install all dependences after you upgrade your Arch system, then undefine symbol error will fix.
```Elisp
```Bash
sudo pip3 install dbus-python python-xlib pyqt5 pyqtwebengine pymupdf grip qrcode feedparser aria2p --force-reinstall
```
### Github Personal Access Tokens?
If you use EAF Markdown Previewer, you need the access to a [Personal access token](https://github.com/settings/tokens/new?scopes=), fill something in "Token description" and click button "Generate token" to get your personal token, then set token:
### What is Github Personal Access Tokens?
If you use EAF Markdown Previewer, to get consistent previewing, you need to access [Github Personal access token site](https://github.com/settings/tokens/new?scopes=), fill something in "Token description" and click button "Generate token" to get your personal token. Then set the token:
```Elisp
(setq eaf-grip-token "yourtokencode")
```
Otherwise, github might popup "times limit" error because there are just so many people using grip. ;)
Although Markdown Previewer works for the first few times by entering empty string when prompted, eventually it stops working and gives "GitHub Rate Limit Reached" error.
### Proxy
If you need to use proxy to access internet, you can configure the proxy settings.
If you need to use proxy to access internet, one can configure the proxy settings.
```Elisp
(setq eaf-proxy-type "http")
@ -194,7 +196,7 @@ If you need to use proxy to access internet, you can configure the proxy setting
(setq eaf-proxy-port "1080")
```
If you use Socks5 as local proxy, you can set proxy type with:
If you use Socks5 as local proxy, one can set proxy type with:
```Elisp
(setq eaf-proxy-type "socks5")
@ -212,22 +214,23 @@ If we missed your package, please make a PR to add it to the list.
For any installation and configuration assistance, please read the [Wiki](https://github.com/manateelazycat/emacs-application-framework/wiki) first!
If you encounter any problem with EAF, please use command `emacs -q` with minimal setups and re-test to see if the bug is reproducible. If `emacs -q` works fine, probably something is wrong with your Emacs config.
If you encounter any problem with EAF, please use command `emacs -q` with a minimal setup that only contains EAF and verify the bug is reproducible. If `emacs -q` works fine, probably something is wrong with your Emacs config.
If the problem persists, please [report bug here](https://github.com/manateelazycat/emacs-application-framework/issues/new).
## Join Us
Do you want to make Emacs a real operating system?
Do you want to make Emacs a real "operating system"?
Do you want to live in Emacs more comfortably?
Want to create unparalleled plugins to extend Emacs?
Do you want to revolutionize the capabilities of Emacs?
[Let's hack together!](https://github.com/manateelazycat/emacs-application-framework/wiki/Hacking)
## 打赏
如果我的作品让你的生活充满快乐, 欢迎请我喝瓶啤酒, 哈哈哈哈
### ManateeLazyCat
<p float="left">
<img src="./screenshot/alipay.jpg" width="188">
<img src="./screenshot/wechat.jpg" width="200">

@ -1,7 +1,7 @@
### You are reading Chinese version, International users please read [English Version](https://github.com/manateelazycat/emacs-application-framework/blob/master/README.md)
### You are reading Chinese version. International users please read [English Version](https://github.com/manateelazycat/emacs-application-framework/blob/master/README.md)
# 什么是 Emacs Application Framework (EAF)?
EAF 是一个全新的图形应用框架,扩展Emacs的多媒体能力,最终达到 Live in Emacs 的目标。
EAF 是一个全新的图形应用框架,扩展Emacs的多媒体能力,最终达到 Living in Emacs 的终极目标。
## EAF 应用展示
EAF是一个可编程扩展的框架,你可以开发自己的Qt5应用并集成在Emacs中。
@ -26,7 +26,7 @@ EAF是一个可编程扩展的框架,你可以开发自己的Qt5应用并集
| | |
| 无线文字传输程序 | Org-Mode预览程序 |
| 无线文字传输程序 | Org预览 |
| :--------: | :--------: |
| <img src="./screenshot/air_share.png" width="400"> | <img src="./screenshot/org_previewer.gif" width="400"> |
| | |
@ -36,24 +36,28 @@ EAF是一个可编程扩展的框架,你可以开发自己的Qt5应用并集
| <img src="./screenshot/terminal.gif" width="400"> | <img src="./screenshot/rss_reader.gif" width="400"> |
| | |
## 安装EAF
1. 如果是Arch用户, 你可以直接安装[emacs-eaf](https://aur.archlinux.org/packages/emacs-eaf/),并跳到第4步.
## 安装
1. 如果是Arch用户你可以直接安装[emacs-eaf](https://aur.archlinux.org/packages/emacs-eaf/),并跳到第4步.
2. 先确认系统中已经安装了 ```python3```, 然后使用 ```pip3``` 安装EAF依赖库:
2. 先确认系统中已经安装了 ```python3```然后使用 ```pip3``` 安装EAF依赖库:
```Elisp
```Bash
sudo pip3 install dbus-python python-xlib pyqt5 pyqtwebengine pymupdf grip qrcode feedparser aria2p
```
3. 使用 ```git clone``` 下载这个仓库.
4. 把EAF加入Emacs的 ```load-path```, 然后在 ~/.emacs 中写入:
```Bash
git clone https://github.com/manateelazycat/emacs-application-framework.git
```
4. 把EAF加入Emacs的 ```load-path```,然后在 `init.el` 中写入:
```Elisp
(require 'eaf)
```
如果你使用[use-package](https://github.com/jwiegley/use-package), 下面有一个非常简单的配置文件供你参考:
如果你使用[use-package](https://github.com/jwiegley/use-package),下面有一个简单的配置文件供你参考:
```Elisp
(use-package eaf
@ -61,14 +65,12 @@ sudo pip3 install dbus-python python-xlib pyqt5 pyqtwebengine pymupdf grip qrcod
:custom
(eaf-find-alternate-file-in-dired t)
:config
(eaf-bind-key scroll_up "RET" eaf-pdf-viewer-keybinding)
(eaf-bind-key scroll_down_page "DEL" eaf-pdf-viewer-keybinding)
(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))
```
5. 如果你要使用终端模拟器应用,请按照下面的方法安装配置 ```wetty```:
5. 如果你*需*使用EAF终端模拟器,请按照下面的方法安装配置 ```wetty```:
```Bash
# 安装wetty
sudo yarn global add wetty
@ -81,55 +83,55 @@ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc
```
6. 浏览器的下载功能依赖aria2, 还需要你额外安装 ```aria2``` 这个工具。
6. EAF浏览器的下载功能依赖aria2,还需要你额外安装 ```aria2``` 这个工具。
### 依赖列表说明
### 依赖列表
**核心** 分类表示必备依赖,这些包必须安装好EAF才能工作,**应用** 分类表示可选依赖,只有当你需要对应的应用时,你才需要安装这些依赖,当然我们推荐你把所有依赖都安装了,到你使用的时候就不用再次折腾。
| 包名 | 安装方式 | 分类 | 解释 |
| :-------- | :---- | :------ | :------ |
| pyqt5 | pip3 | 核心 | GUI图形库 |
| dbus-python | pip3 | 核心 | DBus库,用于在Emacs和Python进程间通讯 |
| python-xlib | pip3 | 核心 | X11的Python绑定,用于粘贴Qt5程序到Emacs Buffer区域 |
| pyqtwebengine | pip3 | 核心 | 浏览器引擎 |
| pymupdf | pip3 | 应用 | PDF阅读器需要,用于解析PDF文件 |
| grip | pip3 | 应用 | Markdown预览程序需要,用于建立Markdown文件的HTML服务 |
| qrcode | pip3 | 应用 | 文件传输模块需要,根据文件信息生成二维码 |
| feedparser | pip3 | 应用 | RSS阅读器需要,用于解析RSS/Atom信息 |
| aria2p | pip3 | 应用 | 浏览器需要,用于发送下载请求给Aria2 Daemon |
| aria2 | pacman | 应用 | 浏览器需要,用于下载文件 |
| wetty | yarn | 应用 | 终端模拟器需要,通过浏览器来和本地tty交互 |
| 包名 | 安装方式 | 依赖 | 解释 |
| :-------- | :---- | :------ | :------ |
| pyqt5 | pip3 | 核心 | GUI图形库 |
| dbus-python | pip3 | 核心 | DBus库,用于在Emacs和Python进程间通讯 |
| python-xlib | pip3 | 核心 | X11的Python绑定,用于粘贴Qt5程序到Emacs Buffer区域 |
| pyqtwebengine | pip3 | 浏览器,图片浏览器,RSS阅读器,<br>终端模拟器,Org预览,Markdown预览 | 基于Chromium的浏览器引擎 |
| pymupdf | pip3 | PDF阅读器 | 解析PDF文件 |
| grip | pip3 | Markdown预览 | 建立Markdown文件的HTML服务 |
| qrcode | pip3 | 文件上传,文件下载,文字传输 | 根据文件信息生成二维码 |
| feedparser | pip3 | RSS阅读器 | 解析RSS/Atom信息 |
| aria2p | pip3 | 浏览器 | 发送下载请求给Aria2 Daemon |
| aria2 | pacman (Arch) | 浏览器 | 下载网络文件 |
| wetty | yarn | 终端模拟器 | 通过浏览器与本地TTY交互 |
## EAF应用启动命令
| 应用名称 | 启动命令 |
| :-------- | :---- |
| 浏览器 | `M-x eaf-open-browser` 在浏览器中打开或搜索 |
| | `M-x eaf-open-browser-with-history` 搜索历史或者打开URL |
| HTML邮件渲染 | `M-x eaf-open-mail-as-html``gnus`, `mu4e`, `notmuch` 等邮件客户端中执行 |
| PDF阅读器 | `M-x eaf-open` 输入PDF文件 |
| 视频播放器 | `M-x eaf-open` 输入视频文件 |
| 图片浏览器 | `M-x eaf-open` 输入图片文件 |
| Markdown预览程序 | `M-x eaf-open` 输入markdown文件 |
| Org-mode预览程序 | `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-receiver-qrcode` |
| 无线分享 | `M-x eaf-open-airshare` 输入要分享给手机的字符串 |
| RSS新闻阅读器 | `M-x eaf-open-rss-reader` |
| 演示程序 | `M-x eaf-open-demo` |
- 在dired文件管理器中,建议绑定按键到命令 `eaf-open-this-from-dired` ,它会自动用合适的EAF应用来打开文件。
| 应用名称 | 启动命令 |
| :-------- | :---- |
| 浏览器 | `M-x eaf-open-browser` 在浏览器中打开或搜索 |
| | `M-x eaf-open-browser-with-history` 搜索历史或者打开URL |
| HTML邮件渲染 | `M-x eaf-open-mail-as-html``gnus`,`mu4e`,`notmuch` 等邮件客户端中执行 |
| 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-receiver-qrcode` |
| 无线分享 | `M-x eaf-open-airshare` 输入要分享给手机的字符串 |
| RSS新闻阅读器 | `M-x eaf-open-rss-reader` |
| 演示程序 | `M-x eaf-open-demo` |
- 在`dired`文件管理器中,建议绑定按键到命令 `eaf-open-this-from-dired` ,它会自动用合适的EAF应用来打开文件。
```
注意:
EAF使用DBus的普通权限总线 (session bus), 请不要用 sudo 来启动EAF, root用户只能访问系统权限总线 (system bus)
EAF使用DBus的普通权限总线 (session bus),请不要用 sudo 来启动EAF,root用户只能访问系统权限总线 (system bus)
```
## Wiki
架构设计,按键绑定,自定义选项和任务列表等文档都写在[Wiki](https://github.com/manateelazycat/emacs-application-framework/wiki)
强烈建议使用EAF之前浏览一遍[Wiki](https://github.com/manateelazycat/emacs-application-framework/wiki)
你还会在Wiki发现很多有用的技巧,比如Docker,Helm等,强烈建议使用EAF之前浏览一遍Wiki。
Wiki包括架构设计,按键绑定,自定义选项和任务列表等文档。你还会在Wiki发现很多有用的技巧,比如Docker,Helm等,
## 常用问题
@ -141,45 +143,45 @@ EAF主要实现这几个功能:
### EAF vs EXWM?
1. EAF和EXWM的共同点都是:“提升Emacs和别的程序的协作效率“
2. EXWM本身是一个X11窗口管理器,通过X11协议来控制Emacs和其他程序,但是EXWM只是管理其他程序,但是它并不会修改别的程序,比如它没法修改Chrome, PDF阅读器等GUI程序内在的行为
3. EAF本身不是一个窗口管理器,EAF只是依赖Emacs自身的窗口管理功能显示自己
4. EAF的目标是通过PyQt创造新的应用来扩展Emacs的多媒体能力,从Emacs本身的Buffer/Mode设计上看, 它和你平常用的 xx-mode 插件没有啥区别,只是它用Qt来绘制内容,而不是Emacs自身的文本库来绘制内容
2. EXWM是一个X11窗口管理器,通过X11协议来控制Emacs和其他程序,但是EXWM只是管理其他程序,但是它并不会修改别的程序。比如它没法修改Chrome,PDF阅读器等GUI程序内在的行为
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的多媒体能力能够跟上时代的发展
6. 基于EAF的架构设计,我们可以通过Elisp来控制Python,JavaScript和其他命令行工具,实现多语言扩展Emacs的编程模型在坚持Emacs黑客文化和Elisp社区兼容性的前提下,让Emacs的多媒体能力能够跟上时代的发展
EAF和EXWM在设计上是两个完全不同的项目,所以请大家多多学习X11和Qt的区别,理解技术的本质,避免无意义的比较和争论。
或许EAF和EXWM看起来有点相似,但它们在设计和理念上是两个完全不同的项目。所以请大家多多学习X11和Qt的区别,理解技术的本质,避免无意义的比较和争论。
### 为什么EAF只能在Linux下工作?
1. 核心开发者主要使用Manjaro Linux, 目前为止,核心开发者并不使用其他操作系统,比如MacOS, Windows, BSD
1. 核心开发者主要使用Manjaro Linux目前为止,核心开发者并不使用其他操作系统,比如MacOS,Windows,BSD
2. EAF跨进程窗口混合技术依赖Linux下的X11 XReparent技术,其他操作系统可能有类似的技术,但是核心开发者不熟悉其他操作系统的底层技术
3. DBus是Linux下专用的进程间通讯技术,其他操作系统可能无法支持DBus
4. Qt5的QGraphicsScene技术无法在MacOS下正常工作,也就无法实现Qt5应用的镜像窗口以支持Emacs的Buffer/Window模型
欢迎操作系统级别黑客移植EAF,目前为止,我知道的主要的迁移障碍就只有三个:XReparent, DBus, QGraphicsScene
欢迎操作系统级别黑客移植EAF,目前为止,我知道的主要的迁移障碍就只有三个:XReparent,DBus,QGraphicsScene
### 为什么不支持Wayland?
EAF依赖X11的XReparent技术, Wayland并不支持跨进程窗口融合技术
EAF依赖X11的XReparent技术Wayland并不支持跨进程窗口融合技术
我们推荐你使用KDE或者Xfce这两个桌面环境,他们对XReparent技术有很好的支持,其他的轻量级窗口管理器和平铺窗口管理器对XReparent技术的支持和键盘焦点处理不完备,没法很好的支持EAF,比如i3wm, awesome都无法使EAF正常工作。
我们推荐你使用KDE或者Xfce这两个桌面环境,他们对XReparent技术有很好的支持,其他的轻量级窗口管理器和平铺窗口管理器对XReparent技术的支持和键盘焦点处理不完备,没法很好的支持EAF,比如i3wmawesome都无法使EAF正常工作。
### `[EAF] 奔溃了怎么办?
请检查 `*eaf*` 这个窗口的内容通常是EAF的Python依赖没有安装好,如果你确定依赖没有问题,请附带 `*eaf*` 窗口的内容给我们提交issue, 那里面有很多线索可以帮助我们排查问题。
### `[EAF] *eaf* aborted (core dumped)` 奔溃了怎么办?
请检查 `*eaf*` 这个窗口的内容通常是EAF的Python依赖没有安装好,如果你确定依赖没有问题,请附带 `*eaf*` 窗口的内容给我们提交issue那里面有很多线索可以帮助我们排查问题。
### "undefined symbol" 错误
如果你启动的时候发现 "undefined symbol" 错误, 并且你使用的是Arch系统,那肯定是因为Arch自身的bug,Arch系统每次升级以后, 重新使用pip3安装一次Python依赖包就可以解决这个问题:
### `undefined symbol` 错误
如果你启动的时候发现 "undefined symbol" 错误,并且你使用的是Arch系统,那肯定是因为Arch自身的bug,Arch系统每次升级以后,重新使用pip3安装一次Python依赖包就可以解决这个问题:
```Elisp
```Bash
sudo pip3 install dbus-python python-xlib pyqt5 pyqtwebengine pymupdf grip qrcode feedparser aria2p --force-reinstall
```
### Github 个人访问标记干什么用的?
Markdown预览程序依赖grip, 你需要访问[Github Personal access token](https://github.com/settings/tokens/new?scopes=)去获取你个人的标记,然后通过下面的命令设置标记后,grip才能正常的工作:
Markdown预览程序依赖grip你需要访问[Github Personal access token](https://github.com/settings/tokens/new?scopes=)去获取你个人的标记,然后通过下面的命令设置标记后,grip才能正常的工作:
```Elisp
(setq eaf-grip-token "yourtokencode")
```
如果不设置个人标记,Github会弹出 "超出使用次数" 的错误。
尽管不设置访问标记一开始也能成功使用,但Github过段时间会弹出 "GitHub Rate Limit Reached" 的错误。
### 代理
可以通过下面设置来通过代理访问互联网:
@ -198,7 +200,7 @@ Markdown预览程序依赖grip, 你需要访问[Github Personal access token](ht
## EAF社区
下面列表列展示了EAF社区的应用,如果我们遗漏你的应用,欢迎提交PR来加到下面列表中。
下面列表列展示了EAF在Emacs社区的应用。如果我们遗漏你的应用,欢迎提交PR来加到下面列表中。
* ***[obr-viz](https://github.com/swhalemwo/obr-viz)***: visualizing [org-brain](https://github.com/Kungsgeten/org-brain) relationships using EAF
@ -206,7 +208,7 @@ Markdown预览程序依赖grip, 你需要访问[Github Personal access token](ht
### 反馈安装和配置问题之前,请一定先阅读[Wiki](https://github.com/manateelazycat/emacs-application-framework/wiki)!!!
如果你遇到任何问题, 请先用命令 `emacs -q` 并只添加EAF配置,做一个对比测试,如果 `emacs -q` 的时候可以工作,请检查你个人的配置文件。
如果你遇到任何问题请先用命令 `emacs -q` 并只添加EAF配置,做一个对比测试,如果 `emacs -q` 的时候可以工作,请检查你个人的配置文件。
如果```emacs -q```环境下问题依旧,请到[这里](https://github.com/manateelazycat/emacs-application-framework/issues/new)反馈。
@ -220,7 +222,7 @@ Markdown预览程序依赖grip, 你需要访问[Github Personal access token](ht
[一起疯吧!](https://github.com/manateelazycat/emacs-application-framework/wiki/Hacking)
## 打赏
如果我的作品让你的生活充满快乐, 欢迎请我喝瓶啤酒, 哈哈哈哈
如果我的作品让你的生活充满快乐,欢迎请我喝瓶啤酒,哈哈哈哈
<p float="left">
<img src="./screenshot/alipay.jpg" width="188">

Loading…
Cancel
Save