LINUX.ORG.RU

Файловый менеджер моей DE

 


1

1

К сожалению последнее время не могу уделять много времени неоплачиваемому хобби. Лето, домашние дела, солнечная электростанция, роскомнадзор, и все такое.

Последнюю неделю посвятил дописыванию ФМа, после которого сделаю пару косметических допиливаний и раздам вам на поругание в виде установочного скрипта, пока только для DEB-based. Собственно оно уже устанавливается и работает.

Итак, ФМ. Что мы уже умеем.

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

Тривиальные операции с файлами. Создать, копировать, вырезать, вставить, переименовать, свойства и тд. Не знаю как ФМ выводят индикатор прогресса в докбар или панель задач, но я решил просто добавлять этот индикатор к иконке окна. Выглядит красиво.

Открытие. Список программ, которыми можно открыть файл, отображаются прямо в контекстном меню простыней, безо всяких вложенностей. Само собой файл можно открыть с помощью другой программы, можно запомнить этот выбор, или не запоминать. При открытии неизвестного файла, ФМ спрашивает чем это открывать.

Устройства. Монтирование, размонтирование, краткая статистика.

Превьюхи. Их можно делать для картинок и для видео + в настройках опция ограничителя пока задана жестко, но со временем изменю на плавающее значение. Кстати для видеопревьюхи берутся кадры из 10%, 50% и 90% таймлайнов, из них выбирается тот на котором самая большая разница между светлыми и темными пикселями. Найду способ отображать GIF'ы — сделаю вообще динамичные.

Пометка цветами. На скриншоте можно заметить разноцветные кружочки над каталогами и картинкой. Лично мне такая фишка оказалась очень удобной, потому что цветовая визуализация позволяет быстрее найти объект среди бардака.

Сортировки, просмотр свойств, тоже работают.

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

На данный момент код занимает 1024 строчки основной программы, 768 строчки либы поддержки (тривиальные функции, не имеющие отношения к алгоритмам ФМ), 16 строчек CSS-кода и 128 строчек занимает плагин к панели управления.

Готов ловить помидоры.

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 3)
Ответ на: комментарий от windows10

Любой ЯП создается для программирования. В моем случае я его использую как Vala - обертку над низкоуровневым С-кодом.

нет Vala это грубо говоря обёртка над C и GObject(GNOME) яркий пример DE написанной на ней это Pantheon desktop environmen) из проекта elementaryOS

enep ★★★★★
()
Последнее исправление: enep (всего исправлений: 1)
Ответ на: комментарий от windows10

А вот оптимизация алгоритма вывода может быть разной от реализации к реализации.

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

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

Первый вариант заведомо бредовый. А для второго, чтобы у тебя UI программы не за-а-а-и-и-и-и-к-а-а-л-о-о-сь на вызовах stat(), нужна многопоточность, чтобы операции IO происходили в отдельном потоке, не связанном с циклом обработки событий UI.

Соответственно нужны средства коммуникации между потоками. А отлаживать многопоточный код на любом ЯП — это всегда весёлые приключения. А еще заниматься оптимизацией производительности такого кода, не менее «весело».

Кстати, в пыхе есть мнопоточность?

wandrien ★★★
()
Последнее исправление: wandrien (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Я не думаю что в Ruby массивы это костыль, я думаю у него свои особенности

Там тоже слишком много разных типов данных реализовано в одном классе. Но до такого маразма как в пхп конечно не дошли.

bread
()
Последнее исправление: bread (всего исправлений: 1)
Ответ на: комментарий от wandrien

А теперь посмотрим, строк сколько занимает настоящий минимально юзабельный ФМ с многопоточностью и всем остальным, который не зависнет на открытии каталога с 100 000 картинок.

Интересно, и что же потом в этом каталоге делать? Для такой мегапомойки обычные проводники явно не подходят. Стоит ли корячиться с оптимизацией? 100 файлов быстро показывает, и ладно. Даже 100 это многовато для нормального каталога.

bread
()
Последнее исправление: bread (всего исправлений: 1)
Ответ на: комментарий от bread

Интересно, и что же потом в этом каталоге делать?

Это не самое большое число для видео разбитого на кадры. Я помню Алису в стране чудес(которая в СССР была сделана, мультик) на кадры разбил, получилось 60 000 картинок или типа того, если правильно помню.

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

vbcnthfkmnth123 ★★★★★
()
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 2)

Нужны кастомные иконки для картинок директорий. Как в винде.

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

Интересно, и что же потом в этом каталоге делать?

Вспомнилось, как я переделывал однажды один кусок веб-сервиса, который срал картинки в каталог без разделения на подкаталоги. Срал долго, несколько лет.

Попасть в этот каталог могли не только лишь все.

Но правда и делать там особо было нечего, разгребали его скриптами, понятное дело.

А так вообще это хороший стресс тест для гуя. Если гуй не виснет и не лагает, значит аффтар молодец.

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

Особенно удивляют люди, у которых буквально весь рабочий стол завален папками/ярлыками.

Знаете почему люди не любят gnome3 и выше?

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

Да случается заглядывать. Правда я как-то больше bash-шем и coreutils-ами.

ls не лагает, слава Штольману.

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

Ну а вообще тут какое дело. Можно долго мусолить «зачем это нужно». Но в реальной жизни обычно не так. Обычно вдруг становится нужно что-то сделать, и вопрос встаёт иначе: чем.

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

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

Обычно вдруг становится нужно что-то сделать, и вопрос встаёт иначе: чем.

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

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

Сам DE делаешь? Есть ссылка на github?

Да. Не форк и не кальку, а самое что ни на есть новое, с нескучными обоями, еще и на PHP.

Ссылки пока нет, но в ближайшее время появится - оно готово для работы, но не готово для безгеморройной установки. Нужно ставить специально приготовленный пых.

В ближайшее время допилю ФМ, сделаю пару украшательств - и выложу с подробной документацией.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от wandrien

При рендеринге лайоута с большим количеством данных, узким местом может стать например рассчёт «посадочного места» под текст, потому для этого нужно рассчитать метрики рендеринга для каждой надписи.

Это правда. Поэтому я взял готовый ГТКшный лайоут. Он быстр, автоматичен и поддерживает системные фишки искаропки, но взамен у него ограниченный тип ячеек - pixbuf и label.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от xaTa

Ты серьезно??

Серьезно что именно?

windows10 ★★★★★
() автор топика
Ответ на: комментарий от enep

нет Vala это грубо говоря обёртка над C и GObject(GNOME) яркий пример DE написанной на ней это Pantheon desktop environmen) из проекта elementaryOS

Ну так и PHP это обертка над С и GObject, ведь в конечном итоге все равно системные функции дергаются из профильных библиотек.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от wandrien

Кстати, в пыхе есть мнопоточность?

Есть, но не совсем кошерная. Я использую скорее мультипроцессинг.

#!/usr/bin/php
<?php
$pid = pcntl_fork();
if ($pid == -1) {
    die("Не удалось создать дочерний процесс.\n");
} elseif ($pid) {
    // ================= Родительский блок кода =====================
    $status = null;
    pcntl_waitpid($pid, $status, WNOHANG); // Неблокирующее ожидание
    sleep(10); // Мой любимый sleep для имитации рабочего процесса
    pcntl_waitpid($pid, $status); // Ждем завершения родительского процесса чтобы избежать зомбаков
    // ================= Родительский блок кода =====================
} else {
    // ================= Дочерний блок кода =====================
    for ($i = 0; $i < 5; $i++) {
        echo "Делаем вид работы дочернего процесса $i \n";
        sleep(0.5); // Имитация работы
    }
    exit(0); // Закрываем дочерний процесс - SIGTERM короче
    // ================= Дочерний блок кода =====================
}

?>

Геморр конечно присутствует, потому что в одном и том же коде нужно определять, он запущен как родитель, или как дочка. Зато можно плавно управлять привязкой к процессорным ядрам.

Есть еще parallel - https://www.php.net/manual/ru/philosophy.parallel.php

Но в него надо вникать глубже, и быть программистом, а у меня это на грани хобби.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от windows10
#include <iostream>
#include <unistd.h>     
#include <sys/types.h>  
#include <sys/wait.h>   
#include <cstdlib>      

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        std::cerr << "Не удалось создать дочерний процесс." << std::endl;
        return 1;
    } else if (pid > 0) {
        // ================= Родительский блок кода =====================
        int status;
        pid_t result = waitpid(pid, &status, WNOHANG); // Неблокирующее ожидание

        std::cout << "Родитель: имитируем рабочий процесс..." << std::endl;
        sleep(10); // Имитация работы родителя

        waitpid(pid, &status, 0); // Ждем завершения дочернего процесса
        std::cout << "Родитель: дочерний процесс завершен." << std::endl;
        // ================= Родительский блок кода =====================
    } else {
        // ================= Дочерний блок кода =====================
        for (int i = 0; i < 5; ++i) {
            std::cout << "Делаем вид работы дочернего процесса " << i << std::endl;
            usleep(500000); // 0.5 секунды
        }
        std::cout << "Дочерний процесс завершен." << std::endl;
        exit(0); // Завершаем дочерний процесс
        // ================= Дочерний блок кода =====================
    }

    return 0;
}
enep ★★★★★
()
Ответ на: комментарий от windows10

Ну так и PHP это обертка над С и GObject, ведь в конечном итоге все равно системные функции дергаются из профильных библиотек.

вы дурень? или прикидываетесь

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

Пугают люди, у которых всё разобрано/разложено и в процессе бурной работы не образуется кучи файлов не пойми где. Маньяки какие-то.

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

Пугают люди, у которых всё разобрано/разложено и в процессе бурной работы не образуется кучи файлов не пойми где. Маньяки какие-то.

Это называется дисциплина

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

Особенно удивляют люди, у которых буквально весь рабочий стол завален папками/ярлыками

Так они на своих местах и лежат. Ярлыки - это же просто скрипты для запуска, они сами заходят в папки где это лежит и запускают.

vbcnthfkmnth123 ★★★★★
()

код занимает 1024

Кошерно.

Готов ловить помидоры

Обычно принято выкладывать код. Люди могут и заинтересоваться, а там и багрепорты, гляди, пойдут. А дальше всякое может быть, станешь известным…

Gonzo ★★★★★
()
Последнее исправление: Gonzo (всего исправлений: 1)
Ответ на: комментарий от basilic

Не понимаю людей, которым надо все по полочкам да по папочкам да еще и подписать. Вот приходит теща в гости и возмущается, че это за бардак у меня на рабочем месте, а это и не бардак вовсе, все лежит на своих местах ТАК, как мне удобно. С ПК так же, любой скажет, что у меня там черт ногу сломит, но лично я четко знаю где и что лежит, хотя ессичесно - на скрине полный порядок в сравнении со мной.

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

Это лоровский искин автоматически перевел похапе на нормальный язык. Надеюсь, скоро можно будет просто сказать: Алиса, перепиши всё на раст! И вжух, можно уже на лоре показывать.

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

еще и на PHP

Почему пых? В моём понимании это последний язык который стоит рассматривать для подобных целей.

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

Почему пых? В моём понимании это последний язык который стоит рассматривать для подобных целей.

Proof of concept.

И да, на удивление DE-шка получается идеальной. Поэтому на твой вопрос я могу ответить так: потому что делает все то же, что и любой другой ЯП, но при этом имеет вменяемую семантику, вменяемые операторы, парсинг строк, работу с переменными и массивами, и gc.

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

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

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

«Раскладки языков» это мощно.

Именно. Этом названию предшествовал мини-опрос 30-ти моих знакомых и родственников.

Суть опроса была в том, какое название ярче всего скажет людям о чем речь, при условии если они первые раз видят систему. Был выбран такой вариант.

KDE-шная «Клавиатура» например сразу была отброшена, потому что люди настроены на поиск ЯЗЫКА, а не нажатия кнопок, подсветки, горячих клавиш и тд.

Само собой бред типа «Язык ввода» даже не рассматривался, потому что речь шла о раскладке, а не порнографии.

https://ibb.co/chJwQpwQ

windows10 ★★★★★
() автор топика
Последнее исправление: windows10 (всего исправлений: 1)
Ответ на: комментарий от bread

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

Сочувствую людям у которых над кроватью висит икона с названием их ЯП.

Мне надо чтобы а) работало; б) занимало меньше времени на разработку по сравнению с другим.

Оба пункта удовлетворяются, значит язык норм.

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

Мне надо чтобы а) работало; б) занимало меньше времени на разработку по сравнению с другим

Sugar щупал? Там прикольно сделано, на python + pygtk, даже свой браузер запилили, куцый по функциям, но рабочий.

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

Sugar щупал? Там прикольно сделано, на python + pygtk, даже свой браузер запилили, куцый по функциям, но рабочий.

Не. Когда-то читал, но не пробовал, вроде тогда оно выглядело слишком вырвиглазно. Для наркомании есть Енлайтмент =)

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

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

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

вроде тогда оно выглядело слишком вырвиглазно

Оно сделано для лучшей читаемости таким. Я потыкал, оно ещё и под маленькие экраны приспособлено. Похоже словно рожденно для ноутов с говенными экранами.

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

vbcnthfkmnth123 ★★★★★
()
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 2)
Ответ на: комментарий от bread

Не будет. Раскладка не является атрибутом языка, раскладка - это свойство клавиатуры. Словосочетание «раскладка языков» имеет смысл лишь в качестве описания процесса.

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

Не будет. Раскладка не является атрибутом языка, раскладка - это свойство клавиатуры. Словосочетание «раскладка языков» имеет смысл лишь в качестве описания процесса.

А вот и нет. Раскладка - это свойство ввода. Переключать его можно и мышкой. Свойство, существующее исключительно в языковом контексте, потому что 99.9999% людей переключают раскладку исключительно для изменения языка ввода.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от t3n3t

Тем временем на скринах помесь макоси, кед и оффтопик11.

Нот всего семь (с)

Калька - это не UI, это использование кишок других DE или тем более их форков.

У меня этого всего нет.

windows10 ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.