i3ipc-python icon indicating copy to clipboard operation
i3ipc-python copied to clipboard

sway: pango markup not fully supported (span rendered as plain text)

Open CastixGitHub opened this issue 5 years ago • 3 comments

this works flawless in i3. with sway however, only <b> and <i> seems to be supported, meanwhile span is rendered as text.

>>> vars(i3.command('rename workspace "i: work" to "<b>b</b><span font_desc=\"file-icons\">\ue926</span>"')[0])
{'ipc_data': {'success': True}, 'success': True, 'error': None}
>>> vars(i3.command('rename workspace "i: work" to "<b>b</b><i>i</i>"')[0])
{'ipc_data': {'success': True}, 'success': True, 'error': None}
>>> vars(i3.command('rename workspace "i: work" to "<span foreground=\"blue\">blue</span>"')[0])
{'ipc_data': {'success': True}, 'success': True, 'error': None}

tried also to put bindsym $mod+Shift+i workspace <span foreground="blue">blue</span> in .config/sway/config and the blue blue text is there, so this is ipc related

CastixGitHub avatar Jun 21 '20 21:06 CastixGitHub

I wonder if it has something to do with how sway unescapes those quotes. You don't have quote escapes in the example that works and that probably makes a difference.

acrisci avatar Aug 30 '20 01:08 acrisci

well, you are right

anyway, on i3 if I do

>>> vars(i3.command('rename workspace i: work to <span foreground=\"blue\">blue</span>')[0])
{'ipc_data': {'success': False, 'parse_error': True, 'error': "Expected one of these tokens: 'to'", 'input': 'rename workspace i: work to <span foreground="blue">blue</span>', 'errorposition': '                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'}, 'success': False, 'error': "Expected one of these tokens: 'to'"}

>>> vars(i3.command('rename workspace "i: work" to <span foreground=\"blue\">blue</span>')[0])
{'ipc_data': {'success': True}, 'success': True, 'error': None}
# worked
>>> vars(i3.command('rename workspace "i: work" to <span foreground="blue">blue</span>')[0])
{'ipc_data': {'success': True}, 'success': True, 'error': None}
# worked

so i need to quote before to (now immagine doing the reverse):

>>> vars(i3.command('rename workspace <span foreground="blue">blue</span> to i: work')[0])
{'ipc_data': {'success': False, 'parse_error': True, 'error': "Expected one of these tokens: 'to'", 'input': 'rename workspace <span foreground="blue">blue</span> to i: work', 'errorposition': '                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'}, 'success': False, 'error': "Expected one of these tokens: 'to'"}
>>> vars(i3.command('rename workspace <span foreground="blue">blue</span> to "i: work"')[0])
{'ipc_data': {'success': False, 'parse_error': True, 'error': "Expected one of these tokens: 'to'", 'input': 'rename workspace <span foreground="blue">blue</span> to "i: work"', 'errorposition': '                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'}, 'success': False, 'error': "Expected one of these tokens: 'to'"}
>>> vars(i3.command('rename workspace "<span foreground="blue">blue</span>" to "i: work"')[0])
{'ipc_data': {'success': False, 'parse_error': True, 'error': "Expected one of these tokens: 'to'", 'input': 'rename workspace "<span foreground="blue">blue</span>" to "i: work"', 'errorposition': '                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'}, 'success': False, 'error': "Expected one of these tokens: 'to'"}
>>> vars(i3.command('rename workspace "<span foreground=\"blue\">blue</span>" to "i: work"')[0])
{'ipc_data': {'success': False, 'parse_error': True, 'error': "Expected one of these tokens: 'to'", 'input': 'rename workspace "<span foreground="blue">blue</span>" to "i: work"', 'errorposition': '                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'}, 'success': False, 'error': "Expected one of these tokens: 'to'"}
>>> vars(i3.command('rename workspace "<span foreground=\\"blue\\">blue</span>" to i: work')[0])
{'ipc_data': {'success': True}, 'success': True, 'error': None}

if I do the same with sway, if I do \\"blue\\" or \"blue\" I see the literal <span in the bar. to make it become blue, i have to remove \ but then, if I press the button on the bar, a new workspace named as the literal <span is created :face_with_head_bandage: so I cannot access to it anymore until I rename it (but opposite to i3 i can't quote the input argument (the part before to) otherwise it says There is no workspace with that name)

so do you agree it should work with:

vars(i3.command('rename workspace "i: work" to <span foreground=\\"blue\\">blue</span>')[0])

on i3 and with

vars(i3.command('rename workspace i: work to <span foreground="blue">blue</span>')[0])

on sway, then there is that click issue with sway... (https://github.com/swaywm/sway/issues/5652) is this inconsintency about quotes before to something i'm wrong or should be reported to sway devs too?

CastixGitHub avatar Aug 31 '20 22:08 CastixGitHub

Consider using raw strings to reduce confusion about the escapes.

If there are any differences about escaped values in the parser, you can report it on sway because it's supposed to be compatible with the i3 config.

acrisci avatar Aug 31 '20 22:08 acrisci