Emacs Application Framework is a development framework that developers can develop any PyQt program and integrate into Emacs.
This framework mainly implements three functions:
- Integrate PyQt program window into Emacs Frame using Xlib Reparent technology
- Listening to EAF buffer's keyboard event flow and controlling the keyboard input of PyQt program via DBus IPC
- Created a window compositer to make the PyQt program window adapt Emacs's Window/Buffer design
Using this framework, you can use PyQt develop powerful graphics programs to extend Emacs
Browser | Markdown Previewer |
---|---|
Image Viewer | Video Player |
---|---|
PDF Viewer | Camera |
---|---|
File Transfer | File Uploader |
---|---|
Air Share | Org Previewer |
---|---|
-
Install python dependences:
Make sure python3 and pip has install in your operating system, then execute below command:
sudo pip install dbus-python PyMuPDF grip qrcode pyqt5 python-xlib
- Clone this repository and add below code in your ~/.emacs
(require 'eaf)
Package | Use for |
---|---|
python-xlib | Stick app window into emacs frame |
python-pyqt5 | GUI library required for application development |
dbus-python | DBus IPC for python and elisp |
PyMuPDF | Render engine required for PDF Viewer |
grip | Markdown render server for Markdown Previewer |
qrcode | Render local file QR code |
If you prefer to run linux in a docker, you can read Run EAF with docker
There are mainly three obstacles:
- I can't make dbus/python-dbus works on MacOS High Sierra
- This framework need use X11 reparent to stick Qt5 window to emacs frame, but i don't know how to make X11 works on MacOS.
- Qt5 QGraphicsView/QGraphicsScene can't work MacOS, specify QGraphicsVideoItem can't work.
NOTE:
EAF use DBus' session bus, it must running in general user.
Please don't run EAF with root user, root user just can access DBus's system bus.
Type 'eaf-open-url' RET www.google.com
Browser Key | Event |
---|---|
Left Button | Open link current tab |
Ctrl + Left Button | Open link in new tab |
M-f | Forward page in history |
M-b | Backward page in history |
M-q | Delete all cookies |
Type 'eaf-open' RET pdf-filepath
PDF Viewer Key | Event |
---|---|
j | Scroll up |
k | Scroll down |
Space | Scroll up page |
b | Scroll down page |
, | Scroll to end |
. | Scroll to home |
t | Switch scale mode |
- | Zoom out |
= | Zoom in |
0 | Zoomn reset |
g | Goto page |
p | Goto to percent |
[ | Remember position |
] | Remember jump |
Type 'eaf-open' RET video-filepath
Video Player Key | Event |
---|---|
Space | Play or Pause |
h | Seek backward |
l | Seek forward |
Type 'eaf-open' RET image-filepath
Image Viewer Key | Event |
---|---|
j | Load next image in current directory |
k | Load previous image in current directory |
Application Name | Launch |
---|---|
Markdown previewer | Type 'eaf-open' RET markdown filepath |
Org file previewer | Type 'eaf-open' RET org filepath |
Camera | Type 'eaf-camera' |
Demo | Type 'eaf-demo' |
File Transfer | Type 'eaf-show-file-qrcode' |
Or use `dired-show-file-qrcode' in dired mode | |
File Uploader | Type 'eaf-upload-file' |
Air Share | Type 'eaf-air-share' |
If you can't access most awesome internet service like me, you perhaps need proxy settings like below:
(setq eaf-http-proxy-host "127.0.0.1")
(setq eaf-http-proxy-port "1080")
Then EAF browser are free. ;)
If you use markdown previewer, you need access Personal access token, fill something in "Token description" and click button "Generate token" to get your personal token, then set token with code:
(setq eaf-grip-token "yourtokencode")
Otherwise, github will popup "times limit" error because so many peope use grip. ;)
If you have any problem with EAF, please use command "emacs -Q" start Emacs first.
Then test again, if "emacs -Q" works fine, it's must be something wrong with your emacs config file.
If "emacs -Q" still have problem, please report bug
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?
如果我的作品让你的生活充满快乐, 欢迎请我喝瓶啤酒, 哈哈哈哈