Emacs package to redefine M-< and M-> for some modes
Emacs Lisp Makefile
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.



Build Status Coverage Status


You might want to read the introductory blog post.

Redefine M-< and M-> (or any key bound to beginning-of-buffer or end-of-buffer) for some modes so that point moves to meaningful locations. The real beginning and end of buffers (i.e., point-min and point-max) are still accessible by pressing the same key again.

In particular, these modes are supported:

dired-modefirst filelast file
magit-status-modefirst sectionlast section
message-modefirst body linelast line before signature
prog-modeafter initial commentsbefore final comments
occur-modefirst matchlast match
ibuffer-modefirst bufferlast buffer
bs-modefirst bufferlast buffer
vc-dir-modefirst interesting filelast interesting file
recentf-dialog-modefirst most recent filelast most recent file
org-agenda-modefirst agenda itemlast agenda item
compilation-modefirst compilation errorlast compilation error
notmuch-search-modefirst threadlast thread
elfeed-modefirst feedlast feed
prodigy-modefirst servicelast service
deft-modefirst matchlast match

Finally, beginend does what you expect when your buffer is narrowed.


Use melpa.

You can activate beginend for all modes it supports by customizing the variable beginend-global-mode (M-x customize-variable RET beginend-global-mode RET) or by adding this line to your configuration file:


You can also decide to only activate beginend for some of its supported major modes (e.g., through beginend-dired-mode).


At this point, newly opened supported buffers will get improved versions of M-< and M-> (or any key bound to beginning-of-buffer or end-of-buffer).

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.

Dired mode


Magit status mode


Message mode


Programming mode


Occur 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 org-agenda-mode:

(beginend-define-mode org-agenda-mode
    (org-agenda-next-item 1))
    (org-agenda-previous-item 1)))

The first 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., point-max).


See COPYING. Copyright (c) 2017 Damien Cassou and Matus Goljer.