Вы можете попробовать использовать привязку клавиш вместо команд.
В случае, если вы хотите, чтобы обе команды были доступны в рамках одной комбинации, тогда поместите в файл config ~/.config/zathura/zathurarc что-то вроде:
map feedkeys ":set recolor-lightcolor \#002b36:set recolor-darkcolor \#839496"
PS. Не уверен, зачем вам это нужно, но если вы также можете просто сохранить это по умолчанию в том же конфигурационном файле, так что он будет загружаться каждый раз, когда вы запускаете zathura без дополнительных движений. Просто добавьте свои строки в упомянутый выше файл конфига.
PS. Более подробную информацию о конфигурационном файле вы можете найти на странице официальной документации
Этот метод не рекомендуется. Не используйте. Если это сломает вашу систему, вы сохраните все части.
Хорошо! Все еще со мной? Для несложного случая с соответствующими включениями ( fcntl
, для open
) перенаправление стандарта в другое место (теоретически) возможно:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(void)
{
while (1) {
printf("blat\n");
sleep(1);
}
exit(EXIT_SUCCESS);
}
Скомпилировано и запускается:
$ cc -g blat.c -o blat
$ ./blat &
Теперь в каком-либо другом терминале (это может привести к нарушению политик безопасности по разным очевидным причинам, учитывая то, что отладчик может делать с живым процессом) с использованием PID, выданного для фонового задания:
$ gdb -q -p 3727
...
(gdb) call close(1)
$1 = 0
После чтения close (2)
мы определяем, что это успешно, стандартный ввод закрыт. Давайте откроем новый файл ...
(gdb) call open("/home/userrunningblat/blat.out", O_CREAT|O_WRONLY, 0666)
No symbol "O_CREAT" in current context.
Ну стреляйте. В каком магическом числе отсутствуют эти символы? В третьем терминале, используя нашу удобную compile-and-execute-some-C-программу :
$ cfu 'printf("%d\n", O_CREAT|O_WRONLY)'
65
Или вы можете зайти в каталог / usr / include
и выяснить форматы ввода и побитовое ИЛИ сами, но это очень раздражает. (Обратите также внимание на то, что эти числа могут варьироваться в зависимости от ОС.) Вернемся к gdb
!
(gdb) call open("/home/userrunningblat/blat.out", 65, 0666)
$2 = 1
(gdb) quit
$ tail -f blat.out
Это означает, что, поскольку мы ранее закрыли стандартный выход ( 1
), этот вызов open (2)
повторно использовал этот номер дескриптора файла, поэтому после выхода из gdb
стандартный выход теперь должен идти к этому файлу.
Этот метод может быть невозможен для более сложных программ, может быть невозможен из-за ограничений безопасности, отсутствия информации отладчика, может вызвать ужасную поломку и т. Д.