elfmz / far2l

Linux port of FAR v2
GNU General Public License v2.0
1.78k stars 173 forks source link

Two ideas and some small improvements #1668

Open froloffw7 opened 1 year ago

froloffw7 commented 1 year ago
  1. Вставлять ./ перед именем файла в командной строке только для файлов с установленным атрибутом exec.
--- filelist.cpp    2023-05-04 02:53:09.000000000 +0300
+++ /var/tmp/far2l/far2l/src/panels/filelist.cpp    2023-05-01 18:44:00.741407593 +0300
@@ -1119,11 +1119,26 @@
                    if (CurrentPath)
                        AddEndSlash(strFileName);

-                   if (Opt.QuotedName & QUOTEDNAME_INSERT)
-                       EscapeSpace(strFileName);
-
+                   if (Opt.QuotedName & QUOTEDNAME_INSERT) {
+                       // Do not enquote, if string prestart with quotation mark
+                       wchar_t ch = 0;
+                       int CurPos = CtrlObject->CmdLine->GetCurPos();
+                       if (CurPos>0)
+                       {
+                           FARString Str;
+                           CtrlObject->CmdLine->GetString(Str);
+                           ch = Str[CurPos-1];
+                       }
+                       if ((ch != L'"') && (ch != L'\''))
+                           EscapeSpace(strFileName);
+                       else
+                           strFileName += ch;
+                   }
                    strFileName+= L" ";
                    if (PanelMode != PLUGIN_PANEL) {
+                       // Only add ./ prefix to the executables
+                       if ((CtrlObject->CmdLine->GetCurPos()==0) && 
+                           !S_ISDIR(CurPtr->FileMode) && (CurPtr->FileMode & S_IEXEC))
                        EnsurePathHasParentPrefix(strFileName);
                    }
                }
  1. Добавить сочетание клавиш для открытия текушей директории на рабочем столе.
    void OpenFolder()
    {
    const char *p;
    if ((wcscmp(WinPortBackend(), L"GUI") == 0) ||
        (p = getenv("XDG_SESSION_TYPE"), p ? strcmp(p, "x11") == 0 : false)) {
        farExecuteA("xdg-open .", EF_NOWAIT | EF_HIDEOUT);
    } else {
        farExecuteA("ls ./", EF_NOCMDPRINT);
        if (FrameManager) {
            auto *current_frame = FrameManager->GetCurrentFrame();
            if (current_frame) {
                FrameManager->RefreshFrame(current_frame);
            }
        }
    }
    }
  2. При копировании файла из панели NetRocks, в локальную ФС, если в конце имени явно не указан /, то копировать в файл с указанным именем, если такой директории не существует в текущей лиректории локальной ФС. Например, невозможно скопировать в /dev/null (для проверки скорости).
  3. При копировании в удалённую директорию NetRocks(ssh) скорость значительно меньше чем в обратном направлении:
    • NetRocks(ssh) => Local FS ~95-100MB/s
    • Local FS => NetRocks(ssh) < 18MB/s (blocksync даёт ~75-80MB/s) На обоих сторонах SSD. Скорость LAN - 1G, сжатие в ssh отключено.
elfmz commented 1 year ago

Что подразумевается под ssh? SFTP или SCP?

froloffw7 commented 1 year ago

SFTP. Сейчас переключился на SCP:

froloffw7 commented 1 year ago

Дополнительно проверил скорость копирования через gvfs (sftp://remote.lan). При копировании на удалённый хост файл менеджером через рабочий стол получил скорость ~85MB/s. В far2l, в директорию /run/user/1000/gvfs/sftp:host=remote.lan < 15MB/s.

elfmz commented 1 year ago

а sftp клиент команд лайновый? и это скорость закачки одного относительно большого файла или кучи небольших?

froloffw7 commented 1 year ago

Просто набрал в адресной строке файлового менеджера рабочего стола sftp://remote.lan, дальше во всплывшем окне логин и пароль и открылась директория на удалённом хосте. Туда кинул файл. Через некоторое время появляется строка со скоростью передачи. Файлы удалённого хоста станоновятся также доступны через путь /run/user/1000/gvfs/sftp:host=remote.lan. Так на debian/ubuntu. Возможно в других системах по другому. Скорость всегда проверяю на передаче большого файла 20GB, например, образа qemu.

elfmz commented 1 year ago

проверить бы еще, я имел ввиду с этим:

~$ sftp
usage: sftp [-46AaCfNpqrv] [-B buffer_size] [-b batchfile] [-c cipher]
          [-D sftp_server_path] [-F ssh_config] [-i identity_file]
          [-J destination] [-l limit] [-o ssh_option] [-P port]
          [-R num_requests] [-S program] [-s subsystem | sftp_server]
          destination
froloffw7 commented 1 year ago

Примерно так:

$ sftp remote.lan
user@remote.lan's password:
Connected to remote.lan.
sftp> cd /tmp
sftp> put debian.img
Uploading debian.img to /tmp/debian.img
debian.img                                                                32%  701MB  87.7MB/s   00:16 ETA
akruphi commented 1 year ago
1. Вставлять ./ перед именем файла в командной строке только для файлов с установленным атрибутом exec.

Именно озвученное предложение наверное имеет смысл :thinking:

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

Также в Вашем варианте кода больше изменений строк посвящено другому не озвученному предложению - не экранировать, если в командной строке уже введён непосредственно перед позицией вставки " или ' и замыкаете закрывающей кавычкой.

Как-то Вы об многом умолчали предлагая такой код :smiley_cat:

2. Добавить сочетание клавиш для открытия текущей директории на рабочем столе.

Сейчас для этого есть 2 варианта:

Их точно недостаточно? И какую разумную комбинацию клавиш для такого действия предлагаете?

unxed commented 1 year ago
  1. Это не то же, что #1167 ?