--- Begin Message ---
Subject: |
30.0.50; Recognize env -S/--split-string in shebangs |
Date: |
Thu, 02 Nov 2023 21:57:25 +0100 |
Hello,
While Emacs correctly picks makefile-gmake-mode when visiting a file
with the following shebang:
#!/usr/bin/make -f
It fails to do so for this shebang:
#!/usr/bin/env -S make -f
env(1) suggests -S is the idiomatic way to pass arguments to programs in
shebangs:
> -S/--split-string usage in scripts
> The -S option allows specifying multiple parameters in a script.
> Running a script named 1.pl containing the following first line:
>
> #!/usr/bin/env -S perl -w -T
> ...
>
> Will execute perl -w -T 1.pl .
>
> Without the '-S' parameter the script will likely fail with:
>
> /usr/bin/env: 'perl -w -T': No such file or directory
I've poked at lisp/files.el; the attached diff seems sufficient to make
Emacs pick makefile-gmake-mode .
diff --git a/lisp/files.el b/lisp/files.el
index 3d838cd3b8c..97594ff8a13 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -3246,7 +3246,8 @@ inhibit-local-variables-p
(defvar auto-mode-interpreter-regexp
(purecopy "#![ \t]?\\([^ \t\n]*\
-/bin/env[ \t]\\)?\\([^ \t\n]+\\)")
+/bin/env[ \t]\\(?:\\(?:-S\\|--split-string\\)[ \t]\\)?\\)?\
+\\([^ \t\n]+\\)")
"Regexp matching interpreters, for file mode determination.
This regular expression is matched against the first line of a file
to determine the file's mode in `set-auto-mode'. If it matches, the file
Questions before proceeding to ChangeLog entries & regression tests:
1. Is this something we would like Emacs to recognize out of the box, or
is it too niche?
2. What about the more general forms shown in (info "(coreutils) env
invocation")?
#!/usr/bin/env -[v]S[OPTION]... [NAME=VALUE]... COMMAND [ARGS]...
3. Assuming we do want to amend that regexp, would it be possible to use
rx here? OT1H guessing "no" because files.el is pre-reloaded, whereas
rx.el is not; OTOH I see that files.el requires easy-mmode at
compile-time, and that package does not show up in loadup.el, so…
settling for "maybe?"
WDYT?
In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.37, cairo version 1.16.0) of 2023-08-20 built on hirondell
Repository revision: 652e45b70d82e6f615febe00553dbded80557845
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101007
System Description: Debian GNU/Linux 12 (bookworm)
Configured using:
'configure
--cache-file=/home/peniblec/.cache/emacs/config,src,emacs,master
--with-cairo --with-gconf --with-sqlite3 --with-xinput2'
Configured features:
ACL CAIRO DBUS FREETYPE GCONF GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ
JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES
NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB
Important settings:
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#66902: 30.0.50; Recognize env -S/--split-string in shebangs |
Date: |
Sun, 19 Nov 2023 11:09:38 +0200 |
> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
> Cc: 66902@debbugs.gnu.org
> Date: Sat, 18 Nov 2023 18:44:06 +0100
>
> Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:
>
> > Eli Zaretskii <eliz@gnu.org> writes:
> >
> >> I'd prefer not to have rx required in files.el, so could you please
> >> rewrite those parts of your patch and resubmit? Also, please add a
> >> NEWS entry about the change.
> >
> > ACK; will get to it in the coming days.
>
> s/days/hours/
>
> I left a 'concat' in, because (a) it lets us interleave comments (b) the
> byte-compiler seems to smartly condense it all to one big string literal
> anyway. (Though if files.el is preloaded, everything happens at
> build-time and the .elc does not matter much, IIUC?)
>
> Let me know if we would prefer a plain raw string literal.
>
> Added a NEWS entry (under § 'Changes in Emacs 30.1 / Miscellaneous',
> assuming 'master'); added a bug reference; squashed it all.
Thanks, installed on the master branch, and closing the bug.
--- End Message ---