help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Doing things only in a particular mode


From: Colin Yates
Subject: Re: Doing things only in a particular mode
Date: Mon, 24 Aug 2015 18:30:34 +0100

Many thanks, this was exactly the type of info I was looking for. The
name of the hook was valuable but advice on how to find the name was
ever more appreciated.

Thanks Joost!

Joost Kremers writes:

> Colin Yates wrote:
>> (newbie warning).
>>
>> So I understand about (add-hook...) but I can't find the hook I
>> want. Basically, I have visual-line-mode turned on globally, but I want
>> to disable it when I view the headers in mu4e.
>>
>> The buffer is called *mu4e-headers* and I can see the major mode is
>> mu4e-headers but the following code has no effect:
>>
>> (add-hook 'mu4e-headers-hook
>>   (lambda ()
>>     (visual-line-mode 0)))
>
> Well, the hook is actually called `mu4e-headers-mode-hook`, so if you
> use that, it should work.
>
> To check if a variable exists, or find one if you have some idea what it
> might be called, you can use `C-h v`, type the name and hit RET. TAB
> completion works, so typing e.g., `C-h v mu4e-headers-hook TAB` would
> have found the right variable for you.
>
> BTW, the general advice is to not use lambdas in hook variables, just
> function names. You might not really care, but if you want to be
> pedantically correct about things, you could write:
>
> (defun my-mu4e-headers-function ()  ; use whatever name you see fit
>   (visual-line-mode -1))
> (add-hook 'my-mu4e-headers-function)
>
> Note that I use `-1` as the argument to `visual-line-mode`. IIRC an
> argument of 0 would actually activate the mode.
>
>> I am not sure how 'hooks' are created - I searched through the source
>> code for my4e-headers-hook but couldn't find it.
>
> They are created automatically when you create a major or minor mode
> with `define-derived-mode` or `define-minor-mode`, so that's why you
> couldn't find it by grepping the source.
>
>> Assuming this is the right approach, how can I say 'when the major mode
>> is X then do this'. What is the idiomatic Emacs way?
>
> Well, one can argue about the meaning of "idiomatic", but here's how one
> could do it:
>
> (when (eq major-mode 'mu4e-headers-mode)
>   (do this)
>   (and that))
>
> Note, however, that in a mode major hook, there's no need to use this,
> because if the mode were anything else, the hook wouldn't be run. It
> could be useful in an Elisp program or in a (function called in a) minor
> mode hook, though.
>
> HTH

-- 
Sent with my mu4e



reply via email to

[Prev in Thread] Current Thread [Next in Thread]