Вчера всплыла интересная проблема. File-chooser в CL-GTK2 не правильно работает с не-ASCII именами файлов.
Оказалось, что win32-версия GTK+ определяет два набора функций:
Оказалось, что не все функции легко исправить потому, что они генерировались отдельным скриптом. Трудность заключалась в том, что нужно было генерировать reader macros. Символы #+win32 упорно не желали печататься как следует. Получалась никуда не годная ерунда вроде такой: |#+WIN32|
После долгих мучений родился такой workaround:
Теперь макрос-генератор может выводить условия так:
Оказалось, что win32-версия GTK+ определяет два набора функций:
- первый содержит те-же функции, что и unix-версия, но работающие с локальной кодировкой (а не utf8);
- второй набор работает с utf8, но все функции имеют суффикс _utf8.
Оказалось, что не все функции легко исправить потому, что они генерировались отдельным скриптом. Трудность заключалась в том, что нужно было генерировать reader macros. Символы #+win32 упорно не желали печататься как следует. Получалась никуда не годная ерунда вроде такой: |#+WIN32|
После долгих мучений родился такой workaround:
(defclass print-readtime-condition ()
((condition :initarg :condition)))
(defmethod print-object ((o print-readtime-condition) stream)
(format stream "#~A" (slot-value o 'condition)))
((condition :initarg :condition)))
(defmethod print-object ((o print-readtime-condition) stream)
(format stream "#~A" (slot-value o 'condition)))
Теперь макрос-генератор может выводить условия так:
(make-instance 'print-readtime-condition :condition :+win32)
Результаты ночных бдений: https://github.com/andy128k/cl-gtk2