zsh-workers
 help / color / mirror / code / Atom feed
* Unicode ZWJ sequence
@ 2023-08-18 13:02 Alexandre ZANNI
  2023-08-18 15:24 ` Mikael Magnusson
  2023-08-19 15:53 ` Roman Perepelitsa
  0 siblings, 2 replies; 10+ messages in thread
From: Alexandre ZANNI @ 2023-08-18 13:02 UTC (permalink / raw)
  To: zsh-workers


[-- Attachment #1.1.1: Type: text/plain, Size: 17642 bytes --]

Hi,

I'm new to this newsletter, I don't know if I'm reporting this issue correctly. All I found is this email address.

TL;DR: zsh is not handling Unicode ZWJ (Zero Width Joiner) sequence.

"👩‍❤️‍👨" (that will probably not render here) is a Unicode grapheme composed of multiple code points (U+1f469 U+200d U+2764 U+fe0f U+200d U+1f468). It's basically combining some emojis together to craft a more complex one. For that the Zero Width Joiner ‍(U+200D) and the Variation Selector-16 (U+FE0F) are used. But instead of displaying one grapheme, zsh is displaying each individual code point.
As you can see below the terminal emulator named foot is capable of displaying such a grapheme, and other command line shell like bash or fish are capable of it too, only zsh can't.

[1]
Using zsh 5.9.

Is this problem already known?

Regards,

-- 


[2] 


[3] [4]
[5] 

*Alexandre ZANNI*
*Expert en cybersécurité*
*M: *+33 7 67 96 14 62 
www.acceis.fr[6] 
[7]  [8]  



--------
[1] image
[2] data:image/png;base64, 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
[3] data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAFYAAAAqCAYAAAAptqxNAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TRZGqiB1ERDJUJwuiIo5ahSJUCLVCqw4ml35Bk4YkxcVRcC04+LFYdXBx1tXBVRAEP0Dc3JwUXaTE/yWFFjEeHPfj3b3H3TtAqJWYZrWNA5pum8l4TExnVsWOVwTRhx4MIyQzy5iTpAR8x9c9Any9i/Is/3N/jm41azEgIBLPMsO0iTeIpzdtg/M+cZgVZJX4nHjMpAsSP3Jd8fiNc95lgWeGzVRynjhMLOZbWGlhVjA14iniiKrplC+kPVY5b3HWShXWuCd/YSirryxzneYQ4ljEEiSIUFBBESXYiNKqk2IhSfsxH/+g65fIpZCrCEaOBZShQXb94H/wu1srNznhJYViQPuL43yMAB27QL3qON/HjlM/AYLPwJXe9JdrwMwn6dWmFjkCereBi+umpuwBlzvAwJMhm7IrBWkKuRzwfkbflAH6b4GuNa+3xj5OH4AUdZW4AQ4OgdE8Za/7vLuztbd/zzT6+wEqtHKKIlqeBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+UDEQ4fKaAu0UMAABO9SURBVGje5Zt5WFTnvcc/58zOzMAADggjKA6biooKKuISNWoxiVGT2NQlsa2m1iyam9vmSXO7+DSpTUxazdbc6E1Mom00LjWa2GjcF0wExBVQEIWwDMMywLDMds79Y2CUgJr0tvep9n0enmHec857fu/3/b3f3/aOwB3YZFlOkmU5CRje0WUWBMEDOGRZ9gJHBUEoEATB9s+SQXmngClJ0jhBEOY7W9qmFhQU9quorqWgrAbanV0nHGQioU8Yif1jcbs9+SqV8lNgnSAIV/6R8gh3AKCPejy+X54vuGj9cO9J1uw+AcDUgYmBe8zBBtJjNZwsc+F0udlx6hwAfU0h/GzmGCaPHUlCv8gdgiC8IgjC0X9rYGVZHu7xeN/KyT016rl3D9DmdKIzGIg1hwZATE8M9998ndZuza0m50o5K+dNpNTezJVqJztOnWPR+JH8bO444hPiP5Jl+XFRFOv/7YCVZfkXFRWVLz731qdsPJHHovEj0etF4oz+6Ww4VIwlOjKgmdc3o0pNaqyFJIuZlH4hfJZzlekp4SzfnA3A6jkZLPjBg3UhRt0CURR3/1sA6/NJRkHg7X0Hj82d9sJGlmWN5lheCTqDgSSLGXtzKxWVNhZmpZHQJ4zwsDC0atGvtO3t1Dmc6HUaGhsb2HO2ijW7TzDOGkesOZSNJ/JYPSeDDYeK0RkMfPD8w8T2jX1MEIS1dzSwPp8UIgjs2bB9/8ifvv1XxiX1R6dRMzHByPLN2cwbPZyn52QyaEAiKpWiQ7PB0dSCWqXA2dRI/pkz2O12ZGQizRH06tWLqxV1vPTRkQCNZCRHsn53DudrGziy6qcMGzrwSUEQ3rhjgZVl+c8fbtv3gze2HCLHZmf1nAwOXGqmotLG6qfuY9TINIRvzKaltR2Pqx2D0YizuZnLly9TVl6Os6UFGRkAjVpNvDWery58zSs7sslM6k96rIYDl5rZceocOX94ktQhAxaLorjujgNWkqRX9h089sy0Fzayek4GW3OrOVJSyqLxI1k+J4O4OCtqtZJGh4Nqm42Y2L7og7TIMjQ6HJhCTbQ1NyEp1Ig+N1s/2RUAVkBARibCHEFISCjLX9uJJTqSKUNjWL87B4Btq5ZgsUSPEQQh+44BVpKkCeVl5QfjfrSSZVmjiTMbOXmxjl6hahbfM4ooSywul4ua6q+prKyirr6ekWlpWOOtFBYWkZSUhFxRjCskgqaWNjQaDSqNltyck5SVlwcA7tTexIRElqzaBsATD07gjS2H0BkM7Prjk5X6IO0gURQd30Zu8V8dWJfL+z8/eWUrALUNbs5daaRXqJqHxg5EpVTS0uzg67JSWltaaWxuwuvz4vF6AQg1mfjrri/YdDSXxkUPELTzPYKKvsLjau9BwwRcbjfnzp/n7WcfBmBv7mUWZqVxpKSU97bsjhYEYdUdobGSJD2+7+CxN55fu4fM4VaO5ZUA8NYzM2loakUlSliiozGawsnPO0mN3Y5PlgkOiaSioZlf/uUQqbEWtr28lJDmKqrungSAYmgStcmDKI9JoE4X6udw5AAt6HRBhIZFcO/vPmLtT2fhsFewfHM2pe8+R0xsjFUUxcu3kl3xL2ysxJbW9q2P/ub94NP2etLjLZy6WsMfl2ThbG4kxBCEVqdDoVDQN7YPxSWX2XPWwfrDhaw9eIq/nb6MW/JxdM2TRJjDEILDEDQuXNknkW116M4XEHn8GKaoYDxBQbSqtAgdeqYQBTQqBSP6W1i380vGpw/m6zI7Gm8To9JSQ1asWLHjdqaCBSe+yu2TY7OzdFo6APePTkYlSjQ7nQTpg7DX1uL1etiwfT8zX/mEdYe/4krDNQpc//iDREdHXcsTPLwUQd01PRK6aRtDXnmJYRdPInTwrdvtwW6vZUxKP642t/DGlkNMzkxl+eZsbPaGR2VZNt2SCl57+/3UrEljPlCr1YP/XgQUyq7C+gRNl+8aVdf1U6lUiKK/T6nwa4lapUKpVCAIIAgCsizz6H+tQ6dWkto/nBWbD7HhP2ZRWeHPlfSNiaWu0cXc13fgkXzdZDIHBVG48bcoFQJKhRKNRokgCLiyP8e+cFHPWmY2sX/Js2h0QbS1tWLUG3DKRv584Aw6jZodp87x8bLZTJ96F63tLjweDy6PhEJ24evgdbfbfXX3/uP3K8eOTvuNNd76nUD1eHzY7TWYzREAOFv9xiA0RI/H48PZ2o5apcDt8U/YqNeiUCioqqpCIYqE9jIFwKupdRDRy/RNGqCm1sHGE3ncPyyFSzaRYf36EGrUUaNQYo2LIzExkQ0f7+wRVIBVP5xOiFHHvoPHKLh4mSU/motKpcQ3aPSNOd3uwGyOoLGpyT+vlhbi4y3suXCRZVmjWTR+JBsOX2TWfXej1aqQZTkwj4CmCkLfsa3un4latRjyXUCtqXWQnX2cEFNoIMJ5Yd1WigoLOgaGjZu24fXJHDyczaad+5FlePPD7fi8Xs4VFlNZWQVAYWER339+LdfJFWiXS4oxBwUxa0wyBVfrWTwlheLLJXwv614GD0zmytWrWKKibihnxuC+NDa38fzaPTz1xl944ncfcvbsWVxeCfP6dZz5z2cJfmZpt+dSUlIICQ4OGDQRiXmj/WndlN4Kdpw6R02to0dQO5VCqxYt34ljy8vK2bv3b8THx6MP0nZsawULpqSTf6nKv9XcHixRUYQYdQQbdST0CcNur+HkxTrCepmZNCGT8HAzsixTcKmc749L5vTZgm7vyr9URXJUJA57BXsuXCTYqCNIF0SYyUDBxWKi+/RlyIC4HuU0qtSEmXvz7B838dXZkwC8s2UzQ+b+nLAJc9E+tpoSKZgr2bldeVGt5MCBg6QOT8eoNyAgUFJaypQR/Vmz+wQHLjVjVKmprKwKgCoIAoIg9Gy8errwzVZSXMLBI4cZn5lJdHRUl2cGJCWwfncO7e0ezp49R2ZGWpdnLZZoZo7qx5BHVvDXXV8gigKOBgdRESbuSkvk6Imcbu/ztnb1w1WiRGtbKx6Pl/OFBcheFwaDocs9i8aPZPUjU3h9QQZZS1/mnS2bbzifR4UKwo5/2aWvLm0EEhKff/4pzS3+VKPRYECvlBhnjWNigpHo0BDq6uu7aGin1l6Pidh58Vaamv3llwwbOpSY2JhuC6HVqliYlUZB0SWKK5t65MzZM6aQ996vOHqxkty8Uxw4mkNjYwMV1bVsza2mobElMK4gCHx2ro6wYD2lzX7ZIiIicLs95OXmIiBQdPEiEZGRXbdxvxBMSjdvfHohoKk9uhszZnP16+qbOPcCEeYIBg4YwJQp0xgyII42pxNlkIlkSyRVDa4ewbweR/F6g1RYWITX29UYVFZWcejIEWJjYkhJSem2Sp3fJ48dydNv7iLF2p33bNU2bPYGQow6po+wBvq/N20qd08cy1P3DiPvVH5gTFmWyb50BbMxiJYWKXC/KSSEsooKNBoNTU1NeL0+lmVdM0bLP9jLwncP8eLiqYwcnH5D4NJjNYRu2tatP+mxxSgVfg+nrbUVZJm2VidqtZrztQ3kX66jotKGo7mRW+30ALAlJcWczM1h//79AXDLy8rZf+AABr2eEWnpN9XqhH6RPJAZT0pHSUSWITwsDL1Og6DUcCw7h30Hj6HXabBERRLX14Ik+Rcorq8lsLiBXaBS0ub2otdfy6eq1Wokn5eQ4GCCg4NpcTYzNjG6R3k+XrnoO7uN5b2sAaPV3OLkfGEBGqWIQqnEK8uk9g9Hdx39fFPBegS2d2QkoqjAZq9h//792KptHDpyBI1Gw8TJUwPGqodYnppaBx6Pj/unTPDzo9eHvc5BQnwcZfUS+iAtE8emkTZiOEnJAzAajfSLicLR1EJ5VT3h5kjq2lRdxh2T1J8yewNXqq9xnVarxeP2otVqiY+Pp66ujlEjBnWTqarBRUxsDLOm3dujzFtzq7t5BIqhSeTl52ONi2PwoJQO99GEzhiMz+tlYrI1wPuWUGMX2rppldYUamJ8ZiYHjxzGZq9hz74v0Gq1TJk0mRCj7oar/HX5VbLPXiUqVINepyEiLJVT+flU1fiFGDEgju2fH8fR3Igl1IitsQ2v5EUp+l9t0OuJCtUQG6ZBkq6t/sQEI5+dczNxcBQ7Tp2jorKSsvJyIsxm4uPjMZsjAu7evNHD2XgiL/Csw14RGGP7591lPpR9gH1ZP2GU2YRk98tZmzyIdlc7F4uLSYyPZ8yo0bS1twFQUWWjvq4BCKfN6STYqOtCW7cMaWNiYxgzanQgZs7MGIMp9ObRm6Q0EBXqj7SKK5sQRYH+1nhsjX6hrnQYifn3TSRIc00Ir+SPVKJCNYSHhVFc6c9MBRba7KeHz3KuohIVeCS/qBMmTMRiiUZ9XWj63PxxXWTacKgYgJNlrmt8ftdULm17HenMZ7S/s5zJ9gIMj8wNRFynE9MDSZii4ksUFBYGKLG4sonM4VZiEwaTY7Nj6d3rlp5Ut3MF1nhrYKUsluhbegx6tURVg4sUaxRNzRW0trupr7Vh0OsJNmoC4B04mkOwMYjIEIFgo47wsDDq6uv9PBwchl5Zgdd37V0D+4ay58JF0iLNDDWHUdXgYmByMlqtqpsMyclJrJ6TESgI5tjsVFZWcd/wcHTqObyzZTN/WJqFNd7q97XP5tH06lvX3KxJk5A62LWzNTQ6iI+PB2D78ULaXG6uVB8HIDKqzy1xEfLyz29IHTJgXpfOHiKKm12/1f3fKn/ZoQGd4zgaHPR66Bc8O3sKdbWNFFXY2f77xTfcQS2t7dz79OscKSn1G69ls5k9Y0pH/O5FkmQ0GiVtzU3Up6cEnqsfM4r8yTMD2tr5qVGrmTVzNnZ7DYN+/BKvPzaDvbn+bOH7L9zcMOafKdiofPrNXSv/9LSoV2hNpu+Ag+hye8WOfK7oz75/IxHT7hgMBEyo6rpEjaQ0oBXdgQSOoiMhIyg1qDsSmSqNlkXjR/J1ZR3psRrWHS7lSnkVQ00mRLH7QuqDtGz89XxGLHkVe2srr+06xX1ZE1GplAEuBlCcP9EF1DOTZwY8gc5PjVrNwAEDUKkUfLI/h9RYC0fPluF0uZk/PpGaWgeNThei14mkNFwAGl1uLxq10tPSVF//9Ju7Vv6/Jbo/+HBDP6BPJ/10wJIuQBAgdETeZiABUA5MTja5vVLq2OffZfWcDEqbZWob3Lz1i/kE6bTciOLyzxQw8dn/ptnj5uiLP2L0qGtRoNfro3be9/CdLkIxNIl9MxYid9iT60s0Ol0Q48aMQVBqiH7Yv2va25pZs/sEtR//ri339Pnp1RVlRQsWzKv61hz7z2qPLJh/Bbjyje6DN3umrc1dmhZp7tcZfe05U8jZs+cYPDjlhu5f6pABfPWn51jw/Fs89+4B/paaikbjn6aUsw/f6aKApkodSW2fdC0I0Wq0KDt20OZtO5k6MJEopZMNeSWsnpOBKdT04ZRJ4w7e1jUvjUb5yxcXTw2cx5o7YQjzVm3F2dRIW3PTTYOVT9Y8TZLFzNpNO/2L1NxE7WNLqB8zipIZ85k4cRKzZz3AqPSRAS/I75e7GJySwrnCYpZvzmZ6SjgHLjWTY7Pz0IypbkEQVt4RVVqXy3N80Yr3Mo4WljAzY4Dfhat28uKPJ9PU2MigwUMw6HU9Gk+v18ehoydoam4jIWcXiVnTaeg3lMjekV2MZWFhETm5/kxXyqBBGA0GUpau5tGxI9DrRY7llfDsw+OYPWPKbwVB+NUdUaVVqRRLX37iPrm+pY2WFolh/ftQ39TC6s3ZqHVGPv10J7m5eTgaulellUoFk+/K5B6zxMDFT6DJmEZk78hu3khTYyMyMrExMRgNBub9+gOmDx1ASm8FeRdtJMXFMH3qXRdkWX7p28r9L38+VhTFfEmSlu178dHXRv58LXq9SFiwnnWHv6Kows6rP7mbsrIyLhQUkDZiBKEmExqNJuCWeb0+1KOndouSrk9U94mJIUgfhLOlndTH1xBh1LNwaAyXbA20OZ2senGxR6NRLhBFseWOObBxXSn8ve07v1j40JruWamPl82mryWc4pJiXG534PDFrJmzAxFaJ5A9/d/Q2MLGTdsCAUZn62sKYc/vF2GNt84VRfEv30Xe2+ZEtyiKP5QkiU818sJ7Xt4e6B9njeOhNdsYZ43jqXuHEW8Np6GplaqKq1RXVRLbN7ZbbrgT1OqqavZmn2fhm1sCY3UGGGmRZjaueARrvPWH3xXU2wrY68B15/Tu89iSlz4ix2bngRG9OVJS6v9b4wdlWdZoxiZGU1Fl61JB9nm9VFTZKK5sYvvxwi7nZ9MizQxPjORISSnzRg9n1fIHXZHm0CWCIKz/uyJJbsMmSdIjNbWONS+9/4mp0xW7vnUW/4pKy9EZDOg0KnQaNRWVNlKT4sgvKmX+tFSWf7C3R1qZPvWu8x2ceurvlfG2/HGHKIof+HzS4VefeWTN4ntGzVi54UggbZgWaaZXqJo4sxGdWsnYwbE47BWYzBa2H4exg/3UYDJ2LU6vnpPB/ffd44qJCntJllkpimL7/yn3wW3eJEmaADxXUlwybe+JC6zfncNpez1zRg6lqLSczOFWahvc6NT+ioROraSs1kFRpY3UuBjmj08kMyPNHdHLtFGWWaFQiFf/EXLd9sBeB3A/YC7wUGVlVWpZeQUtba4uP0kymS2B/G90dFRjRC/TAWCnIAjbBEFw/CPluWOA/Ybl18iyPEoQhFhZlvsDYofP6hME4bQsy1WiKJ78Z8rwv68rXxupyYrsAAAAAElFTkSuQmCC
[4] https://www.ssi.gouv.fr/entreprise/visa-de-securite/
[5] data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAA0AAABWCAIAAACbwIsfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA25pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxQjgwMkU1QjBBNTJFNTExOTZDMDk1QTY0NTNCNzdCOSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCOUNDMTk3NDkwQUYxMUU4QjM1NjkzQUI0QTM2NjcxRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCOUNDMTk3MzkwQUYxMUU4QjM1NjkzQUI0QTM2NjcxRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYWUwZDVkZS0xY2ExLTAyNGQtOGJjMC02MmU0NTk3MjcxMjgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MUI4MDJFNUIwQTUyRTUxMTk2QzA5NUE2NDUzQjc3QjkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WqVInAAABcElEQVR42rxW0Y7DMAi7oP7/H7e93rgxCraTvgxpW9U4GBwgG+d57vs+3vZDzK7PcRzn2xhu85+MgF63DHrAy6jN/QW0xFBxgZj4yy4hGsQ34dX6VRzbsDlv6Hc9X98OzXLWfOe6aOoPr9fLY10KGvDCEP95o07NLO+JlFfzUDrX+I6XQVBAP/kyKK5TVog4Pswbddq94vMQtUh5S5RAlwd59ChBf2RPIF9dL3Ne0B/QcHxdyGf9a7odVf/O54Y4Q8tJTfx1FaguGUHnS1/DuohlGt+XcT5vYur0C8z6W3jLmV6+zbXM29H+xmI5I/oby27E7W89WarLQLaE6zmZ/mcQ6D/cdRcMYopXnVsHFZdV5+7vFp+HWAJd0qVIA3ipvyDNvMqfOLpbHl0XkEeHKn9MGqVL7Y/BDfAWXeh5lAech2cA94B8y3lg3l7VS3W6qvNq/8556TyAfYl5xUmAOSSoV3XZenxzf0v3h0b/CjAAAjjFKqpZ9mUAAAAASUVORK5CYII=
[6] https://www.acceis.fr
[7] data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjMWFlOTJkMC1hMDYxLWEwNGItYWJhYy0zMjIwMDI5ZjlkNjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzcwOTQ0QTg2RTE0MTFFOEFGOENDREU1MzVFQzgyOTkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzcwOTQ0QTc2RTE0MTFFOEFGOENDREU1MzVFQzgyOTkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTEyMzY2MTItNjk2My1lMTRkLWIzMjAtYjFmMDAxZTc0M2QwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmMxYWU5MmQwLWEwNjEtYTA0Yi1hYmFjLTMyMjAwMjlmOWQ2OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Plvo+YwAAAHsSURBVHjapNVBSBRhFMDx2dUKl6CQYBdx7RAECmkZRJlopxWClA4ldJBK8CCV3iIEizqshiDqgqmgIthBvYh0qFMZmQcp2D1o1xDZLpUQhnvY7f/gDXz7MewO7YMfM7PMvHkz35u3gfBE0vGI47iLdpzEAcpxFN+wiLfIpR+cy7sw6JHsHj4igDu4hGto1v0RXMcH1NkXB4wKJXlCK+nXqgpFLebwgirfeFU4jDR6fCST2EYbnkQSqSt2whhq8FyPX2ILl4sk3cdtjJM05CaUd/UMj4wTZf8ibhYrk8fdYzPlXi8JW/AFP4zzZIVfyZ0df7GAW1QZlIQ3sGqdENEbRHFen0AWqhGTGMIZo8oMmxTqZUUvYNBKKBefxm/1FH9Qhgo9pxtn8UuPN+SGUuExn6sqzT6qXZDDKX06N3blyYKO/5BKBzCDHf0tap8kCQ8R8pFw39jP6PaI8Vu1vE5J+BVXndKjSbpFEq6ho5RMtIsMDZkSSVnldcQRNnpxFpVa/V+M4aeRQ6bNe2zqcReWaZ+sOxxi2gad/1FglfZxKwkP3FV+h+8e/VgsTmBJPjtJZk+bx/qFTPtc9VodsnGSffYaX1n0asd/wkNtXjsa9BuXgXDfnIWODlM75rGiA+J1gb+APv1i8uKfAAMAqG5043NqiAQAAAAASUVORK5CYII=
[8] data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjMWFlOTJkMC1hMDYxLWEwNGItYWJhYy0zMjIwMDI5ZjlkNjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTEwODgzNzM2RTE0MTFFODk0MjBCMzM1MUYzOTA0RTYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTEwODgzNzI2RTE0MTFFODk0MjBCMzM1MUYzOTA0RTYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTEyMzY2MTItNjk2My1lMTRkLWIzMjAtYjFmMDAxZTc0M2QwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmMxYWU5MmQwLWEwNjEtYTA0Yi1hYmFjLTMyMjAwMjlmOWQ2OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pn+g7bAAAAHiSURBVHjajJU9SEJRFMefL0MIWtVoCKE1csymiAiCcImIIJIKWgoaapFoCaqhxdApKFKC6GOqQEqJpmwJJGlosojKnJoK0aj/gfPgcrpP34Ef+O475++993w8ly9+b2jMDUbBGGgDFV73gHdwCI5BrTTf9S9Q2gDYAGmwAJ7F+w4wA3IgCrLqS5fYIQkMgmnwYdQ3H9gFl9jllrVoKg4REAJhB2IG+5Bvrz9RiEjBAJhl0R/DuZHvJMVCNKAKroElcfk6GwE7YA60gCCOW+HYdUvQy/eRUwL3QZ8Qo0Sc8P0mwCeYws6aIUqxPvz2kuAQOBfBrSADNoGf18aFTxO4hViVn89IiwSDYndkR7x7OsobyINu4UP1eKA8k0bQzTt4Fc5h5X5dGjGyR/FMGn7T5vJXQKlBhjO6RZMD28V6gY9pZ19gT6yRRsnkwJAmaBFc2Agua05AGnmTe3ZYeUH11ck9WxVBv2AVxDR/QhppSkqZ2yjEmfrmzFO99bDzC7gCcXAnlVB/FFtGCZWt4RDgYu5XusWpefjPJiBYtLJcBNsgyQXr1Mg3RbEkJqdNko98yq1oOBhf5HsDsaTdgKW59sCtmOZ592QzYKlloxDLNprY5HDNn4BYnU8AZbsmg/8EGACL8oBQmLmAwgAAAABJRU5ErkJggg==

[-- Attachment #1.1.2: Type: text/html, Size: 3885 bytes --]

[-- Attachment #1.2: image --]
[-- Type: image/png, Size: 44991 bytes --]

[-- Attachment #1.3: data:image/png;base64, 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 --]
[-- Type: image/png, Size: 2428 bytes --]

[-- Attachment #1.4: data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAFYAAAAqCAYAAAAptqxNAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TRZGqiB1ERDJUJwuiIo5ahSJUCLVCqw4ml35Bk4YkxcVRcC04+LFYdXBx1tXBVRAEP0Dc3JwUXaTE/yWFFjEeHPfj3b3H3TtAqJWYZrWNA5pum8l4TExnVsWOVwTRhx4MIyQzy5iTpAR8x9c9Any9i/Is/3N/jm41azEgIBLPMsO0iTeIpzdtg/M+cZgVZJX4nHjMpAsSP3Jd8fiNc95lgWeGzVRynjhMLOZbWGlhVjA14iniiKrplC+kPVY5b3HWShXWuCd/YSirryxzneYQ4ljEEiSIUFBBESXYiNKqk2IhSfsxH/+g65fIpZCrCEaOBZShQXb94H/wu1srNznhJYViQPuL43yMAB27QL3qON/HjlM/AYLPwJXe9JdrwMwn6dWmFjkCereBi+umpuwBlzvAwJMhm7IrBWkKuRzwfkbflAH6b4GuNa+3xj5OH4AUdZW4AQ4OgdE8Za/7vLuztbd/zzT6+wEqtHKKIlqeBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+UDEQ4fKaAu0UMAABO9SURBVGje5Zt5WFTnvcc/58zOzMAADggjKA6biooKKuISNWoxiVGT2NQlsa2m1iyam9vmSXO7+DSpTUxazdbc6E1Mom00LjWa2GjcF0wExBVQEIWwDMMywLDMds79Y2CUgJr0tvep9n0enmHec857fu/3/b3f3/aOwB3YZFlOkmU5CRje0WUWBMEDOGRZ9gJHBUEoEATB9s+SQXmngClJ0jhBEOY7W9qmFhQU9quorqWgrAbanV0nHGQioU8Yif1jcbs9+SqV8lNgnSAIV/6R8gh3AKCPejy+X54vuGj9cO9J1uw+AcDUgYmBe8zBBtJjNZwsc+F0udlx6hwAf U0h/GzmGCaPHUlCv8gdgiC8IgjC0X9rYGVZHu7xeN/KyT016rl3D9DmdKIzGIg1hwZATE8M9998ndZuza0m50o5K+dNpNTezJVqJztOnWPR+JH8bO444hPiP5Jl+XFRFOv/7YCVZfkXFRWVLz731qdsPJHHovEj0etF4oz+6Ww4VIwlOjKgmdc3o0pNaqyFJIuZlH4hfJZzlekp4SzfnA3A6jkZLPjBg3UhRt0CURR3/1sA6/NJRkHg7X0Hj82d9sJGlmWN5lheCTqDgSSLGXtzKxWVNhZmpZHQJ4zwsDC0atGvtO3t1Dmc6HUaGhsb2HO2ijW7TzDOGkesOZSNJ/JYPSeDDYeK0RkMfPD8w8T2jX1MEIS1dzSwPp8UIgjs2bB9/8ifvv1XxiX1R6dRMzHByPLN2cwbPZyn52QyaEAiKpWiQ7PB0dSCWqXA2dRI/pkz2O12ZGQizRH06tWLqxV1vPTRkQCNZCRHsn53DudrGziy6qcMGzrwSUEQ3rhjgZVl+c8fbtv3gze2HCLHZmf1nAwOXGqmotLG6qfuY9TINIRvzKaltR2Pqx2D0YizuZnLly9TVl6Os6UFGRkAjVpNvDWery58zSs7sslM6k96rIYDl5rZceocOX94ktQhAxaLorjujgNWkqRX9h089sy0Fzayek4GW3OrOVJSyqLxI1k+J4O4OCtqtZJGh4Nqm42Y2L7og7TIMjQ6HJhCTbQ1NyEp1Ig+N1s/2RUAVkBARibCHEFISCjLX9uJJTqSKUNjWL87B4Btq5ZgsUSPEQQh+44BVpKkCeVl5QfjfrSSZVmjiTMbOXmxjl6hahbfM4ooSywul4ua6q+prKyirr6ekWlpWOOtFBYWkZSUhFxRjCskgqaWNjQaDSqNltyck5SVlwcA7tTexIRElqzaBsATD07gjS2H0BkM7Prjk5X6IO0gURQd30Zu8V8dWJfL+z8/eWUrALUNbs5daaRXqJqHxg5EpVTS0uzg67 JSWltaaWxuwuvz4vF6AQg1mfjrri/YdDSXxkUPELTzPYKKvsLjau9BwwRcbjfnzp/n7WcfBmBv7mUWZqVxpKSU97bsjhYEYdUdobGSJD2+7+CxN55fu4fM4VaO5ZUA8NYzM2loakUlSliiozGawsnPO0mN3Y5PlgkOiaSioZlf/uUQqbEWtr28lJDmKqrungSAYmgStcmDKI9JoE4X6udw5AAt6HRBhIZFcO/vPmLtT2fhsFewfHM2pe8+R0xsjFUUxcu3kl3xL2ysxJbW9q2P/ub94NP2etLjLZy6WsMfl2ThbG4kxBCEVqdDoVDQN7YPxSWX2XPWwfrDhaw9eIq/nb6MW/JxdM2TRJjDEILDEDQuXNknkW116M4XEHn8GKaoYDxBQbSqtAgdeqYQBTQqBSP6W1i380vGpw/m6zI7Gm8To9JSQ1asWLHjdqaCBSe+yu2TY7OzdFo6APePTkYlSjQ7nQTpg7DX1uL1etiwfT8zX/mEdYe/4krDNQpc//iDREdHXcsTPLwUQd01PRK6aRtDXnmJYRdPInTwrdvtwW6vZUxKP642t/DGlkNMzkxl+eZsbPaGR2VZNt2SCl57+/3UrEljPlCr1YP/XgQUyq7C+gRNl+8aVdf1U6lUiKK/T6nwa4lapUKpVCAIIAgCsizz6H+tQ6dWkto/nBWbD7HhP2ZRWeHPlfSNiaWu0cXc13fgkXzdZDIHBVG48bcoFQJKhRKNRokgCLiyP8e+cFHPWmY2sX/Js2h0QbS1tWLUG3DKRv584Aw6jZodp87x8bLZTJ96F63tLjweDy6PhEJ24evgdbfbfXX3/uP3K8eOTvuNNd76nUD1eHzY7TWYzREAOFv9xiA0RI/H48PZ2o5apcDt8U/YqNeiUCioqqpCIYqE9jIFwKupdRDRy/RNGqCm1sHGE3ncPyyFSzaRYf36EGrUUaNQYo2LIzExkQ0f7+wRVIBVP5xOiFHHvoPHKLh4mSU/motKpcQ 3aPSNOd3uwGyOoLGpyT+vlhbi4y3suXCRZVmjWTR+JBsOX2TWfXej1aqQZTkwj4CmCkLfsa3un4latRjyXUCtqXWQnX2cEFNoIMJ5Yd1WigoLOgaGjZu24fXJHDyczaad+5FlePPD7fi8Xs4VFlNZWQVAYWER339+LdfJFWiXS4oxBwUxa0wyBVfrWTwlheLLJXwv614GD0zmytWrWKKibihnxuC+NDa38fzaPTz1xl944ncfcvbsWVxeCfP6dZz5z2cJfmZpt+dSUlIICQ4OGDQRiXmj/WndlN4Kdpw6R02to0dQO5VCqxYt34ljy8vK2bv3b8THx6MP0nZsawULpqSTf6nKv9XcHixRUYQYdQQbdST0CcNur+HkxTrCepmZNCGT8HAzsixTcKmc749L5vTZgm7vyr9URXJUJA57BXsuXCTYqCNIF0SYyUDBxWKi+/RlyIC4HuU0qtSEmXvz7B838dXZkwC8s2UzQ+b+nLAJc9E+tpoSKZgr2bldeVGt5MCBg6QOT8eoNyAgUFJaypQR/Vmz+wQHLjVjVKmprKwKgCoIAoIg9Gy8errwzVZSXMLBI4cZn5lJdHRUl2cGJCWwfncO7e0ezp49R2ZGWpdnLZZoZo7qx5BHVvDXXV8gigKOBgdRESbuSkvk6Imcbu/ztnb1w1WiRGtbKx6Pl/OFBcheFwaDocs9i8aPZPUjU3h9QQZZS1/mnS2bbzifR4UKwo5/2aWvLm0EEhKff/4pzS3+VKPRYECvlBhnjWNigpHo0BDq6uu7aGin1l6Pidh58Vaamv3llwwbOpSY2JhuC6HVqliYlUZB0SWKK5t65MzZM6aQ996vOHqxkty8Uxw4mkNjYwMV1bVsza2mobElMK4gCHx2ro6wYD2lzX7ZIiIicLs95OXmIiBQdPEiEZGRXbdxvxBMSjdvfHohoKk9uhszZnP16+qbOPcCEeYIBg4YwJQp0xgyII42pxNlkIlkSyRVDa4ewbwe R/F6g1RYWITX29UYVFZWcejIEWJjYkhJSem2Sp3fJ48dydNv7iLF2p33bNU2bPYGQow6po+wBvq/N20qd08cy1P3DiPvVH5gTFmWyb50BbMxiJYWKXC/KSSEsooKNBoNTU1NeL0+lmVdM0bLP9jLwncP8eLiqYwcnH5D4NJjNYRu2tatP+mxxSgVfg+nrbUVZJm2VidqtZrztQ3kX66jotKGo7mRW+30ALAlJcWczM1h//79AXDLy8rZf+AABr2eEWnpN9XqhH6RPJAZT0pHSUSWITwsDL1Og6DUcCw7h30Hj6HXabBERRLX14Ik+Rcorq8lsLiBXaBS0ub2otdfy6eq1Wokn5eQ4GCCg4NpcTYzNjG6R3k+XrnoO7uN5b2sAaPV3OLkfGEBGqWIQqnEK8uk9g9Hdx39fFPBegS2d2QkoqjAZq9h//792KptHDpyBI1Gw8TJUwPGqodYnppaBx6Pj/unTPDzo9eHvc5BQnwcZfUS+iAtE8emkTZiOEnJAzAajfSLicLR1EJ5VT3h5kjq2lRdxh2T1J8yewNXqq9xnVarxeP2otVqiY+Pp66ujlEjBnWTqarBRUxsDLOm3dujzFtzq7t5BIqhSeTl52ONi2PwoJQO99GEzhiMz+tlYrI1wPuWUGMX2rppldYUamJ8ZiYHjxzGZq9hz74v0Gq1TJk0mRCj7oar/HX5VbLPXiUqVINepyEiLJVT+flU1fiFGDEgju2fH8fR3Igl1IitsQ2v5EUp+l9t0OuJCtUQG6ZBkq6t/sQEI5+dczNxcBQ7Tp2jorKSsvJyIsxm4uPjMZsjAu7evNHD2XgiL/Csw14RGGP7591lPpR9gH1ZP2GU2YRk98tZmzyIdlc7F4uLSYyPZ8yo0bS1twFQUWWjvq4BCKfN6STYqOtCW7cMaWNiYxgzanQgZs7MGIMp9ObRm6Q0EBXqj7SKK5sQRYH+1nhsjX6hrnQYifn3TSRIc00Ir+SPVKJCNYSHh VFc6c9MBRba7KeHz3KuohIVeCS/qBMmTMRiiUZ9XWj63PxxXWTacKgYgJNlrmt8ftdULm17HenMZ7S/s5zJ9gIMj8wNRFynE9MDSZii4ksUFBYGKLG4sonM4VZiEwaTY7Nj6d3rlp5Ut3MF1nhrYKUsluhbegx6tURVg4sUaxRNzRW0trupr7Vh0OsJNmoC4B04mkOwMYjIEIFgo47wsDDq6uv9PBwchl5Zgdd37V0D+4ay58JF0iLNDDWHUdXgYmByMlqtqpsMyclJrJ6TESgI5tjsVFZWcd/wcHTqObyzZTN/WJqFNd7q97XP5tH06lvX3KxJk5A62LWzNTQ6iI+PB2D78ULaXG6uVB8HIDKqzy1xEfLyz29IHTJgXpfOHiKKm12/1f3fKn/ZoQGd4zgaHPR66Bc8O3sKdbWNFFXY2f77xTfcQS2t7dz79OscKSn1G69ls5k9Y0pH/O5FkmQ0GiVtzU3Up6cEnqsfM4r8yTMD2tr5qVGrmTVzNnZ7DYN+/BKvPzaDvbn+bOH7L9zcMOafKdiofPrNXSv/9LSoV2hNpu+Ag+hye8WOfK7oz75/IxHT7hgMBEyo6rpEjaQ0oBXdgQSOoiMhIyg1qDsSmSqNlkXjR/J1ZR3psRrWHS7lSnkVQ00mRLH7QuqDtGz89XxGLHkVe2srr+06xX1ZE1GplAEuBlCcP9EF1DOTZwY8gc5PjVrNwAEDUKkUfLI/h9RYC0fPluF0uZk/PpGaWgeNThei14mkNFwAGl1uLxq10tPSVF//9Ju7Vv6/Jbo/+HBDP6BPJ/10wJIuQBAgdETeZiABUA5MTja5vVLq2OffZfWcDEqbZWob3Lz1i/kE6bTciOLyzxQw8dn/ptnj5uiLP2L0qGtRoNfro3be9/CdLkIxNIl9MxYid9iT60s0Ol0Q48aMQVBqiH7Yv2va25pZs/sEtR//ri339Pnp1RVlRQsWzKv61hz7z2qPLJh/Bbjyje6DN3umrc 1dmhZp7tcZfe05U8jZs+cYPDjlhu5f6pABfPWn51jw/Fs89+4B/paaikbjn6aUsw/f6aKApkodSW2fdC0I0Wq0KDt20OZtO5k6MJEopZMNeSWsnpOBKdT04ZRJ4w7e1jUvjUb5yxcXTw2cx5o7YQjzVm3F2dRIW3PTTYOVT9Y8TZLFzNpNO/2L1NxE7WNLqB8zipIZ85k4cRKzZz3AqPSRAS/I75e7GJySwrnCYpZvzmZ6SjgHLjWTY7Pz0IypbkEQVt4RVVqXy3N80Yr3Mo4WljAzY4Dfhat28uKPJ9PU2MigwUMw6HU9Gk+v18ehoydoam4jIWcXiVnTaeg3lMjekV2MZWFhETm5/kxXyqBBGA0GUpau5tGxI9DrRY7llfDsw+OYPWPKbwVB+NUdUaVVqRRLX37iPrm+pY2WFolh/ftQ39TC6s3ZqHVGPv10J7m5eTgaulellUoFk+/K5B6zxMDFT6DJmEZk78hu3khTYyMyMrExMRgNBub9+gOmDx1ASm8FeRdtJMXFMH3qXRdkWX7p28r9L38+VhTFfEmSlu178dHXRv58LXq9SFiwnnWHv6Kows6rP7mbsrIyLhQUkDZiBKEmExqNJuCWeb0+1KOndouSrk9U94mJIUgfhLOlndTH1xBh1LNwaAyXbA20OZ2senGxR6NRLhBFseWOObBxXSn8ve07v1j40JruWamPl82mryWc4pJiXG534PDFrJmzAxFaJ5A9/d/Q2MLGTdsCAUZn62sKYc/vF2GNt84VRfEv30Xe2+ZEtyiKP5QkiU818sJ7Xt4e6B9njeOhNdsYZ43jqXuHEW8Np6GplaqKq1RXVRLbN7ZbbrgT1OqqavZmn2fhm1sCY3UGGGmRZjaueARrvPWH3xXU2wrY68B15/Tu89iSlz4ix2bngRG9OVJS6v9b4wdlWdZoxiZGU1Fl61JB9nm9VFTZKK5sYvvxwi7nZ9MizQxPjORISSnzRg9n1fIHXZHm0CW CIKz/uyJJbsMmSdIjNbWONS+9/4mp0xW7vnUW/4pKy9EZDOg0KnQaNRWVNlKT4sgvKmX+tFSWf7C3R1qZPvWu8x2ceurvlfG2/HGHKIof+HzS4VefeWTN4ntGzVi54UggbZgWaaZXqJo4sxGdWsnYwbE47BWYzBa2H4exg/3UYDJ2LU6vnpPB/ffd44qJCntJllkpimL7/yn3wW3eJEmaADxXUlwybe+JC6zfncNpez1zRg6lqLSczOFWahvc6NT+ioROraSs1kFRpY3UuBjmj08kMyPNHdHLtFGWWaFQiFf/EXLd9sBeB3A/YC7wUGVlVWpZeQUtba4uP0kymS2B/G90dFRjRC/TAWCnIAjbBEFw/CPluWOA/Ybl18iyPEoQhFhZlvsDYofP6hME4bQsy1WiKJ78Z8rwv68rXxupyYrsAAAAAElFTkSuQmCC --]
[-- Type: image/png, Size: 5630 bytes --]

[-- Attachment #1.5: data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAA0AAABWCAIAAACbwIsfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA25pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxQjgwMkU1QjBBNTJFNTExOTZDMDk1QTY0NTNCNzdCOSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCOUNDMTk3NDkwQUYxMUU4QjM1NjkzQUI0QTM2NjcxRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCOUNDMTk3MzkwQUYxMUU4QjM1NjkzQUI0QTM2NjcxRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiP iA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYWUwZDVkZS0xY2ExLTAyNGQtOGJjMC02MmU0NTk3MjcxMjgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MUI4MDJFNUIwQTUyRTUxMTk2QzA5NUE2NDUzQjc3QjkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WqVInAAABcElEQVR42rxW0Y7DMAi7oP7/H7e93rgxCraTvgxpW9U4GBwgG+d57vs+3vZDzK7PcRzn2xhu85+MgF63DHrAy6jN/QW0xFBxgZj4yy4hGsQ34dX6VRzbsDlv6Hc9X98OzXLWfOe6aOoPr9fLY10KGvDCEP95o07NLO+JlFfzUDrX+I6XQVBAP/kyKK5TVog4Pswbddq94vMQtUh5S5RAlwd59ChBf2RPIF9dL3Ne0B/QcHxdyGf9a7odVf/O54Y4Q8tJTfx1FaguGUHnS1/DuohlGt+XcT5vYur0C8z6W3jLmV6+zbXM29H+xmI5I/oby27E7W89WarLQLaE6zmZ/mcQ6D/cdRcMYopXnVsHFZdV5+7vFp+HWAJd0qVIA3ipvyDNvMqfOLpbHl0XkEeHKn9MGqVL7Y/BDfAWXeh5lAech2cA94B8y3lg3l7VS3W6qvNq/8556TyAfYl5xUmAOSSoV3XZenxzf0v3h0b/CjAAAjjFKqpZ9mUAAAAASUVORK5CYII= --]
[-- Type: image/png, Size: 1017 bytes --]

[-- Attachment #1.6: data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjMWFlOTJkMC1hMDYxLWEwNGItYWJhYy0zMjIwMDI5ZjlkNjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzcwOTQ0QTg2RTE0MTFFOEFGOENDREU1MzVFQzgyOTkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzcwOTQ0QTc2RTE0MTFFOEFGOENDREU1MzVFQzgyOTkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd 3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTEyMzY2MTItNjk2My1lMTRkLWIzMjAtYjFmMDAxZTc0M2QwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmMxYWU5MmQwLWEwNjEtYTA0Yi1hYmFjLTMyMjAwMjlmOWQ2OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Plvo+YwAAAHsSURBVHjapNVBSBRhFMDx2dUKl6CQYBdx7RAECmkZRJlopxWClA4ldJBK8CCV3iIEizqshiDqgqmgIthBvYh0qFMZmQcp2D1o1xDZLpUQhnvY7f/gDXz7MewO7YMfM7PMvHkz35u3gfBE0vGI47iLdpzEAcpxFN+wiLfIpR+cy7sw6JHsHj4igDu4hGto1v0RXMcH1NkXB4wKJXlCK+nXqgpFLebwgirfeFU4jDR6fCST2EYbnkQSqSt2whhq8FyPX2ILl4sk3cdtjJM05CaUd/UMj4wTZf8ibhYrk8fdYzPlXi8JW/AFP4zzZIVfyZ0df7GAW1QZlIQ3sGqdENEbRHFen0AWqhGTGMIZo8oMmxTqZUUvYNBKKBefxm/1FH9Qhgo9pxtn8UuPN+SGUuExn6sqzT6qXZDDKX06N3blyYKO/5BKBzCDHf0tap8kCQ8R8pFw39jP6PaI8Vu1vE5J+BVXndKjSbpFEq6ho5RMtIsMDZkSSVnldcQRNnpxFpVa/V+M4aeRQ6bNe2zqcReWaZ+sOxxi2gad/1FglfZxKwkP3FV+h+8e/VgsTmBJPjtJZk+bx/qFTPtc9VodsnGSffYaX1n0asd/wkNtXjsa9BuXgXDfnIWODlM75rGiA+J1gb+APv1i8uKfAAMAqG5043NqiAQAAAAASUVORK5CYII= --]
[-- Type: image/png, Size: 1280 bytes --]

[-- Attachment #1.7: data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjMWFlOTJkMC1hMDYxLWEwNGItYWJhYy0zMjIwMDI5ZjlkNjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTEwODgzNzM2RTE0MTFFODk0MjBCMzM1MUYzOTA0RTYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTEwODgzNzI2RTE0MTFFODk0MjBCMzM1MUYzOTA0RTYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd 3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTEyMzY2MTItNjk2My1lMTRkLWIzMjAtYjFmMDAxZTc0M2QwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmMxYWU5MmQwLWEwNjEtYTA0Yi1hYmFjLTMyMjAwMjlmOWQ2OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pn+g7bAAAAHiSURBVHjajJU9SEJRFMefL0MIWtVoCKE1csymiAiCcImIIJIKWgoaapFoCaqhxdApKFKC6GOqQEqJpmwJJGlosojKnJoK0aj/gfPgcrpP34Ef+O475++993w8ly9+b2jMDUbBGGgDFV73gHdwCI5BrTTf9S9Q2gDYAGmwAJ7F+w4wA3IgCrLqS5fYIQkMgmnwYdQ3H9gFl9jllrVoKg4REAJhB2IG+5Bvrz9RiEjBAJhl0R/DuZHvJMVCNKAKroElcfk6GwE7YA60gCCOW+HYdUvQy/eRUwL3QZ8Qo0Sc8P0mwCeYws6aIUqxPvz2kuAQOBfBrSADNoGf18aFTxO4hViVn89IiwSDYndkR7x7OsobyINu4UP1eKA8k0bQzTt4Fc5h5X5dGjGyR/FMGn7T5vJXQKlBhjO6RZMD28V6gY9pZ19gT6yRRsnkwJAmaBFc2Agua05AGnmTe3ZYeUH11ck9WxVBv2AVxDR/QhppSkqZ2yjEmfrmzFO99bDzC7gCcXAnlVB/FFtGCZWt4RDgYu5XusWpefjPJiBYtLJcBNsgyQXr1Mg3RbEkJqdNko98yq1oOBhf5HsDsaTdgKW59sCtmOZ592QzYKlloxDLNprY5HDNn4BYnU8AZbsmg/8EGACL8oBQmLmAwgAAAABJRU5ErkJggg== --]
[-- Type: image/png, Size: 1329 bytes --]

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: Unicode ZWJ sequence
  2023-08-18 13:02 Unicode ZWJ sequence Alexandre ZANNI
@ 2023-08-18 15:24 ` Mikael Magnusson
  2023-08-19 16:16   ` Bart Schaefer
  2023-08-19 15:53 ` Roman Perepelitsa
  1 sibling, 1 reply; 10+ messages in thread
From: Mikael Magnusson @ 2023-08-18 15:24 UTC (permalink / raw)
  To: Alexandre ZANNI; +Cc: zsh-workers

On 8/18/23, Alexandre ZANNI <alexandre@acceis.fr> wrote:
> Hi,
>
> I'm new to this newsletter, I don't know if I'm reporting this issue
> correctly. All I found is this email address.
>
> TL;DR: zsh is not handling Unicode ZWJ (Zero Width Joiner) sequence.
>
> "👩‍❤️‍👨" (that will probably not render here) is a Unicode grapheme
> composed of multiple code points (U+1f469 U+200d U+2764 U+fe0f U+200d
> U+1f468). It's basically combining some emojis together to craft a more
> complex one. For that the Zero Width Joiner ‍(U+200D) and the Variation
> Selector-16 (U+FE0F) are used. But instead of displaying one grapheme, zsh
> is displaying each individual code point.
> As you can see below the terminal emulator named foot is capable of
> displaying such a grapheme, and other command line shell like bash or fish
> are capable of it too, only zsh can't.
>
> [1]
> Using zsh 5.9.
>
> Is this problem already known?

It's actually not possible to display these emojis in a terminal
correctly. There is no way for the program inside the terminal (zsh)
to know whether the rendering application will combine emojis with a
ZWJ between them, and thus has no idea what width they will take up.
This makes it impossible to predict where linebreaks will happen, etc,
leading to display corruption unless you happen to guess correctly.

-- 
Mikael Magnusson


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

* Re: Unicode ZWJ sequence
  2023-08-18 13:02 Unicode ZWJ sequence Alexandre ZANNI
  2023-08-18 15:24 ` Mikael Magnusson
@ 2023-08-19 15:53 ` Roman Perepelitsa
  2023-08-19 17:11   ` Wesley Schwengle
  1 sibling, 1 reply; 10+ messages in thread
From: Roman Perepelitsa @ 2023-08-19 15:53 UTC (permalink / raw)
  To: Alexandre ZANNI; +Cc: zsh-workers

On Fri, Aug 18, 2023 at 3:03 PM Alexandre ZANNI <alexandre@acceis.fr> wrote:
>
> As you can see below the terminal emulator named foot is capable of
> displaying such a grapheme, and other command line shell like bash [...]

Does bash really support this? What happens if you repeatedly press
Backspace after pasting 👩‍❤️‍👨? Anether test would be to paste "foo
x👩‍❤️‍👨x bar" and verify that you can delete the middle word with
Ctrl-W without any artifacts.

Roman.


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

* Re: Unicode ZWJ sequence
  2023-08-18 15:24 ` Mikael Magnusson
@ 2023-08-19 16:16   ` Bart Schaefer
  2023-08-19 16:46     ` Mikael Magnusson
  0 siblings, 1 reply; 10+ messages in thread
From: Bart Schaefer @ 2023-08-19 16:16 UTC (permalink / raw)
  To: Alexandre ZANNI; +Cc: zsh-workers

On Fri, Aug 18, 2023 at 8:24 AM Mikael Magnusson <mikachu@gmail.com> wrote:
>
> On 8/18/23, Alexandre ZANNI <alexandre@acceis.fr> wrote:
> >
> > TL;DR: zsh is not handling Unicode ZWJ (Zero Width Joiner) sequence.
> >
> > "👩‍❤️‍👨" (that will probably not render here) is a Unicode grapheme
[...]
> > Is this problem already known?
>
> It's actually not possible to display these emojis in a terminal

"Display" isn't quite the correct word here.  "Edit" rather.

If you disable the "zle" option, you'll see the grapheme.


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

* Re: Unicode ZWJ sequence
  2023-08-19 16:16   ` Bart Schaefer
@ 2023-08-19 16:46     ` Mikael Magnusson
  2023-08-19 17:07       ` Bart Schaefer
  0 siblings, 1 reply; 10+ messages in thread
From: Mikael Magnusson @ 2023-08-19 16:46 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: Alexandre ZANNI, zsh-workers

On 8/19/23, Bart Schaefer <schaefer@brasslantern.com> wrote:
> On Fri, Aug 18, 2023 at 8:24 AM Mikael Magnusson <mikachu@gmail.com> wrote:
>>
>> On 8/18/23, Alexandre ZANNI <alexandre@acceis.fr> wrote:
>> >
>> > TL;DR: zsh is not handling Unicode ZWJ (Zero Width Joiner) sequence.
>> >
>> > "👩‍❤️‍👨" (that will probably not render here) is a Unicode grapheme
> [...]
>> > Is this problem already known?
>>
>> It's actually not possible to display these emojis in a terminal
>
> "Display" isn't quite the correct word here.  "Edit" rather.
>
> If you disable the "zle" option, you'll see the grapheme.

Well, I wasn't even really talking about zsh specifically, but I
suppose if you don't care where any text ends up on the screen then
yes, you can display them.

That said, if you want randomly corrupted listings you can setopt
combiningchars and zsh will output even ZWJ directly to the terminal.

(I have a vague memory I argued against this at some point in the past
since combining characters are deterministic but emojis are not, it
presumably never went anywhere though.

 It feels like the most correct thing to do is to not output ZWJ at
all when combiningchars is on, since then we know the terminal will
not combine emojis and we know where everything is. (Barring some
other mechanism for the terminal to give a wcwidth-like thing for
emoji combinations to the program running inside which seems on the
far end of the "not really worth it" scale.))

-- 
Mikael Magnusson


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

* Re: Unicode ZWJ sequence
  2023-08-19 16:46     ` Mikael Magnusson
@ 2023-08-19 17:07       ` Bart Schaefer
  2023-08-19 17:11         ` Bart Schaefer
  0 siblings, 1 reply; 10+ messages in thread
From: Bart Schaefer @ 2023-08-19 17:07 UTC (permalink / raw)
  To: Mikael Magnusson; +Cc: Alexandre ZANNI, zsh-workers

On Sat, Aug 19, 2023 at 9:46 AM Mikael Magnusson <mikachu@gmail.com> wrote:
>
> Well, I wasn't even really talking about zsh specifically, but I
> suppose if you don't care where any text ends up on the screen then
> yes, you can display them.

In this case he's got a terminal emulator that is able to display the
grapheme, and in fact as the output of "echo" it works fine, it's only
on the command line that zsh is behaving differently -- and that's
because zle understands the potential problems you described and does
what it can to avoid them.

> That said, if you want randomly corrupted listings you can setopt
> combiningchars and zsh will output even ZWJ directly to the terminal.

It doesn't, though -- even with combiningchars you don't get the
joins, you just get the red heart:

% echo "👩<200d>❤<fe0f><200d>👨"
👩‍❤️‍👨
% setopt combiningchars
% echo "👩<200d>❤️<200d>👨"
👩‍❤️‍👨
%

> (I have a vague memory I argued against this at some point in the past

I think you may have prevailed.

I any event we're not talking about output in the stdout sense here,
we're talking about what zle has in the editor buffer after it gets
terminal input.


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

* Re: Unicode ZWJ sequence
  2023-08-19 15:53 ` Roman Perepelitsa
@ 2023-08-19 17:11   ` Wesley Schwengle
  2023-08-20  0:06     ` maxbeckie
  0 siblings, 1 reply; 10+ messages in thread
From: Wesley Schwengle @ 2023-08-19 17:11 UTC (permalink / raw)
  To: zsh-workers

On 8/19/23 11:53, Roman Perepelitsa wrote:
> On Fri, Aug 18, 2023 at 3:03 PM Alexandre ZANNI <alexandre@acceis.fr> wrote:
>>
>> As you can see below the terminal emulator named foot is capable of
>> displaying such a grapheme, and other command line shell like bash [...]
>
> Does bash really support this? What happens if you repeatedly press
> Backspace after pasting 👩‍❤️‍👨? Anether test would be to paste "foo
> x👩‍❤️‍👨x bar" and verify that you can delete the middle word with
> Ctrl-W without any artifacts.

Personally I think the way zsh does it is the correct way

I did a few tests with zsh/bash/fish and sh (although on debian that is
dash). Zsh acts the most sane out of all the shells:

https://asciinema.org/a/603574

Cheers,
Wesley

--
Wesley Schwengle
E: wesley@opndev.io




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

* Re: Unicode ZWJ sequence
  2023-08-19 17:07       ` Bart Schaefer
@ 2023-08-19 17:11         ` Bart Schaefer
  0 siblings, 0 replies; 10+ messages in thread
From: Bart Schaefer @ 2023-08-19 17:11 UTC (permalink / raw)
  To: Mikael Magnusson; +Cc: Alexandre ZANNI, zsh-workers

On Sat, Aug 19, 2023 at 10:07 AM Bart Schaefer
<schaefer@brasslantern.com> wrote:
>
> It doesn't, though -- even with combiningchars you don't get the
> joins, you just get the red heart:
>
> % echo "👩<200d>❤<fe0f><200d>👨"

Not going to resort to screenshots here but will mention that in my
terminal and while editing this in gmail, the heart above is small and
black, but when displayed by gmail after the fact, it is large and
red.  So it's not just zsh that acknowledges the difficulty of
handling some of these code points.


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

* Re: Unicode ZWJ sequence
  2023-08-19 17:11   ` Wesley Schwengle
@ 2023-08-20  0:06     ` maxbeckie
  2023-08-20  0:13       ` Lawrence Velázquez
  0 siblings, 1 reply; 10+ messages in thread
From: maxbeckie @ 2023-08-20  0:06 UTC (permalink / raw)
  To: Wesley Schwengle; +Cc: zsh-workers

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

unsubscribe please


Aug 19, 2023, 10:12 by wesley@opndev.io:

> On 8/19/23 11:53, Roman Perepelitsa wrote:
>
>> On Fri, Aug 18, 2023 at 3:03 PM Alexandre ZANNI <alexandre@acceis.fr> wrote:
>>
>>>
>>> As you can see below the terminal emulator named foot is capable of
>>> displaying such a grapheme, and other command line shell like bash [...]
>>>
>>
>> Does bash really support this? What happens if you repeatedly press
>> Backspace after pasting 👩‍❤️‍👨? Anether test would be to paste "foo
>> x👩‍❤️‍👨x bar" and verify that you can delete the middle word with
>> Ctrl-W without any artifacts.
>>
>
> Personally I think the way zsh does it is the correct way
>
> I did a few tests with zsh/bash/fish and sh (although on debian that is
> dash). Zsh acts the most sane out of all the shells:
>
> https://asciinema.org/a/603574
>
> Cheers,
> Wesley
>
> --
> Wesley Schwengle
> E: wesley@opndev.io
>


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

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

* Re: Unicode ZWJ sequence
  2023-08-20  0:06     ` maxbeckie
@ 2023-08-20  0:13       ` Lawrence Velázquez
  0 siblings, 0 replies; 10+ messages in thread
From: Lawrence Velázquez @ 2023-08-20  0:13 UTC (permalink / raw)
  To: maxbeckie; +Cc: zsh-workers

On Sat, Aug 19, 2023, at 8:06 PM, maxbeckie@tutanota.com wrote:
> unsubscribe please

You can unsubscribe by emailing <zsh-workers-unsubscribe@zsh.org>.

(See also <https://zsh.sourceforge.io/Arc/mlist.html>.)

-- 
vq


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

end of thread, other threads:[~2023-08-20  0:14 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-18 13:02 Unicode ZWJ sequence Alexandre ZANNI
2023-08-18 15:24 ` Mikael Magnusson
2023-08-19 16:16   ` Bart Schaefer
2023-08-19 16:46     ` Mikael Magnusson
2023-08-19 17:07       ` Bart Schaefer
2023-08-19 17:11         ` Bart Schaefer
2023-08-19 15:53 ` Roman Perepelitsa
2023-08-19 17:11   ` Wesley Schwengle
2023-08-20  0:06     ` maxbeckie
2023-08-20  0:13       ` Lawrence Velázquez

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

	https://git.vuxu.org/mirror/zsh/

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 NNTP newsgroup(s).