- Description
- Features
- Installation and Configuration
- Image Caching
- Retrieve new entries after =M-x wallabag=
- Use org-protocol to save page
- Use AI to generate summary
- Keybindings
Emacs Wallabag client.
- Request all entries
- Request all tags
- Add tags for one entry
- Delete tag for one entry
- Request format for one entry
- Add entry (Support from eaf browser or elfeed or org-protocol)
- Insert entry with provided html (Support from eaf browser or elfeed or org-protocol)
- Delete entry
- Copy as org/markdown/org-protocol links
- Offline database (Sqlite)
- Full update
- Sidebar supported
- Select with Ivy/Consult
- sync with all clients (mobile, web, browser extension etc)
- Beautify: Support shrface
- Real time search and filtering (space separated)
- Annotation: Support paw
- Cache support: Saved placed/AI Summary Cache
- Org Protocol Support
This project relies on emacs-request and emacsql. Please install them in advanced.
git clone https://github.com/chenyanming/wallabag.el.git ~/.emacs.d/lisp/wallabag/
It’s available on Melpa :
M-x package-install wallabag
(add-to-list 'load-path "~/.emacs.d/lisp/wallabag/")
(require 'wallabag)
(setq wallabag-host "https://xx.xx.xx") ;; wallabag server host name
(setq wallabag-username "xx") ;; username
(setq wallabag-password "xx") ;; password
(setq wallabag-clientid "xx") ;; created with API clients management
(setq wallabag-secret "xx") ;; created with API clients management
(setq wallabag-search-print-items '("title" "domain" "tag" "reading-time" "date")) ;; control what content should be show in *wallabag-search*
(setq wallabag-search-page-max-rows 32) ;; how many items shown in one page
(use-package wallabag
:defer t
:load-path "~/.emacs.d/lisp/wallabag/"
:config
(setq wallabag-host "https://xx.xx.xx") ;; wallabag server host name
(setq wallabag-username "xx") ;; username
(setq wallabag-password "xx") ;; password
(setq wallabag-clientid "xx") ;; created with API clients management
(setq wallabag-secret "xx") ;; created with API clients management
(setq wallabag-search-print-items '("title" "domain" "tag" "reading-time" "date")) ;; control what content should be show in *wallabag-search*
(setq wallabag-search-page-max-rows 32) ;; how many items shown in one page
;; (setq wallabag-db-file "~/OneDrive/Org/wallabag.sqlite") ;; optional, default is saved to ~/.emacs.d/.cache/wallabag.sqlite
)
(use-package wallabag
:straight (:host github :repo "chenyanming/wallabag.el" :files ("*.el" "*.alist" "*.css")))
(package! wallabag :recipe (:host github :repo "chenyanming/wallabag.el" :files ("*.el" "*.alist" "*.css")))
It is insecure to store your sensitive credentials such as the wallabag password and client secret in plain text, and especially if you want to be upload it to public servers. You can use Emacs’ built-in auth-sources library for GPG-encrypted storage of your secrets.
Create an encrypted ~/.authinfo.gpg
file with the lines:
machine wallabag domain "https://example.com" user "xxx" password "xxx" clientid "xxx" client-secret "xxx"
Wallabag will get the credentials when needed without saving them in memory.
You can also hardcode wallabag-host
, wallabag-username
, wallabag-password
, wallabag-clientid
, wallabag-secret
but it is less secure.
Wallabag will not download the images, but using Emacs disk caching capability. Setting url-automatic-caching
non-nil causes documents to be cached automatically.
(setq url-automatic-caching t)
(add-hook 'wallabag-after-render-hook 'wallabag-search-update-and-clear-filter)
Add wallabag org protocol by running:
(wallabag-org-setup-org-protocol)
Create a bookmarklet with:
- If paw-server is running, use js/wallabag_insert_entry.js (send html to paw-server, and save the page to wallabag)
- If paw-server is not running, use js/wallabag_add_entry.js (only send url to wallabag server)
M-x wallabag-summary ;; or press ?
Wallabag will use gptel to generate the summary overlay into the begining of the article.
Start with M-x wallabag
.
For the first time you connect to server, you need to press u
to synchronize.
wallabag | Enter *wallabag-search* buffer. |
wallabag-find | Select wallabag entries from a list with ivy. |
wallabag-full-update | Perform a full database update. It can always keep the local database updated. |
wallabag-request-token | Request a new token. |
wallabag-add-entry | Add one entry to wallabag server, with URL and TAGS |
wallabag-insert-entry | Insert an entry to wallabag server with current buffer content (behavior may be changed in the future) |
wallabag-request-new-entries | Request the new entries in the background. |
wallabag-request-and-synchronize-entries | Request and synchronize entries, controlled by wallabag-number-of-entries-to-be-synchronized . |
<RET> | wallabag-view | View the wallabag entry. |
v | wallabag-view | View the wallabag entry. |
V | wallabag-browse-url | Browse the url of current wallabag entry. |
o | wallabag-original-entry | Open the original html rendered wallabag entry. |
s (non-evil), /(evil) | wallabag-search-live-filter | Filter the *wallabag-search* buffer. |
q | wallabag-search-quit | Quit *wallabag-entry* then *wallabag-search* and *wallabag-sidebar* . |
g (non-evil), r(evil) | wallabag-search-refresh-and-clear-filter | Refresh wallabag and clear the filter keyword. |
G (non-evil), R(evil) | wallabag-search-clear-filter | Clear the filter keyword. |
u | wallabag-search-update-and-clear-filter | Request new entries, clear the filter keyword, and update wallabag-search. |
U | wallabag-search-synchronize-and-clear-filter | Synchronize entries, clear the filter keyword, and update wallabag-search. |
m | wallabag-mark-and-forward | Mark entry and forward. |
<DEL> | wallabag-unmark-and-backward | Unmark entry and backword. |
a | wallabag-add-entry | Add an entry. |
d | wallabag-delete-entry | Delete an entry. |
n(non-evil), j(evil) | wallabag-next-entry | Move to next entry. |
p(non-evil), k(evil) | wallabag-previous-entry | Move to previous entry. |
w(non-evil), y(evil) | wallabag-org-link-copy | Copy marked entries as org links. |
t | wallabag-add-tags | Add tags (seperated by comma) to entry at point. |
T | wallabag-remove-tag | Remove one tag from list. |
‘ | wallabag-toggle-sidebar | Toggle sidebar. |
x | wallabag-update-entry-archive | Toggle archive (Read/Unread). |
f | wallabag-update-entry-starred | Toggle star (favorites). |
i | wallabag-update-entry-title | Update title. |
I | wallabag-update-entry-origin_url | Update origin url (from where you found it). |
r | wallabag-view | Refresh wallabag entry. |
M-x | wallabag-browse-url | Browse the url of current wallabag entry. |
o | wallabag-original-entry | Open the original html rendered wallabag entry. |
q | wallabag-entry-quit | Quit *wallabag-entry* . |
mouse-1 | wallabag-mouse-1 | Browse the url. |
ret | wallabag-ret | Browse the url. |
‘ | wallabag-toggle-sidebar | Toggle sidebar. |
<RET> | wallabag-sidebar-find-tag | Filter by tag at point. |
g (non-evil), r(evil) | wallabag-search-clear-filter | Clear the filter keyword. |
G (non-evil), R(evil) | wallabag-search-clear-filter | Clear the filter keyword. |
n | wallabag-sidebar-find-next-tag | Filter by next tag. |
p | wallabag-sidebar-find-previous-tag | Filter by previous tag. |
q | wallabag-sidebar-quit | Quit sidebar. |