all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Local variables and mode hooks
@ 2015-07-18 11:32 Lele Gaifax
  2015-07-18 14:37 ` Ian Zimmerman
  0 siblings, 1 reply; 3+ messages in thread
From: Lele Gaifax @ 2015-07-18 11:32 UTC (permalink / raw)
  To: help-gnu-emacs

Hi all,

I'm trying to understand how can workaround a problem I'm facing when using
"local variables" I set in a `.dir-locals.el` file.

The problem is that the values are apparently assigned *after* the mode's hook
is run, so they are either "ignored" when I visit the source file, or
"considered" only when I actually modify it.

Let me try to explain.

In my Python sources, using Emacs python.el mode python-mode-hook, I usually
enable both `whitespace-mode` to highlight lines longer than `fill-column` (I
set `whitespace-line-column` to nil) and `flymake-python-pyflakes-load` to
check their syntax with pyflakes.

In a particular project I'm using Python 3, and I want to have a different
`fill-column` to make my coworkers happy, so I created a top level
`.dir-locals.el` file containing

  ((nil . ((fill-column . 75)))
   (python-mode . ((flymake-python-pyflakes-executable . "python3")
                   (flymake-python-pyflakes-extra-arguments . ("-m" "pyflakes")))))

When I visit/create a Python source, its local settings are changed
accordingly, but

a) whitespace highlights lines longer than the *global* value of
   `fill-column`, not its local setting

b) flymake shows syntax errors, because the "initial run" of pyflakes has been
   done with the standard settings, i.e. with its Python 2 variant

To make effect a) disappear I must execute M-: (whitespace-color-on), so it
"reinstall" its font-lock customization, while effect b) goes away as soon as
I change the buffer, triggering a new execution of pyflakes.

Is there some hook that I can use that runs *after* the major mode hooks *and*
the local variables settings got applied, so that I can force whitespace
refresh and trigger a flymake check?

Thanks in advance for any hint,
ciao, lele.
-- 
nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri
real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia.
lele@metapensiero.it  |                 -- Fortunato Depero, 1929.




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

* Re: Local variables and mode hooks
  2015-07-18 11:32 Local variables and mode hooks Lele Gaifax
@ 2015-07-18 14:37 ` Ian Zimmerman
  2015-07-28 18:49   ` Lele Gaifax
  0 siblings, 1 reply; 3+ messages in thread
From: Ian Zimmerman @ 2015-07-18 14:37 UTC (permalink / raw)
  To: help-gnu-emacs

On 2015-07-18 13:32 +0200, Lele Gaifax wrote:

> Is there some hook that I can use that runs *after* the major mode
> hooks *and* the local variables settings got applied, so that I can
> force whitespace refresh and trigger a flymake check?

I have never done this, but according to the manual the special file
variable `eval' causes the evaluation of an arbitrary Lisp expression.
Presumably the same is true for directory variable lists.

Another way may be defining your own specialized mode on top of Python
mode (it is very easy with define-derived-mode).  Your mode will set the
variables and cause any necessary refresh.  Then use auto-mode-alist to
force using your mode just for the particular directory.

-- 
Please *no* private copies of mailing list or newsgroup messages.
Rule 420: All persons more than eight miles high to leave the court.




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

* Re: Local variables and mode hooks
  2015-07-18 14:37 ` Ian Zimmerman
@ 2015-07-28 18:49   ` Lele Gaifax
  0 siblings, 0 replies; 3+ messages in thread
From: Lele Gaifax @ 2015-07-28 18:49 UTC (permalink / raw)
  To: help-gnu-emacs

Ian Zimmerman <itz@buug.org> writes:

> On 2015-07-18 13:32 +0200, Lele Gaifax wrote:
>
>> Is there some hook that I can use that runs *after* the major mode
>> hooks *and* the local variables settings got applied, so that I can
>> force whitespace refresh and trigger a flymake check?
>
> I have never done this, but according to the manual the special file
> variable `eval' causes the evaluation of an arbitrary Lisp expression.
> Presumably the same is true for directory variable lists.

Yes, thank you, that made the trick:

  ((nil . ((fill-column . 70)
           ;; force reinstall of whitespace font-lock customization
           (eval . (whitespace-color-on))))
   (python-mode . ((flymake-python-pyflakes-executable . "python3")
                   (flymake-python-pyflakes-extra-arguments . ("-m" "pyflakes"))
                   ;; force a check after a timeout
                   (eval . (flymake-simple-cleanup)))))

ciao, lele.
-- 
nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri
real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia.
lele@metapensiero.it  |                 -- Fortunato Depero, 1929.




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

end of thread, other threads:[~2015-07-28 18:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-18 11:32 Local variables and mode hooks Lele Gaifax
2015-07-18 14:37 ` Ian Zimmerman
2015-07-28 18:49   ` Lele Gaifax

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.