Показаны сообщения с ярлыком far manager. Показать все сообщения
Показаны сообщения с ярлыком far manager. Показать все сообщения

четверг, 8 декабря 2016 г.

Far Manager for Linux. Alpha.

Свершилось то, чего лично я ждал уже довольно продолжительное время ... На GitHub появился репозитарий с Alpha версией Linux-порта известного Windows файлового менеджера File Manager - https://github.com/elfmz/far2l , автор проекта некто elfmz. Как пишет сам автор в комментариях к проекту - на данный момент этот проект интересен лишь энтузиастам и отчасти он прав, т.к. под Linux существует достаточно много удобных и "нативных" файловых менеджеров, в частности тот же всем известный Midnight Commander, Wal Commander, который позиционировался как "замена" Far'а под Linux. Однако полноценный порт вышел только сейчас.

Кому, зачем и для чего он нужен? Например для меня (видимо я все-таки попадаю в то число энтузиастов о которых говорит elfmz), человека для которого основной операционной системой является именно Windows - Far уже является просто незаменимой вещью. Я настолько привык к его функциям, hotkey'ям и прочему что на любом ПК просто не представляю как без него жить. Например, рассмотрим простую задачу - рекурсивный поиск файлов в текущем каталоге с заданным текстом, под Windows достаточно нажать Alt-F7, в Far'е, ввести маску файлов и щаблон поиска текста, после чего просто нажать Enter и в отдельной панели будут отображены все найденные файлы. В процессе работы все эти действия уже доведены до полного автоматизма, поэтому лично у меня данная операция занимает доли секунды. Под Linux же, например в том же mc, естественно, присутствуют все те же самые функции, но во-первых горячие клавиши другие, а во-вторых ко всему новому нужно привыкать, а любые задержки, сказываются на производительности выполняемой работы. Я, например, так и не смог полноценно привыкнуть ни к Wal Commander, ни к mc под Linux'ом. Однако Far для Linux для меня оказался просто находкой:


Собрать его достаточно просто руководствуясь инструкциями из Git'а, например, под Ubuntu 16.04 x64 для сборки достаточно выполнить следующую последовательность команд:

apt-get install gawk m4 libglib2.0-dev libwxgtk3.0-dev cmake g++
git clone https://github.com/elfmz/far2l
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../far2l
make -j4

На всякий случай выкладываю бинарники моей сборки под Ubuntu x64: far2l_binary_x64.tar.gz

Обновлено 08.12.2016 18:22 (MSK)

Как создать иконку Far на рабочем столе в Ubuntu?

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


Нужно создать на рабочем столе файл с именем far2l.desktop со следующим содержимым:

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=Far Manager
Icon=/home/decker/far2l_build/install/far2l.png
Exec=/home/decker/far2l_build/install/far2l 
StartupNotify=false
StartupWMClass=Far2l
OnlyShowIn=Unity;
X-UnityGenerated=true

При этом, естественно, пути к исполняемому файлу Far и иконке (иконка это обычный png файл с разрешением, в моем случае 300x300 пикселей) должны быть ваши собственные. После создания файла его нужно сделать исполняемым, т.е. сделать на нем chmod +x far2l.desktop . После этого вы сможете запускать Far Manager с ярлыка на рабочем столе.

вторник, 8 декабря 2015 г.

Far Manager 3.0. Решение проблемы с выделением в текстовом редакторе.

Сегодняшний наш пост будет немного отвлеченным из серии "lifehack" или что делать если. Предыстория очень простая, в своей работе я очень часто использую файловый менеджер Far Manager. Можно долго спорить над тем что удобнее, консоль или GUI, Far Manager или Total Commander, развивать различные дискуссии и впадать в holywar'ы по этому поводу. Вывод здесь простой - каждому свое. Я могу перечислить не менее 100 пунктов по которым Far Manager гораздо удобнее в работе чем тот же Total Commander, однако, сторонники GUI могут сделать то же самое в пользу Total'а и будут по своему правы. Но пост не об этом. Так или иначе мне достался новый ноут, за которым я собственно сейчас и пишу этот пост. Но при установке Far на него - перестало работать выделение в текстовом редакторе. При попытке зажать Shift и выделить текст с помощью стрелок курсора фактически выделялась только одна строка, при этом текст не выделялся, а просто эта строка следовала за курсором, как показано на картинке. Ровно аналогичная ситуация была описана в этом посте на форуме Far (уже потом я привел в нем решение данной проблемы).

Пользователь droll описывал эту проблему следующим образом: "Странно работает выделение, поиском похожих проблем не нашел. Странность заключается в том, что зажав Shift и зажав стрелку (например вправо), выделяется ~30 символов, после чего выделение снимается и начинается с нового места (~30 символа). Потом выделяется еще ~30 и опять выделении снимается, и так далее. Одно такое выделении занимает примерно одну секунду.
Также, в связи с этим, невозможно зажав Shift и стрелку выделить строку, потом нажать влево. Выделение начинается заново с места курсора.".

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


Здесь наглядно видно, что при нажатом Shift и кнопке "Вниз" на основной клавиатуре консольное окно получает странный KEY_EVENT_RECORD c  Vk="VK_????" [255/0x00FF], которое по всей видимости посылает сам ноутбук, т.к. никаких приложений, которые могут посылать подобное событие нет. Соответственно Far Manager реагирует на это событие именно таким образом, как и описано выше. Т.е. вместо выделения текста просто перемещает строку с выделением за курсором. Ну что ж ... надо копать ...

Ставим svn под Win32, MSVC (у меня был Visual Studio 2013) и качаем исходники Far Manager:

svn co http://svn.code.sf.net/p/farmanager/code/trunk/unicode_far unicode_far

Там все очень логично и четко структурированно, поэтому разобраться что вся обработка ввода с консоли происходит в keyboard.cpp не составило никакого труда (отдельная благодарность разработчикам Far Manager за чистый и понятный исходный код). Ну а далее, проблема, как оказалось, крылась вот в этом месте:


Добавив в строку:

if (!rec->Event.KeyEvent.bKeyDown && (CtrlState&(ENHANCED_KEY|NUMLOCK_ON)))
   return Modif|(KEY_VK_0xFF_BEGIN+ScanCode);


Всего одно условие, так, чтобы получилось:

if (!(CtrlState & SHIFT_PRESSED)) { // [+] Decker
  if (!rec->Event.KeyEvent.bKeyDown && (CtrlState&(ENHANCED_KEY|NUMLOCK_ON)))
   return Modif|(KEY_VK_0xFF_BEGIN+ScanCode); } 

Мы отучили Far реагировать на это неизвестно откуда берущееся "псевдонажатие". Собрав проект мы получили работоспособную версию Far Manager для этого случая. Готовые бинарники, т.е. собранную версию для x86 и x64 можно взять здесь: unicode_far_decker.7z

Чему нас учит этот пост? Скорее всего тому, что при возникновении даже самой неявной проблемы, практически всегда, если потратить некое количество времени, можно разобраться в ее истоках. А зная чем она вызвана наметить пути решения и устранить ее ... как-то так наверное ;)