Menedżer okien i3: ampersand (&) w poleceniach

0

Zacząłem używać i3 i skonfigurowałem kilka klawiszy, aby zmienić nazwę obszaru roboczego, tak jak to jest napisane w dokumentach:

bindsym $mod+r i3-input -F 'rename workspace to "%s"' -P 'New name: '

Teraz zauważyłem, że nie wszystkie dane wejściowe są akceptowane: jeśli wprowadzę nazwę obszaru roboczego, np. „Poczta i wiadomości”, nazwa obszaru roboczego zostanie zmieniona na pusty ciąg znaków.

Nie znalazłem jeszcze rozwiązania tego problemu - czy to może być błąd?

Dave Vogt
źródło
Sprawdzanie wyjścia i3-msg -t get_workspaces Wygląda na to, że nazwa obszaru roboczego została zmieniona na „Poczta i wiadomości”, ale i3bar nie może poprawnie wyświetlić nazwy. Dzieje się tak również podczas tworzenia nowej przestrzeni roboczej za pomocą polecenia i3 workspace "Mail&News". To na pewno błąd. Możesz opublikować raport o błędzie i3's bug tracker .
Adaephon
Stworzyłem raport o błędzie pod adresem github.com/i3/i3/issues/1941
Adaephon

Odpowiedzi:

2

(Ta odpowiedź jest wynikiem Zgłoszenie błędu Zamieściłem. Dzięki Airblader za szybką odpowiedź.)

Prawdopodobnie ustawiłeś font w Twoim i3 konfiguracja do korzystania z Pango. Na przykład:

font "pango:SomeFont 12"

Od Podręcznik użytkownika i3 :

Nazwy obszarów roboczych są analizowane jako Znaczniki Pango przez i3bar.

Znaczniki Pango są oparte na XML jako takie znaki & i < mają specjalne znaczenie, ponieważ są częścią składni XML.

Jeśli chcesz mieć & lub < w nazwie obszaru roboczego musisz uciec i napisać &amp; lub &lt; zamiast:

rename workspace to "Mail&amp;News"
rename workspace to "ten&lt;eleven"

Oczywiście jest to raczej niewygodne podczas zmiany nazwy i3-input. Możesz użyć dmenu dla bardziej przyjaznej dla użytkownika metody.

Zapisz następujący skrypt jako workspace-renamer.sh i spraw, aby był wykonywalny:

#!/bin/bash -

# get name from dmenu. 
$wsname=$(echo -n | dmenu)
# escape backslashes to avoid inadvertently escaping other characters
wsname=${wsname//\\/\\\\}
# escape double quotes as the name is passed inside double quotes to i3-msg
wsname=${wsname//\"/\\\"}
# escape ampersand because of pango
wsname=${wsname//&/&amp;}
# escape less-than sign also because of pango
wsname=${wsname//</&lt;}

# call i3-msg to rename workspace
i3-msg rename workspace to "\"${wsname}\""

Następnie dodaj to do swojego i3 konfiguracja:

bindsym $mod+r exec --no-startup-id /path/to/workspace-renamer.sh

To automatycznie ucieka \, ", & i <, aby nazwa, którą wpiszesz, była wyświetlana na i3bar. Jest to oczywiście tylko szybki prototyp i można go jeszcze ulepszyć. Możesz na przykład wymienić echo -n z czymś, co zapewnia rozdzieloną listę opcji jako preset.

Adaephon
źródło