LINUX.ORG.RU

pfm 2.12.3 — консольный файловый менеджер на Perl

 , , ,


0

0

pfm — консольный (curses) файловый менеджер, написан на языке Perl и основан на PFM.COM для MS-DOS (созданный Paul Culley и Henk de Heer).
Разрешение на использование названия было любезно предоставлено авторами PFM.COM.
Распространяется под лицензией GPLv2.

Особенности данного файлового менеджера:

  • Вызов команд одним или двумя нажатиями на клавиши.
  • Цветные имена файлов в соответствии с их расширением или типом.
  • Режим выбора одного и нескольких файлов.
  • Многоуровневая сортировка.
  • Использование старых меток и новых меток для выполнения нескольких команд в той же группе файлов.
  • Поддержка закладок для каталогов.
  • Можно как угодно настроить менеджер через его конфигурационный файл.
  • Поддерживает историю командной строки и автозавершение команд посредством использования библиотеки readline.
  • Интеграция с инструментами: Subversion, CVS, Bazaar, Mercurial and git.

Список изменений:

  • Поддержка многоуровневой файловой системы aufs.
  • Поддержка новых версий Subversion
  • Поддержка MIME-типов для .xz и .txz.
  • Добавлено отображение списков файлов в лестничном порядке при (C)opy, (R)ename, (L)ink, tar(G)et и (P)rint.
  • Добавлена горячая клавиша Shift-F8 для легкого удаления старых и новых меток.
  • Множество различных исправлений.

Скриншоты 1, 2, 3, 4, 5

>>> Список изменений

★★★★★

Проверено: Shaman007 ()
Последнее исправление: cetjs2 (всего исправлений: 8)

Ответ на: комментарий от Jurik_Phys

одно гогно в новостях

Сделай мир лучше, пости не гогно...

fallout4all ★★★★★
() автор топика

Вчера только подумывал о том что нужен бы файловый менеджер на perl (легкорасширяемый). У pfm очень ровный код и даже uml диаграмма идет вместе сорцами. Спасибо за новость.

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

Клево! Обожаю такие поделки.

Вообще, у меня есть такая идея - создать некую идеальную виртуальную среду (компьютер и набор софта), который был бы заточен чисто на гиков. Т.е. все тоже самое, что и в реальном мире, только ламповое. Все ламповое - ВМ, компиляторы, трансляторы, ОС, прикладные программы, игры и т.д. Все пишется гиками для гиков.

Многие сказали бы - нахер оно нужно? Да все просто, в реальном мире ни когда не будет софта «от гика гику», ни когда не будет ламповых игр, ни когда не будет полностью свободного ПО. А в виртуальном ирке это все можно организовать.

Единомышленники, пишите :)

Абсолютно поддерживаваю и скоро (надеюсь что скоро, но рано или поздно точно сделаю) кое-что релизну. Думаю очень многим понравится. Пишется на Perl+XS+C

anonymous
()

Чем оно лучше MC ? //таки уже спрашивали)

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

Может кто нибудь внятно объяснить, зачем файловый менеджер в консоле? Ну mc понятно, там типа плагины, чтобы свои велосипеды не писать. Но зачем файловый менеджер ради файлового менеджера в консоле? Люди разучились пользоваться coreutils?

ИМХО затем, что шелл - средство универсальное, но не самое быстрое. На «cp longfilename1 longfilename2» или на «cd longlongpath» в консоли тратится сравнительно много времени по сравнению с mc или dired, даже если пользоваться автодополнением и хотлинками.

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

Ну так и MC работает внутри screen на удаленной машине по ssh без каких-либо проблем.

Нет!

а зачем мышь в консолях?

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

У меня mc так работает. Ничего, батенька, не путаете?

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

gpm в таком случае и без mc закосоглазить может. Просто в случае с mc это происходит всегда. mc -d и будет вам счастье.

Deleted
()

Поиск pfm по официальным репозиториям Ubuntu дал результат:

pfm - Postgres Forms (pfm) is a client application with a graphical user interface for the PostgreSQL data base server using Tcl/Tk

anonymous
()

Версия 2.12.3. Предыдущая - 2.12.0 зачем писать об очередной версии малоизвестной проги, причем не в мини-новостях? Это теперь такая политика администрации? WTF?

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

Ну так и MC работает внутри screen на удаленной машине по ssh без каких-либо проблем.

ssh + screen + gpm + mc

Вы действительно думаете, что если у вас что то не так, то и у других оно не должно работать?
Повторяю, у меня все чудно работает на удаленных серверах.

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

Либо версии не те (у меня древняя версия mc тоже работала, пока её не выпилили из генточки), либо gpm выключен, либо mc собран без gpm, либо запускается с отключенной мышой.

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

Кстати, кинь координаты, можно пофилософствовать будет на счет сферического виртуального компа в вакууме :)

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

Либо версии не те (у меня древняя версия mc тоже работала, пока её не выпилили из генточки), либо gpm выключен, либо mc собран без gpm, либо запускается с отключенной мышой.

Какие то левые отмазки. Факт, что mc запущенный из-под screen на удаленном сервере работает.

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

# aptitude search pfm: pfm - PostgreSQL graphical client using Tcl/Tk

└► yum  search pfm
====================================================================== N/S matched: pfm =======================================================================
libpfm-python.x86_64 : Python bindings for libpfm and perf_event_open system call
libpfm.i686 : Library to encode performance events for use by perf tool
libpfm.x86_64 : Library to encode performance events for use by perf tool
libpfm-devel.i686 : Development library to encode performance events for perf_events based tools
libpfm-devel.x86_64 : Development library to encode performance events for perf_events based tools
libpfm-static.i686 : Static library to encode performance events for perf_events based tools
libpfm-static.x86_64 : Static library to encode performance events for perf_events based tools


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

прогноз погоды на 10 дней для conky на php... нужна только библиотека simple_html_dom.php, найдете сами в кугеле

<?php #http://xdan.ru/Uchimsya-parsit-saity-s-bibliotekoi-PHP-Simple-HTML-DOM-Parser... #http://pogoda.yandex.ru/moscow/details

function delsymbol($str){ $str=str_replace(«\r\n»,",$str); $str=str_replace(«\n»,",$str); $str=trim($str, " "); $str=trim($str, " "); while ( strpos($str,' ')!==false ){ $str = str_replace(' ',' ',$str); }; return $str; }

require_once 'simple_html_dom.php'; $html=file_get_contents('http://pogoda.yandex.ru/moscow/details'); $html = str_get_html($html);

$div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_dayname]'); foreach($div as $item){$dayname[]=$item->plaintext; } $div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_date] div[class^=b-forecast-detailed__date]'); foreach($div as $item){$detailed__date[]=$item->plaintext;} $div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_date] div[class^=b-forecast-detailed__month]'); foreach($div as $item){$detailed__month[]=$item->plaintext;}

$div = $html->find('div[class^=b-forecast-detailed__temp]'); foreach($div as $item){ $detailed_temp_string=str_pad(trim(str_replace(«+»,"",$item->plaintext), « »),10,' '); $detailed_temp_1=explode(«…», $detailed_temp_string); $detailed_temp1[]=$detailed_temp_1[0]; $detailed_temp2[]=$detailed_temp_1[1]; $detailed__temp[]=str_pad(trim(str_replace(«+»,"",$item->plaintext), « »),10,' '); } $div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_pressure] div[class=b-forecast-detailed__value]'); foreach($div as $item){ if(substr_count($item->plaintext,«Давление»)==0) { $pressure[]=trim($item->plaintext, « »); } } $div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_humidity] div[class=b-forecast-detailed__value]'); foreach($div as $item){ if(substr_count($item->plaintext,«Влажность»)==0) { $humidity[]=trim($item->plaintext, « »); } } $div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_wind] div[class=b-forecast-detailed__value]'); foreach($div as $item){ if(substr_count($item->plaintext,«Ветер»)==0) { $item_type_wind[]=trim($item->plaintext, " "); } }

$div = $html->find('td[class^=b-forecast-detailed__item b-t] div[class=b-forecast-detailed__value]'); foreach($div as $item){ $neb=str_replace(«облачность»,«обл.»,$item->plaintext); $neb=str_replace(«облачно»,«обл.»,$neb); $neb=str_replace(«прояснениями»,«проясн.»,$neb); $neb=str_replace(«небольшой»,«неб.»,$neb); $nebo[]=delsymbol($neb); }

$div = $html->find('div.b-forecast-detailed__value_type_wind img'); foreach($div as $item){ $wind=str_replace(«Ветер: »,"",$item->title); $wind=str_replace(«юго-западный»,«юз»,$wind); $wind=str_replace(«юго-восточный»,«св»,$wind); $wind=str_replace(«северо-западный»,«сз»,$wind); $wind=str_replace(«северо-восточный»,«св»,$wind); $wind=str_replace(«западный»,«з»,$wind); $wind=str_replace(«южный»,«ю»,$wind); $wind=str_replace(«северный»,«с»,$wind); $wind=str_replace(«восточный»,«в»,$wind); $value_type_wind[]=$wind; }

$div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_rise] div[class=b-forecast-detailed__value_type_mono]'); foreach($div as $item){$rise[]=str_replace(«Восход»,"",delsymbol($item->plaintext));} $div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_sunset] div[class=b-forecast-detailed__value_type_mono]'); foreach($div as $item){$sunset[]=str_replace(«Заход»,"",delsymbol($item->plaintext));} $div = $html->find('td[class^=b-forecast-detailed__item b-forecast-detailed__item_type_magnetic-fields] div[class=b-forecast-detailed__value]'); foreach($div as $item){$magnetic[]=str_replace(«Магнитное поле:»,"",delsymbol($item->plaintext));}

$mytext ='update_interval 1'.PHP_EOL; $mytext .='background no'.PHP_EOL; $mytext .='own_window yes'.PHP_EOL; $mytext .='own_window_type override'.PHP_EOL; $mytext .='own_window_transparent yes'.PHP_EOL; $mytext .='own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager'.PHP_EOL; $mytext .='use_xft yes'.PHP_EOL; $mytext .='xftfont Sans Mono DejaVu:size=8'.PHP_EOL; $mytext .='double_buffer yes'.PHP_EOL; $mytext .='draw_shades yes'.PHP_EOL; $mytext .='default_color white'.PHP_EOL; $mytext .='default_shade_color black'.PHP_EOL; $mytext .='default_outline_color black'.PHP_EOL; $mytext .='alignment top_right'.PHP_EOL; $mytext .='gap_x 340'.PHP_EOL; $mytext .='gap_y 15'.PHP_EOL; #$mytext .='minimum_size 320 400'.PHP_EOL; $mytext .='maximum_width 350'.PHP_EOL; $mytext .='no_buffers yes'.PHP_EOL;

$mytext .='TEXT'; $mytext .= PHP_EOL;

$thermometer_now = $html->find('div[class=b-thermometer__now]'); $factbig = $html->find('div[class=b-info-item_type_fact-big]'); $bthermometer = $html->find('div[class=b-thermometer-info__line]'); $mytext .= '${color ffcc00}'; $mytext .= 'Погода сейчас: '; $mytext .= $thermometer_now[0]->plaintext.' '.$factbig[0]->plaintext; $mytext .= ', '; $mytext .= delsymbol($bthermometer[0]->plaintext);; $mytext .= PHP_EOL; $mytext .= delsymbol($bthermometer[1]->plaintext);; $mytext .= ', '; $mytext .= delsymbol($bthermometer[2]->plaintext);; $mytext .= PHP_EOL; $mytext .= delsymbol($bthermometer[3]->plaintext);; $mytext .= '$color'; $mytext .= PHP_EOL.PHP_EOL;

$mytext .= '${color white}'; $mytext .= 'Прогноз погоды от '.date('d-m-Y H:i:s'); $mytext .= '$color'; $mytext .= PHP_EOL; $mytext .= PHP_EOL;

for ($i = 0; $i <= count($dayname)-1; $i++) { $mytext .= '${color ffcc00}'; $mytext .= $dayname[$i].' '.$detailed__date[$i].' '.$detailed__month[$i].' | в:'.$rise[$i].' | з:'.$sunset[$i]; if (isset($magnetic[$i])) {$mytext .= ' | мп.'.$magnetic[$i];} $mytext .= '$color'; $mytext .= PHP_EOL;

$mytext .= '${color white}';

if ($detailed_temp1[$i*4]<=0) {$mytext .= '${color 0099cc}'.$detailed_temp1[$i*4].'$color…';} else {$mytext .= $detailed_temp1[$i*4].'…';} if ($detailed_temp2[$i*4]<=0) {$mytext .= '${color 0099cc}'.$detailed_temp2[$i*4].'$color';} else {$mytext .= $detailed_temp2[$i*4];} $mytext .= ' ${goto 50}'.$pressure[$i*4].' ${goto 80}'.$humidity[$i*4].' ${goto 115}'.$value_type_wind[$i*4].' '.$item_type_wind[$i*4].'${alignr}'.$nebo[$i*4].PHP_EOL;

if ($detailed_temp1[$i*4+1]<=0) {$mytext .= '${color 0099cc}'.$detailed_temp1[$i*4+1].'$color…';} else {$mytext .= $detailed_temp1[$i*4+1].'…';} if ($detailed_temp2[$i*4+1]<=0) {$mytext .= '${color 0099cc}'.$detailed_temp2[$i*4+1].'$color';} else {$mytext .= $detailed_temp2[$i*4+1];} $mytext .= ' ${goto 50}'.$pressure[$i*4+1].' ${goto 80}'.$humidity[$i*4+1].' ${goto 115}'.$value_type_wind[$i*4+1].' '.$item_type_wind[$i*4+1].'${alignr}'.$nebo[$i*4+1].PHP_EOL;

if ($detailed_temp1[$i*4+2]<=0) {$mytext .= '${color 0099cc}'.$detailed_temp1[$i*4+2].'$color…';} else {$mytext .= $detailed_temp1[$i*4+2].'…';} if ($detailed_temp2[$i*4+2]<=0) {$mytext .= '${color 0099cc}'.$detailed_temp2[$i*4+2].'$color';} else {$mytext .= $detailed_temp2[$i*4+2];} $mytext .= ' ${goto 50}'.$pressure[$i*4+2].' ${goto 80}'.$humidity[$i*4+2].' ${goto 115}'.$value_type_wind[$i*4+2].' '.$item_type_wind[$i*4+2].'${alignr}'.$nebo[$i*4+2].PHP_EOL;

if ($detailed_temp1[$i*4+3]<=0) {$mytext .= '${color 0099cc}'.$detailed_temp1[$i*4+3].'$color…';} else {$mytext .= $detailed_temp1[$i*4+3].'…';} if ($detailed_temp2[$i*4+3]<=0) {$mytext .= '${color 0099cc}'.$detailed_temp2[$i*4+3].'$color';} else {$mytext .= $detailed_temp2[$i*4+3];} $mytext .= ' ${goto 50}'.$pressure[$i*4+3].' ${goto 80}'.$humidity[$i*4+3].' ${goto 115}'.$value_type_wind[$i*4+3].' '.$item_type_wind[$i*4+3].'${alignr}'.$nebo[$i*4+3].PHP_EOL; }

$fp=fopen('temp.txt','x+'); $file=fwrite($fp,$mytext); if($file) echo 'Ok'; fclose($fp); unset($fp); unset($mytext); unset($div); $html->clear(); unset($html); rename('temp.txt','.conky_prognoz') ?>

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

Не, виноваты кривые руки разработчиков, которые 3 (или уже 4) версии назад сломали mc, до этого то работало. Мои руки за это время не менялись.

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

Ну что я могу сказать... ссылку на подобную проблему в 2008 кинул в вашей теме. Надо смотреть исходники gpm но мне лень. Надо багрепортить

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

Не хватает. Вменяемый клон Total Commander тоже нужен. Равно как и Winamp. Но вместо этого пилят всякие убогие поделки, отличающиеся тулкитом, дефолтным набором хоткеев и веществами, которые употребляет автор.

MiniRoboDancer ★☆
()

Цветные имена файлов в соответствии с их расширением или типом.

Трепещи, Volcov Commander!

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

ну так предложите своё решение на 10 дней парсинг с яндекса

плиз

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

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

Винамп не представляю как использовать при количестве песен больше 100. Да, qmmp на мой взгляд умеет все, что нужно. Да, диски он не записывает :)

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

у меня это решение работает и я доволен до...

в общем стабильно выдает прогноз... на просторах интернета я подобного не встретил

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

дартаньяян! предложите своё решение

а то всякие идиотские статьи писать и обсуждать чужую работу мы все умеем... а как дело доходит до реализации все хвосты поджимаем, так?

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

Работает под screen на удаленной машине с доступом по ssh.

vifm пробовал?

q11q11 ★★★★★
()

Поддержка новых версий Subversion

киллер фича

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

Причина - различные паттерны выполнения одинаковых задач.

Как раз строго наоборот - единая среда для всего.

Да, диски он не записывает :)

А ещё в нём редактора визуализаций нет, панели управления MIDI, DSP-плагинов... В винампе вообще дохрена полезных плюшек.

MiniRoboDancer ★☆
()

Надо бы заглянуть в сырцы. ФМ на Perl, это уже интересно...

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

Как раз строго наоборот - единая среда для всего.

Я имел в виду то, что одинаковые задачи под Линуксом и Виндовсом, в частности в Тотал Коммандере, выполняются совершенно по разному.

Например, переключение текущего каталога: В тотал. коммандере, что-то на подобие Alt-F2 выбрать диск, потом кликать и кликать до нужного каталога. В нём есть строка адреса, но она не особа удобна.

Под линуксом таже операция (mc): Ctrl+0 (скрыть панели), cd /et<tab>/X<tab>, вот я уже в /etc/X11/; Ctrl+O - вуаля, на активной панели текущий каталог.

Итого, задача одна, подходы совершенно разные. Линуксовый подход (mc) мне нравится больше, единственный минус - надо настраивать привязки файлов, чтобы быстро просматривать файлы. Но, опять же, мне легче Ctrl+O okular filen<tab>.

Jurik_Phys ★★★★★
()
Последнее исправление: Jurik_Phys (всего исправлений: 3)
Ответ на: дартаньяян! предложите своё решение от Frost

Все беды - от нищебродства, типичного для лор овцев

http://corporate.foreca.com/ru/products-services/data/namefeed - собственно, с этого сервиса яндекс тянет свои прогнозы.
и не надо вашего говнокода. И прогноз на 14 дней вперед.

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

В тотал. коммандере, что-то на подобие Alt-F2 выбрать диск, потом кликать и кликать до нужного каталога

Зачем кликать, если есть клава? Алсо, под нативными гнёвыми ФМ даже первое действие не нужно, ибо корневой раздел один. Если тотал под вайном пускать и лазить в виртуальную виндовую ФС, то может быть нужно, да, но очень редко.

Под линуксом таже операция (mc)

А какое отношение mc имеет к операционной системе? Это просто разные концепции файловых менеджеров. Под форточками его ближайший аналог - Far (хотя концепции управления и расширения таки существенно различаются).

cd /et<tab>/X<tab>, вот я уже в /etc/X11/; Ctrl+O - вуаля, на активной панели текущий каталог.

Под тоталом и аналогами намного быстрее - <Ctrl+\>e<Enter>x<Enter>.

единственный минус - надо настраивать привязки файлов, чтобы быстро просматривать файлы

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

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

Да лан, зато поржать можно над всеми этими великами. И в кои-то веки на лоре новости не повторяют опеннет один в один...

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

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

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

Каждый выбирает наиболее удобный для себя инструмент, если это Total Commander через wine - пожалуйста. У меня же мнение иное, в линуксе есть более удобные и удачные инструменты. Да, и в целом, я не поклонник комбайнов, а если вынужден ими пользоваться, то использую основные функции.

Jurik_Phys ★★★★★
()

pure future music.
а про perl file manager - надо будет попробовать.

etwrq ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.