mirror of
https://github.com/jimeh/yank-indent.git
synced 2026-02-19 09:36:40 +00:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
8fe8de468f
|
|||
|
7844288143
|
|||
| 15fd7271bd | |||
|
|
c0ec1607fe | ||
| 290eb89fec | |||
|
b047e91b92
|
|||
| 28b7ef837d | |||
|
41f37e5726
|
|||
|
2256722539
|
|||
| a834f366c3 | |||
|
|
fe903d957d | ||
|
15c69ef8d7
|
|||
|
803374178f
|
|||
|
84f3b3e7c0
|
|||
|
c0b7531238
|
|||
| 2a2174fbf4 | |||
|
9b1d01b600
|
3
.github/.release-please-manifest.json
vendored
Normal file
3
.github/.release-please-manifest.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
".": "0.3.0"
|
||||
}
|
||||
16
.github/release-please-config.json
vendored
Normal file
16
.github/release-please-config.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"packages": {
|
||||
".": {
|
||||
"release-type": "simple",
|
||||
"changelog-path": "CHANGELOG.md",
|
||||
"bump-minor-pre-major": true,
|
||||
"bump-patch-for-minor-pre-major": true,
|
||||
"draft": false,
|
||||
"prerelease": false,
|
||||
"extra-files": [
|
||||
"yank-indent.el"
|
||||
]
|
||||
}
|
||||
},
|
||||
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json"
|
||||
}
|
||||
11
.github/workflows/release-please.yml
vendored
Normal file
11
.github/workflows/release-please.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
release-please:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: jimeh/release-please-manifest-action@v1
|
||||
25
CHANGELOG.md
25
CHANGELOG.md
@@ -1,8 +1,29 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
## [0.3.0](https://github.com/jimeh/yank-indent/compare/v0.2.0...v0.3.0) (2023-06-12)
|
||||
|
||||
### [0.1.1](https://github.com/jimeh/yank-indent/compare/v0.1.0...v0.1.1) (2023-04-23)
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* **setup:** Removed yank-indent-setup and yank-indent-teardown functions.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **setup:** simplify package/load setup by not using a global advice ([b047e91](https://github.com/jimeh/yank-indent/commit/b047e91b9235308f76a94dacdf40f160bee6758e))
|
||||
|
||||
## [0.2.0](https://github.com/jimeh/yank-indent/compare/v0.1.1...v0.2.0) (2023-04-25)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* **customization:** Rename global mode customization variables.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **customization:** rename customize variables related to global mode ([84f3b3e](https://github.com/jimeh/yank-indent/commit/84f3b3e7c05413b4e9a7a7d3b81457cd1511f4ac))
|
||||
* **internal:** do not add advice on package load ([9b1d01b](https://github.com/jimeh/yank-indent/commit/9b1d01b600f9da0139dddb19485177ccee99f1ee))
|
||||
|
||||
## [0.1.1](https://github.com/jimeh/yank-indent/compare/v0.1.0...v0.1.1) (2023-04-23)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
31
README.md
31
README.md
@@ -19,7 +19,7 @@
|
||||
<a href="https://github.com/jimeh/yank-indent/pulls">
|
||||
<img src="https://img.shields.io/github/issues-pr-raw/jimeh/yank-indent.svg?style=flat&logo=github&logoColor=white" alt="GitHub pull requests">
|
||||
</a>
|
||||
<a href="https://github.com/jimeh/yank-indent/blob/master/LICENSE">
|
||||
<a href="https://github.com/jimeh/yank-indent/blob/main/LICENSE">
|
||||
<img src="https://img.shields.io/github/license/jimeh/yank-indent.svg?style=flat" alt="License Status">
|
||||
</a>
|
||||
</p>
|
||||
@@ -29,10 +29,14 @@ pasting it somewhere? Never again! yank-indent is the answer.
|
||||
|
||||
## Features
|
||||
|
||||
- A fire-and-forget style global mode that does the right thing most of time.
|
||||
Can be customized if you find it enables `yank-indent-mode` when it shouldn't.
|
||||
- Configurable size threshold to prevent triggering indentation on very large
|
||||
regions which may cause performance issues in with some major-modes.
|
||||
- `yank-indent-mode` minor-mode that automatically calls `indent-region` on
|
||||
yanked/pasted text.
|
||||
- `global-yank-indent-mode` which is a set-it-and-forget-it style global mode
|
||||
that enables `yank-indent-mode` in relevant buffers, with a sensible default
|
||||
list of major-modes to exclude.
|
||||
- By default does not trigger `indent-region` if pasted text is longer than 5000
|
||||
characters. This threshold can be can be customized with
|
||||
`yank-indent-threshold`.
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -81,10 +85,15 @@ global mode and which buffers it enables `yank-indent-mode` in. If you
|
||||
explicitly enable `yank-indent-mode` in a buffer, it will operate like normal
|
||||
regardless of what major-mode the buffer is using.
|
||||
|
||||
## Under the Hood
|
||||
## Alternative Packages
|
||||
|
||||
`yank-indent` registers an advice for after `yank` and `yank-pop` commands. The
|
||||
advice function verifies that `yank-indent-mode` mode is enabled in the current
|
||||
buffer, prefix argument was not given, and the yanked/pasted text was within the
|
||||
`yank-indent-threshold` in size. If all true, it will trigger indentation,
|
||||
otherwise it does nothing.
|
||||
- [snap-indent](https://github.com/jeffvalk/snap-indent)
|
||||
([melpa](https://melpa.org/#/snap-indent)): Very similar with the addition of
|
||||
being able to trigger indentation on save, and extra custom formatting
|
||||
functions to run right after indentation.
|
||||
- [auto-indent-mode](https://github.com/mattfidler/auto-indent-mode.el)
|
||||
([melpa](https://melpa.org/#/auto-indent-mode)): Triggers indentation in a
|
||||
whole suite of scenarios, more or less trying to ensure everything is always
|
||||
correctly indented. This also includes indenting any yanked regions. Does not
|
||||
seem to support any thresholds to avoid triggering indentation for large
|
||||
buffers/yanked text.
|
||||
|
||||
115
yank-indent.el
115
yank-indent.el
@@ -3,8 +3,10 @@
|
||||
;; Author: Jim Myhrberg <contact@jimeh.me>
|
||||
;; URL: https://github.com/jimeh/yank-indent
|
||||
;; Keywords: convenience, yank, indent
|
||||
;; Version: 0.1.0
|
||||
;; Package-Requires: ((emacs "25.1"))
|
||||
;; x-release-please-start-version
|
||||
;; Version: 0.3.0
|
||||
;; x-release-please-end
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
@@ -54,8 +56,13 @@ will not occur. This helps prevent performance issues when
|
||||
working with large blocks of text."
|
||||
:type 'number)
|
||||
|
||||
(defcustom yank-indent-derived-modes '(prog-mode tex-mode)
|
||||
"Derived major modes where `yank-indent-mode' should be enabled.
|
||||
(define-obsolete-variable-alias
|
||||
'yank-indent-derived-modes
|
||||
'yank-indent-global-derived-modes
|
||||
"yank-indent 0.2.0")
|
||||
|
||||
(defcustom yank-indent-global-derived-modes '(prog-mode tex-mode)
|
||||
"Derived major modes where `global-yank-indent-mode' enables `yank-indent-mode'.
|
||||
|
||||
When `global-yank-indent-mode' is enabled, it activates
|
||||
`yank-indent-mode' in buffers with major modes derived from those
|
||||
@@ -65,49 +72,60 @@ mode, such as `prog-mode' for programming modes or `text-mode'
|
||||
for text editing modes."
|
||||
:type '(repeat symbol))
|
||||
|
||||
(defcustom yank-indent-exact-modes '()
|
||||
"Major modes where `yank-indent-mode' should be enabled.
|
||||
(define-obsolete-variable-alias
|
||||
'yank-indent-exact-modes
|
||||
'yank-indent-global-exact-modes
|
||||
"yank-indent 0.2.0")
|
||||
|
||||
(defcustom yank-indent-global-exact-modes '()
|
||||
"Major modes where `global-yank-indent-mode' enables `yank-indent-mode'.
|
||||
|
||||
When `global-yank-indent-mode' is enabled, it activates
|
||||
`yank-indent-mode' in buffers with major modes listed in this
|
||||
variable. Unlike `yank-indent-derived-modes', `yank-indent-mode'
|
||||
will not be activated in modes derived from those listed here.
|
||||
Use this variable to list specific modes where you want
|
||||
`yank-indent-mode' to be enabled without affecting their derived
|
||||
modes."
|
||||
variable. Unlike `yank-indent-global-derived-modes',
|
||||
`yank-indent-mode' will not be activated in modes derived from
|
||||
those listed here. Use this variable to list specific modes where
|
||||
you want `yank-indent-mode' to be enabled without affecting their
|
||||
derived modes."
|
||||
:type '(repeat symbol))
|
||||
|
||||
(defcustom yank-indent-excluded-modes '(cmake-ts-mode
|
||||
coffee-mode
|
||||
conf-mode
|
||||
haml-mode
|
||||
makefile-automake-mode
|
||||
makefile-bsdmake-mode
|
||||
makefile-gmake-mode
|
||||
makefile-imake-mode
|
||||
makefile-makepp-mode
|
||||
makefile-mode
|
||||
python-mode
|
||||
python-ts-mode
|
||||
slim-mode
|
||||
yaml-mode
|
||||
yaml-ts-mode)
|
||||
"Major modes where `yank-indent-mode' should not be enabled.
|
||||
(define-obsolete-variable-alias
|
||||
'yank-indent-excluded-modes
|
||||
'yank-indent-global-excluded-modes
|
||||
"yank-indent 0.2.0")
|
||||
|
||||
(defcustom yank-indent-global-excluded-modes '(cmake-ts-mode
|
||||
coffee-mode
|
||||
conf-mode
|
||||
haml-mode
|
||||
makefile-automake-mode
|
||||
makefile-bsdmake-mode
|
||||
makefile-gmake-mode
|
||||
makefile-imake-mode
|
||||
makefile-makepp-mode
|
||||
makefile-mode
|
||||
python-mode
|
||||
python-ts-mode
|
||||
slim-mode
|
||||
yaml-mode
|
||||
yaml-ts-mode)
|
||||
"Major modes where `global-yank-indent-mode' does not enable `yank-indent-mode'.
|
||||
|
||||
`global-yank-indent-mode' will not activate `yank-indent-mode' in
|
||||
buffers with major modes listed in this variable or their derived
|
||||
modes. This list takes precedence over
|
||||
`yank-indent-derived-modes' and `yank-indent-exact-modes'. Use
|
||||
this variable to exclude specific modes and their derived modes
|
||||
from having `yank-indent-mode' enabled."
|
||||
`yank-indent-global-derived-modes' and
|
||||
`yank-indent-global-exact-modes'. Use this variable to exclude
|
||||
specific modes and their derived modes from having
|
||||
`yank-indent-mode' enabled."
|
||||
:type '(repeat symbol))
|
||||
|
||||
(defun yank-indent--should-enable-p ()
|
||||
"Return non-nil if current mode should be indented."
|
||||
(and (not (minibufferp))
|
||||
(not (member major-mode yank-indent-excluded-modes))
|
||||
(or (member major-mode yank-indent-exact-modes)
|
||||
(apply #'derived-mode-p yank-indent-derived-modes))))
|
||||
(not (member major-mode yank-indent-global-excluded-modes))
|
||||
(or (member major-mode yank-indent-global-exact-modes)
|
||||
(apply #'derived-mode-p yank-indent-global-derived-modes))))
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode yank-indent-mode
|
||||
@@ -117,32 +135,32 @@ When enabled, this mode indents the yanked region according to
|
||||
the current mode's indentation rules, provided that the region
|
||||
size is less than or equal to `yank-indent-threshold' and no
|
||||
prefix argument is given during yanking."
|
||||
:lighter " YI")
|
||||
|
||||
(defun yank-indent--enable ()
|
||||
"Enable `yank-indent-mode' if the current buffer meets the criteria."
|
||||
(when (yank-indent--should-enable-p)
|
||||
(yank-indent-mode 1)))
|
||||
:lighter " YI"
|
||||
:group 'yank-indent
|
||||
(if yank-indent-mode
|
||||
(add-hook 'post-command-hook #'yank-indent--post-command-hook nil 'local)
|
||||
(remove-hook 'post-command-hook #'yank-indent--post-command-hook 'local)))
|
||||
|
||||
;;;###autoload
|
||||
(define-globalized-minor-mode global-yank-indent-mode
|
||||
yank-indent-mode
|
||||
yank-indent--enable)
|
||||
(lambda ()
|
||||
(when (yank-indent--should-enable-p)
|
||||
(yank-indent-mode 1))))
|
||||
|
||||
(defun yank-indent--after-yank-advice (&optional _)
|
||||
"Conditionally indent the region (yanked text) after yanking.
|
||||
(defun yank-indent--post-command-hook ()
|
||||
"Conditionally indent yanked text.
|
||||
|
||||
Indentation is triggered only if all of the following conditions
|
||||
are met:
|
||||
|
||||
- `yank-indent-mode' minor-mode is enabled in the current buffer.
|
||||
- `this-command' is `yank' or `yank-pop'.
|
||||
- `yank-indent-mode' is enabled.
|
||||
- Prefix argument was not provided.
|
||||
- Region size that was yanked is less than or equal to
|
||||
`yank-indent-threshold'.
|
||||
|
||||
This function is used as advice for `yank' and `yank-pop'
|
||||
functions."
|
||||
(if (and yank-indent-mode
|
||||
`yank-indent-threshold'."
|
||||
(if (and (memq this-command '(yank yank-pop))
|
||||
yank-indent-mode
|
||||
(not current-prefix-arg))
|
||||
(let ((beg (region-beginning))
|
||||
(end (region-end))
|
||||
@@ -150,8 +168,5 @@ functions."
|
||||
(if (<= (- end beg) yank-indent-threshold)
|
||||
(indent-region beg end)))))
|
||||
|
||||
(advice-add #'yank :after #'yank-indent--after-yank-advice)
|
||||
(advice-add #'yank-pop :after #'yank-indent--after-yank-advice)
|
||||
|
||||
(provide 'yank-indent)
|
||||
;;; yank-indent.el ends here
|
||||
|
||||
Reference in New Issue
Block a user