mirror of
https://github.com/jimeh/yank-indent.git
synced 2026-02-19 09:36:40 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a834f366c3 | |||
|
|
fe903d957d | ||
|
15c69ef8d7
|
|||
|
803374178f
|
|||
|
84f3b3e7c0
|
|||
|
c0b7531238
|
|||
| 2a2174fbf4 | |||
|
9b1d01b600
|
16
.github/workflows/release-please.yml
vendored
Normal file
16
.github/workflows/release-please.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
on: push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release-please:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref == 'refs/heads/main'
|
||||||
|
outputs:
|
||||||
|
release_created: ${{ steps.release-please.outputs.release_created }}
|
||||||
|
tag_name: ${{ steps.release-please.outputs.tag_name }} # e.g. v1.0.0
|
||||||
|
version: ${{ steps.release-please.outputs.version }} # e.g. 1.0.0
|
||||||
|
steps:
|
||||||
|
- uses: google-github-actions/release-please-action@v3
|
||||||
|
id: release-please
|
||||||
|
with:
|
||||||
|
command: manifest
|
||||||
3
.release-please-manifest.json
Normal file
3
.release-please-manifest.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
".": "0.2.0"
|
||||||
|
}
|
||||||
12
CHANGELOG.md
12
CHANGELOG.md
@@ -2,6 +2,18 @@
|
|||||||
|
|
||||||
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.
|
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.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)
|
### [0.1.1](https://github.com/jimeh/yank-indent/compare/v0.1.0...v0.1.1) (2023-04-23)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
20
README.md
20
README.md
@@ -29,10 +29,14 @@ pasting it somewhere? Never again! yank-indent is the answer.
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- A fire-and-forget style global mode that does the right thing most of time.
|
- `yank-indent-mode` minor-mode that automatically calls `indent-region` on
|
||||||
Can be customized if you find it enables `yank-indent-mode` when it shouldn't.
|
yanked/pasted text.
|
||||||
- Configurable size threshold to prevent triggering indentation on very large
|
- `global-yank-indent-mode` which is a set-it-and-forget-it style global mode
|
||||||
regions which may cause performance issues in with some major-modes.
|
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
|
## Installation
|
||||||
|
|
||||||
@@ -55,6 +59,14 @@ Place `yank-indent.el` somewhere in your `load-path` and require it. For example
|
|||||||
(global-yank-indent-mode t)
|
(global-yank-indent-mode t)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Setup & Teardown
|
||||||
|
|
||||||
|
Required setup that registers advice on `yank` and `yank-pop` commands is
|
||||||
|
automatically done the first time that `yank-indent-mode` is enabled.
|
||||||
|
|
||||||
|
Should you want to though you can manually add/remove the required advice with
|
||||||
|
`yank-indent-setup` and `yank-indent-teardown`.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### `global-yank-indent-mode`
|
### `global-yank-indent-mode`
|
||||||
|
|||||||
18
release-please-config.json
Normal file
18
release-please-config.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"bootstrap-sha": "e3fdaa7f673a8b8d43c2ac16f8a3cdfe8b3ab6c1",
|
||||||
|
"last-release-sha": "e3fdaa7f673a8b8d43c2ac16f8a3cdfe8b3ab6c1",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
136
yank-indent.el
136
yank-indent.el
@@ -3,8 +3,10 @@
|
|||||||
;; Author: Jim Myhrberg <contact@jimeh.me>
|
;; Author: Jim Myhrberg <contact@jimeh.me>
|
||||||
;; URL: https://github.com/jimeh/yank-indent
|
;; URL: https://github.com/jimeh/yank-indent
|
||||||
;; Keywords: convenience, yank, indent
|
;; Keywords: convenience, yank, indent
|
||||||
;; Version: 0.1.0
|
|
||||||
;; Package-Requires: ((emacs "25.1"))
|
;; Package-Requires: ((emacs "25.1"))
|
||||||
|
;; x-release-please-start-version
|
||||||
|
;; Version: 0.2.0
|
||||||
|
;; x-release-please-end
|
||||||
|
|
||||||
;; This file is not part of GNU Emacs.
|
;; 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."
|
working with large blocks of text."
|
||||||
:type 'number)
|
:type 'number)
|
||||||
|
|
||||||
(defcustom yank-indent-derived-modes '(prog-mode tex-mode)
|
(define-obsolete-variable-alias
|
||||||
"Derived major modes where `yank-indent-mode' should be enabled.
|
'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
|
When `global-yank-indent-mode' is enabled, it activates
|
||||||
`yank-indent-mode' in buffers with major modes derived from those
|
`yank-indent-mode' in buffers with major modes derived from those
|
||||||
@@ -65,49 +72,91 @@ mode, such as `prog-mode' for programming modes or `text-mode'
|
|||||||
for text editing modes."
|
for text editing modes."
|
||||||
:type '(repeat symbol))
|
:type '(repeat symbol))
|
||||||
|
|
||||||
(defcustom yank-indent-exact-modes '()
|
(define-obsolete-variable-alias
|
||||||
"Major modes where `yank-indent-mode' should be enabled.
|
'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
|
When `global-yank-indent-mode' is enabled, it activates
|
||||||
`yank-indent-mode' in buffers with major modes listed in this
|
`yank-indent-mode' in buffers with major modes listed in this
|
||||||
variable. Unlike `yank-indent-derived-modes', `yank-indent-mode'
|
variable. Unlike `yank-indent-global-derived-modes',
|
||||||
will not be activated in modes derived from those listed here.
|
`yank-indent-mode' will not be activated in modes derived from
|
||||||
Use this variable to list specific modes where you want
|
those listed here. Use this variable to list specific modes where
|
||||||
`yank-indent-mode' to be enabled without affecting their derived
|
you want `yank-indent-mode' to be enabled without affecting their
|
||||||
modes."
|
derived modes."
|
||||||
:type '(repeat symbol))
|
:type '(repeat symbol))
|
||||||
|
|
||||||
(defcustom yank-indent-excluded-modes '(cmake-ts-mode
|
(define-obsolete-variable-alias
|
||||||
coffee-mode
|
'yank-indent-excluded-modes
|
||||||
conf-mode
|
'yank-indent-global-excluded-modes
|
||||||
haml-mode
|
"yank-indent 0.2.0")
|
||||||
makefile-automake-mode
|
|
||||||
makefile-bsdmake-mode
|
(defcustom yank-indent-global-excluded-modes '(cmake-ts-mode
|
||||||
makefile-gmake-mode
|
coffee-mode
|
||||||
makefile-imake-mode
|
conf-mode
|
||||||
makefile-makepp-mode
|
haml-mode
|
||||||
makefile-mode
|
makefile-automake-mode
|
||||||
python-mode
|
makefile-bsdmake-mode
|
||||||
python-ts-mode
|
makefile-gmake-mode
|
||||||
slim-mode
|
makefile-imake-mode
|
||||||
yaml-mode
|
makefile-makepp-mode
|
||||||
yaml-ts-mode)
|
makefile-mode
|
||||||
"Major modes where `yank-indent-mode' should not be enabled.
|
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
|
`global-yank-indent-mode' will not activate `yank-indent-mode' in
|
||||||
buffers with major modes listed in this variable or their derived
|
buffers with major modes listed in this variable or their derived
|
||||||
modes. This list takes precedence over
|
modes. This list takes precedence over
|
||||||
`yank-indent-derived-modes' and `yank-indent-exact-modes'. Use
|
`yank-indent-global-derived-modes' and
|
||||||
this variable to exclude specific modes and their derived modes
|
`yank-indent-global-exact-modes'. Use this variable to exclude
|
||||||
from having `yank-indent-mode' enabled."
|
specific modes and their derived modes from having
|
||||||
|
`yank-indent-mode' enabled."
|
||||||
:type '(repeat symbol))
|
:type '(repeat symbol))
|
||||||
|
|
||||||
(defun yank-indent--should-enable-p ()
|
(defun yank-indent--should-enable-p ()
|
||||||
"Return non-nil if current mode should be indented."
|
"Return non-nil if current mode should be indented."
|
||||||
(and (not (minibufferp))
|
(and (not (minibufferp))
|
||||||
(not (member major-mode yank-indent-excluded-modes))
|
(not (member major-mode yank-indent-global-excluded-modes))
|
||||||
(or (member major-mode yank-indent-exact-modes)
|
(or (member major-mode yank-indent-global-exact-modes)
|
||||||
(apply #'derived-mode-p yank-indent-derived-modes))))
|
(apply #'derived-mode-p yank-indent-global-derived-modes))))
|
||||||
|
|
||||||
|
(defvar yank-indent--initial-setup nil)
|
||||||
|
|
||||||
|
(defun yank-indent--is-setup-p ()
|
||||||
|
"Return non-nil if required advice is setup."
|
||||||
|
(and (advice-member-p #'yank-indent--after-yank-advice #'yank)
|
||||||
|
(advice-member-p #'yank-indent--after-yank-advice #'yank-pop)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun yank-indent-setup ()
|
||||||
|
"Setup advice on `yank' and `yank-pop' as required by `yank-indent-mode'.
|
||||||
|
|
||||||
|
First time `yank-indent-mode' is enabled it will automatically
|
||||||
|
call `yank-indent-setup' if needed.
|
||||||
|
|
||||||
|
Setup can be undone with `yank-indent-teardown', but enabling
|
||||||
|
`yank-indent-mode' again after that will not run setup again."
|
||||||
|
(interactive)
|
||||||
|
(advice-add #'yank :after #'yank-indent--after-yank-advice)
|
||||||
|
(advice-add #'yank-pop :after #'yank-indent--after-yank-advice)
|
||||||
|
(setq yank-indent--initial-setup t))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun yank-indent-teardown ()
|
||||||
|
"Undo `yank-indent-setup' by removing advice from `yank' and `yank-pop'.
|
||||||
|
|
||||||
|
If this is used, `yank-indent-setup' must be explicitly called
|
||||||
|
before `yank-indent-mode' will work again."
|
||||||
|
(interactive)
|
||||||
|
(advice-remove #'yank #'yank-indent--after-yank-advice)
|
||||||
|
(advice-remove #'yank-pop #'yank-indent--after-yank-advice))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(define-minor-mode yank-indent-mode
|
(define-minor-mode yank-indent-mode
|
||||||
@@ -117,17 +166,23 @@ When enabled, this mode indents the yanked region according to
|
|||||||
the current mode's indentation rules, provided that the region
|
the current mode's indentation rules, provided that the region
|
||||||
size is less than or equal to `yank-indent-threshold' and no
|
size is less than or equal to `yank-indent-threshold' and no
|
||||||
prefix argument is given during yanking."
|
prefix argument is given during yanking."
|
||||||
:lighter " YI")
|
:lighter " YI"
|
||||||
|
:group 'yank-indent
|
||||||
(defun yank-indent--enable ()
|
(if yank-indent-mode
|
||||||
"Enable `yank-indent-mode' if the current buffer meets the criteria."
|
;; Auto-run advice setup if needed first time mode is enabled. Display
|
||||||
(when (yank-indent--should-enable-p)
|
;; warning if advice setup has been undone.
|
||||||
(yank-indent-mode 1)))
|
(when (not (yank-indent--is-setup-p))
|
||||||
|
(if yank-indent--initial-setup
|
||||||
|
(message (concat "Warning: yank-indent-mode not available, "
|
||||||
|
"run `M-x yank-indent-setup' to setup."))
|
||||||
|
(yank-indent-setup)))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(define-globalized-minor-mode global-yank-indent-mode
|
(define-globalized-minor-mode global-yank-indent-mode
|
||||||
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 _)
|
(defun yank-indent--after-yank-advice (&optional _)
|
||||||
"Conditionally indent the region (yanked text) after yanking.
|
"Conditionally indent the region (yanked text) after yanking.
|
||||||
@@ -150,8 +205,5 @@ functions."
|
|||||||
(if (<= (- end beg) yank-indent-threshold)
|
(if (<= (- end beg) yank-indent-threshold)
|
||||||
(indent-region beg end)))))
|
(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)
|
(provide 'yank-indent)
|
||||||
;;; yank-indent.el ends here
|
;;; yank-indent.el ends here
|
||||||
|
|||||||
Reference in New Issue
Block a user