I use emacs as my editor and have it configured to delete all trailing whitespace in a file, including any trailing newlines at the end, before saving it. The configuration snippet that I have in my emacs configuration file to do this is
(add-hook 'before-save-hook 'delete-trailing-whitespace)
While this is very convenient and works as expected, it becomes a hindrance in specific cases – the Jinja2 templating language deletes a single trailing newline, thereby leaving the rendered templates without a newline at the end.
One way to work around this behaviour is to add 2 trailing newlines in the
jinja2 template files. But unfortunately, due to my emacs configuration that deletes all trailing whitespace, this doesn’t work. So I started reading the documentation for the
delete-trailing-whitespace function and found out about the
delete-trailing-newlines variable (default:
t). This variable controls whether the trailing newline characters at the end of a file are deleted or not. So I wanted to try overriding the
delete-trailing-newlines variable to be false in
jinja2-mode, that I use for editing Jinja2 templates.
With some help from the excellent folks in the
#emacs IRC channel on Libera Chat, I was able to come up with the following configuration, that works as expected.
(use-package jinja2-mode :pin nongnu :hook (jinja2-mode . (lambda () (setq-local delete-trailing-lines nil))) :mode "\\.j2\\'")