unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Some Emacs outside Emacs
@ 2022-07-28  6:33 Manuel Giraud
  2022-07-28  7:53 ` Eli Zaretskii
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Manuel Giraud @ 2022-07-28  6:33 UTC (permalink / raw)
  To: emacs-devel

Hi,

I'm trying to access some Emacs functions from lwlib.  So far, I'm able
to get the frame for a given menu but whenever I try to access into that
frame I get the following error from the compiler:

--8<---------------cut here---------------start------------->8---
xlwmenu.c:1175:11: error: incomplete definition of type 'struct Lisp_X'
            fs = FRAME_XIC_FONTSET (frame);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~
../src/xterm.h:1225:34: note: expanded from macro 'FRAME_XIC_FONTSET'
#define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs)
                              ~~~^
./../src/lisp.h:300:16: note: forward declaration of 'struct Lisp_X'
typedef struct Lisp_X *Lisp_Word;
               ^
--8<---------------cut here---------------end--------------->8---

AFAIU, "struct Lisp_X" is a non existent struct and we are just interest
in the pointer.  Is it a matter of a compiler option? Something else?

Best regards,
-- 
Manuel Giraud



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

* Re: Some Emacs outside Emacs
  2022-07-28  6:33 Some Emacs outside Emacs Manuel Giraud
@ 2022-07-28  7:53 ` Eli Zaretskii
  2022-07-28  7:55 ` Andreas Schwab
  2022-07-28  8:39 ` Po Lu
  2 siblings, 0 replies; 6+ messages in thread
From: Eli Zaretskii @ 2022-07-28  7:53 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: emacs-devel

> From: Manuel Giraud <manuel@ledu-giraud.fr>
> Date: Thu, 28 Jul 2022 08:33:01 +0200
> 
> I'm trying to access some Emacs functions from lwlib.  So far, I'm able
> to get the frame for a given menu but whenever I try to access into that
> frame I get the following error from the compiler:
> 
> --8<---------------cut here---------------start------------->8---
> xlwmenu.c:1175:11: error: incomplete definition of type 'struct Lisp_X'
>             fs = FRAME_XIC_FONTSET (frame);
>                  ^~~~~~~~~~~~~~~~~~~~~~~~~
> ../src/xterm.h:1225:34: note: expanded from macro 'FRAME_XIC_FONTSET'
> #define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs)
>                               ~~~^
> ./../src/lisp.h:300:16: note: forward declaration of 'struct Lisp_X'
> typedef struct Lisp_X *Lisp_Word;
>                ^
> --8<---------------cut here---------------end--------------->8---
> 
> AFAIU, "struct Lisp_X" is a non existent struct and we are just interest
> in the pointer.  Is it a matter of a compiler option? Something else?

What is 'frame' in your code? how was it defined?  There's no such
variable in the current code of xlwmenu.c, so I cannot know what you
did.

To use FRAME_XIC_FONTSET, its argument must be a pointer to
'struct frame'.



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

* Re: Some Emacs outside Emacs
  2022-07-28  6:33 Some Emacs outside Emacs Manuel Giraud
  2022-07-28  7:53 ` Eli Zaretskii
@ 2022-07-28  7:55 ` Andreas Schwab
  2022-07-28  8:43   ` Manuel Giraud
  2022-07-28  8:39 ` Po Lu
  2 siblings, 1 reply; 6+ messages in thread
From: Andreas Schwab @ 2022-07-28  7:55 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: emacs-devel

On Jul 28 2022, Manuel Giraud wrote:

> I'm trying to access some Emacs functions from lwlib.  So far, I'm able
> to get the frame for a given menu but whenever I try to access into that
> frame I get the following error from the compiler:
>
> xlwmenu.c:1175:11: error: incomplete definition of type 'struct Lisp_X'
>             fs = FRAME_XIC_FONTSET (frame);
>                  ^~~~~~~~~~~~~~~~~~~~~~~~~

You need to untag the Lisp_Object value first to get the proper pointer.
FRAME_XIC_FONTSET is only applicable to a struct frame, which is what
XFRAME returns.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."



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

* Re: Some Emacs outside Emacs
  2022-07-28  6:33 Some Emacs outside Emacs Manuel Giraud
  2022-07-28  7:53 ` Eli Zaretskii
  2022-07-28  7:55 ` Andreas Schwab
@ 2022-07-28  8:39 ` Po Lu
  2 siblings, 0 replies; 6+ messages in thread
From: Po Lu @ 2022-07-28  8:39 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: emacs-devel

Manuel Giraud <manuel@ledu-giraud.fr> writes:

> Hi,
>
> I'm trying to access some Emacs functions from lwlib.  So far, I'm able
> to get the frame for a given menu but whenever I try to access into that
> frame I get the following error from the compiler:
>
> xlwmenu.c:1175:11: error: incomplete definition of type 'struct Lisp_X'
>             fs = FRAME_XIC_FONTSET (frame);
>                  ^~~~~~~~~~~~~~~~~~~~~~~~~
> ../src/xterm.h:1225:34: note: expanded from macro 'FRAME_XIC_FONTSET'
> #define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs)
>                               ~~~^
> ./../src/lisp.h:300:16: note: forward declaration of 'struct Lisp_X'
> typedef struct Lisp_X *Lisp_Word;
>                ^
>
> AFAIU, "struct Lisp_X" is a non existent struct and we are just interest
> in the pointer.  Is it a matter of a compiler option? Something else?
>
> Best regards,

You have to untag frame with XFRAME.

BTW, FRAME_XIC_FONTSET is probably not what you want.  It's only used by
the input method under some preedit styles.



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

* Re: Some Emacs outside Emacs
  2022-07-28  7:55 ` Andreas Schwab
@ 2022-07-28  8:43   ` Manuel Giraud
  2022-07-29 14:37     ` Stefan Monnier
  0 siblings, 1 reply; 6+ messages in thread
From: Manuel Giraud @ 2022-07-28  8:43 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> On Jul 28 2022, Manuel Giraud wrote:
>
>> I'm trying to access some Emacs functions from lwlib.  So far, I'm able
>> to get the frame for a given menu but whenever I try to access into that
>> frame I get the following error from the compiler:
>>
>> xlwmenu.c:1175:11: error: incomplete definition of type 'struct Lisp_X'
>>             fs = FRAME_XIC_FONTSET (frame);
>>                  ^~~~~~~~~~~~~~~~~~~~~~~~~
>
> You need to untag the Lisp_Object value first to get the proper pointer.
> FRAME_XIC_FONTSET is only applicable to a struct frame, which is what
> XFRAME returns.


Thanks, that was it.  FTR here is what I'm doing:

--8<---------------cut here---------------start------------->8---
  Lisp_Object frame;
  XFontSet fs;
 
  frame = menu_bar_to_frame(mw);
  if (FRAMEP (frame))
    fs = FRAME_XIC_FONTSET (XFRAME (frame));
--8<---------------cut here---------------end--------------->8---
-- 
Manuel Giraud



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

* Re: Some Emacs outside Emacs
  2022-07-28  8:43   ` Manuel Giraud
@ 2022-07-29 14:37     ` Stefan Monnier
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2022-07-29 14:37 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: Andreas Schwab, emacs-devel

> --8<---------------cut here---------------start------------->8---
>   Lisp_Object frame;
>   XFontSet fs;
>  
>   frame = menu_bar_to_frame(mw);
>   if (FRAMEP (frame))
>     fs = FRAME_XIC_FONTSET (XFRAME (frame));
> --8<---------------cut here---------------end--------------->8---

Style comment: I recommend you try to initialize your variables directly
in their declaration, as in:

    
   
    Lisp_Object frame = menu_bar_to_frame(mw);
    XFontSet fs = (FRAMEP (frame)
                   ? FRAME_XIC_FONTSET (XFRAME (frame))
                   : ...);

This eliminates the possibility of having the variable be uninitialized,
and reduces the "risk" of leaving a unused variable declaration.
It also often results in more concise code.


        Stefan




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

end of thread, other threads:[~2022-07-29 14:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-28  6:33 Some Emacs outside Emacs Manuel Giraud
2022-07-28  7:53 ` Eli Zaretskii
2022-07-28  7:55 ` Andreas Schwab
2022-07-28  8:43   ` Manuel Giraud
2022-07-29 14:37     ` Stefan Monnier
2022-07-28  8:39 ` Po Lu

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).