Мне тут в комментариях посоветовали вместо gnome files собрать https://wiki.lxde.org/ru/PCManFM #pcmanfm
Мне это показалось хорошим вариантом, часть LXDE, ни от чего не зависит(ну, почти), на вид выглядит не очень страшно.
Что характерно, поддержку gtk3 в нем запилило сообщество Arch, а, значит, проект пользуется некоторой популярностью, потому что так-то сообщество - жопа ленивая обычно.
Замечания по ходу процесса:
* libfm для сборки потребовало gtk-doc, причем практически неотключаемым образом.
Про свои муки с #docbook я уже как-то писал, но тут получилось, что просто так обойти эту зависимость не получается.
Небольшое лирическое отступление. Проекты на GNU #autohell требуют для построения configure наличие dev части некоторых зависимых пакетов, даже если ты потом не захочешь использовать этот пакет, и отключишь его через —disable-XXX.
Поэтому зависимость от gtk-doc я пока решил так - у меня корректно собирается и устанавливается часть gtk-doc, нужная для генерации autohell скриптов, а вот потом, если не позвать —disable-gtk-doc в configure, все будет взрываться самым неприятным образом. Я, конечно, нужный —disable- зову.
* libfm потребовала некую libmenu-cache, которая потребовала libfm. Я тут немного прифигел, но таки да:
https://github.com/lxde/menu-cache
"Since version 0.7.0 the Libmenu-cache requires Libfm-extra for the menu-cache-gen menu cache generation binary. Since Libfm depends on Libmenu-cache, there is some hint for bootstrapers how to build those libraries together: you need create Libfm-extra first, you can easily do this by passing '--with-extra-only' option to configure script and installing Libfm-extra."
С моей точки зрения:
* коллега нагадил посреди комнаты
* вместо того, чтобы тихонько прибраться, повесил табличку "я нагадил, обход тут"
"А что подумал по этому поводу Кролик, никто так и не узнал, потому что Кролик был очень воспитанный"
(нет, Кролик был в ахуе, и выпал в осадок так-то)
* К сожалению, посреди процесса сборки уже самого pcmanfm, я обнаружил, что оно таки непосредственно зависит от X11, и я не могу это собрать и использовать.
Сначала я решил, что ну и хер с ним, но потом внимательнее посмотрел на код, и понял, что могу изящно обойти эту зависимость от X, потому что она используется только если запустить этот FM в качестве X Desktop.
https://git.sr.ht/~pg/mix/tree/main/item/pkgs/bin/pcmanfm/mix.sh#L34
По сути, мне пришлось заменить один файлик размером 200К на несколько заглушек. Попрошу отметить, как я изящно расставил abort() в некоторых местах, чтобы быть уверенным, что мы не обсчитываем мусор. Все очень надежно!
Короче, оно даже запустилось, и даже заработало, с некоторыми глюками. Не работает прокрутка мышью, я это списываю на то, что никто и никогда этот код с Wayland не запускал, по понятным причинам. На вид чистенько, бедненько, все, как я люблю в софте.
Самое неприятное, конечно, в другом: #libmagic
Я успел прочитать часть кода, связанную с mime info, и с запуском приложений. Код рыхлый, неприятный, видно, что проект затащили грубой силой. Знаете, вот возникает момент, когда надо выделить функцию, а ты все равно в 10 местах вставляешь еще 1 if.
Поэтому за час у меня не получилось переделать всю эту машинерию на запуск xdg-open вместо своей таблицы отображения mime types на команду, а без этого у меня оно пока неюзабельно.
Пока отложил в сторону.
Мне это показалось хорошим вариантом, часть LXDE, ни от чего не зависит(ну, почти), на вид выглядит не очень страшно.
Что характерно, поддержку gtk3 в нем запилило сообщество Arch, а, значит, проект пользуется некоторой популярностью, потому что так-то сообщество - жопа ленивая обычно.
Замечания по ходу процесса:
* libfm для сборки потребовало gtk-doc, причем практически неотключаемым образом.
Про свои муки с #docbook я уже как-то писал, но тут получилось, что просто так обойти эту зависимость не получается.
Небольшое лирическое отступление. Проекты на GNU #autohell требуют для построения configure наличие dev части некоторых зависимых пакетов, даже если ты потом не захочешь использовать этот пакет, и отключишь его через —disable-XXX.
Поэтому зависимость от gtk-doc я пока решил так - у меня корректно собирается и устанавливается часть gtk-doc, нужная для генерации autohell скриптов, а вот потом, если не позвать —disable-gtk-doc в configure, все будет взрываться самым неприятным образом. Я, конечно, нужный —disable- зову.
* libfm потребовала некую libmenu-cache, которая потребовала libfm. Я тут немного прифигел, но таки да:
https://github.com/lxde/menu-cache
"Since version 0.7.0 the Libmenu-cache requires Libfm-extra for the menu-cache-gen menu cache generation binary. Since Libfm depends on Libmenu-cache, there is some hint for bootstrapers how to build those libraries together: you need create Libfm-extra first, you can easily do this by passing '--with-extra-only' option to configure script and installing Libfm-extra."
С моей точки зрения:
* коллега нагадил посреди комнаты
* вместо того, чтобы тихонько прибраться, повесил табличку "я нагадил, обход тут"
"А что подумал по этому поводу Кролик, никто так и не узнал, потому что Кролик был очень воспитанный"
(нет, Кролик был в ахуе, и выпал в осадок так-то)
* К сожалению, посреди процесса сборки уже самого pcmanfm, я обнаружил, что оно таки непосредственно зависит от X11, и я не могу это собрать и использовать.
Сначала я решил, что ну и хер с ним, но потом внимательнее посмотрел на код, и понял, что могу изящно обойти эту зависимость от X, потому что она используется только если запустить этот FM в качестве X Desktop.
https://git.sr.ht/~pg/mix/tree/main/item/pkgs/bin/pcmanfm/mix.sh#L34
По сути, мне пришлось заменить один файлик размером 200К на несколько заглушек. Попрошу отметить, как я изящно расставил abort() в некоторых местах, чтобы быть уверенным, что мы не обсчитываем мусор. Все очень надежно!
Короче, оно даже запустилось, и даже заработало, с некоторыми глюками. Не работает прокрутка мышью, я это списываю на то, что никто и никогда этот код с Wayland не запускал, по понятным причинам. На вид чистенько, бедненько, все, как я люблю в софте.
Самое неприятное, конечно, в другом: #libmagic
Я успел прочитать часть кода, связанную с mime info, и с запуском приложений. Код рыхлый, неприятный, видно, что проект затащили грубой силой. Знаете, вот возникает момент, когда надо выделить функцию, а ты все равно в 10 местах вставляешь еще 1 if.
Поэтому за час у меня не получилось переделать всю эту машинерию на запуск xdg-open вместо своей таблицы отображения mime types на команду, а без этого у меня оно пока неюзабельно.
Пока отложил в сторону.
🔥8👍1
Я вчера написал, что не буду дочинивать #pcmanfm, но я был бы не я, если бы не взялся дочинить. Тревожный зуд что "что-то не работает" - штука такая. #debug
Прорвался сквозь сложносочиненный код для детектирования mime types, и выяснил нечто совершенно феерическое.
Если в одну программу слинковать lib/glib + lib/magic, то magic_buffer() начинает возвращать nullptr, а если без lib/glib - то "application/gzip" на данные для случайного .gz архива.
Это очень всрато, и, по сути, такое возможно только если с glib приезжают символы, которые оверрайдят какие-то weak символы в программе.
В процессе поиска я было отчаялся, но нашел флажок MAGIC_DEBUG, который выводил на экран запчасти от того, как работает #libmagic. Я там, почти случайно, понял, что:
* в libmagic есть правила на регулярках
* она их применяет линейным перебором, что, само по себе, пиздец
* libmagic ломается на первом же правиле с регулярками. Тут у меня, что называется, щелкнуло, и пазл сложился.
Вместе с glib приезжает libpcre, в составе которой есть библиотека libpcreposix.a, которая содержит в себе реализацию posix regex.x - regcomp/regexec/etc.
* (к слову, pcmanfm 4 раза дергает функцию для определения mime type для каждого файла, причем 2 раза из них реально считывает данные с диска)
Получалось так, что код собирался с определениями из musl regex.h, а линкер брал символы из pcre.
Я это починил, mime types заработали.
Ура? Пьем шампанское? Ага, конечно.
После пересборки world сломался браузер(напомню, что я использую epiphany).
Уже примерно понимая, в чем дело, я поставил breakpoint, и снял вот такой трейc:
Потому что, когда в glib была зависимость от pcreposix, ломался разбор конфига в mesa, и поэтому #zink (мой opengl driver) работал just as planned!
А когда я починил регулярки, конфиг начал обрабатываться правильно, и #zink начал глючить c новыми настройками!
Если вы когда-нибудь, зачем-то, хотели увидеть плачущего 40-летнего мужика, вам надо было быть вчера у меня дома.
Что с этим делать, пока непонятно.
Прорвался сквозь сложносочиненный код для детектирования mime types, и выяснил нечто совершенно феерическое.
Если в одну программу слинковать lib/glib + lib/magic, то magic_buffer() начинает возвращать nullptr, а если без lib/glib - то "application/gzip" на данные для случайного .gz архива.
Это очень всрато, и, по сути, такое возможно только если с glib приезжают символы, которые оверрайдят какие-то weak символы в программе.
В процессе поиска я было отчаялся, но нашел флажок MAGIC_DEBUG, который выводил на экран запчасти от того, как работает #libmagic. Я там, почти случайно, понял, что:
* в libmagic есть правила на регулярках
* она их применяет линейным перебором, что, само по себе, пиздец
* libmagic ломается на первом же правиле с регулярками. Тут у меня, что называется, щелкнуло, и пазл сложился.
Вместе с glib приезжает libpcre, в составе которой есть библиотека libpcreposix.a, которая содержит в себе реализацию posix regex.x - regcomp/regexec/etc.
* (к слову, pcmanfm 4 раза дергает функцию для определения mime type для каждого файла, причем 2 раза из них реально считывает данные с диска)
Получалось так, что код собирался с определениями из musl regex.h, а линкер брал символы из pcre.
gdb) b regexecНи к чему хорошему это не приводило, в том числе, ломался и libmagic.
Breakpoint 1 at 0x2bf0cf: file src/pcreposix.c, line 328.
(gdb) b regcomp
Breakpoint 2 at 0x2bef33: file src/pcreposix.c, line 274.
Я это починил, mime types заработали.
Ура? Пьем шампанское? Ага, конечно.
После пересборки world сломался браузер(напомню, что я использую epiphany).
Уже примерно понимая, в чем дело, я поставил breakpoint, и снял вот такой трейc:
#0 0x0000000008650e70 in regexec ()Это, конечно, прекрасное. Это реальный случай про "два бага, которые отменяли друг друга".
#1 0x0000000007dd061b in optConfStartElem ()
#2 0x000000000857acb7 in doContent ()
#3 0x0000000008578394 in contentProcessor ()
#4 0x0000000008573ab6 in XML_ParseBuffer ()
#5 0x0000000007dcf4fb in parseOneConfigFile ()
#6 0x0000000007dcf33b in driParseConfigFiles ()
#7 0x0000000007d117a9 in loader_get_user_preferred_fd ()
#8 0x00000000068d74c9 in dri2_initialize_wayland ()
#9 0x00000000068d266a in dri2_initialize ()
#10 0x00000000068c4d99 in eglInitialize ()
Потому что, когда в glib была зависимость от pcreposix, ломался разбор конфига в mesa, и поэтому #zink (мой opengl driver) работал just as planned!
А когда я починил регулярки, конфиг начал обрабатываться правильно, и #zink начал глючить c новыми настройками!
Если вы когда-нибудь, зачем-то, хотели увидеть плачущего 40-летнего мужика, вам надо было быть вчера у меня дома.
Что с этим делать, пока непонятно.
😁22🤯5🔥4👍2😢1
https://discourse.llvm.org/t/rejected-rfc-stop-defining-the-stdc-and-related-macros-in-c-mode/62468/3
Коллеги из LLVM хотят перестать дефайнить
В целом, понятная штука, интересным мне показалось следующее:
* llvm обнаглели, пишут, что им уже и не обязательно поддерживать совместимость с gcc на уровне препроцессора. КМК, это плохо, потому что нам больше работы, только потому, что кому-то не нравится, как пишутся два макроса.
* https://sourceware.org/pipermail/libc-alpha/2022-May/138738.html - удивительный факт, я ожидал, что glibc пошлют их в пешее эротическое с этим предложением, но нет, вроде, приняли нормально.
Баланс сил меняется.
Мне, признаться, больше нравилось, когда clang/llvm были догоняющими, было видно, что с ними легче договориться.
———
https://blog.tmm.cx/2022/05/15/the-very-weird-hewlett-packard-freedos-option/
Совершенно феерическая история про опцию "freedos на новом ноутбуке" от HP.
TL;DR - freedos запущена в VirtualBOX в Linux, а еще там рядышком 32-битный старый Linux, для запуска pdf просмотрщика с условиями лицензии.
Программисты-археологи? Привет, Вернор Винж?
———
Починял #mesa.
В итоге, я решил, что проще всего собрать mesa с заглушками regexec/regcomp, которые бы имитировали то поведение, которое было "без бага"(не буду аргументировать, что оно "правильное")
fun fact - в mesa уже есть похожий define, https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/util/xmlconfig.c#L46
К сожалению, он про то, чтобы все регулярки "сработали".
А мне, судя по анализу исходников(заголовок от musl + .a от pcre), нужно, чтобы все регулярки "не сработали":
https://github.com/runtimejs/musl-libc/blob/master/include/regex.h
https://github.com/luvit/pcre/blob/master/pcreposix.h#L56
Поэтому я запилил вот такую фейковую regex.h - https://git.sr.ht/~pg/mix/tree/main/item/pkgs/lib/mesa/fakes/mix.sh
Вроде, теперь и #pcmanfm работает, и epiphany.
Конечно, надо бы разобраться, что там за правила, и как вообще должно быть сделано по уму, но пока нет.
Коллеги из LLVM хотят перестать дефайнить
__STDC__в С++ коде.
В целом, понятная штука, интересным мне показалось следующее:
* llvm обнаглели, пишут, что им уже и не обязательно поддерживать совместимость с gcc на уровне препроцессора. КМК, это плохо, потому что нам больше работы, только потому, что кому-то не нравится, как пишутся два макроса.
* https://sourceware.org/pipermail/libc-alpha/2022-May/138738.html - удивительный факт, я ожидал, что glibc пошлют их в пешее эротическое с этим предложением, но нет, вроде, приняли нормально.
Баланс сил меняется.
Мне, признаться, больше нравилось, когда clang/llvm были догоняющими, было видно, что с ними легче договориться.
———
https://blog.tmm.cx/2022/05/15/the-very-weird-hewlett-packard-freedos-option/
Совершенно феерическая история про опцию "freedos на новом ноутбуке" от HP.
TL;DR - freedos запущена в VirtualBOX в Linux, а еще там рядышком 32-битный старый Linux, для запуска pdf просмотрщика с условиями лицензии.
Программисты-археологи? Привет, Вернор Винж?
———
Починял #mesa.
В итоге, я решил, что проще всего собрать mesa с заглушками regexec/regcomp, которые бы имитировали то поведение, которое было "без бага"(не буду аргументировать, что оно "правильное")
fun fact - в mesa уже есть похожий define, https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/util/xmlconfig.c#L46
К сожалению, он про то, чтобы все регулярки "сработали".
А мне, судя по анализу исходников(заголовок от musl + .a от pcre), нужно, чтобы все регулярки "не сработали":
https://github.com/runtimejs/musl-libc/blob/master/include/regex.h
https://github.com/luvit/pcre/blob/master/pcreposix.h#L56
Поэтому я запилил вот такую фейковую regex.h - https://git.sr.ht/~pg/mix/tree/main/item/pkgs/lib/mesa/fakes/mix.sh
Вроде, теперь и #pcmanfm работает, и epiphany.
Конечно, надо бы разобраться, что там за правила, и как вообще должно быть сделано по уму, но пока нет.
LLVM Discussion Forums
[Rejected] RFC: Stop defining the __STDC__ (and related) macros in C++ mode
The C++ standard allows an implementation to define macros like __STDC__ and __STDC_VERSION__, etc: __STDC__ and Clang does this for some of the macros, as does GCC. However, this is a Very Bad Idea™ for many reasons and just because we can/have doesn’t…
👍8