Мерзкое поведение g_file_set_contents

Внезапно обнаружил, что g_file_set_contents() наглым и бесцеремонным образом херит права доступа к файлу. В частности, за счет того, что сначала создается временный файл, затем удаляется существующий и временный помещается на его место, напрочь выпиливается взведенный исполнимый бит. Так что это омерзительное поведение стоит учитывать при написании своего кода

Исправления gtk3

поскольку вышел gtk4, и в третью версию новшества вноситься не будут, закину те правки, которые использую сам

может, кому и пригодится

К вопросу о copy&paste

В GTK практически весь интерфейс строится на виджетах, как системных, так и своих, т.к. иногда удобнее создать свой композитный виджет, нежели заморачиваться с охапкой разрозненных функций. Эклектика не всегда рулит

В очередной раз скопипастив какой-то из своих композитов и наслаждаясь emacs-овой контекстной заменой (вообще прелесть, т.к. учитывает регистр заменяемого), начал подозревать, что как-то это не то и не оно. Китайчатиной пованивает, да и до черта лаж из-за собственной невнимательности вылезает. В результате накидал небольшой perl-овый скриптик для генерации шаблона виджета. скриптик здесь. в качестве единственно аргумента передается имя будущего виджета в виде MyWidget (т.е. капитализированные префикс и имя без пробелов и прочих подчеркиваний).

Moxa UPort 1450I

Попался мне такой зверь в составе последнего ПТК. Драйвер в ядре вроде есть, но работает как-то странно. Точнее вообще не работает.

После разбирательств оказалось, что хотя железка и поддерживает режимы RS232/RS422/RS485, и даже соответствующие дефайны в драйвере присутствуют, но инициализируются порты только в RS232, а возможности изменить режим через setserial или напрямую через ioctl(TIOCSSERIAL,…) нет по причине отсутствия реализации ioctl (любых) в собственно драйвере.

Драйвера, стянутые с сайта мохи мне сразу не понравились. Лапша и оверхед, который включает в себя еще и собственную похаченую реализацию usb-serial. Ну их

Сначала думал запилилить реализацию ioctl в драйвер, но потом решил – нахер мне этот гемор, когда установить режим мне нужно только один раз, и менять его в последствии я не собираюсь.
Потому обошелся обычной опцией. Патчик, кому надо. Добавляет опцию modes – массив до 16 чисел, начальные режимы каждого из портов

--- linux/drivers/usb/serial/mxuport.c.orig     2020-09-03 12:19:28.000000000 +0300
+++ linux/drivers/usb/serial/mxuport.c     2020-09-07 09:37:25.653498042 +0300
@@ -155,6 +155,9 @@
 #define MX_UPORT_8_PORT                       BIT(2)
 #define MX_UPORT_16_PORT              BIT(3)
 
+/* initial ports modes */
+static int modes[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
 /* This structure holds all of the local port information */
 struct mxuport_port {
       u8 mcr_state;           /* Last MCR state */
@@ -1136,10 +1139,11 @@
       if (err)
               return err;
 
-  /* Set interface (RS-232) */
+  /* Set interface mode (RS-232/RS-422/RS-485) */
+  dev_info(&serial->interface->dev, "Set port %d to mode %d\n", 
+                   port->port_number, modes[port->port_number]);
       return mxuport_send_ctrl_urb(serial, RQ_VENDOR_SET_INTERFACE,
-                               MX_INT_RS232,
-                               port->port_number);
+                               modes[port->port_number], port->port_number);
 }
 
 static int mxuport_alloc_write_urb(struct usb_serial *serial,
@@ -1398,3 +1402,6 @@
 MODULE_AUTHOR("Andrew Lunn <andrew@lunn.ch>");
 MODULE_AUTHOR("<support@moxa.com>");
 MODULE_LICENSE("GPL");
+
+module_param_array(modes, int, NULL, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+MODULE_PARM_DESC(modes, "Initial modes for ports (up to 16). 0 - RS232, 1 - RS485(2W), 2 - RS422, 3 - RS485(4W)");

GdkColor в GdkRGBA

в процессе портирования sylpheed на gtk3 понадобилось преобразовывать представление цветов из GdkColor в GdkRGBA. в результате написал небольшую тулзинку. может, кому и пригодится

    1 /*
    2  * Output GdkRGBA representation of specified color
    3  *
    4  * compile: gcc -pipe -O2 -o rgba $(pkg-config --cflags --libs gdk-3.0) rgba.c
    5  */
    6 
    7 #include <gdk/gdk.h>
    8 
    9 int
   10 main (int argc, char *argv[])
   11 {
   12   GdkRGBA color;
   13 
   14   if (argc < 2)
   15     {
   16       fprintf (stderr, "Usage: rgba <colorspec>\n");
   17       return 1;
   18     }
   19 
   20   if (!gdk_rgba_parse (&color, argv[1]))
   21     {
   22       fprintf (stderr, "Unable to parse color %s\n", argv[1]);
   23       return 1;
   24     }
   25 
   26   printf ("{%.3f, %.3f, %.3f, %.3f}\n", color.red, color.green, color.blue, color.alpha);
   27 
   28   return 0;
   29 }

Пуркуа gtk3 тормозит или уебаны дорвались…

GTK такой GTK, все скатывается и скатывается. Впрочем, как и все, к чему прикладывают свои лапки различные копрорации. Хипсетрство, помноженное на некомпетенстность и возведенное в степень внезапно возникшего спроса. Результат – пиздетс.

Попытки скрестить ежа с ужом, а десктопный look&feel с мобильным в одном api – идея изначально убогая и технически крайне сложно реализуемая, зато открывает богатые возможности для пиздобольства и рекламных заманух, что крайне любо манагерам. В случае gtk – это ебанутое баловство с css, вместо нормальных движков, отрисовывающих виджеты и отказ от каких-либо альтернатив.
Читать далее «Пуркуа gtk3 тормозит или уебаны дорвались…»

Блокировка экрана

Блокировка экрана – вещь, в принципе, архиполезная. Иногда. Для некоторых

В поисках идеала попробовал разные тулзины, в итоге остановился на xtrlock. Практически идеал. Но вот эта голубая блямба в виде замка сильно мозолила глаз. Пришлось поправлять

Читать далее «Блокировка экрана»

К вопросу о шрифтах

чудаки на букву м выпилили поддержку битмап шрифтов из pango, начиная с версии 1.44

меня это в принципе, не особо и жарило, любимый terminus используется преимущественно в urxvt и emacs, которые от pango не зависят, да еще и в консоли.
но вот конфигурялка urxvt, которая использует yad, и, как следствие, зависит от всего gtk стека, таки начала сбоить.

ну ладно. как там у высоцкого – зачем мне считаться шпаной и бандитом луддитом и ретроградом? решил сделать все стильно, модно, молодежно. но вот все эти ваши inconsolata-ы и прочие droid mono не вперли аж ни разу. голая консоль еще куда ни шло, Cyr_a8x16 решает. но в иксах заменой terminus-у может быть только terminus, для прочего хипстерства я уже слишком стар

готовые ttf варианты не канают, потому что не используют нужный/привычный мне набор патчей (dv1 ij1 ll2 td1). но шустрый гуглеж привел к mkttf, что позволило сгенерировать нужный мне шрифт без особых проблем.

результат можно взять здесь

ну и все любят картинки

Читать далее «К вопросу о шрифтах»

Иконка urxvt

Хотеть иконку. В urxvt. Согласно ewmh, а не костылями fvwm. И чтобы без всяких –enable-pixbuf и прочего свистяще-пердящего барахла, тянущего лишние зависимости типа gdk-pixbuf

Ну чо, хотеть – сделать. На то он и опенсорц. Иконки, согласно ewmh, задаются через XChangeProperty и атом _NET_WM_ICON. Собственно атом – массив чисел, описывающих иконку. Иконок в одном атоме может быть несколько. Первые два слова описания иконки – размер, дальше пиксели в формате ARGB. Основной фокус – эти числа получить

Читать далее «Иконка urxvt»

Очередные странности gtk3

Понадобилось вызывать всплывающее меню. По “горячей клавише”. Из любого места. Есть для этого такая маленькая приятная либа – keybinder. И как отдельная либа хороша, и в свой код интегрируется легко, т.к. в либе всего один файл с кодом. В общем – прелесть. Вот только меню из обработчиков хоткеев всплывать не желает, хоть ты тресни. Любое другое действие – пожалуйста. Меню – хрен тебе на воротник, а не меню. Причем, тот же самый код для вызова меню прекрасно работает, если его дергать через механизмы GApplication. Такая вот омерзительность.

Читать далее «Очередные странности gtk3»

Run dialog для FVWM

захотелось странного – нормальную запускалку в fvwm. но возникли трудности. то, что дается самим fvwm-ом – убого до безобразия. виджеты для ввода текста что в FvwmScripts, что в FvwmForm тупые до ужаса, не позволяют редактирование от слова вообще, да и ограничения по длине у них идиотские. зато есть Swallow и urxvt. первое позволяет встроить что угодно, благодаря XEmbed, второе – то, что надо для ввода. но, хочу свою историю и поменьше всякого лишнего. сначала подумывал об отдельном конфиге для zsh (bash собран без каких-либо интерактивностей, только для скриптов), но уж очень громоздкие решения. в результате нарыл rlwrap – очень годная тулза, использующая readline и history для организации ввода с историей и прочими плюшками. в результате родилось следующее

urxvt -name YRun +sb -bg "$[infostore.pr_bg]" -fg "$[infostore.pr_fg]" -fn "$[infostore.pr_fn]" -g 35x1-1500-1500 -e rlwrap -o -S "> " -pRed $[FVWM_LIBDIR]/prun.sh

Читать далее «Run dialog для FVWM»

Полезность перенаправлений

Довольно распространенная задача в скриптах – получить размер файла в различных попугаях, к примеру в строках. Для этих целей есть годная утилита wc. Вот только выхлоп у нее не очень удобный, кроме попугаев в выхлопе присутствует еще и имя файла. Чтобы эту гадость вырезать, необходимо прибегать к каким-то конвейерным конструкциям. НО! В случае, если файл подается на стандартный вход, имени никакого нет, и на выходе получается только необходимая величина. Поэтому идеал – lines=$(wc -l < /path/to/file)

  WHY, STUPID MOTHERFUCKERS, WHY ?!?!?!                                                                                                                               
  i don't need your fucking restrictions to your drug-based naming conventions                                                     
--- glib-2.54.3/gio/glib-compile-schemas.c.orig     2018-02-09 07:22:22.154862311 +0200              
+++ glib-2.54.3/gio/glib-compile-schemas.c  2018-02-09 07:23:04.773862128 +0200                      
@@ -1219,19 +1219,6 @@                                                               
       return;                                                                                                                          
     }                                                                                                                                  
                                                                                                                                        
-  if (path && (g_str_has_prefix (path, "/apps/") ||                               
-               g_str_has_prefix (path, "/desktop/") ||                                    
-               g_str_has_prefix (path, "/system/")))                                      
-    {                                                                                               
-      gchar *message = NULL;                                                                        
-      message = g_strdup_printf (_("Warning: Schema “%s” has path “%s”.  "                
-                                   "Paths starting with "                                 
-                                   "“/apps/”, “/desktop/” or “/system/” are deprecated."),
-                                 id, path);                                                         
-      g_printerr ("%s\n", message);                                                       
-      g_free (message);                                                                             
-    }                                                                                               
-                                                                                                    
   state->schema_state = schema_state_new (path, gettext_domain,                                                                     
                                           extends, extends_name, list_of);                                                             
                                                                                                                                        

Fullscreen в fvwm

Раскрытие окна на весь экран – приятная штука. Иногда. Особенно, когда экран невелик. Вот только есть эта фича не везде, где нужно. Но, “мы не можем ждать милостей от природы, взять их у нее — наша прямая задача”, так, кажись, дедушка мичурин говорил. Посему, вместо того, чтобы надеяться на разработчиков того или иного софта на предмет полноэкранного режима, такое вот решение для fvwm

Читать далее «Fullscreen в fvwm»