* Issue with hide-ifdef and cc-mode [not found] <20210530070822.h57mmtpp2n7dvpbf.ref@Ergus> @ 2021-05-30 7:08 ` Ergus 2021-05-30 11:01 ` Daniel Martín 0 siblings, 1 reply; 8+ messages in thread From: Ergus @ 2021-05-30 7:08 UTC (permalink / raw) To: emacs-devel Hi: I sent this message to the emacs-help mailing list some days ago and I didn't receive any reply. So I'm resubmitting this here: I am trying to use hide-ifdef to shadow code like: #if 0 <code> #endif But I found that either #if 0 or #if 1 produces the same result disabling the code inside. Some slightly more complex examples like: #define var 1 #ifdef var doesn't work either (of course). And when I try hif-evaluate-macro it says things like: false <= ‘#if 1’ or 1 is not defined... Unless the documentation says this function is capable to understand some more complex constructions like ||, && and arithmetic I only want to disable some code with #if 0 and enable it with #if 1... so my use case is probably the simplest one. Do we have anything smarter in emacs to shows #if 0 codes? Or is there any extra customization I am missing or is there any issue in the package itself? any idea? Also when I remove the #if macros from around the code the shadow face sometimes persist. I would expect such a functionality to be implemented with fontlock or so, but form an old thread in this mailing list I see that such a thing is not recommended. But this package is not very documented in the manual either so I am not sure If I am missing something. Right now I have only these options: ``` (setq-default hide-ifdef-shadow t hide-ifdef-initially t) ``` Any help than? Should I submit a bug? Thanks in advance, Ergus ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Issue with hide-ifdef and cc-mode 2021-05-30 7:08 ` Issue with hide-ifdef and cc-mode Ergus @ 2021-05-30 11:01 ` Daniel Martín 2021-05-30 18:14 ` Ergus 0 siblings, 1 reply; 8+ messages in thread From: Daniel Martín @ 2021-05-30 11:01 UTC (permalink / raw) To: Ergus; +Cc: emacs-devel Ergus <spacibba@aol.com> writes: > > I am trying to use hide-ifdef to shadow code like: > > #if 0 > <code> > #endif > > But I found that either > > #if 0 > > or > #if 1 > > produces the same result disabling the code inside. > I tested the following from emacs -Q in Emacs 28: New C buffer with #if 0 int i = 0; #endif M-x hide-ifdef-mode M-x hide-ifdef-toggle-shadowing M-x hide-ifdefs And the variable definition is shown with a comment font-lock face, as expected. If I change it to "#if 1" and M-x hide-ifdefs again, the comment font-lock face is removed, as expected. Perhaps some Emacs customization is getting in the way? For something more complex than a #if 0, you probably need to ask the C preprocessor or build system for the defined variables and configure hide-ifdef-mode accordingly. > > Also when I remove the #if macros from around the code the shadow face > sometimes persist. > This could be a bug. If you have some consistent steps to reproduce it, you could report it via M-x report-emacs-bug. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Issue with hide-ifdef and cc-mode 2021-05-30 11:01 ` Daniel Martín @ 2021-05-30 18:14 ` Ergus 2021-05-30 18:53 ` Eli Zaretskii 2021-05-30 19:42 ` Stefan Monnier 0 siblings, 2 replies; 8+ messages in thread From: Ergus @ 2021-05-30 18:14 UTC (permalink / raw) To: Daniel Martín; +Cc: emacs-devel, Alan Mackenzie On Sun, May 30, 2021 at 01:01:36PM +0200, Daniel Mart�n wrote: >Ergus <spacibba@aol.com> writes: > >> >> I am trying to use hide-ifdef to shadow code like: >> >> #if 0 >> <code> >> #endif >> >> But I found that either >> >> #if 0 >> >> or >> #if 1 >> >> produces the same result disabling the code inside. >> > >I tested the following from emacs -Q in Emacs 28: > >New C buffer with > >#if 0 >int i = 0; >#endif > >M-x hide-ifdef-mode >M-x hide-ifdef-toggle-shadowing >M-x hide-ifdefs > >And the variable definition is shown with a comment font-lock face, as >expected. > >If I change it to "#if 1" and M-x hide-ifdefs again, the comment >font-lock face is removed, as expected. Perhaps some Emacs >customization is getting in the way? > >For something more complex than a #if 0, you probably need to ask the C >preprocessor or build system for the defined variables and configure >hide-ifdef-mode accordingly. > Hi Daniel: Thanks for the reply. It looks like I didn't understand the documentation properly. (It is only a few lines) I didn't know I need to manually call hide-ifdefs every time I change the preprocessor argument. Because none of this is documented in the manual. But also calling that makes the functionality pretty sub-optimal. It is bad that this functionality works fine out of the box either in vim and in VS Code and other editors but not in emacs without user explicit intervention. So I am not sure how difficult may be to do it automatic without killing the performance... Like font-lock does with everything else... Soes it really kills performance to add his to font-lock? I hope probably Alan may have an idea about how to solve this in a more cc-mode way... Without forcing the user to interactively call hide-ifdefs. We do something similar with /* */ multi-line comments... I can't understand why this may be so different for if 0 macros... But I may be wrong. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Issue with hide-ifdef and cc-mode 2021-05-30 18:14 ` Ergus @ 2021-05-30 18:53 ` Eli Zaretskii 2021-05-30 19:27 ` Ergus 2021-05-30 19:42 ` Stefan Monnier 1 sibling, 1 reply; 8+ messages in thread From: Eli Zaretskii @ 2021-05-30 18:53 UTC (permalink / raw) To: Ergus; +Cc: acm, emacs-devel, mardani29 > Date: Sun, 30 May 2021 20:14:11 +0200 > From: Ergus <spacibba@aol.com> > Cc: emacs-devel@gnu.org, Alan Mackenzie <acm@muc.de> > > I didn't know I need to manually call hide-ifdefs every time I change > the preprocessor argument. Because none of this is documented in the > manual. But also calling that makes the functionality pretty > sub-optimal. Please be sure to read the commentary at the beginning of hideif.el, it explains quite a lot. > It is bad that this functionality works fine out of the box either in > vim and in VS Code and other editors but not in emacs without user > explicit intervention. ??? How can Emacs know which preprocessor symbols are defined and which undefined? You have "C-c @ d" and "C-c @ u" to tell Emacs which symbols are defined and which undefined. > So I am not sure how difficult may be to do it automatic without killing > the performance... Like font-lock does with everything else... Soes it > really kills performance to add his to font-lock? I'm not sure I understand: what do you need to automate? Once you turn on hiding, the display automatically changes as you define and undefine preprocessor symbols. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Issue with hide-ifdef and cc-mode 2021-05-30 18:53 ` Eli Zaretskii @ 2021-05-30 19:27 ` Ergus 2021-05-31 11:56 ` Eli Zaretskii 0 siblings, 1 reply; 8+ messages in thread From: Ergus @ 2021-05-30 19:27 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mardani29, emacs-devel, acm Hi Eli: On Sun, May 30, 2021 at 09:53:15PM +0300, Eli Zaretskii wrote: >> Date: Sun, 30 May 2021 20:14:11 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: emacs-devel@gnu.org, Alan Mackenzie <acm@muc.de> >> >> I didn't know I need to manually call hide-ifdefs every time I change >> the preprocessor argument. Because none of this is documented in the >> manual. But also calling that makes the functionality pretty >> sub-optimal. > >Please be sure to read the commentary at the beginning of hideif.el, >it explains quite a lot. > >> It is bad that this functionality works fine out of the box either in >> vim and in VS Code and other editors but not in emacs without user >> explicit intervention. > >??? How can Emacs know which preprocessor symbols are defined and >which undefined? You have "C-c @ d" and "C-c @ u" to tell Emacs which >symbols are defined and which undefined. > This part is fine for me. In my use case using 0 or 1 should be defined as numeric values right? so I don't need to define anything. For more complex cases I understand these commands are very useful; but not in this simple case. >> So I am not sure how difficult may be to do it automatic without killing >> the performance... Like font-lock does with everything else... Soes it >> really kills performance to add his to font-lock? > >I'm not sure I understand: what do you need to automate? Once you >turn on hiding, the display automatically changes as you define and >undefine preprocessor symbols. I mean: #if 0 <CODE> #endif M-x hide-ifdef-mode M-x hide-ifdef-toggle-shadowing does not shadows the region. I need to explicitly call M-x hide-ifdefs But also If I change after that #if 0 -> #if 1; the shadow does not disappears inmediately. So I need to call: M-x hide-ifdefs again. This is the part that I think may be automatized. Calling hide-ifdefs every time is annoying. Emacs is smart enough to recognize when the user modifies a cpp-macro. And multi-line code highlight is simple like /* */ does... What I am missing here? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Issue with hide-ifdef and cc-mode 2021-05-30 19:27 ` Ergus @ 2021-05-31 11:56 ` Eli Zaretskii 0 siblings, 0 replies; 8+ messages in thread From: Eli Zaretskii @ 2021-05-31 11:56 UTC (permalink / raw) To: Ergus; +Cc: acm, emacs-devel, mardani29 > Date: Sun, 30 May 2021 21:27:39 +0200 > From: Ergus <spacibba@aol.com> > Cc: mardani29@yahoo.es, emacs-devel@gnu.org, acm@muc.de > > I mean: > > #if 0 > <CODE> > #endif > > M-x hide-ifdef-mode > M-x hide-ifdef-toggle-shadowing > > does not shadows the region. > > I need to explicitly call > M-x hide-ifdefs If you want hide-ifdef-mode automatically hide the "#if 0" blocks when you turn it on, set hide-ifdef-initially non-nil. This is in the commentary in hideif.el > If I change after that #if 0 -> #if 1; the shadow does not disappears > inmediately. So I need to call: M-x hide-ifdefs again. If you want this to happen automatically, it could be provided as an optional feature, but we should decide what should trigger that. I'm not sure using JIT font-lock for this is a good idea, because it would mean blocks will appear and disappear as you type the preprocessor instructions, until you actually finish them. > This is the part that I think may be automatized. Calling hide-ifdefs > every time is annoying. Even if you bind that to some key like F7? > Emacs is smart enough to recognize when the user modifies a > cpp-macro. And multi-line code highlight is simple like /* */ does... I'm not sure we really want the annoyance that dynamic comment fontification causes, especially since in this case entire blocks of code will appear and disappear, rather than just be painted in a different color. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Issue with hide-ifdef and cc-mode 2021-05-30 18:14 ` Ergus 2021-05-30 18:53 ` Eli Zaretskii @ 2021-05-30 19:42 ` Stefan Monnier 2021-05-30 20:26 ` Ergus 1 sibling, 1 reply; 8+ messages in thread From: Stefan Monnier @ 2021-05-30 19:42 UTC (permalink / raw) To: Ergus; +Cc: Daniel Martín, emacs-devel, Alan Mackenzie > I didn't know I need to manually call hide-ifdefs every time I change > the preprocessor argument. Because none of this is documented in the > manual. But also calling that makes the functionality pretty > sub-optimal. `hide-ifdef` has not be given much love in a long time, so yes its featureset is a bit outdated. It'd probably not be too hard to hook hide-ifdef into font-lock. Patches welcome. In the mean time, you may want to `M-x report-emacs-bug` and request it as a new feature. Stefan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Issue with hide-ifdef and cc-mode 2021-05-30 19:42 ` Stefan Monnier @ 2021-05-30 20:26 ` Ergus 0 siblings, 0 replies; 8+ messages in thread From: Ergus @ 2021-05-30 20:26 UTC (permalink / raw) To: Stefan Monnier; +Cc: Daniel Martín, emacs-devel, Alan Mackenzie On Sun, May 30, 2021 at 03:42:39PM -0400, Stefan Monnier wrote: >In the mean time, you may want >to `M-x report-emacs-bug` and request it as a new feature. > > > Stefan > Done, Thanks. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-05-31 11:56 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20210530070822.h57mmtpp2n7dvpbf.ref@Ergus> 2021-05-30 7:08 ` Issue with hide-ifdef and cc-mode Ergus 2021-05-30 11:01 ` Daniel Martín 2021-05-30 18:14 ` Ergus 2021-05-30 18:53 ` Eli Zaretskii 2021-05-30 19:27 ` Ergus 2021-05-31 11:56 ` Eli Zaretskii 2021-05-30 19:42 ` Stefan Monnier 2021-05-30 20:26 ` Ergus
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).