LINUX.ORG.RU

SDE is back, ретрограды снова в деле

 , ,


0

4

Здравствуй, ЛОР. Не только лишь все знают, что devzero - это на самом деле geekless. Как некоторые из вас помнят, был у меня полуживой проект DE на gtk2.

Планы и желание писать код-то по-прежнему есть, а времени - нет. Ну в общем, посмотрим, как оно пойдёт.

Гитхаб: https://github.com/sde-gui

Что есть сейчас:

Приложения:

  • stuurman - файловый менеджер
  • stuurman-desktop - менеджер иконок и фона рабочего стола
  • waterline - фреймворк апплетов рабочего стола
  • spicview - средство просмотра изображений
  • rainbow-cm - менеджер буфера обмена

Библиотеки:

  • libsde-utils - унифицированные средства резолвинга путей к ресурсам и файлам конфигурации; средства ведения отладочного лога; некоторые вспомогательные функции
  • libsde-utils-x11 - вспомогательные функции для работы с X11
  • libsde-utils-gtk - вспомогательные функции для работы с Gtk
  • libsde-utils-jansson - вспомогательные функции для работы с Jansson
  • libsmfm-core - средства работы с файлами, не зависящие от графического тулкита
  • libsmfm-gtk - средства работы с файлами, зависящие от Gtk

Changelog:

spicview
	На базе исходного кода gpicview 0.2.3, форк в апреле 2012 года.
	* Реализация кэша загруженных изображений и предзагрузки изображений:
		* Предзагружать и удерживать в кэше следующее и предыдущее изображение в списке. (Опция отключается в
		  настройках.)
		* Регулировать максимальный размер кэша на основании полного объема ОЗУ и объема доступной ОЗУ.
		* Сокращать размер кэша при повышении потребления памяти другими приложениями.
	* Интеграция с файловым менеджером (библиотека libsmfm) :
		* Использовать libsmfm для резолвинга путей.
		* Отображать контекстное меню файла как часть контекстного меню открытого изображения.
		* Поддержка libsmfm может быть отключена при сборке приложениях.
	* Автоматически подстраивать цвет фона приложения под цвета изображения для улучшения визуального
	  восприятия изображения. (Опция отключается в настройках.)
	* Множество улучшений и исправлений в интерфейсе, в том числе:
		* Реорганизация диалога настроек.
		* Возможность указать в настройках фильтр, используемый для масштабирования изображения.
		* Блокировать операции (и соответствующие кнопки панели) изменения, удаления и сохранения файла в
		  режиме слайдшоу.
		* Блокировать операции (и соответствующие кнопки панели), не доступные из текущего состояния
		  приложения.
		* Отображать имя удаляемого файла в диалоге подтверждения удаления.
		* Операция Save As переименована в Save a Copy и больше не приводит к переключению просмотра на
		  каталог сохранения файла.
		* Во время сохранения файла отображать уведомление в заголовке окна, блокировать кнопки панели и
		  переводить указатель мыши в режим GDK_WATCH.
		* При запуске программы всегда использовать режим масштабирования Zoom Fit. Автовыбор режима
		  масштабирования удален, т.к. противоречил принципу наименьшего удивления и мог выглядеть как баг
		  приложения.
		* Возможность показа/скрытия панели инструментов клавишей T или из диалога настроек.
		* Состояние отображения/скрытия панели инструментов запоминается отдельно для полноэкранного и
		  неполноэкранного режимов.
		* Возможность отображения панели инструментов в верхней части окна. (Опция включается в настройках.)
		* Выход из приложения по нажатию ESC. (Опция отключается в настройках.)
		* Отображать контекстное меню по нажатию клавиш MENU или F10.
		* При передаче каталога в качестве аргумента командной строки, загружать изображения из этого
		  каталога.
		* При запуске без аргументов отображать изображения из текущего каталога.
		* В диалоге About отображать информацию о поддерживаемых форматах файлов и об опциях, с которыми было
		  собрано приложение.
		* Добавлен ключ запуска --about, выводящий в stdout тот же текст, что отображается в диалоге About.
	* Прочее:
		* Ресурсы компилируются как часть исполняемого файла, а не загружаются из отдельных файлов при запуске
		  приложениях. Единственными загружаемыми ресурсами в настоящий момент являются файлы локализации.
		* Исправление падений.
		* Чистка и рефакторинг кода.

rainbow-cm
	На базе исходного кода parcellite 2.5. Форк в январе 2015 года.
	* Удалено множество избыточных, бесполезных или проблемных функций:
		* Удалена опция confirm_clear. Всегда спрашивать подтверждение при очистке истории.
		* Удалена опция single_line. (Теперь всегда включена.)
		* Удалена опция reverse_history.
		* Удалена опция persistent_on_top. Persistent history items всегда отображаются в конце списка.
		* Удалена опция current_on_top. (Теперь всегда включена.)
		* Удалена опция case_search. Всегда выполнять поиск без учета регистра символов.
		* Удалена опция icon_name.
		* Удалена опция daemon mode и соответствующий режим.
		* Удалена опция persistent_history. (Теперь всегда включена.)
		* Удалена опция hyperlinks_only.
		* Удалены опции trim_newline и trim_wspace_begend.
		* Удалены опции data_size и item_size.
		* Удалён невероятно сумасшедший способ обнаружения запущенного экземпляра приложения через анализ
		  содержимого /proc. Также удалена опция multi_user.
		* Удалена возможность автоматической вставки текста в активное окно и все связанные с этой
		  возможностью опции. Не существует надежного способа реализации.
		* Удалена возможность отображать persistent history items в отдельном меню.
		* Удалена возможность Copy All to Clip, предназначавшаяся для вставки в буфер обмена всех пунктов
		  истории разом.
		* Удалена возможность правки пунктов меню истории во встроенном диалоге редактирования.
		* Удалены возможности, аналогичные xclip. Код настолько ужасен, что не поддаётся рефакторингу, и
		  второй xclip не нужен, когда есть первый.
		* Удалено управление программой через fifo-файлы.
		* Удалена поддержка определяемых пользователем действий.
		* Удалена поддержка Ubuntu Appindicator.
	* Улучшения и исправления в интерфейсе:
		* Реорганизация диалога настроек.
		* Если меню истории активировано горячей клавишей, отображать его в левом верхнем углу активного окна,
		  а не под указателем мыши.
		* В меню истории добавлены всплывающие подсказки.
		* Реализация возможности Search-As-You-Type переписана с использованием GtkIMContext, что позволяет
		  производить поиск на любом языке.
		* Изменена настройка горячих клавиш по умолчанию:
			* Mod4 + Insert - вызов меню истории.
			* Ctrl + Mod4 + Insert - вызов меню приложения.
		* Переименованы опции:
			* use_copy -> track_clipboard_selection
			* use_primary -> track_primary_selection
			* nonprint_disp -> display_nonprinting_characters
		* Команда Clear History перенесена из меню истории в меню приложения.
		* В меню приложения добавлена команда-флажок Enabled, позволяющая удобным способом временно отключить
		  слежение за буфером обмена.
		* В меню приложения удалены иконки и добавлены всплывающие подсказки.
		* Команда Save History, сохраняющая историю в текстовый файл, теперь использует более человекочитаемый
		  формат файла.
		* Persistent history items переименованы в интерфейсе в Pinned history items.
	* Рефакторинг, чистка и упрощение кода.
	* Полностью переписан код слежения за буфером обмена. Не пытаться отслеживать изменения в буфере поллингом
	  по таймауту, отслеживать событие изменения владельца буфера.
	* Исправление падений и утечек памяти.

waterline
	Основана на коде lxpanel 0.5.6, форк в июне 2011 года.
	Количество изменений не поддаётся перечислению, если делать раззвёрнутый Changelog, он будет длиной в
	несколько страниц. За эти годы было выполнено 996 коммитов.
	
stuurman + stuurman-desktop + libsmfm
	Основаны на коде pcmanfm и libfm 1.2.0, форк в мая 2013 года.
	Множество улучшений и исправлений, и еще больше предстоит. Пока еще довольно глючен.
	Самой важной выполненной доработкой является, пожалуй, оптимизация процесса чтения каталогов. Об этом я,
	видимо, напишу развёрнутый материал, когда у меня найдётся время поднять для проекта сайт.

Сборочные скрипты для Арча: https://github.com/sde-gui/pacman.sde-git Для более других дистрибутивов готовых сборочных рецептов пока нет.

Компилируйте, тестируйте, шлите баг-репорты и пулл-реквесты, устраивайте срач в комментах.

Вечером, как доберусь до домашнего компа, поделюсь планами на будущее и роадмапом. Запарился набирать текст в этой их винде, без нормального редактора.

DE нафиг не нужен! Лучше WM вроде IceWM (только более легковесный) напиши.

И да, GTK ­— говно! Пиши на иксовых библиотеках или опенгле. На крайняк — motif.

anonymous ()
Ответ на: комментарий от alexferman

Но ведь гтк2 уже рипнулся

Едва ли не единственное гнутое API, в котором уже 5 лет никто ничего не ломает? Если это критерий рипнутости, то пусть рипнётся побольше библиотек.

devzero ()
Ответ на: комментарий от ananas

В принципе, реальная рипнутость gtk2 - это выпиливание X11 из актуальных дистрибутивов, если таковое когда-нибудь вообще случится. И если я доживу.

Самостоятельно портировать gtk2 на Новый-Замечательный-Графический-Сервер (чем бы он не являлся к тому времени)? Забить на Си и переписать всё под какой-нибудь luajit и tekui? Взять за основу гуя движок HTML? Вариантов масса, и будет скучно точно не будет - вот что важно.

А вот портировать по 10 раз одну и ту же программу на вечно молодой gtk3 (4, 5, 6...) - скука смертная. Уж лучше алкоголь.

devzero ()
Ответ на: комментарий от devzero

Тут проблема в том, что GTK+2 не умеет в современные HiDPI-дисплеи, которые сейчас получили активное распространение. Поэтому даже LXDE начали переводить на Qt 5, а XFCE — на GTK+3.

EXL ★★★ ()
Ответ на: комментарий от devzero

Самостоятельно портировать gtk2 на Новый-Замечательный-Графический-Сервер (чем бы он не являлся к тому времени)? Забить на Си и переписать всё под какой-нибудь luajit и tekui? Взять за основу гуя движок HTML? Вариантов масса, и будет скучно точно не будет - вот что важно.

Открой для себя Vala. Кода придётся писать в разы меньше.

NextGenenration ()
Ответ на: комментарий от EXL

А что именно оно не умеет? Не соображу сразу. Рендеринг выполняет pango и freetype, а оно дружит с любыми DPI. Тему оформления можно допилить под любой масштаб картинки. Или там какие-то принципиальные новшества?

devzero ()
Ответ на: комментарий от NextGenenration

Открой для себя Vala. Кода придётся писать в разы меньше.

Уже давно открыл и закрыл, к сожалению. Компилятор достаточно глючен и к боевому применению до сих пор не готов. Где-то тут на форуме было обсуждение и ссылка на обсуждение в багтрекере budgie desktop.

Уж лучше действительно luajit. Исполняет код быстрее V8, при этом имеет микроскопические размеры движка и очень крутого разработчика.

devzero ()
Ответ на: комментарий от b-adblack-

Ты так и не ответил.

Извиняюсь.

В принципе, если панель живая, могу и сам запилить, API плагинов вроде несложное.

Панель живая, и если бы ты запилил, это было бы отлично.

API всё еще не стабилизировано, но если будут breaking changes, я готов сам слать пул-реквесты с исправлениями. А вот самому писать новые плагины - не готов.

Меня сейчас состояние панели устраивает процентов на 90, надо только доделать кое-какие хвосты и сделать релиз.

Ограничение ширины в 200 пикселей у панелей чем-то обусловлено или обычное программистское «а что, кому-то может понадобиться больше?»?

Именно этим. А надо больше?

devzero ()
Ответ на: комментарий от devzero

Компилятор достаточно глючен

это не компилятор. это транслятор в си. Кстати какие глюки? Я ни разу не сталкивался.

Уж лучше действительно luajit

На каком тулките будет de и на сколько его будет реально запустить на чём-то современном?

NextGenenration ()
Ответ на: комментарий от NextGenenration

это не компилятор. это транслятор в си. Кстати какие глюки? Я ни разу не сталкивался.

Ну если придераться к словам, это компилятор по определению слова «компилятор». Программа выполняющая перевод программы как целого из одного формального языка в другой. Хотя мы привыкли называть компиляцией перевод именно в машинный язык, таки да.

Я уже не упомню, что было 4 года назад, но на какие-то серьёзные проблемы я натыкался. Также я натыкался на проблемы производительности в горячих точках программы. Генерируемый сишный код в теории должен быть практически таким же быстрым, как человеконаписанный на си, но на практике возникали нюансы.

На каком тулките будет de и на сколько его будет реально запустить на чём-то современном?

Что-то типа tekui, вероятно. Вполне реально запустить, почему нет. Jit-компилированный код, напрямую дёргающий сишные либы типа cairo и freetype через небольшие обёртки. Я полагаю, это не тормознее java и точно намного быстрее, чем GUI на браузерном движке, как сейчас стало модно делать.

devzero ()
Ответ на: комментарий от devzero

Очевидно, не умеет нормально скейлить ВСЕ элементы внутри окна в зависимости от DPI или scaling-factor переменной.

https://wiki.archlinux.org/index.php/HiDPI#GTK.2B_2

Есть хакнутые темы для GTK+2 выше по ссылке, но они очень забагованные и оставляют желать лучшего. В целом, что GTK+2, что Qt 4 приложения на современных дисплеях выглядят так, что хочется сразу закрыть программу. Либо настолько мелко, что вообще ничего не читабельно, либо настолько мыльно, что хочется протереть экран.

Современные DE, такие как XFCE, LXDE, Mate и пр., ведь не от хорошей жизни в процессе выпила GTK+2 и переходят на тулкиты с поддержкой дисплеев современного разрешения. В противном случае об этих DE будут действительно помнить только ретрограды.

EXL ★★★ ()

Еще скриншотец: https://s27.postimg.org/44teck8r7/2017_01_11_201504_1366x768_scrot.png

Можно сказать, интерфейс образца 2010 года.

Боковая панель с панелью задач, отображающей миниатюры окон, регулятором громкости, треем, часами, индикаторами температуры процессора и уровнем заряда батареи. Панель имеет реальную прозрачность. Если отключить compton, будет использоваться трюк с фейковой прозрачностью; а миниатюры окон заменятся обычными иконками.

Нижняя панель с кнопкой меню приложений, пейджером рабочих столов и графиками загрузки CPU, памяти и чего-то там еще (портирован старый-добрый апплет от второгнома). Панель обычно находится «под» окнами, но всплывает наверх при подведении мыши к границе экрана.

Апплетам панели можно посылать команды посредством waterlinectl. Пример конфига для xbindkeys:

"waterlinectl menu"
  Mod4 + z

"waterlinectl run"
  Mod4 + x

"waterlinectl panel left plugin taskbar prevwindow"
  Mod4 + Left

"waterlinectl panel left plugin taskbar nextwindow"
  Mod4 + Right

"waterlinectl panel left plugin taskbar position 0"
  Mod4 + 1

"waterlinectl panel left plugin taskbar position 1"
  Mod4 + 2

"waterlinectl panel left plugin taskbar position 2"
  Mod4 + 3

"waterlinectl panel left plugin taskbar position 3"
  Mod4 + 4

"waterlinectl panel left plugin taskbar position 4"
  Mod4 + 5

"waterlinectl panel left plugin taskbar position 5"
  Mod4 + 6

"waterlinectl panel left plugin taskbar position 6"
  Mod4 + 7

"waterlinectl panel left plugin taskbar position 7"
  Mod4 + 8

"waterlinectl panel left plugin taskbar position 8"
  Mod4 + 9

"waterlinectl panel left plugin taskbar position 9"
  Mod4 + 0


В вернем правом углу - тоже панель. Она всегда под всеми окнами. Апплет исполняет скрипт и отображает некоторое важное для меня значение. :-)

В фоне - рабочий стол с иконками. У меня иконки обычно отключены. (Дабл-клик по пустому пространству рабочего стола - скрыть/показать иконки.)

spicview постраивает свой цвет фона под среднеарифметический цвет по краям отображаемого изображения.

На переднем плане stuurman с отключенными боковой панелью и строкой меню, в режиме максимально больших иконок. В его строке состояния - прогрессбар, показывающий объем занятого места на диске, и ползунок, регулирующий размер иконок.

В трее иконка parcellite - на самом деле это rainbow-cm, еще не заменил ему иконку.

В качестве менеджера окон - openbox с закосом под 98-ю винду. В качестве темы оформления gtk старый добрый Crux - радость ретроградов.

devzero ()

waterline. В контекстном меню зачем-то выбор размера иконок, причем панель падает при выборе. Исчезающие значки запуска иногда не исчезают, например для palemoon.

stuurman. К сожалению удалены некоторые возможности pcmanfm. Зато каталог с 10К файлов по sftp открывается в три раза быстрее.

anonymous ()
Ответ на: комментарий от anonymous

В контекстном меню зачем-то выбор размера иконок

Потому что размер иконок можно задавать отдельно для каждого апплета. Надо бы попрятать слишком странные настройки в какой-нибудь advanced mode... А то что-то много их развелось.

причем панель падает при выборе

У меня не падает, но глючит. %-) На каком конкретно апплете падает?

Исчезающие значки запуска иногда не исчезают, например для palemoon.

Эта фича скорее хак, поэтому глюки ожидаемы. Удалить её совсем, что ли? Или задействовать bamf?...

Кажется, palemoon считает, что он на самом деле «Pale moon» с пробелом. Странное приложение.

К сожалению удалены некоторые возможности pcmanfm.

Или они отсутствовали в оригинале на момент форка. Что именно отсутствует?

devzero ()
Ответ на: комментарий от b-adblack-

Панельке нужны иксы - она же иксовыми окнами управляет. Апплету регулятора громкости нужна альса. Индикатору температуры железа - линуксовые vfs. Главному меню - демон слежения за desktop-файлами. И так далее.

То есть, портировать-то её можно, но это получится совсем другая панелька. Не имеющая ничего общего.

devzero ()
Ответ на: комментарий от devzero

Удалить её совсем, что ли?

Не надо, пожалуйста. Нужная вещь, а реверс-патч таскать не хочется.

Что именно отсутствует?

Меню действий при drag-n-drop. В настройках pcmanfm названо «Действие по умолчанию при бросании -> Спросить». Псевдодвухпанельность в принципе и не нужна. Custom actions зависит от vala к сожалению.

У меня не падает, но глючит.

Долго пытался воспроизвести - не вышло :| Было это с полгода назад, я тогда собирал waterline в репозиторий мелкодистра. Там были минималистичные темы иконок.

anonymous ()

Ненужно

Так как gtk2 не нужен, DE не нужны и значки на рабочем столе не нужны.

И уж точно не нужно создавать новые X11 окружения - пусть оно (иксы) спокойно сдохнет.

robus ★★ ()

а может мне кто-нибудь обьяснить одну вещь: почему делают свои велосипеды вместо вливания своих сил в уже существующие DE. Почему бы не коммитить в тот же KDE(я просто люблю KDE)? Нет, нужно свой велосипед писать.

Вот так и имеем кучу полудоделанных DE.

P.S. Есть инфа где-нибудь, сколько программистов сидит на зарплате в KDE?

zamazan4ik ()
Ответ на: комментарий от zamazan4ik

У тебя был когда-нибудь сильный приступ NIH? Вот потому и «имеем кучу полудоделанных DE». Потому что я бы допиливал Unity Next, а ты хочешь KDE. Но ты просто хочешь, а не коммитишь, я тоже :) Такие вот дела.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от zamazan4ik

Форки не от хорошей жизни делаются. То, что кто-то пишет полезные патчи, не гарантирует, что их примут в проект, ибо любые изменения сопряжены с определённой линией развития, которая не всегда совпадает с идеологией проекта. Кеды, например, жирные и монолитные, даже пятые, и написаны на неправославном тулките с кучей жирных кастомных расширений. Если обкусывать и переделывать эту кашу, получатся уже не кеды.

b-adblack- ()
Ответ на: комментарий от devzero

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

b-adblack- ()
Ответ на: комментарий от NextGenenration

И люди ещё ругают гном за то что там большие интервалы. Да они там микроскопические.

Это не интервалы. Это вписывание изображение в квадрат.

Место под изображение резервируется квадратное (иконки-то у нас квадратные всегда). А потом грузится прямоугольный эскиз изображения, и мы получаем вот такие поля.

Если поля обрезать, то получится две неприятности:

* Содержимое каталога будет «плясать» по мере прогрузки эскизов.

* Все строки будут разной высоты.

devzero ()
Ответ на: комментарий от EXL

Это интересно. Чисто теоретически - мне было бы любопытно похакать gtk2 и разобраться, можно ли доработать тулкит (и движки тем), не ломая ABI. Но на практике - у меня нет HiDPI монитора, так что облом.

devzero ()
Ответ на: комментарий от devzero

update

Место под изображение резервируется квадратное (иконки-то у нас квадратные всегда).

Посмотрел, как решают проблему в dolphin. Резервируют прямоугольник и надеются на лучшее. Если эскиз вытянут по горизонтали, всё смотрится нормально, а если эскиз вытянут по вертикали, получаются конские отступы слева и справа. Но большие боковые отступы всё же выглядят лучше, чем большие вертикальные.

Надо будет взять на вооружение идею.

devzero ()