You might want to read the introductory blog post.
M-> (or any key bound to
end-of-buffer) for some modes so that point moves to meaningful
locations. The real beginning and end of buffers (i.e.,
point-max) are still accessible by pressing the same key again.
In particular, these modes are supported:
|dired-mode||first file||last file|
|magit-status-mode||first section||last section|
|message-mode||first body line||last line before signature|
|prog-mode||after initial comments||before final comments|
|occur-mode||first match||last match|
|ibuffer-mode||first buffer||last buffer|
|bs-mode||first buffer||last buffer|
|vc-dir-mode||first interesting file||last interesting file|
|recentf-dialog-mode||first most recent file||last most recent file|
|org-agenda-mode||first agenda item||last agenda item|
|compilation-mode||first compilation error||last compilation error|
|notmuch-search-mode||first thread||last thread|
|elfeed-mode||first feed||last feed|
|prodigy-mode||first service||last service|
|deft-mode||first match||last match|
|rg-mode||first match||last match|
Finally, beginend does what you expect when your buffer is narrowed.
You can activate beginend for all modes it supports by customizing the
M-x customize-variable RET
beginend-global-mode RET) or by adding this line to your
You can also decide to only activate beginend for some of its
supported major modes (e.g., through
init.el example configuration
(require 'beginend) (beginend-global-mode)
Configuration with the popular use-package macro:
(use-package beginend :ensure t :demand t :config (beginend-global-mode))
Cleaning up the modeline
By default, beginend adds the
be lighter to the modeline.
You can use diminish.el or delight.el to turn this off for every minor
mode beginend defines by looping over the
Note that you will also need to “turn off the lights” for
beginend-global-mode, which is not part of this list.
If you usually diminish all minor modes, I recommend using minions.el.
In the following snippets, you can replace
Adapting the vanilla Emacs
(require 'beginend) (dolist (mode (cons 'beginend-global-mode (mapcar #'cdr beginend-modes))) (diminish mode)) (beginend-global-mode)
Adapting the use-package macro configuration:
(use-package beginend :ensure t :demand t :config (dolist (mode (cons 'beginend-global-mode (mapcar #'cdr beginend-modes))) (diminish mode)) (beginend-global-mode))
At this point, newly opened supported buffers will get improved
M-> (or any key bound to
The following shows some screencasts. In each screencast, the cursor is moved to the meaningful beginning and end and to the real beginning and end.
Magit status mode
Yes, please do! See CONTRIBUTING for guidelines.
Adding new modes is a matter of a few lines of code. For example,
these five lines (already included) define the behavior of beginend in
(beginend-define-mode org-agenda-mode (progn (org-agenda-next-item 1)) (progn (org-agenda-previous-item 1)))
progn is responsible for moving point to the meaningful
beginning of buffer. Before being executed, point is at the real
beginning of the buffer (i.e.,
point-min). The expression
(org-agenda-next-item 1) thus moves to the first agenda item.
Similarly, the second
progn is responsible for moving point to the
meaningful end of buffer starting from real end (i.e.,