Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/DamienCassou/beginend
Emacs package to redefine M-< and M-> for some modes
https://github.com/DamienCassou/beginend
emacs emacs-dired mu4e notmuch
Last synced: 2 months ago
JSON representation
Emacs package to redefine M-< and M-> for some modes
- Host: GitHub
- URL: https://github.com/DamienCassou/beginend
- Owner: DamienCassou
- License: gpl-3.0
- Created: 2015-06-01T08:59:45.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2023-10-31T18:38:20.000Z (about 1 year ago)
- Last Synced: 2024-11-14T23:38:54.487Z (2 months ago)
- Topics: emacs, emacs-dired, mu4e, notmuch
- Language: Emacs Lisp
- Size: 960 KB
- Stars: 99
- Watchers: 6
- Forks: 15
- Open Issues: 0
-
Metadata Files:
- Readme: README.org
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: COPYING
Awesome Lists containing this project
README
* Beginend
#+BEGIN_HTML
#+END_HTML** Summary
You might want to read the [[https://emacs.cafe/emacs/package/2017/08/01/beginend.html][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:
| *Mode* | ~M-<~ | ~M->~ |
|-----------------------+-------------------------+----------------------------|
| *LaTeX-mode* | =\begin{document}= | =\end{document}= |
| *bs-mode* | first buffer | last buffer |
| *compilation-mode* | first compilation error | last compilation error |
| *deft-mode* | first match | last match |
| *dired-mode* | first file | last file |
| *elfeed-search-mode* | first feed | last feed |
| *elfeed-show-mode* | first body line | end of buffer |
| *epa-key-list-mode* | first key | last key |
| *ibuffer-mode* | first buffer | last buffer |
| *laTeX-mode* | =\begin{document}= | =\end{document}= |
| *magit-status-mode* | first section | last section |
| *magit-revision-mode* | first file | end of buffer |
| *message-mode* | first body line | last line before signature |
| *notmuch-search-mode* | first thread | last thread |
| *nroam-mode* | after the title | before backlinks |
| *occur-mode* | first match | last match |
| *org-agenda-mode* | first agenda item | last agenda item |
| *org-mode* | first heading | end of buffer |
| *outline-mode* | first heading | end of buffer |
| *prodigy-mode* | first service | last service |
| *prog-mode* | after initial comments | before final comments |
| *recentf-dialog-mode* | first most recent file | last most recent file |
| *rg-mode* | first match | last match |
| *vc-dir-mode* | first interesting file | last interesting file |Finally, beginend does what you expect when your buffer is narrowed.
** Installing
Use [[http://melpa.org/][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:#+BEGIN_SRC emacs-lisp
(beginend-global-mode)
#+END_SRCYou can also decide to only activate beginend for some of its
supported major modes (e.g., through ~beginend-dired-mode~).*** init.el example configuration
Vanilla Emacs ~init.el~:
#+BEGIN_SRC emacs-lisp
(require 'beginend)
(beginend-global-mode)
#+END_SRCConfiguration with the popular [[https://github.com/jwiegley/use-package][use-package]] macro:
#+BEGIN_SRC emacs-lisp
(use-package beginend
:ensure t
:demand t
:config
(beginend-global-mode))
#+END_SRC** Cleaning up the modeline
By default, beginend adds the ~be~ lighter to the modeline.
You can use [[https://github.com/myrjola/diminish.el][diminish.el]] or [[https://savannah.nongnu.org/projects/delight][delight.el]] to turn this off for every minor
mode beginend defines by looping over the ~beginend-modes~ variable.
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 [[https://melpa.org/#/minions][minions.el]].
In the following snippets, you can replace ~delight~ with ~diminish~ for
similar results.Adapting the vanilla Emacs ~init.el~:
#+BEGIN_SRC emacs-lisp
(require 'beginend)
(dolist (mode (cons 'beginend-global-mode (mapcar #'cdr beginend-modes)))
(diminish mode))
(beginend-global-mode)
#+END_SRCAdapting the [[https://github.com/jwiegley/use-package][use-package]] macro configuration:
#+BEGIN_SRC emacs-lisp
(use-package beginend
:ensure t
:demand t
:config
(dolist (mode (cons 'beginend-global-mode (mapcar #'cdr beginend-modes)))
(diminish mode))
(beginend-global-mode))
#+END_SRC** Using
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
[[file:media/beginend-dired-mode.gif]]
*** Magit status mode
[[file:media/beginend-magit-mode.gif]]
*** Message mode
[[file:media/beginend-message-mode.gif]]
*** Programming mode
[[file:media/beginend-prog-mode.gif]]
*** Occur mode
[[file:media/beginend-occur-mode.gif]]** Contributing
Yes, please do! See [[file:CONTRIBUTING.md][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~:#+BEGIN_SRC emacs-lisp
(beginend-define-mode org-agenda-mode
(progn
(org-agenda-next-item 1))
(progn
(org-agenda-previous-item 1)))
#+END_SRCThe 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~).** License
See [[file:COPYING][COPYING]]. Copyright (c) 2017-2023 [[mailto:[email protected]][Damien Cassou]] and [[mailto:[email protected]][Matus Goljer]].