From 75b39a9396f728213ee8bb22026b75268fed8416 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 2 Sep 2018 20:46:13 +0200 Subject: [PATCH] editor/format: preserve indentation for regions --- modules/editor/format/autoload/format.el | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/modules/editor/format/autoload/format.el b/modules/editor/format/autoload/format.el index a9abbd3b8..014838713 100644 --- a/modules/editor/format/autoload/format.el +++ b/modules/editor/format/autoload/format.el @@ -155,7 +155,23 @@ snippets or single lines." (interactive "r") (save-restriction (narrow-to-region beg end) - (+format/buffer))) + ;; Since we're piping a region of text to the formatter, remove any leading + ;; indentation to make it look like a file. + (let ((indent (save-excursion + (goto-char beg) + (skip-chars-forward " \t\n") + (current-indentation)))) + (with-silent-modifications + (indent-rigidly (point-min) (point-max) (- indent))) + (+format/buffer) + (with-silent-modifications + ;; Then restore it afterwards, without affecting new indentation + (indent-rigidly (point-min) (point-max) + (max 0 (- indent + (save-excursion + (goto-char beg) + (skip-chars-forward " \t\n") + (current-column))))))))) ;;;###autoload (defun +format/region-or-buffer (beg end)