Unicode-Zeichen in der Statusleiste von uxterm und dwm

7

Ich möchte chinesische Schriftzeichen in der Statusleiste von dwm anzeigen. Insbesondere möchte ich, dass die Symbole die verschiedenen Tags in dwm darstellen. Bei Verwendung eines Online-Konverters stellte ich fest, dass die Unicode-Darstellung für die gewünschten Symbole wie folgt lautet:

憤怒
unicode: 憤怒

Das Einfügen der Unicode-Zeichen direkt in meine config.hfunktioniert nicht, sie werden nicht einmal in angezeigt vim. Mein Gebietsschema ist auf eingestellt ISO-8859-1und ich verwende die Schriftart Liberation Mono für dwm.

Was kann ich tun, um diese Symbole dort oben zu platzieren?

BEARBEITEN Nach den Anweisungen von Mat und dem Patchen von dwm hängt der Patch-Befehl. Laufen strace:

[max@prometheus dwm-6.0]$ strace patch -Np1 ../dwm-pango/dwm-pango/dwm-6.0-pango.patch 
execve("/usr/bin/patch", ["patch", "-Np1", "../dwm-pango/dwm-pango/dwm-6.0-p"...], [/* 30 vars */]) = 0
brk(0)                                  = 0x1d52000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dc4713000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=92801, ...}) = 0
mmap(NULL, 92801, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9dc46fc000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\25\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1983446, ...}) = 0
mmap(NULL, 3804112, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9dc4152000
mprotect(0x7f9dc42e9000, 2097152, PROT_NONE) = 0
mmap(0x7f9dc44e9000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x7f9dc44e9000
mmap(0x7f9dc44ef000, 15312, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f9dc44ef000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dc46fb000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dc46fa000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dc46f9000
arch_prctl(ARCH_SET_FS, 0x7f9dc46fa700) = 0
mprotect(0x7f9dc44e9000, 16384, PROT_READ) = 0
mprotect(0x61a000, 4096, PROT_READ)     = 0
mprotect(0x7f9dc4714000, 4096, PROT_READ) = 0
munmap(0x7f9dc46fc000, 92801)           = 0
brk(0)                                  = 0x1d52000
brk(0x1d75000)                          = 0x1d75000
getpid()                                = 10412
lstat("/tmp/po8GP02f", 0x7fffdc075210)  = -1 ENOENT (No such file or directory)
lstat("/tmp/pikSWXEs", 0x7fffdc075210)  = -1 ENOENT (No such file or directory)
lstat("/tmp/prB1wVgF", 0x7fffdc075210)  = -1 ENOENT (No such file or directory)
lstat("/tmp/pp27ATSR", 0x7fffdc075210)  = -1 ENOENT (No such file or directory)
rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7f9dc4186cb0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGHUP, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGHUP, {0x40cd90, [], SA_RESTORER, 0x7f9dc4186cb0}, NULL, 8) = 0
rt_sigaction(SIGPIPE, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGPIPE, {0x40cd90, [], SA_RESTORER, 0x7f9dc4186cb0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {0x40cd90, [], SA_RESTORER, 0x7f9dc4186cb0}, NULL, 8) = 0
rt_sigaction(SIGXCPU, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGXCPU, {0x40cd90, [], SA_RESTORER, 0x7f9dc4186cb0}, NULL, 8) = 0
rt_sigaction(SIGXFSZ, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGXFSZ, {0x40cd90, [], SA_RESTORER, 0x7f9dc4186cb0}, NULL, 8) = 0
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {0x40cd90, [], SA_RESTORER, 0x7f9dc4186cb0}, NULL, 8) = 0
fstat(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
open("/tmp/pp27ATSR", O_RDWR|O_CREAT|O_EXCL|O_TRUNC, 0600) = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dc4712000
lseek(3, 0, SEEK_CUR)                   = 0
fstat(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dc4711000
read(0, 

Könnte mir etwas fehlen?

n0pe
quelle

Antworten:

8

Ich glaube nicht, dass Sie Unicode-Unterstützung erhalten, dwmohne es zu patchen (und insbesondere zusätzliche Abhängigkeiten hinzuzufügen pango).

Wenn dies eine Option für Sie ist, dwm-pangoscheint das Arch-Paket zu funktionieren. (Laden Sie den Tarball herunter, entpacken Sie ihn und patchen Sie Ihren dwm mit der Patch-Datei - Sie müssen Arch nicht verwenden. Der Patch wird mit ein wenig Flaum darüber gepatcht dwm-0.6.)

$ tar xzf dwm-6.0.tar.gz 
$ tar xzf dwm-pango.tar.gz 
$ cd dwm-6.0
$ patch -Np1 < ../dwm-pango/dwm-6.0-pango.patch 

Danach können Sie beispielsweise Ihre Konfigurationsdatei bearbeiten und Unicode-Literale ( \ugefolgt vom Unicode-Codepunkt in Hex) in die tagsZeichenfolgen einfügen.

/* tagging */
static const char *tags[] = { "\u00c0",
                              "\u61a4\u6012",
                              "\u10e5\u10d0\u10e0",
                              "4", "5", "6", "7", "8", "9" };

Der erste Punkt ist À, der zweite sind Ihre beiden Symbole, der dritte ist eine georgische Schrift (weil ich finde, dass sie cool aussieht).

Bei einer großen Schrift ergibt sich Folgendes:

Geben Sie hier die Bildbeschreibung ein

Matte
quelle
Danke für eine tolle Antwort. Ich probiere es gerade aus. Ich habe noch nie etwas gepatcht, daher ist dies eine Lernerfahrung :)
n0pe
Ich habe versucht zu patchen und bekomme einen seltsamen Fehler. patchscheint zu hängen. Bitte sehen Sie meinen Beitrag für einenstrace
n0pe
1
Oouups tut mir leid. Patch liest nicht aus dem Argument, das Sie übergeben, sondern aus stdin. Mein Beitrag wurde aktualisiert, das musst du patch -Np1 < patch.file.
Mat
Ich habe den Patch richtig installiert, danke. Sobald ich jedoch meine Tags geändert, dwmneu erstellt und neu gestartet habe, verschwindet meine Statusleiste im Grunde genommen (es sieht so aus, als würde sie ungefähr 5 Pixel dauern, hat aber keinen Text). Könnte der Patch etwas durcheinander gebracht haben? Ich hatte vorher keine anderen Patches.
n0pe
2
Haben Sie Ihre "ursprüngliche" config.h kopiert / wiederverwendet? Wenn ja, stellen Sie sicher, dass Sie auch den fontEintrag ändern . X-Schriftartenauswahlzeichenfolgen scheinen mit diesem Patch nicht zu funktionieren. Versuchen Sie es static const char font[] = "Sans 14";. (Übrigens, verwenden Sie Xnest, um Ihre Änderungen zu testen, viel besser als Ihren Desktop ständig neu zu starten.)
Mat