in reply to Writing Perl with Emacs: Are there perl-mode users around?

I started using Perl in 2011. At the time, all the books I read recommended cperl-mode over perl-mode, I just used it without questioning this fact since then. On the color-side, I like to have e.g. new class feature, or Moose syntax colored lightly (noticed today I missed Moose highlighting in a Docker container and was a bit sad about it). A long time ago, I remember cperl had a weird color-highlighting for @arrays and %hashes (with a not-so-necessary background color), but it seems to have disappeared (or maybe I customized it, not sure). Otherwise, same thing as choroba!

🌸

Replies are listed 'Best First'.
Re^2: Writing Perl with Emacs: Are there perl-mode users around?
by LanX (Saint) on Sep 27, 2023 at 16:45 UTC
    > weird color-highlighting for @arrays and %hashes

    Some background:

    The "faces" (emacs lingo for text style) for arrays and hashes are specific to cperl-mode, while all other faces are standard (c-mode has no need for sigils)

    This means if you load-theme another "theme" (the default is commonly known as "fruit salad") standards like font-lock-constant-face are covered, while cperl-array-face is often forgotten and still looks weird.

    I think I customized cperl-hash-face etc at some point to be derived from standard faces like font-lock-variable-name-face

    But recently I got bitten again when giving a talk, where reveal.js was taking the highlighting of code from emacs and arrays looked "weird" again.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    see Wikisyntax for the Monastery

      The "special" faces in cperl-mode are one of the things which seem to annoy perl-mode users. I didn't expect many of them here, in a Perl-only forum, but they contribute to the discussion in the Emacs lists. Some of the themes which ship with Emacs (e.g. the Modus themes by Protesilaos Stavrou) map these faces to standard faces, which makes them look "nice" in light and dark mode, but they are somewhat ... inconsistent. And none of the themes takes cperl-nonoverridable-face into consideration.

      As a part of the merge of Perl modes, the faces might undergo some refactoring anyway: cperl-hash-face and cperl-array-face will probably indeed end up as inheriting from font-lock-variable-name-face with some extra decoration (perl-mode uses underline for both hashes and arrays, I'd like to keep them distinguishable). The comments by LanX and Smonff suggest that I can get away with that. :-) cperl-nonoverridable-face will inherit from whatever is used for overridable builtins (font-lock-builtin-face comes into mind).

      Some "standard" faces are not (yet) used by cperl-mode, and Emacs 29.1 brings more standard faces which make sense for cperl-mode.

      All that will take some time, though.

        By the way, I suggested your post on blogs.perl.org as a Perl Weekly Newsletter entry, so it will bring some more people into the discussion loop, hopefully.

        🌸