branch: elpa/crux commit 3088be246ee18c5dccaf70afbf6f33a137654639 Author: Bozhidar Batsov <bozhi...@batsov.com> Commit: Bozhidar Batsov <bozhi...@batsov.com>
Add a way to make commands operate on either a region or a buffer --- README.md | 15 +++++++++++++++ crux.el | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/README.md b/README.md index a7a141e..3eecb43 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,21 @@ Command | Suggested Keybinding(s) | `crux-kill-whole-line` | <kbd>Super-k</kbd> | Kill whole line `crux-kill-line-backwards` | <kbd>C-Backspace</kbd> | Kill line backwards +## Using the bundled advices + +crux ships with some handy advises that can enhance the operation of existing commands. + +### Make a function operate on a region or the entire buffer + +You can use `crux-with-region-or-buffer` to make a command acting +normally on a region to operate on the entire buffer in the absense of +a region. Here are a few examples you can stuff in your config: + +```el +(crux-with-region-or-buffer indent-region) +(crux-with-region-or-buffer untabify) +``` + ## License Copyright © 2015 Bozhidar Batsov and [contributors][]. diff --git a/crux.el b/crux.el index 57a015a..d099438 100644 --- a/crux.el +++ b/crux.el @@ -348,5 +348,16 @@ Doesn't mess with special buffers." (t (error "Unknown shell"))))) (find-file-other-window (expand-file-name shell-init-file (getenv "HOME"))))) +(defmacro crux-with-region-or-buffer (func) + "When called with no active region, call FUNC on current buffer. + +Use to make commands like `indent-region' work on both the region +and the entire buffer (in the absense of a region)." + `(defadvice ,func (before with-region-or-buffer activate compile) + (interactive + (if mark-active + (list (region-beginning) (region-end)) + (list (point-min) (point-max)))))) + (provide 'crux) ;;; crux.el ends here