LINUX.ORG.RU

Сообщения geekless

 

В текстовом редакторе скрыть всё, кроме указанного куска файла — где есть такая фича?

Форум — Desktop

100500 редакторов умеют сворачивать отдельные куски файла. Мне понадобилась обратная фича — скрыть всё содержимое, кроме нескольких кусков, которые нужно отредактирвать. Где такое есть?

Ну или альтернативно такой вариант: выделить кусок и сказать «пометь его другим цветом», чтобы хотя бы было видно границы интересующей области.

geekless
()

Имена точек монтирования в приложениях на gtk

Форум — Development

В nautilus или pcmanfm на боковой панели можно видеть «безымянные» точки монтирования вида «Файловая система 81 GB», «Файловая система 20 GB» и т.п.

Хотел найти компонент, отвечающий за эти имена, чтобы научить его писать что-нибудь более осмысленное — тип файловой системы хотя бы. Не нашел!

Последовательно проверил:

  • Сами ФМы. Нет, они получают готовое имя от gio.
  • gio. Оно само крайне мало умеет и использует модули gvfs. Без gvfs эти точки монтирования даже отображаться не будут.
  • gvfs. Прогрепал исходники с дюжину раз, поковырял пальцем. Нет, не он.
  • udisks. Этот товарищ вообще на русский не локализован и писать «Файловая система» не смог бы в принципе.

Так кто же это делает?

Современный линукс такой простой и понятный...

geekless
()

[pcmanfm] нескучные патчи

Форум — Development

Так как апстрим pcmanfm-а уже покрылся тиной, и там завелись лягушки, я решил не дожидаться милостей от природы и запилить патчи самостоятельно.

Ссылка раз: https://github.com/geekless/libfm
Ссылка два: https://github.com/geekless/pcmanfm

Интегрировано несколько патчей из апстримовского багтрекера и добавлено несколько моих собственных. Что сделано:

  • Исправлено несколько крашей, включая и свеженький краш в одном из последних коммитов pcman-а, делающий собранный из транка ФМ де факто неюзабельным.
  • Добавлены хоткеи для переключения режимов файловой панели.
  • Добавлены хоткеи для переключения режимов сортировки.
  • Добавлены хоткеи для увеличения/уменьшения размера иконок.
  • Добавлена поддержка внешних тумбнейлеров для некоторых типов файлов: video — ffmpegthumbnailer, pdf — pdftoppm, epub — unzip + bash + convert. Также этот патч добавляет возможность отключить ограничение макс.размера тумбнейлящихся файлов: если выставить соответствующий параметр в 0, ФМ будет строить тумбочки для файлов любого размера.
  • Убраны нелепые сообщения об ошибках при перетаскивании файла в его собственный каталог, при перетаскивании файла на самого себя, или при перетаскивании на не-каталог.
  • В статусбаре показывается полное имя выделенного файла (на случай, когда оно слишком длинное, чтобы целиком влезть на панель), а также общий размер выделенных файлов.

 

geekless
()

Монтирование разделов, выполняемое из initrd

Форум — Development

Несколько дней назад мы тут обсуждали пару сумасшедших идей.

По результатам этого обсуждения я набросал следующий драфт:

Монтирование разделов, выполняемое из initrd.

Если переменная fslayout не установлена, выполняется традиционный алгоритм монтирования:

1. В / монтируется устройство из переменной rootdev.
2. Анализируется файл /etc/fstab. Если в нём присутствует запись для /usr, /usr также монтируется.

Если переменная fslayout установлена, выполняется новый алгоритм:

Переменная fslayout содержит 1 или более описаний точек монтирования, разделенных запятой.

path:dev — монтировать dev в path
path1>path2 — вместо монтирования, создать симлинк path1 -> path2
path@dev — шорткат для /mountpoints/devbasename:dev,path>/mountpoints/devbasename/pathbasename (пример /boot@/dev/sda1,/etc@/dev/sda2,/usr@/dev/sda2). Если при выполнении этой команды каталог /mountpoints отсутствует, он будет создан.

Данные команды выполняются в том же порядке, в каком они следуют в fslayout. Повторные вхождения одной и той же команды игнорируются.

Если первой командой не является команда монтирования для пути /, / монтируется как tmpfs.

После выполнения этих команд выполняются следующие действия:
1. Если для пути /usr не была указана никакая команда, анализируется файл /etc/fstab. Если в нём присутствует запись для /usr, она выполняется.
2. Если для пути /boot не была указана никакая команда, анализируется файл /etc/fstab. Если в нём присутствует запись для /boot, она выполняется.
3. Если имя /bin отсутствует в файловой системе, выполняется создание симлинка /bin>/usr/bin
4. Если имя /sbin отсутствует в файловой системе, выполняется создание симлинка /sbin>/usr/sbin
5. Если имя /lib отсутствует в файловой системе, выполняется создание симлинка /lib>/usr/lib

Ожидаемый фидбек от треда:
1. Конструктивная критика.
2. Баттхерт любителей пофапать на FHS.

geekless
()

nilfs, насколько она стабильна?

Форум — General

Есть идея задействовать эту ФС для хранения часто модифицируемых данных, чтобы удобно было сгружать оттуда бэкапы: смонтировал чекпоинт, спокойно забекапил.

Вопрос в том, насколько она стабильна для боевого применения. Могут ли файлы в один прекрасный момент превратиться в тыкву?

Также реквестирую истории успеха/неуспеха.

geekless
()

[в гугле забанили] Как в Qt переключаются методы рендеринга?

Форум — Desktop

Сабж.

geekless
()

[archlinux][kde] dolphin, kfilemetadatareader, ворнинги

Форум — Desktop

Пользуюсь Dolphin-ом, установлены только его зависимости и ни единым кедопакетом больше. (Если надо список пакетов.) Когда Dolphin запущен, в xsession-errors постоянно валится вот это:

"/usr/bin/kfilemetadatareader(13656)" Soprano: "QLocalSocket::connectToServer: Invalid name" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Unsupported operation (2)": "Invalid model" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Unsupported operation (2)": "Invalid model" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Invalid iterator." 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "QLocalSocket::connectToServer: Invalid name" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Unsupported operation (2)": "Invalid model" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Unsupported operation (2)": "Invalid model" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Invalid iterator." 

Раздражает. Есть какой-нибудь способ объяснить ему, чтобы он так не делал?

 ,

geekless
()

Ctrl+F

Форум — Talks

Есть вещи, которые безмерно изумляют, и которым я не могу найти адекватного объяснения. Вот одна из них:

В Firefox, Opera, Chromium и возможно-любом-другом-браузере-тоже отсутствует сохранение истории поиска текста по странице. Если вы искали сначала AAA, потом BBB, а потом CCC, то ни AAA, ни BBB в гуе поиска не обнаружите. Вбивайте заново, ага.

Скажите, это эпидемия? Это заразно? Может ли это опасное забалевание перекинутся с браузеров на текстовые редакторы, на less и т.п.?

geekless
()

[gtk] Те самые диалоги, да-да

Форум — Talks

История первая.

Диалог открытия/сохранения файлов у Gtk. Ситуация: приложение не указало используемый каталог. Какой каталог должен быть отображен в диалоге? Здравый смысл подсказывает нам, что это должен быть current working directory. Так оно и работало.

Потом пришел добрый человек и решил облегчить жизнь людям, которые про такое понятие как cwd, никогда ничего не слышали. (Гном же для «просто пользователя», вы в курсе. Так, кто сейчас выкрикнул «Gtk — это не гном»? Cядь, заткнись и читкани HIGца, твое мнение никого не волнует.) Добрый человек реализовал запоминание последнего использованного каталога:

case RELOAD_EMPTY:
- /* The user didn't explicitly give us a folder to
- * display, so we'll use the cwd
+ /* The user didn't explicitly give us a folder to display, so we'll
+ * use the saved one from the last invocation of the file chooser
*/
- current_working_dir = g_get_current_dir ();
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl),
- current_working_dir);
- g_free (current_working_dir);
+ folder = get_file_for_last_folder_opened (impl);
+ gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (impl), folder, NULL);
+ g_object_unref (folder);

Ок, выглядит разумно, по крайней мере. Дальше веселее.

В тот же день (буквально; история коммитов не врёт) пришел другой добрый, но глупый человек (или умный, но злой? нельзя же быть настолько глупым?). И сделал это:

case RELOAD_EMPTY:
- /* The user didn't explicitly give us a folder to display, so we'll
- * use the saved one from the last invocation of the file chooser
- */
- folder = get_file_for_last_folder_opened (impl);
- gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (impl), folder, NULL);
- g_object_unref (folder);
+ recent_shortcut_handler (impl);
break;

------------------------------------------------

История вторая.

Допустим, мы сошли с ума и решили попользоваться этим вашим списком recently used. Пусть это будет какой-нибудь, прости господи, Totem. Пусть мы вчера смотрели в нём /media/data/Видео/Unforgettable/Unforgettable.S01E07.HDTV.XviD-ASAP.avi. Сегодня мы желаем посмотреть — правильно! — /media/data/Видео/Unforgettable/Unforgettable.S01E08.HDTV.XviD-ASAP.avi. И вот мы открываем этот диалог, видим список недавно использованных файлов с пунктом Unforgettable.S01E07.HDTV.XviD-ASAP.avi на первом месте, иии...

А? Что-что? Кто там из угла робко бормочет «щелкнуть правой кнопкой и выбрать в контекстном меню Open Folder»? Нет такого пункта, запомни! Пришло время пересмотреть седьмую серию! Седьмая серия сама не пересмотрится!

------------------------------------------------

История третья.

В настройках объекта, отвечающего за отображение recently used есть такая опция show_not_found. Вполне логично, что её имеет смысл всегда держать выключенной, потому что имена удаленных файлов вряд ли кому-то могут понадобиться в этом списке.

Вот только в виджете GtkRecentChooserMenu эта опция не работает. Если вы пользовались gnome-panel, то вы видели этот виджет — это то самое подменю с недавними документами в главном меню гнома. И несуществующие файлы вы в нём тоже наверняка видели, да-да.

Я наткнулся на эти грабли при попытке добавить поддержку списка recently used в меню lxpanelx. Для обхода бага пришлось сделать кустомный фильтр и фильтровать файлы вручную. (Кстати, при этом фильтр поначалу сегфолтился, потому что Gtk зануляет поле, которое не должно занулять, и для обхода и этого бага тоже пришлось пошаманить.)

А вот команда гнома на всём протяжении существования Gnome2 этот баг не заметила. Ну файлы какие-то левые в меню, фигня, да кому это надо вообще. Впрочем, я давно подозреваю, что все девелоперы гнома сидят на макоси.

Ну про то, что из этого меню тоже невозможно перейти в каталог, где находится файл, — это и вовсе мелочи, чтоб об этом говорить...

------------------------------------------------

Боженька, убей их всех!

 

geekless
()

Тулкиты, двойная буферизация, backing store

Форум — Talks

Если взять окно Firefox и повозюкать по нему другим окном, то вы не увидите никаких артефактов перерисовки окна.
Если взять окно Dolphin, то, аналогично, не будет никаких артефактов.
Если взять любое приложение на Gtk, то будет виден этот тихий ужас, когда обновляемая область окна сначала заливается цветом фона, а уже потом с ощутимой задержкой на ней появляется актуальное содержимое.
Почему?

Потому что Firefox и Qt буферизуют результат рендеринга окна и при последующих Expose не отрисовывают его заново, а просто копируют пиксели из буфера. Gtk так не делает.

Очевидно, что хранение пререндеренного пиксмапа и последующий рендеринг из него — более дешевая операция, чем постоянная перерисовка 100500 виджетов. Когда-то у xorg была поддержка backing store, решающая именно эту проблему: графический сервер мог сохранять содержимое окон и использовать его для отрисовки при изменении расположения окон. Сейчас эта фича объявлена устаревшей и выпилена. Лол, ок. Задача-то никуда не делась. Значит, этим должны заниматься тулкиты.

Теперь самое интересное: Gtk имеет поддержку двойной буферизации при выводе. Её предназначение в исключении «моргания» отрисовки интерфейса. Когда тулкит получает Expose, он создаёт пиксмап, равный по размеру обновляемой области. Весь рендеринг производится в этот пиксмап. После окончания рендеринга, содержимое пиксмапа копируется в окно одной командой (чем и обеспечивается отсутствие моргания), после чего пиксмап уничтожается.

Очевидно, что на самом деле вместо этой недоделанной двойной буферизации нам нужна полноценная буферизации всего содержимого окна в постоянно существующем пиксмапе. Реальный код перерисовки должен выполняться только при явном запросе со стороны виджетов, Expose же со стороны сервера должен всегда обрабатываться единственной операцией «скопировать пиксели».

Это я всё к чему. Очень чешутся руки взяться за допилку Gtk, и чем дольше я имею с ним дело, тем сильнее. Пока гномеры ваяют очередную ненужную DE, их тулкит продолжает оставаться изрядным говном. Лучше бы на тулкит силы направили.

Отговорите меня, кто-нибудь.

geekless
()

vala + libwnck = lxpanel2

Форум — Talks

23 часа назад Hong Jen Yee закоммитил начальные сорцы lxpanel2. Всё полностью переписано на vala, с нуля. Для таскбара используется libwnck.

Что-то мне подсказывает, что в перспективе LXDE скатится в третьегном^Wнефункциональное тормозное говно.

 ,

geekless
()

[потаённых желаний тред] игра вашей мечты

Форум — Talks

Идея треда навеяна случайной фразой. Итак, $username, ты когда-нибудь мечтал создать самую-самую-самую лучшую/интересную/трушную компьютерную игру? Рассказывай. В каком жанре? Что там должно быть? Кто будет набигать? Можно ли грабить корованы? Не стесняйся, пиши, как есть.

Линукс тут при том, что под линукс не хватает нативных игр.

geekless
()

GUI-овый аналог xwininfo

Форум — General

Существует ли графический аналог для xwininfo -tree -root? Чтоб показывало дерево окон, их аттрибуты и свойства.

geekless
()

Адская десктопная смесь

Галерея — Скриншоты

Итак, что мы тут можем видеть:

Dolphin в KDE 4.8 стал наконец-то юзабелен на моём железе (исчез странный лаг при открытии любого каталога). Файловый менеджер я в основном использую для запуска фильмов и просмотра фоточек, и потому, здраво рассудив, я заменил pcmanfm на Dolphin — его интерфейс более располагает к этим задачам.

В качестве эмулятора терминала выступает Konsole. Все терминалы на виджете vte адски тормозят и попусту грузят иксы. urxvt трушен и реактивен, но для полного взаимопонимания с ним мешает мышевозная привычка потыкать в меню, покрутить настройки. Konsole имеет богатые настройки и достаточно быстр, поэтому выбор пал на него.

Другие куски KDE не используются, т.к. KDE не нужен. :}

Тема Qt: Gtk. В самом же gtk стоит тема Elements. Недавно мне сообщили, что lxpanelx имеет проблемы отрисовки фона из тем, поэтому была поставлена вот эта тема для лечения багов по ней. На данный момент, практически всё исправлено, осталось два глючащих апплета, которые вы можете наблюдать на скриншоте: трей и индикатор загрузки CPU. Рядом с ними можно видеть прочие апплеты, которые были уже исправлены (так что не пишите в комментариях, что у меня два индикатора раскладки — сам знаю, что оба не нужны). Планомерно готовимся к релизу 0.6, этот баг до релиза непременно починим.

Что до самой темы Elements, то она оказалась на удивление приятной, на мой взгляд.

На нижней панели видны новые фичи панели задач: окраска кнопок в тот же оттенок, что имеют иконки окна, а также миниатюры окон, отображаемые при наведении мыши. Миниатюры пока еще глючные, ну а без функции окраски кнопок я уже просто жить не могу — оказалось, это дико удобно.

Панель задач теперь научилась запускать копии приложения из контекстного меню. Однако насколько эта фича будет реально работать так, как вы ожидаете, зависит более от конкретного приложения, чем от панели. Также из контекстного меню можно копировать заголовок окна, что иногда бывает полезно. Я придерживаюсь мнения, что любой текст, видимый пользователю на экране, должен быть доступен как текст, а не просто как бесполезный набор пикселей. Т.е., как минимум, этот текст должно быть можно скопировать и вставить в текстовый редактор. Т.к. функция копирование заголовка не очень-то часто встречается в оконных менеджерах, эту функцию я добавил к панели задач. Кстати, WM здесь — openbox, но его присутствие обнаруживается лишь по рабочим хоткеям и наличию однопиксельной рамки у окон. Заголовок активного окна показывается на панели, так что в openbox показ заголовков отключен.

 , ,

geekless
()

[gtk] Как выполняется маршрутизация button press/release от GdkWindow до конкретного GtkWidget?

Форум — Development

Как известно, Gtk может использовать одно окно графической системы для отображения произвольного дерева виджетов. Когда от окна поступают сообщения типа button press/release, сигнал от GdkWindow пересылается тому GtkWidget, в пределах которого в данный момент находится мышь.

Вот не могу в сорцах gtk найти код, выполняющий эту маршрутизацию. Подскажите, куда копать.

 

geekless
()

[ld] Игнорировать undefined reference по списку

Форум — Development

Требуется при линковке программы игнорировать некоторые undefined symbols. При этом, на другие undefined symbols (вне указанного списка) надо выдавать ошибку.

Т.е. по сути нужно, чтобы линковщик «увидел» виртуальную разделяемую библиотеку. Библиотеки самой нет, а символы из неё — есть.

Как?

 

geekless
()

[ruby][python] Кто быстрее, черепаха или улитка?

Форум — Talks

Я тут позапускал тестирования производительности интерпретаторов и вот что намерил:

~/git/io$ python2 samples/speed/speed.py

Python localAccesses       := 33.54
Python localSets           := 29.58

Python slotAccesses        := 8.45
Python slotSets            := 7.29

Python blockActivations    := 2.99
Python instantiations      := 2.34
Python version := "2.7.2 final 0"

// values in millions per second
~/git/io$ python samples/speed/speed.py

Python localAccesses       := 38.50
Python localSets           := 31.03

Python slotAccesses        := 7.78
Python slotSets            := 7.46

Python blockActivations    := 2.80
Python instantiations      := 3.41
Python version := "3.2.2 final 0"

// values in millions per second
~/git/io$ ruby-1.8 samples/speed/speed.rb

Ruby localAccesses       := 10.70
Ruby localSets           := 8.12

Ruby slotAccesses        := 5.85
Ruby slotSets            := 5.54

Ruby blockActivations    := 2.33
Ruby instantiations      := 1.83
Ruby version := "1.8.7"
// values in millions per second
~/git/io$ ruby samples/speed/speed.rb

Ruby localAccesses       := 63.57
Ruby localSets           := 38.74

Ruby slotAccesses        := 13.44
Ruby slotSets            := 27.92

Ruby blockActivations    := 8.63
Ruby instantiations      := 2.67
Ruby version := "1.9.3"
// values in millions per second

Цифры говорят сами за себя. Срач, гоу.

 ,

geekless
()

[лоргугл][FF] Аддон для блокирования части API JS

Форум — Desktop

Существует ли аддон для FF, который позволяет блокировать часть вызовов API жабаскрипта выборочно для отдельный сайтов?

Как минимум, нужно две фичи:

1. Уметь по запросу показывать информационное окошко «Скрипты на этой странице используют следующие вызовы API: ...»

2. Позволять составлять правила вида «регэксп для url -> список блокируемых функций».

 

geekless
()

А почему невозможно увидеть все треды через «Сообщения $username»?

Форум — Linux-org-ru

Раньше вроде можно было открыть линк вида www.linux.org.ru/people/geekless/ и увидеть все треды. Теперь там только последние N тредов и отсутствует ссылка, чтобы листать дальше.

Баг? Фича? У меня глюки?

Перемещено maxcom из linux-org-ru

geekless
()

[вброс][некрофилия][вещества] N идей из Windows 98, о которых стоило бы знать разработчикам современных DE.

Форум — Talks

Теги столь исчерпывающи, что остальную часть заголовка можно было бы и не писать. Как страшно жить: зачем столько пить и зачем писать такие статьи?

Для !Ъ: Ссылка.

Для Ъ: можете просто написать гневный коммент, вы всё равно ничего не читаете.

Обсуждаем. Ругаем ТСа. Совершаем неприличные действия с птицами.

P.S.

А теперь о хорошем, светлом, радостном. Вот эта страница блога — отныне официальная главная страница официального сайта LXPanelX. Там будет собираться сводная информация по проекту, ссылки на документацию (когда она будет написана) и всё остальное. Спрашивайте ваши ответы, отвечайте ваши вопросы.

 , ,

geekless
()

RSS подписка на новые темы