all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Specifying a file in auto-mode-alist
@ 2021-04-23 20:25 Patrick Mahan
  2021-04-23 20:42 ` Óscar Fuentes
  0 siblings, 1 reply; 6+ messages in thread
From: Patrick Mahan @ 2021-04-23 20:25 UTC (permalink / raw)
  To: help-gnu-emacs

All,

I have build scripts that capture a build (makefile output) into files
called build*.log or Build*.log. These files may occur at various points in
the directory tree.

However if I use the following:

(add-to-list 'auto-mode-alist (quote("build*\\.log'" . compilation-mode)))

When I edit a file say 'build.log' it does not enable compilation mode.

I tried -

(add-to-list 'auto-mode-alist (quote("build*\\'" . compilation-mode)))

But that clashes with other files like a0build.h.

I've read the wiki page on auto-mode-alist, but none of the examples are
about how to use filename that starts with 'xyz*.log'.

Thanks,

Patrick


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Specifying a file in auto-mode-alist
  2021-04-23 20:25 Specifying a file in auto-mode-alist Patrick Mahan
@ 2021-04-23 20:42 ` Óscar Fuentes
  2021-04-23 21:42   ` Stefan Monnier
  2021-04-23 22:09   ` Patrick Mahan
  0 siblings, 2 replies; 6+ messages in thread
From: Óscar Fuentes @ 2021-04-23 20:42 UTC (permalink / raw)
  To: help-gnu-emacs

Patrick Mahan <plmahan@gmail.com> writes:

> All,
>
> I have build scripts that capture a build (makefile output) into files
> called build*.log or Build*.log. These files may occur at various points in
> the directory tree.
>
> However if I use the following:
>
> (add-to-list 'auto-mode-alist (quote("build*\\.log'" . compilation-mode)))
____________________________________________________^

> When I edit a file say 'build.log' it does not enable compilation mode.
>
> I tried -
>
> (add-to-list 'auto-mode-alist (quote("build*\\'" . compilation-mode)))
________________________________________________^

Why the ' ?

Try this regexp: "^[Bb]uild.*\\.log$"

That means: Starts with B or b followed by uild and then zero or more
arbitrary characters and ends with .log

(add-to-list 'auto-mode-alist '("^[Bb]uild.*\\.log$" . compilation-mode))




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Specifying a file in auto-mode-alist
  2021-04-23 20:42 ` Óscar Fuentes
@ 2021-04-23 21:42   ` Stefan Monnier
  2021-04-23 22:14     ` Patrick Mahan
  2021-04-23 22:09   ` Patrick Mahan
  1 sibling, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2021-04-23 21:42 UTC (permalink / raw)
  To: help-gnu-emacs

>> (add-to-list 'auto-mode-alist (quote("build*\\.log'" . compilation-mode)))
> ____________________________________________________^

Here you needed to replace ' with \\'

>> When I edit a file say 'build.log' it does not enable compilation mode.
>>
>> I tried -
>>
>> (add-to-list 'auto-mode-alist (quote("build*\\'" . compilation-mode)))
> ________________________________________________^
>

And here you just forgot the \\.log

> Why the ' ?
>
> Try this regexp: "^[Bb]uild.*\\.log$"

No, he was on the right path.

The correct regexp construct to match the end of a string is \' (which
inside a string ends up looking like \\' since the backslash needs to be
escaped), whereas the $ you're recommending matches both the end of
a string and an end of *line*, so it can mis-match with a file named
"build.log\nhello.svg".


        Stefan




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Specifying a file in auto-mode-alist
  2021-04-23 20:42 ` Óscar Fuentes
  2021-04-23 21:42   ` Stefan Monnier
@ 2021-04-23 22:09   ` Patrick Mahan
  2021-04-23 22:23     ` Stefan Monnier
  1 sibling, 1 reply; 6+ messages in thread
From: Patrick Mahan @ 2021-04-23 22:09 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: help-gnu-emacs

On Fri, Apr 23, 2021 at 1:51 PM Óscar Fuentes <ofv@wanadoo.es> wrote:

> Patrick Mahan <plmahan@gmail.com> writes:
>
> > All,
> >
> > I have build scripts that capture a build (makefile output) into files
> > called build*.log or Build*.log. These files may occur at various points
> in
> > the directory tree.
> >
> > However if I use the following:
> >
> > (add-to-list 'auto-mode-alist (quote("build*\\.log'" .
> compilation-mode)))
> ____________________________________________________^
>
> > When I edit a file say 'build.log' it does not enable compilation mode.
> >
> > I tried -
> >
> > (add-to-list 'auto-mode-alist (quote("build*\\'" . compilation-mode)))
> ________________________________________________^
>
> Why the ' ?
>
>
A lot of the examples in the wiki used them.  But I see I should have
prefaced it with \\'.


> Try this regexp: "^[Bb]uild.*\\.log$"
>
> That means: Starts with B or b followed by uild and then zero or more
> arbitrary characters and ends with .log
>
> (add-to-list 'auto-mode-alist '("^[Bb]uild.*\\.log$" . compilation-mode))
>
>
emacs ~/workspace/src/build.log
Nope, it shows up in Fundamental mode.

Neither does emacs ~/workspace/src/build202104191533.log

Is there a "verbose" mode for emacs?  Someway of seeing what is being
applied?

Thanks,

Patrick


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Specifying a file in auto-mode-alist
  2021-04-23 21:42   ` Stefan Monnier
@ 2021-04-23 22:14     ` Patrick Mahan
  0 siblings, 0 replies; 6+ messages in thread
From: Patrick Mahan @ 2021-04-23 22:14 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: help-gnu-emacs

On Fri, Apr 23, 2021 at 2:52 PM Stefan Monnier <monnier@iro.umontreal.ca>
wrote:

> >> (add-to-list 'auto-mode-alist (quote("build*\\.log'" .
> compilation-mode)))
> > ____________________________________________________^
>
> Here you needed to replace ' with \\'
>
> >> When I edit a file say 'build.log' it does not enable compilation mode.
> >>
> >> I tried -
> >>
> >> (add-to-list 'auto-mode-alist (quote("build*\\'" . compilation-mode)))
> > ________________________________________________^
> >
>
> And here you just forgot the \\.log
>
> > Why the ' ?
> >
> > Try this regexp: "^[Bb]uild.*\\.log$"
>
> No, he was on the right path.
>
> The correct regexp construct to match the end of a string is \' (which
> inside a string ends up looking like \\' since the backslash needs to be
> escaped), whereas the $ you're recommending matches both the end of
> a string and an end of *line*, so it can mis-match with a file named
> "build.log\nhello.svg".
>
>
Yes!  Success!  Thanks Stefan!  Changing it to escape the ' makes it work
now.

Patrick


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Specifying a file in auto-mode-alist
  2021-04-23 22:09   ` Patrick Mahan
@ 2021-04-23 22:23     ` Stefan Monnier
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2021-04-23 22:23 UTC (permalink / raw)
  To: help-gnu-emacs

>> (add-to-list 'auto-mode-alist '("^[Bb]uild.*\\.log$" . compilation-mode))
[...]
> emacs ~/workspace/src/build.log
> Nope, it shows up in Fundamental mode.

BTW, this is because of the `^` in his regexp: the regexps in
`auto-mode-alist` are matched against the full (absolute) file name, so
your regexp has to match ".../build.log" rather than just "build.log".


        Stefan




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-04-23 22:23 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-04-23 20:25 Specifying a file in auto-mode-alist Patrick Mahan
2021-04-23 20:42 ` Óscar Fuentes
2021-04-23 21:42   ` Stefan Monnier
2021-04-23 22:14     ` Patrick Mahan
2021-04-23 22:09   ` Patrick Mahan
2021-04-23 22:23     ` Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.