Tags: patch The attached patch fixes an issue with Tempo template insertion, where the region start is assumed to be a position before the region end. If the user selects a region in a backwards direction the correct indentation will not be applied: (require 'tempo) (tempo-define-template "indent-region-test" '(r>)) (with-temp-buffer (emacs-lisp-mode) (insert " one\n two\n three") (goto-char (point-min)) (set-mark-command nil) (goto-char (point-max)) (tempo-template-indent-region-test) (buffer-string)) ;; => "one\ntwo\nthree" (with-temp-buffer (emacs-lisp-mode) (insert " one\n two\n three") (goto-char (point-max)) (set-mark-command nil) (goto-char (point-min)) (tempo-template-indent-region-test) (buffer-string)) ;; => " one\n two\nthree" The start and end positions are already identified and stored using separate variables, so the patch just uses these values instead of assuming the point and mark order. I've also removed passing nil as the third argument since the argument is optional. In GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw3d scroll bars) of 2023-07-31 built on inspiron Windowing system distributor 'The X.Org Foundation', version 11.0.12101007 System Description: Debian GNU/Linux 12 (bookworm) Configured using: 'configure --with-native-compilation --with-cairo --with-json --with-xml2 --with-x-toolkit=lucid'