From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: How to walk a Lisp_String? Date: Fri, 02 Sep 2022 09:43:28 +0300 Message-ID: <838rn2qnsf.fsf@gnu.org> References: <87a67jw1kw.fsf@elite.giraud> <83o7vzqey8.fsf@gnu.org> <83mtbjqemd.fsf@gnu.org> <87ler2963r.fsf@elite.giraud> Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="32895"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Manuel Giraud Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Sep 02 09:24:21 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oU12K-0008Ql-Ou for ged-emacs-devel@m.gmane-mx.org; Fri, 02 Sep 2022 09:24:20 +0200 Original-Received: from localhost ([::1]:59088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oU12J-0003l6-N5 for ged-emacs-devel@m.gmane-mx.org; Fri, 02 Sep 2022 03:24:19 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:37988) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oU0OL-00088O-Ur for emacs-devel@gnu.org; Fri, 02 Sep 2022 02:43:05 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:38732) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oU0OJ-0004z6-Qj; Fri, 02 Sep 2022 02:43:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=crYUKnwN0e9x/yv7YIsFZ49azHHBR2SmtdtdDB93lmc=; b=ASqjOCpnz9qH QDyLT1q6nSuOpCLZWV9CC1tvKfNmH3PqSd33guBlfDBuU5IJvCB5RU/in0gg3co1wVOCvmIB5wCly IGgPUCq6bwpK4yd32EzITr6M/fFZtwjRBYWQyyq+gn2TREi7wqvADiu1/AERyUtvXUHq3v7kkY9VB JEtiltKZ+XYrY+58nNHkDKJujg2cN3wdRQEZfSLVRE5QQz0i7bUxXO2VI/SJz5+pfrZ9nl+26tnf7 yinWJfKwZK/m66YODz7EXSa22egxl1Yjvx9gOxFT6slJsv3kKX/E+S0z3ogAkTrbdCoquLAKq/XB/ r45AT0jntZrV/p9XCDsPxA==; Original-Received: from [87.69.77.57] (port=3017 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oU0OI-0007G5-Um; Fri, 02 Sep 2022 02:42:59 -0400 In-Reply-To: <87ler2963r.fsf@elite.giraud> (message from Manuel Giraud on Thu, 01 Sep 2022 22:45:12 +0200) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:294517 Archived-At: > From: Manuel Giraud > Cc: emacs-devel@gnu.org > Date: Thu, 01 Sep 2022 22:45:12 +0200 > > I'm working into lwlib only. So I've made a function to get the frame > of the menu widget (mw). I'm also converting the char* display_string > of each menu entry to a Lisp_String with make_string (note: I don't know > if I should have done that but it seems the way to get a proper > multi-byte string from a char*). make_multibyte_string is better, I think. And I don't think I understand how you get the Lisp string to have the face information. The original C char* string cannot have that information as part of the string's data, so where will the face data for the Lisp string come from? > Finally, I'd like to walk this Lisp_String and call FACE_FOR_CHAR for > each charater of this frame. And then be able to call XftDrawStringUtf8 > (or XmbDrawString) on each substring/font pair. WDYT? Po Lu answered about the XftDrawStringUtf8 part. For the faces part, I think face_at_string_position is a better interface. It returns a face ID, from which you can get to the corresponding 'struct face' via FACE_FROM_ID.