From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 93831 invoked by alias); 3 Sep 2018 19:14:43 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 93823 invoked by uid 89); 3 Sep 2018 19:14:42 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-101.2 required=5.0 tests=AWL,BAYES_00,GOOD_FROM_CORINNA_CYGWIN,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=meantime X-HELO: mout.kundenserver.de Received: from mout.kundenserver.de (HELO mout.kundenserver.de) (212.227.126.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 03 Sep 2018 19:14:40 +0000 Received: from calimero.vinschen.de ([24.134.7.25]) by mrelayeu.kundenserver.de (mreue004 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MFOim-1g93vO0P7U-00EQ81 for ; Mon, 03 Sep 2018 21:14:38 +0200 Received: by calimero.vinschen.de (Postfix, from userid 500) id 29EE0A820B4; Mon, 3 Sep 2018 21:14:37 +0200 (CEST) Date: Mon, 03 Sep 2018 19:14:00 -0000 From: Corinna Vinschen To: cygwin@cygwin.com Subject: Re: Cygwin fails to utilize Unicode replacement character Message-ID: <20180903191437.GZ6350@calimero.vinschen.de> Reply-To: cygwin@cygwin.com Mail-Followup-To: cygwin@cygwin.com References: <7942b18e-96bf-a824-4dac-82715d87af55@towo.net> <5b8bdcc4.1c69fb81.84d1a.e6b9@mx.google.com> <20180903124616.GT6350@calimero.vinschen.de> <20180903145919.GU6350@calimero.vinschen.de> <126ebbde-2432-f19b-6c5c-fe61f31e4647@towo.net> <20180903171659.GY6350@calimero.vinschen.de> <515ad501-3cb4-0236-ce03-0b7d9286bd24@towo.net> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="0ywUhQCikZ2Y3PNw" Content-Disposition: inline In-Reply-To: <515ad501-3cb4-0236-ce03-0b7d9286bd24@towo.net> User-Agent: Mutt/1.9.2 (2017-12-15) X-SW-Source: 2018-09/txt/msg00055.txt.bz2 --0ywUhQCikZ2Y3PNw Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-length: 4333 On Sep 3 20:20, Thomas Wolff wrote: > Am 03.09.2018 um 19:56 schrieb Thomas Wolff: > > Am 03.09.2018 um 19:16 schrieb Corinna Vinschen: > > > On Sep=C2=A0 3 18:34, Thomas Wolff wrote: > > > > Am 03.09.2018 um 16:59 schrieb Corinna Vinschen: > > > > > On Sep=C2=A0 3 14:46, Corinna Vinschen wrote: > > > > > > On Sep=C2=A0 2 05:51, Steven Penny wrote: > > > > > > > On Sun, 2 Sep 2018 10:07:10, Thomas Wolff wrote: > > > > > > > > Actually, the width problem I suggested in my > > > > > > > > other response (and even > > > > > > > > referring to the wrong character) does not apply as mintty = enforces > > > > > > > > proper width in that case. > > > > > > > > Also, even with fonts that do not provide the > > > > > > > > glyph, you will usually > > > > > > > > still see it by the Windows font fallback mechanism. > > > > > > > > Shall I make it configurable? > > > > > > > your call - here are the possible resolutions - in > > > > > > > order of my preference: > > > > > > >=20 > > > > > > > 1. Change the default to U+FFFD with no option > > > > > > > 2. Change the default to U+FFFD with option to change > > > > > > > 3. Leave default as is with option to change > > > > > > Ideally we could check if the current font supports a visual > > > > > > representation of 0xfffd and if not, fall back to 0x2592. > > > > > >=20 > > > > > > Not sure how feasible that is, but it doesn't seem to be overly > > > > > > complicated.=C2=A0 I'm just looking into a solution for the Cyg= win > > > > > > console. > > > > > Only, I can't get this working.=C2=A0 In theory the GDI function > > > > > GetGlyphIndicesW is supposed to allow checking if a certain chara= cter > > > > > exists.=C2=A0 But I'm getting a weird result.=C2=A0 This code: > > > > >=20 > > > > > =C2=A0=C2=A0=C2=A0 static const wchar_t replacement_char[2] =3D > > > > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { > > > > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0xfffd, /* REPLACEMENT= CHARACTER */ > > > > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x2592=C2=A0 /* MEDIUM= SHADE */ > > > > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }; > > > > > =C2=A0=C2=A0=C2=A0 HWND cwnd =3D GetConsoleWindow (); > > > > > =C2=A0=C2=A0=C2=A0 HDC cdc =3D GetDC (cwnd); > > > > > =C2=A0=C2=A0=C2=A0 int rp_idx =3D 0; > > > > > =C2=A0=C2=A0=C2=A0 WORD gi =3D 0; > > > > > =C2=A0=C2=A0=C2=A0 DWORD ret =3D GetGlyphIndicesW (cdc, replaceme= nt_char, 1, &gi, > > > > > GGI_MARK_NONEXISTING_GLYPHS); > > > > > =C2=A0=C2=A0=C2=A0 if (ret !=3D GDI_ERROR && gi =3D=3D 0xffff) > > > > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 rp_idx =3D 1; > > > > >=20 > > > > > always sets rp_idx to 1 when called from inside the Cygwin DLL, > > > > > independently of the actual console font.=C2=A0 And, here's the > > > > > really weird > > > > > thing, it always sets rp_idx to 0 when called directly from an > > > > > application, likewise independently of the actual console font. > > > > >=20 > > > > > Does anybody have an idea what I'm doing wrong? > > > > This works in mintty, just uploaded a patch. Maybe somehow the > > > > GetConsole > > > > "dc" does not support this usage? > > > =C2=AF\_(=E3=83=84)_/=C2=AF > > Dito; hold on, sorry, your code does *not* work inside mintty. > > Mine looks a bit different and I thought to have manually verified it's > > functionally equivalent, but indeed there must be something fishy... > You still need to > =C2=A0 SelectObject(cdc, f); > where f is the HFONT of the font you want to check. > To compare, you may check out function win_check_glyphs in file wintext.c= in > mintty. Thanks but I don't know how to get a HFONT for the current console font. In the meantime I figured out why my GetCurrentConsoleFontEx call failed with error 87: When looking again I realized there's a member called cbSize. The MSDN docs neglect to tell that the cbSize member has to be primed with sizeof(CONSOLE_FONT_INFOEX). As soon as I tried that, the function succeeded. Well, it's a start. I now have the actual font name. No idea how to get a HFONT from there, though. From what I can tell ATM, I'd have to call CreateFont to get a new HFONT and then destroy it again after usage. This looks pretty wasteful. Thanks, Corinna --=20 Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Maintainer cygwin AT cygwin DOT com Red Hat --0ywUhQCikZ2Y3PNw Content-Type: application/pgp-signature; name="signature.asc" Content-length: 833 -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEoVYPmneWZnwT6kwF9TYGna5ET6AFAluNiBwACgkQ9TYGna5E T6Cgsg/+J+Zx8aC6Md1IONifaeNXSJdlcMuBLZsfDdHTvnskg2oQzGX6iiYaU/05 sfS4SWHXD0KzjDk9KufDo8FnHl2V8KawhLR5GXzBfDNi9Ll9/nOPxta4wTs5jhBD VRNJJCkpbqXvWsVVnSeWHuFdXENPS9jPcSkPRAM9AWfkQtrvRRBDYumJ+2xdB0r1 nPLhVtX1RN7DZp7gFS7MykHY3fM5SVp1ZnvXiH/sB+MJjO2hkyQ5pYydGiQ3df40 G8Nm3YZ+o+CCVspKWxLCwtGTuSVWhLUehGXoLxA3OHJ+OCBOeViWwn+tE9qJ16Hu 1PVf+lYBmWPfEzSkI77RDB4wuHSeGbZFJeFGhhEX+PvcjUvY7KxEWlgi1ghpFYqJ ql7Bk6MWE5/mLCOXhsTR21cMnu+EcraDKTDaeazRLqQiUIApY8Cd7L3hxhX2OByJ gt5NibHWxOEJESe9UvdO5geEaK8L4EgV+md7DWpMGs6d0F+djVGwR9oTSMAJ1NRD 8WU7pSTpxLDpoIVKvf50m2MCOsIvvSaCc72wuvjttSU7vY+LbITrlqoLBIDsO/A8 IhrTEx4WdPQ0NjgIgFqOJRhtxfA+Qa6bmhkv/twHGtqSfc7dd8eG6q6lP3oWrQ2W y+WykPHH3VyAsLUCn3J7pP2WFmxpmMZLv33KQAfu3A/VurZjTpM= =0Qr6 -----END PGP SIGNATURE----- --0ywUhQCikZ2Y3PNw--