unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#21507: 25.0.50: (global-SOME-MINOR-MODE) not affecting fundamental mode buffers
@ 2015-09-17 16:15 Kaushal Modi
  2020-12-28  0:28 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 5+ messages in thread
From: Kaushal Modi @ 2015-09-17 16:15 UTC (permalink / raw)
  To: 21507

[-- Attachment #1: Type: text/plain, Size: 2121 bytes --]

Hi,

I recently was debugging an issue with my globalized minor mode and auto
generated Fundamental mode buffers created by different pacakages. I
brought up that problem over at emacs.SE:
http://emacs.stackexchange.com/q/16693/115

The below code summarizes what I learnt. The code can be eval'ed in an
emacs -Q session to recreate the issue I am seeing.

Please review the below code, eval and run it and proceed with my
explanation after the code.

;; my1-mode - init value nil - enabled using its global variant
(define-minor-mode my1-mode
  :init-value nil
  :lighter " my1")
(defun turn-on-my1-mode () (my1-mode 1))
(define-globalized-minor-mode global-my1-mode my1-mode turn-on-my1-mode)
(global-my1-mode)

;; my2-mode - init value nil - enabled using setq-default
(define-minor-mode my2-mode
  :init-value nil
  :lighter " my2")
(defun turn-on-my2-mode () (my2-mode 1))
(define-globalized-minor-mode global-my2-mode my2-mode turn-on-my2-mode)
(setq-default my2-mode t)

;; my3-mode - init value t (so enabled by default)
(define-minor-mode my3-mode
  :init-value t
  :lighter " my3")

;; Now call `get-buffer-create' that creates a buffer with Fundamental
major mode
(with-current-buffer (get-buffer-create "*temp*")
  (insert "Hello"))
(split-window-right)
(switch-to-buffer "*temp*")


---

My minor mode is of the type my1-mode above where the init value is nil but
I enable it in my config using (global-my1-mode).

The global enabling of my1-mode is seen everywhere, all the newly created
buffers except for the cases where a package would create some sort of temp
buffer using `get-buffer-create'. Such buffers would be in Fundamental mode
by default and I noticed that the (global-my1-mode) had no effect on those
buffers.

If I tweak my minor mode to be of my2-mode (change the init value to t)or
my3-mode (force the init value to t using setq-default) types above, then
my minor mode gets enabled globally in true sense (even in buffers created
using get-create-buffer).

In essence, setting the init value as t is not the same as enabling a
globalized minor mode.

Is this by design?



--
Kaushal Modi

[-- Attachment #2: Type: text/html, Size: 7063 bytes --]

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

* bug#21507: 25.0.50: (global-SOME-MINOR-MODE) not affecting fundamental mode buffers
  2015-09-17 16:15 bug#21507: 25.0.50: (global-SOME-MINOR-MODE) not affecting fundamental mode buffers Kaushal Modi
@ 2020-12-28  0:28 ` Lars Ingebrigtsen
  2021-05-26 22:33   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 5+ messages in thread
From: Lars Ingebrigtsen @ 2020-12-28  0:28 UTC (permalink / raw)
  To: Kaushal Modi; +Cc: 21507

Kaushal Modi <kaushal.modi@gmail.com> writes:

> Please review the below code, eval and run it and proceed with my explanation
> after the code.

It had to be adjusted a bit:

;; my1-mode - init value nil - enabled using its global variant
(define-minor-mode my1-mode
  ""
  :init-value nil
  :lighter " my1")
(defun turn-on-my1-mode () (my1-mode 1))
(define-globalized-minor-mode global-my1-mode my1-mode turn-on-my1-mode)
(global-my1-mode)

;; my2-mode - init value nil - enabled using setq-default
(define-minor-mode my2-mode
  ""
  :init-value nil
  :lighter " my2")
(defun turn-on-my2-mode () (my2-mode 1))
(define-globalized-minor-mode global-my2-mode my2-mode turn-on-my2-mode)
(setq-default my2-mode t)

;; my3-mode - init value t (so enabled by default)
(define-minor-mode my3-mode
  ""
  :init-value t
  :lighter " my3")

> My minor mode is of the type my1-mode above where the init value is
> nil but I enable it in my config using (global-my1-mode).
>
> The global enabling of my1-mode is seen everywhere, all the newly
> created buffers except for the cases where a package would create some
> sort of temp buffer using `get-buffer-create'. Such buffers would be
> in Fundamental mode by default and I noticed that the
> (global-my1-mode) had no effect on those buffers.

I'm still seeing this behaviour in Emacs 28.

> If I tweak my minor mode to be of my2-mode (change the init value to
> t)or my3-mode (force the init value to t using setq-default) types
> above, then my minor mode gets enabled globally in true sense (even in
> buffers created using get-create-buffer).
>
> In essence, setting the init value as t is not the same as enabling a
> globalized minor mode.
>
> Is this by design? 

Anybody know?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

* bug#21507: 25.0.50: (global-SOME-MINOR-MODE) not affecting fundamental mode buffers
  2020-12-28  0:28 ` Lars Ingebrigtsen
@ 2021-05-26 22:33   ` Lars Ingebrigtsen
  2021-05-26 22:41     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 5+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-26 22:33 UTC (permalink / raw)
  To: Kaushal Modi; +Cc: 21507, Stefan Monnier

Lars Ingebrigtsen <larsi@gnus.org> writes:

>> If I tweak my minor mode to be of my2-mode (change the init value to
>> t)or my3-mode (force the init value to t using setq-default) types
>> above, then my minor mode gets enabled globally in true sense (even in
>> buffers created using get-create-buffer).
>>
>> In essence, setting the init value as t is not the same as enabling a
>> globalized minor mode.
>>
>> Is this by design? 
>
> Anybody know?

Perhaps Stefan does; added to the CCs.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

* bug#21507: 25.0.50: (global-SOME-MINOR-MODE) not affecting fundamental mode buffers
  2021-05-26 22:33   ` Lars Ingebrigtsen
@ 2021-05-26 22:41     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-05-27 23:37       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-05-26 22:41 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 21507, Drew Adams, Kaushal Modi

Lars Ingebrigtsen [2021-05-27 00:33:10] wrote:
> Lars Ingebrigtsen <larsi@gnus.org> writes:
>>> If I tweak my minor mode to be of my2-mode (change the init value to
>>> t)or my3-mode (force the init value to t using setq-default) types
>>> above, then my minor mode gets enabled globally in true sense (even in
>>> buffers created using get-create-buffer).
>>>
>>> In essence, setting the init value as t is not the same as enabling a
>>> globalized minor mode.
>>>
>>> Is this by design? 
>> Anybody know?
> Perhaps Stefan does; added to the CCs.

Maybe I misunderstand the question, but a minor mode is defined by
a function that can used to turn it ON/OFF and a variable that lets you
know where it's ON or OFF.

Setting the var directly rather than via the minor mode function just
breaks the abstraction and its behavior is thus "defined by
implementation" and subject to change.

Similarly `:init-value` is used to tell Emacs what is the initial state,
rather than to set this initial state.


        Stefan






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

* bug#21507: 25.0.50: (global-SOME-MINOR-MODE) not affecting fundamental mode buffers
  2021-05-26 22:41     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-05-27 23:37       ` Lars Ingebrigtsen
  0 siblings, 0 replies; 5+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-27 23:37 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 21507, Kaushal Modi

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Setting the var directly rather than via the minor mode function just
> breaks the abstraction and its behavior is thus "defined by
> implementation" and subject to change.

Yes, indeed.  So this is working as it should, and I'm closing this bug
report.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

end of thread, other threads:[~2021-05-27 23:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-17 16:15 bug#21507: 25.0.50: (global-SOME-MINOR-MODE) not affecting fundamental mode buffers Kaushal Modi
2020-12-28  0:28 ` Lars Ingebrigtsen
2021-05-26 22:33   ` Lars Ingebrigtsen
2021-05-26 22:41     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-27 23:37       ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).