{"id":13607748,"url":"https://github.com/emacs-eaf/emacs-application-framework","last_synced_at":"2025-05-13T22:00:18.129Z","repository":{"id":37348174,"uuid":"138488946","full_name":"emacs-eaf/emacs-application-framework","owner":"emacs-eaf","description":"EAF, an extensible framework that revolutionizes the graphical capabilities of Emacs","archived":false,"fork":false,"pushed_at":"2025-04-13T14:20:30.000Z","size":103817,"stargazers_count":3250,"open_issues_count":17,"forks_count":230,"subscribers_count":66,"default_branch":"master","last_synced_at":"2025-04-29T13:05:15.041Z","etag":null,"topics":["browser","eaf","emacs","emacs-application-framework","file-manager","multimedia","pdf-viewer","rss-reader","video-player"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emacs-eaf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-06-24T14:32:17.000Z","updated_at":"2025-04-27T10:11:19.000Z","dependencies_parsed_at":"2023-11-24T03:26:19.166Z","dependency_job_id":"cafe7411-9096-423b-af37-d2dda9295eff","html_url":"https://github.com/emacs-eaf/emacs-application-framework","commit_stats":null,"previous_names":["manateelazycat/emacs-application-framework"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-eaf%2Femacs-application-framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-eaf%2Femacs-application-framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-eaf%2Femacs-application-framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-eaf%2Femacs-application-framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emacs-eaf","download_url":"https://codeload.github.com/emacs-eaf/emacs-application-framework/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254036806,"owners_count":22003651,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","eaf","emacs","emacs-application-framework","file-manager","multimedia","pdf-viewer","rss-reader","video-player"],"created_at":"2024-08-01T19:01:21.259Z","updated_at":"2025-05-13T22:00:18.037Z","avatar_url":"https://github.com/emacs-eaf.png","language":"Python","readme":"English | [简体中文](./README.zh-CN.md)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg style='height: auto; width: 80%; object-fit: contain' src=\"./img/EAF_Banner_Transparent.png\"\u003e\n  \u003cbr\u003eA free/libre and open-source extensible framework that revolutionizes the graphical capabilities of Emacs. \u003cbr\u003eThe key to ultimately \u003ci\u003eLive in Emacs\u003c/i\u003e\n\u003c/p\u003e\n\n## Vision\n\u003cimg src=\"./framework.png\"\u003e\n\nEmacs, the extensible *text editor*, is more than 45 years old. It is older than virtually all operating systems people use today, almost as old as the first UNIX system. During the decades of development, the world's brightest hackers have contributed their intelligence and creativity. Together they've constructed the most comprehensive and richest ecosystem that you can find in any software to date.\n\nIf you are a hacker who works with numerous languages and text, who's keyboard-driven and desires maximum freedom, extensibility, and introspectivity over your tool, maybe to the extent of *living* in it, Emacs will be your best bet.\n\nUnfortunately, this 45 years of age is also one of the greatest disadvantages of Emacs. Comparing with modern software, Emacs lacks performance. Specifically Emacs Lisp lacks performance. It doesn't have proper multithreading and its graphical capabilities are seriously limited. It is far from what you'd expect from any GUI application today (such as IDEA or VSCode). You may think that Emacs, as a text-centric editor, doesn't need them, but have you ever run into a situation that, you sit comfortably typing commands and doing your Emacs sorcery, but can't help but ponder:\n\n    What if Emacs had a real browser?\n    What if this PDF or video file could be viewed efficiently without leaving Emacs?\n\nEmacs, although infinitely extensible in text, is very limited in graphics. It shouldn't have to be this way. However, Emacs Lisp is *the* integral part of the Emacs culture, it carries decades of history with itself, it is what makes Emacs special. It is irreplaceable.\n\nThe vision of the Emacs Application Framework (EAF) project is, while fully retaining the rich history, culture, and ecosystem of Emacs and Emacs Lisp, to open up completely new doors to the ecosystems of Python, Qt6, and even JavaScript. EAF extends Emacs to the world of modern graphics, but still preserving the extensibility and customizability of Emacs. It will be the key to ultimately *Live in Emacs*.\n\n## Features\n\nEAF is very extensible. We ship a lot of applications, feel free to choose anything you find interesting to install:\n\n| Browser                                          | PDF Viewer |\n| :--------:                                       | :----:                                                      |\n| \u003cimg src=\"./img/browser.png\" width=\"400\"\u003e | \u003cimg src=\"./img/pdf-viewer.png\" width=\"400\"\u003e |\n\n| Music Player                            | File Manager                              |\n| :--------:                                            | :----:                                                |\n| \u003cimg src=\"./img/music-player.png\" width=\"400\"\u003e | \u003cimg src=\"./img/file-manager.png\" width=\"400\"\u003e |\n|                                                       |                                                       |\n\n- [Browser](https://github.com/emacs-eaf/eaf-browser): A modern, customizable and extensible browser in Emacs\n- [PDF Viewer](https://github.com/emacs-eaf/eaf-pdf-viewer): Fastest PDF Viewer in Emacs\n- [Music Player](https://github.com/emacs-eaf/eaf-music-player): Music player that supports playlist and audio visualization\n- [Video Player](https://github.com/emacs-eaf/eaf-video-player): Video Player in Emacs\n- [Image Viewer](https://github.com/emacs-eaf/eaf-image-viewer): Dynanmic image viewer\n- [RSS Reader](https://github.com/emacs-eaf/eaf-rss-reader): RSS Reader in Emacs\n- [Terminal](https://github.com/mumu-lhl/eaf-pyqterminal): Full-featured terminal in Emacs\n- [MindMap](https://github.com/emacs-eaf/eaf-mind-elixir): Mind map with balance layout\n- [Camera](https://github.com/emacs-eaf/eaf-camera): Use camera in Emacs\n- [Markdown Previewer](https://github.com/emacs-eaf/eaf-markdown-previewer): Real-time Markdown previewer\n- [Org Previewer](https://github.com/emacs-eaf/eaf-org-previewer): Real-time Org-mode previewer\n- [Git Client](https://github.com/emacs-eaf/eaf-git): Fully multi-threaded git client for Emacs\n- [File Manager](https://github.com/emacs-eaf/eaf-file-manager): Fully multi-threaded replacement for dired-mode\n\n... plus [many more](https://github.com/orgs/emacs-eaf/repositories)!\n\n### EAF in EmacsConf\n| EmacsConf 2020: \u003ca href=\"https://emacsconf.org/2020/talks/34/\"\u003eExtend Emacs with EAF\u003c/a\u003e                            | EmacsConf 2021: \u003ca href=\"https://emacsconf.org/2021/talks/eaf/\"\u003eEAF: A 2021 Update\u003c/a\u003e                              |\n| :--------:                                            | :----:                                                |\n| [\u003cimg src=\"https://img.youtube.com/vi/HK_f8KTuR0s/0.jpg\" width=400\u003e](https://www.youtube.com/watch?v=HK_f8KTuR0s) | [\u003cimg src=\"https://img.youtube.com/vi/bh37zbefZk4/0.jpg\" width=400\u003e](https://www.youtube.com/watch?v=bh37zbefZk4) |\n|                                                       |                                                       |\n\n\n## Install\n\nEAF supports Linux (X11 and Wayland), Windows, macOS and FreeBSD. The installation method is very simple.\n\n#### 1. Download EAF\n\n```Bash\ngit clone --depth=1 -b master https://github.com/emacs-eaf/emacs-application-framework.git ~/.emacs.d/site-lisp/emacs-application-framework/\n```\n\n#### 2. Install/Update EAF applications and dependencies\n\nYou can use `M-x eaf-install-and-update` or manually run the `install-eaf.py` script in the EAF directory:\n\n```Bash\ncd emacs-application-framework\nchmod +x ./install-eaf.py\n./install-eaf.py\n```\n\nThere are many useful flags available for `install-eaf.py`, check it yourself using `--help`.\n\nThere are four types of support for the Wayland environment:\n- XWayland: EAF can run directly under XWayland\n- Gnome3 Wayland Native: You need to execute the command `cp -r emacs-application-framework/gnome-shell/eaf-wayland@emacs-eaf.org ~/.local/share/gnome-shell/extensions` and activate the `eaf-wayland@emacs-eaf.org` plugin in `gnome-extensions`\n- Sway Wayland Native: jq needs to be installed\n- Hyprland Wayland Native\n\nUnity environment support: requires `xdotool` to be installed.\n\n#### 3. Load EAF Core\n\nFrom here on, you can add the full path to the EAF installation directory to your Emacs ```load-path```, then add the following to `init.el`:\n\n```Elisp\n(add-to-list 'load-path \"~/.emacs.d/site-lisp/emacs-application-framework/\")\n(require 'eaf)\n```\n\n- Alternatively, if you use [use-package](https://github.com/jwiegley/use-package), you can use the following *sample* configuration for your convenience.\n\n    ```Elisp\n    (use-package eaf\n      :load-path \"~/.emacs.d/site-lisp/emacs-application-framework\"\n      :custom\n      ; See https://github.com/emacs-eaf/emacs-application-framework/wiki/Customization\n      (eaf-browser-continue-where-left-off t)\n      (eaf-browser-enable-adblocker t)\n      (browse-url-browser-function 'eaf-open-browser)\n      :config\n      (defalias 'browse-web #'eaf-open-browser)\n      (eaf-bind-key scroll_up \"C-n\" eaf-pdf-viewer-keybinding)\n      (eaf-bind-key scroll_down \"C-p\" eaf-pdf-viewer-keybinding)\n      (eaf-bind-key take_photo \"p\" eaf-camera-keybinding)\n      (eaf-bind-key nil \"M-q\" eaf-browser-keybinding)) ;; unbind, see more in the Wiki\n    ```\n\n#### 4. Load EAF Apps\n\nYou can use below code to load applications `browser` and `pdf-viewer` that you installed. Please check [Applications](https://github.com/emacs-eaf/emacs-application-framework#features) for the full list:\n\n```Elisp\n(require 'eaf-browser)\n(require 'eaf-pdf-viewer)\n```\n\n#### 5. Hooray!\n\nCongratulations, you just installed EAF! You can try `M-x eaf-open-demo` (that is if you have `demo` installed, of course) to see if everything works properly, and enjoy the new possibilities of Emacs.\n\nBelow are launch commands of EAF Applications:\n\n| Application Name    | Launch                                                                 |\n| :--------           | :----                                                                  |\n| Browser             | `M-x eaf-open-browser` Search or Goto URL                              |\n|                     | `M-x eaf-open-browser-with-history` Search or Goto URL or Goto History |\n| HTML Email Renderer | `M-x eaf-open-mail-as-html` in `gnus`, `mu4e`, `notmuch` HTMl Mail     |\n| PDF Viewer          | `M-x eaf-open` PDF File                                                |\n| Video Player        | `M-x eaf-open` Video File                                              |\n| Image Viewer        | `M-x eaf-open` Image File                                              |\n| Markdown Previewer  | `M-x eaf-open` Markdown File, select `markdown-previewer`              |\n| Org Previewer       | `M-x eaf-open` Org File, select `org-previewer`                        |\n| Camera              | `M-x eaf-open-camera`                                                  |\n| Terminal            | `M-x eaf-open-pyqterminal`                                             |\n| File Manager        | `M-x eaf-open-in-file-manager`                                         |\n| RSS Reader          | `M-x eaf-open-rss-reader`                                              |\n| Git Client          | `M-x eaf-open-git`                                                     |\n| Map Route Planning  | `M-x eaf-open-map`                                                     |\n| File Sender         | `M-x eaf-file-sender-qrcode` or `eaf-file-sender-qrcode-in-dired`      |\n| File Browser        | `M-x eaf-file-browser-qrcode`                                          |\n| Airshare            | `M-x eaf-open-airshare`                                                |\n| Markmap             | `M-x eaf-open` Markdown or Org file, select `markmap`                  |\n| Mindmap             | `M-x eaf-create-mindmap` or `M-x eaf-open-mindmap`                     |\n| MS Office Viewer    | `M-x eaf-open-office`                                                  |\n| Jupyter             | `M-x eaf-open-jupyter`                                                 |\n| Music Player        | `M-x eaf-open-music-player`                                            |\n| System Monitor      | `M-x eaf-open-system-monitor`                                          |\n| Demo                | `M-x eaf-open-demo` to verify basic functionality                      |\n| Vue Demo            | `M-x eaf-open-vue-demo` to verify vue.js functionality                 |\n\n- EAF Browser and PDF Viewer support Emacs built-in bookmark operation, with `M-x bookmark-set` (defaulted to `C-x r m`) and `M-x bookmark-bmenu-list` (defaulted to `C-x r l`).\n\n## Upgrade\nAlso, you should regularly `git pull` **and** run `install-eaf.py` (`M-x eaf-install-and-update`) to update EAF, its applications, and relating dependencies.\n\n## Report bug\n\n### For any installation and configuration assistance, please read the [Wiki](https://github.com/emacs-eaf/emacs-application-framework/wiki) and [FAQ](https://github.com/emacs-eaf/emacs-application-framework/wiki/FAQ).\n\nIf you encounter a problem with EAF, and it occurred after pulling the latest commit, please check the [Mandatory Procedures to Keep Your EAF Up-To-Date](https://github.com/emacs-eaf/emacs-application-framework/discussions/527?sort=new) page **first**.\n\nFor any other problems, please use `emacs -q` and load a minimal setup with only EAF to verify that the bug is reproducible. If `emacs -q` works fine, probably something is wrong with your Emacs config.\n\nIf the problem persists, please report it [here](https://github.com/emacs-eaf/emacs-application-framework/issues/new) with the `*eaf*` buffer content. It contains many clues that can help us locate the problem faster.\n\nIf you get a segfault error, please use the following way to collect crash information:\n1. Install gdb and turn on option `(setq eaf-enable-debug t)`\n2. Use the command `eaf-stop-process` to stop the current process\n3. Restart eaf, send issue with `*eaf*` buffer content when next crash\n\n## EAF in the community\n\nA list of other community packages that use EAF to enhance their graphical experiences!\n\nIf we missed your package, please make a PR to add it to the list.\n\n* ***[obr-viz](https://github.com/swhalemwo/obr-viz)***: visualizing [org-brain](https://github.com/Kungsgeten/org-brain) relationships using EAF\n* ***[netease-cloud-music](https://github.com/SpringHan/netease-cloud-music.el)***: A netease music client for emacs.\n* ***[2048pyqt6](https://github.com/porrige/2048pyqt6)***: A 2048 game that can run in emacs.\n* ***[pyqterminal](https://github.com/mumu-lhl/eaf-pyqterminal)***: A terminal written in PyQt6.\n\n## Contributor\n\u003ca href = \"https://github.com/emacs-eaf/emacs-application-framework/graphs/contributors\"\u003e\n  \u003cimg src = \"https://contrib.rocks/image?repo=emacs-eaf/emacs-application-framework\"/\u003e\n\u003c/a\u003e\n\n## Join Us\nDo you want to make Emacs a real \"operating system\"?\n\nDo you want to live in Emacs more comfortably?\n\nDo you want to revolutionize the capabilities of Emacs?\n\n[Let's hack together!](https://github.com/emacs-eaf/emacs-application-framework/wiki/Hacking)\n","funding_links":[],"categories":["Python","Emacs Lisp","编辑器"],"sub_categories":["资源传输下载"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacs-eaf%2Femacs-application-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femacs-eaf%2Femacs-application-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacs-eaf%2Femacs-application-framework/lists"}