Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make world better #14

Closed
elfmz opened this issue Aug 27, 2016 · 223 comments
Closed

make world better #14

elfmz opened this issue Aug 27, 2016 · 223 comments

Comments

@elfmz
Copy link
Owner

elfmz commented Aug 27, 2016

placeholder for general discussions

@lieff
Copy link
Contributor

lieff commented Aug 30, 2016

Заметил что ls выводится без цветов, когда ls --color=always цветной вывод работает нормально.
Значит надо сделать, чтобы дефолтная детекция, выводить цвета или нет, у ls срабатывала.

@elfmz
Copy link
Owner Author

elfmz commented Aug 30, 2016

Там внутри запуск идет через /bin/sh а если ls выполнить из sh - он выводит по дефолту без цвета. А вот если выполнить его из bash - по дефолту с цветом
Почему так - хз.. Впрочем сделать детект юзерского шелла и юзать bash вместо sh не помешает, да..

@lieff
Copy link
Contributor

lieff commented Aug 30, 2016

Попробовал изменить в execute.cpp на /bin/bash, но цвета не появились.
Возможно поэтому:

strace ls 2>&1 |grep ioc
ioctl(1, TCGETS, 0x7ffcdfbad360)        = -1 ENOTTY (Inappropriate ioctl for device)
ioctl(1, TIOCGWINSZ, 0x7ffcdfbad420)    = -1 ENOTTY (Inappropriate ioctl for device)

И через strace цветов тоже нет.

@elfmz
Copy link
Owner Author

elfmz commented Aug 30, 2016

А это у вас такие ошибки со старым кодом или с новым (с сегодняшнего утра?) у меня таких нету. Впрочем bash -c ls не выдает цветного ls даже будучи и так запущенным под башем

@lieff
Copy link
Contributor

lieff commented Aug 30, 2016

Это не в фаре вообще. Я подозреваю что он пытается выполнить ioctl(1, TCGETS) и проваливается потому что stdout не приконнекчен к tty. Дальше он даже никаких getenv() не делает и считает что все, цветов выводить точно не надо.
Похоже нужно приконнектить его в фейковому tty, можно посмортеть как сделано в mc.

@lieff
Copy link
Contributor

lieff commented Aug 31, 2016

Тэкс, еще нашел, что работоспособность хоткеев зависит от раскладки клавиатуры.

@elfmz
Copy link
Owner Author

elfmz commented Aug 31, 2016

Я это уже давно нашел, поковырялся и запостил багу на wxwidgets: http://trac.wxwidgets.org/ticket/17643
В процессе ковыряния придумался только один дичайший воркэраунд - перехватить XNextEvent и обрабатывать события клавы от Х самому. Но ведь это ректальный путь. В принципе можно еще попробовать пофиксить WX или может даже GTK и отправить им.. Но тут и своих проблем хватает.. Ctrl+Insert etc работают кстати всегда нормально, но не всем они привычны

@lieff
Copy link
Contributor

lieff commented Aug 31, 2016

Попробовал wxWidets 3.1, far по прежнему не работает, однако хоткеи вроде Ctrl-Q у сэмплов при включенном русском отрабатывают нормально.

@lieff
Copy link
Contributor

lieff commented Sep 1, 2016

Крашится под valgrind, если открыть любой файл в редакторе. Сообщения от valgrind стоит почистить, есть множество обращений к неинициализированным переменным и ликов.

@elfmz
Copy link
Owner Author

elfmz commented Sep 1, 2016

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

@elfmz
Copy link
Owner Author

elfmz commented Sep 2, 2016

по поводу пробелов кавычек etc: я уже насмотрел где и как сделать escaping, осталось только сделать для чего время нужно.. Я к тому что не стоит там делать сейчас костыли на каждый конкретный случай, все равно потом переделаю скорее всего (а может и нет :) )

@lieff
Copy link
Contributor

lieff commented Sep 2, 2016

Ну strong quote по идее позволяет как раз избежать множества случаев, все что надо эскейпить внутри 'test' это сами одинарные кавычки 'te'''st'. Получаем полную поддержку всех файловых имен никсов.

@invy
Copy link
Contributor

invy commented Sep 2, 2016

Coding style, bugs prevention, static analysis.

  • Write code in modern C++ (enforce c++14) and not the 'C with classes', because you are going to shoot yourself in the leg: spending too much time on implementing already implemented things (std::algorithm, boost), introducing bugs, fixing them. I've noticed in some commits, that they are written in the old fashioned with raw pointers, null-terminated strings, usage of C runtime, etc, which is not a good thing to do in 2016.
  • Enforce 'warnings as errors' and compile with all warnings enabled with different compilers. (g++ and clang)

@invy
Copy link
Contributor

invy commented Sep 3, 2016

Finally I've got far building with cmake.
Of course, first what I've did, is tried clang.

Here are some warnings and errors.

/home/igor/projects/test/far/far2l/WinPort/WinCompat.h:141:22: warning: comparison of unsigned expression >= 0 is always true [-Wtautological-compare]
if (d>=0 && d<=9) *w = d + '0';
~^ ~

/home/igor/projects/test/far/far2l/WinPort/ConsoleBuffer.cpp:26:46: error: non-constant-expression cannot be narrowed from type 'unsigned int' to 'SHORT' (aka 'short') in initializer list [-Wc++11-narrowing]
SMALL_RECT screen_rect = {0, 0, width - 1, height - 1};

/home/igor/projects/test/far/far2l/WinPort/APIRegistry.cpp:44:7: error: case value is not a constant expression
case (ULONG_PTR)HKEY_PERFORMANCE_TEXT: return GetRegistrySubroot("/pt");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

@elfmz
Copy link
Owner Author

elfmz commented Sep 4, 2016

первое - мелкий косяк, последнее - непонятно что ему не нравится? там однозначная константа, более того - там еще 5 такихе же в соседних кейсах

@invy
Copy link
Contributor

invy commented Sep 4, 2016

В соседних кейсах тоеж ругается, если что. Я не стал весь лог приводить - там много.
Очевидно тайп каст в кейсе его смущает.

@techtonik
Copy link
Contributor

Tightly integrating with upstream is the only True way for a better world. =)

@elfmz
Copy link
Owner Author

elfmz commented Sep 4, 2016

True way to better world is making world better, but not making better words.

@invy
Copy link
Contributor

invy commented Sep 4, 2016

There is actually no point in tight integration with upstream, because it's too windows specific. The new cool features can be relatively easy backported from upstream, I think.

@invy
Copy link
Contributor

invy commented Sep 4, 2016

Меня вот вопрос мучает, что я делаю не правильно в моем cmake, что у меня плагины не загружаются... Вроде как заставил far2l эскпортировать winport, все компилируется. Надо разбираться...

@elfmz
Copy link
Owner Author

elfmz commented Sep 4, 2016

Мож чего не экспортируют важного?

~/projects/far2l/Build$ nm -g --defined-only Plugins/multiarc/bin/multiarc.far-plug-mb 
00000000002873b0 B __bss_start
0000000000008a50 T ClosePlugin
0000000000008ba0 T Configure
0000000000008ab0 T DeleteFiles
00000000002873b0 D _edata
00000000002a05b0 B _end
0000000000008ae0 T ExitFAR
000000000006eb78 T _fini
0000000000008a90 T FreeFindData
0000000000008ac0 T GetFiles
0000000000008a80 T GetFindData
00000000000081a0 T GetMinFarVersion
0000000000008b70 T GetOpenPluginInfo
0000000000008b10 T GetPluginInfo
00000000000062c0 T _init
0000000000008420 T OpenFilePlugin
00000000000086a0 T OpenPlugin
0000000000008b80 T ProcessHostFile
0000000000008b90 T ProcessKey
0000000000008ad0 T PutFiles
0000000000008aa0 T SetDirectory
00000000000081b0 T SetStartupInfo
0000000000285c28 V _ZTI8RAR_EXIT
0000000000072200 V _ZTS8RAR_EXIT

@invy
Copy link
Contributor

invy commented Sep 4, 2016

В том то и дело что экспортирует. Когда стартую фар, то colorer вот такое выдает
WINPORT: LoadLibraryEx(/home/igor/projects/test/far/build/install/Plugins/colorer/bin/colorer.far-plug-mb): 0x7fe12c118860
GetProcAddress(0x7fe12c118860, SetStartupInfo) - no such symbol
GetProcAddress(0x7fe12c118860, OpenPlugin) - no such symbol
GetProcAddress(0x7fe12c118860, OpenFilePlugin) - no such symbol
GetProcAddress(0x7fe12c118860, ClosePlugin) - no such symbol
GetProcAddress(0x7fe12c118860, GetPluginInfo) - no such symbol
GetProcAddress(0x7fe12c118860, GetOpenPluginInfo) - no such symbol
GetProcAddress(0x7fe12c118860, GetFindData) - no such symbol
GetProcAddress(0x7fe12c118860, FreeFindData) - no such symbol
GetProcAddress(0x7fe12c118860, GetVirtualFindData) - no such symbol
GetProcAddress(0x7fe12c118860, FreeVirtualFindData) - no such symbol
GetProcAddress(0x7fe12c118860, SetDirectory) - no such symbol
GetProcAddress(0x7fe12c118860, GetFiles) - no such symbol
GetProcAddress(0x7fe12c118860, PutFiles) - no such symbol
GetProcAddress(0x7fe12c118860, DeleteFiles) - no such symbol
GetProcAddress(0x7fe12c118860, MakeDirectory) - no such symbol
GetProcAddress(0x7fe12c118860, ProcessHostFile) - no such symbol
GetProcAddress(0x7fe12c118860, SetFindList) - no such symbol
GetProcAddress(0x7fe12c118860, Configure) - no such symbol
GetProcAddress(0x7fe12c118860, ExitFAR) - no such symbol
GetProcAddress(0x7fe12c118860, ProcessKey) - no such symbol
GetProcAddress(0x7fe12c118860, ProcessEvent) - no such symbol
GetProcAddress(0x7fe12c118860, Compare) - no such symbol
GetProcAddress(0x7fe12c118860, ProcessEditorInput) - no such symbol
GetProcAddress(0x7fe12c118860, ProcessEditorEvent) - no such symbol
GetProcAddress(0x7fe12c118860, ProcessViewerEvent) - no such symbol
GetProcAddress(0x7fe12c118860, ProcessDialogEvent) - no such symbol
GetProcAddress(0x7fe12c118860, GetMinFarVersion) - no such symbol
bad3
bad3
bad3

фар выдает сообщение о том что не может загрузить плагин и потом все вот так примерно падает, когда завершаю фар
*** Error in `./far2l': corrupted double-linked list: 0x00007fe12c118430 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7fe13e5da725]
/lib/x86_64-linux-gnu/libc.so.6(+0x7e783)[0x7fe13e5e1783]
/lib/x86_64-linux-gnu/libc.so.6(+0x8155e)[0x7fe13e5e455e]
/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x54)[0x7fe13e5e65a4]
./far2l(xf_malloc+0x20)[0x5262de]
./far2l(_Znwm+0x18)[0x5263e9]
./far2l(_ZN9__gnu_cxx13new_allocatorI10_CHAR_INFOE8allocateEmPKv+0x40)[0x680030]
./far2l(_ZNSt16allocator_traitsISaI10_CHAR_INFOEE8allocateERS1_m+0x28)[0x67ff5d]
./far2l(_ZNSt12_Vector_baseI10_CHAR_INFOSaIS0_EE11_M_allocateEm+0x2a)[0x67fddc]

Хм, хотф colorer не совсем то экспортирует. В общем буду разбираться.

PS: скорость сорки примерно в полтора раза выше ;)

@elfmz
Copy link
Owner Author

elfmz commented Sep 4, 2016

colorer должен иметь расширение .far-plug-wide а не .far-plug-mb, far-plug-wide - это по-старославянски - UNICODE плагины, а MB - OEM/ANSI плагины. Нынче они по сути все юникодные, просто одни юзают wchar_t * строки, вторые char * (С UTF8)
Скорость сборки лично меня ваще не напрягает. Нужный модулль после своих изменений кодлайт компиляет за пару сек, если не просить ребилд делать. Ну а после обновления с гита можно и несколько мин подождать. Вощем это ветряная мельница ИМХО, а не проблема.
Кстати если вы не кодлайтом собирали, make- у -j 4 (или сколько там ядер у вас) не забывали передавать?

@invy
Copy link
Contributor

invy commented Sep 4, 2016

У меня нет кодлайта, собираю из консоли, -j12.... (на моих 4х ядрах вполне оптимально получается). С cmake'ом вот темерь могу qtcreator'ом пользоваться (ради него и хочу cmake).

С плагинами явно что-то уменя с экспортами/импортами не так.

@elfmz
Copy link
Owner Author

elfmz commented Sep 4, 2016

еще раз - бинарник colorer-а должен называться colorer.far-plug-wide, а не colorer.far-plug-mb тогда и проблема с экспортами решится

@invy
Copy link
Contributor

invy commented Sep 4, 2016

Это-то понятно, но это не решило моей проблемы :)

@elfmz
Copy link
Owner Author

elfmz commented Sep 4, 2016

Это странно, потому что неправильное имя полностью объясняло проблему. Для другого типа плагина искало другие экспорты

@invy
Copy link
Contributor

invy commented Sep 4, 2016

При том поведение сейчас у меня весьма странное. Сначала не может загрузить farftp, потом colorer, потом загружает всё, но при попытке использовать любой из плагинов фар зависает намертво. Явно что-то не так делаю.

@elfmz
Copy link
Owner Author

elfmz commented Sep 4, 2016

Дык это.. gdb в руки.
Кстати а файлы языков и прочие там базы для колорера лежат где положено? Без этого плагины не очень адекватно себя ведут.

@lieff
Copy link
Contributor

lieff commented Sep 15, 2016

Вот кроме webdav у меня есть мысли все заменить. Если маунты мутить, то надо удобство старого фара оставить, тоесть чтобы ничего набирать не надо было, ни в какие странные пути не заходить, а просто тыкнул enter на сохраненном в панели месте и попал куда надо.

@invy
Copy link
Contributor

invy commented Sep 15, 2016

Вообще, я посмотрел вот на этот netbox. Такие плагины наверное стоит делать отдельными проектами вообще. Указывать им только при конфигурации путь к заголовком WinPort'а и всё.

@elfmz
Copy link
Owner Author

elfmz commented Sep 15, 2016

насчет отдельных плагинов.. чего линуксовому фару точно не хватает - плагина с libsmbclient

@lieff
Copy link
Contributor

lieff commented Sep 15, 2016

Вот если делать через mount - самба тоже решается легко.

@invy
Copy link
Contributor

invy commented Sep 15, 2016

@lieff ну так не вижу неудобства, панель mounts (по образу и подобию Network). А оттуда и smb (ха, опередили), и все возможные mount'ы. По сути делать так, как делают нативные файловые мээнджэры - "connect to remote computer" и сохранять конфигурацию. Ну или... по сути этакий netbox, но полностью переделаный под специфику linux'а.

Мне вот mtp не хватает. Хотел музыку на смартфон закинуть - а вот фиг.

@lieff
Copy link
Contributor

lieff commented Sep 15, 2016

Ну типа да, я имел ввиду не так как в Double Commander например, там неудобнее.

@elfmz
Copy link
Owner Author

elfmz commented Sep 18, 2016

зацените:
screenshot from 2016-09-18 03-15-30
Оно реально работает, и даже вполне терпимо. Из проблем:

  • wxGetKeyState крэшится, пришлось для теста закоментить. Оно похоже там сделано в виде прямого вызова в иксы, без оглядки на то есть ли они под рукой
  • при билде с wxWidgets 3-1 юзающими gtk-3 не хватает зависимости на gdk-3. Но если тупо добавить зависимость - то ломается билд, юзающий gtk-2.
  • не работают сочетания модификатор+буква. Ctrl+O в пролете. А вот с F.. - все в порядке. Кроме Ctrl+F4 - он закрыл вкладку браузера). Причем проблема очень похожа на неработающие ctrl+o при русской раскладке - Ctrl приходит, а буква (хоть какая нить) - нет. Похоже косяк внутри gtk, или я его неправильно готовлю. Нужно будет еще разок попробовать акселераторы.

@lieff
Copy link
Contributor

lieff commented Sep 18, 2016

Круто) А gtk-3 пришлось пересобирать? С его сборкой проблем никаких?

@elfmz
Copy link
Owner Author

elfmz commented Sep 18, 2016

да собрался/поставился без проблем.но это не распберри

@elfmz
Copy link
Owner Author

elfmz commented Sep 18, 2016

Повторный эксперимент с wxAcceleratorTable показал, что акселераторы все еще не работоспособны
А вот wxMenuBar с менюшками на Ctrl+'A"..'Z' исправил положение. Теперь фар под бродвеем вполне полнофункционален, хотя менюбар и слегка нарушает аутентичность. Кстати если включать менюбар не только под бродвеем - он также фиксит хоткеи в неанглийской раскладке, но я пока в раздумьях..

@elfmz
Copy link
Owner Author

elfmz commented Sep 18, 2016

кстати внезапно подумалось, что у фара наверное идеальный интерфейс файлманагера для пальцетыканья. Главное - шрифт побольше поставить:)

@lieff
Copy link
Contributor

lieff commented Sep 18, 2016

Ага, вот потому на мобильных телефонах\планшетах тоже было бы круто.

@elfmz
Copy link
Owner Author

elfmz commented Sep 18, 2016

..to be continued

@serega41
Copy link

Красавчики! Порадовала ваша коллаборация )

@skazhikadyadya
Copy link

Спасибо за FAR. Подскажите, пожалуйста, как бы мне на клавиатуре мака использовать "Пометить группу" (Gray +) и просто Insert?

@rufatpro
Copy link

Спасибо за FAR. Подскажите, пожалуйста, как бы мне на клавиатуре мака использовать "Пометить группу" (Gray +) и просто Insert?

У меня на клавиатуре нет кнопки Gray. Что можно использовать вместо нее?

@unxed
Copy link
Contributor

unxed commented Jun 13, 2024

Макрос

@rufatpro
Copy link

Макрос

А как сделать? Я новичок в Far Manager под под Линукс.

@shmuz
Copy link
Contributor

shmuz commented Jun 13, 2024

Например так:

[KeyMacros/Shell/CtrlK]
Description=Select files
DisableOutput=0x1
Sequence=Add

добавляете эту секцию в файл ~/.config/far2l/settings/key_macros.ini и перезапускаете Фар.
После этого нажатие CtrlK передаст Фару Add (он же Gray+)
Естественно, можно вместо CtrlK выбрать что-то другое.

@rufatpro
Copy link

rufatpro commented Jun 14, 2024

Спасибо, а как сделать чтобы можно было выделять и снимать выделение группы файлов при помощи комбинаций клавиш:

Ctrl + `+`
Ctrl + `-`
Alt + `+`
Alt + `-`

Спасибо.

@shmuz
Copy link
Contributor

shmuz commented Jun 14, 2024

1-я строчка в секциях будет соответственно:

[KeyMacros/Shell/Ctrl=]
[KeyMacros/Shell/Ctrl-]
[KeyMacros/Shell/Alt=]
[KeyMacros/Shell/Alt-]

Последняя строчка в секциях может быть (например):

Sequence=Add
Sequence=Subtract
Sequence=Multiply
Sequence=Divide

@akruphi
Copy link
Contributor

akruphi commented Jun 15, 2024

Спасибо @shmuz - утянул в русскоязычный вики: https://github.com/akruphi/far2l/wiki#key_macros

ctapmex pushed a commit to ctapmex/far2l that referenced this issue Aug 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

11 participants