New GNU ELPA package: forgejo - Emacs Forgejo Front-end
Sacha Chua <[email protected]> Mon, 04 May 2026 09:17:27 -0400
| Newsgroups | gmane.emacs.announce |
|---|---|
| Message-ID | <[email protected]> |
Summary: Emacs Forgejo Front-end
Requires: emacs-29.1, keymap-popup-0.2.1
Website: https://codeberg.org/thanosapollo/emacs-forgejo
Keywords: tools vc git forgejo=20
Maintainer: Thanos Apollo <[email protected]>
Author: Thanos Apollo <[email protected]>
=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=
=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=
=94=81=E2=94=81
EMACS-FORGEJO
=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=
=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=
=94=81=E2=94=81
Emacs front-end for [Forgejo] instances (Codeberg, self-hosted, etc.).
=E2=81=83 Browse, filter, and view issues and pull requests
=E2=81=83 Submit and merge PRs via [AGit-Flow] push options
=E2=81=83 Full code review workflow with threaded comments
=E2=81=83 Watch rules with per-repo filter polling and desktop notifications
=E2=81=83 Label, assignee, and milestone management
=E2=81=83 `SQLite' cache for instant display and offline usage
=E2=81=83 Multi-host support with per-instance token configuration
=E2=81=83 `#' and `@' completion in composition buffers (`gfm-mode')
=E2=81=83 Repository settings editor
[Forgejo] <https://forgejo.org>
[AGit-Flow] <https://forgejo.org/docs/latest/user/agit-support/>
1 Installation
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90
1.1 use-package
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80
`emacs-forgejo' is available via [GNU ELPA].
=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
=E2=94=82 (use-package forgejo
=E2=94=82 :ensure t
=E2=94=82 :custom
=E2=94=82 (forgejo-hosts '(("https://codeberg.org")))
=E2=94=82 ;; Example watch rules
=E2=94=82 (forgejo-watch-rules
=E2=94=82 '(("thanosapollo/emacs-forgejo")
=E2=94=82 ("guix/guix" . "state:open label:team-emacs")
=E2=94=82 ("*" . "author:<your username>")))
=E2=94=82 (forgejo-watch-filter-default "read:no"))
=E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80
Visit a codeberg/forgejo repo and call `M-x forgejo-vc'. It will
automatically handle the token creation.
[GNU ELPA] <https://elpa.gnu.org/packages/forgejo.html>
2 Usage
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90
From any git repository with a Forgejo remote, `C-x v f'
(`forgejo-vc') opens the Forgejo popup menu. All available commands
are listed there. Press `h' in any view to see keybindings.
`M-x forgejo' opens the top-level menu for repo search, issue/PR
browsing, and watch list.
2.1 Watch rules
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80
Poll specific repos for new issues/PRs on a timer:
=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
=E2=94=82 (setq forgejo-watch-rules
=E2=94=82 '("thanosapollo/emacs-forgejo" ;; all for thanosapollo/em=
acs-forgejo repo
=E2=94=82 ("guix/guix" . "state:open label:team-emacs") ;; all st=
ate:open with team-emacs label
=E2=94=82 ("*" . "author:<your-username>"))) ;; everything in the=
db with author:<your-username>
=E2=94=82 (forgejo-watch-mode 1)
=E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80
A bare string watches everything in that repo. A cons cell applies a
filter query. `*' expands to all repos in your local cache.
`M-x forgejo-watch-list' to browse watched items. The initial filter
is controlled by `forgejo-watch-filter-default':
=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
=E2=94=82 (setq forgejo-watch-filter-default "read:no")
=E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80
Supported prefixes: `state:', `read:', `type:', `author:', `label:',
`search:'.
2.2 Composition
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80
Composition buffers use `gfm-mode' for markdown highlighting with `#'
completion for issue/PR references and `@' for user mentions.
=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
=E2=94=82 (add-hook 'forgejo-compose-hook #'flyspell-mode)
=E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80
2.3 Buffer setup
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80
All Forgejo buffers call `forgejo-buffer-setup-functions' after setup,
passing the buffer as an argument:
=E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
=E2=94=82 (setq forgejo-buffer-setup-functions
=E2=94=82 (list (lambda (buf)
=E2=94=82 (with-current-buffer buf
=E2=94=82 (display-line-numbers-mode -1)))))
=E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80
3 Comparison with other forgejo clients
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90
3.1 fj.el
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80
=E2=80=A2 fj.el takes a direct-API approach while emacs-forgejo uses a lo=
cal
SQLite cache as source of truth.
=E2=80=A2 fj.el supports the fork/PR workflow while emacs-forgejo supports
AGit-Flow.
4 Contributing
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90
This project is part of GNU ELPA.
Contributions of ~15 lines or more require [FSF copyright assignment].
See [#17] for more.
[FSF copyright assignment]
<https://www.gnu.org/prep/maintain/html_node/Copyright-Papers.html>
[#17] <https://codeberg.org/thanosapollo/emacs-forgejo/issues/17>
5 Screenshots
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90
<https://thanosapollo.org/images/emacs-forgejo--issue-01.png>
<https://thanosapollo.org/images/emacs-forgejo--issue.png>
<https://thanosapollo.org/images/emacs-forgejo--review-comment.png>
<https://thanosapollo.org/images/emacs-forgejo--review-log.png>
<https://thanosapollo.org/images/emacs-forgejo--review-thread.png>