far2l icon indicating copy to clipboard operation
far2l copied to clipboard

Two ideas and some small improvements

Open froloffw7 opened this issue 2 years ago • 9 comments

  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);
			}
		}
	}
}
  1. При копировании файла из панели NetRocks, в локальную ФС, если в конце имени явно не указан /, то копировать в файл с указанным именем, если такой директории не существует в текущей лиректории локальной ФС. Например, невозможно скопировать в /dev/null (для проверки скорости).
  2. При копировании в удалённую директорию NetRocks(ssh) скорость значительно меньше чем в обратном направлении:
  • NetRocks(ssh) => Local FS ~95-100MB/s
  • Local FS => NetRocks(ssh) < 18MB/s (blocksync даёт ~75-80MB/s) На обоих сторонах SSD. Скорость LAN - 1G, сжатие в ssh отключено.

froloffw7 avatar May 04 '23 10:05 froloffw7

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

elfmz avatar May 04 '23 10:05 elfmz

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

  • NetRocks(scp) => Local FS ~95-100MB/s
  • Local FS => NetRocks(scp) ~75-80MB/s (аналогично blocksync, blocksync подключается через ssh).

froloffw7 avatar May 04 '23 10:05 froloffw7

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

froloffw7 avatar May 04 '23 10:05 froloffw7

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

elfmz avatar May 04 '23 11:05 elfmz

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

froloffw7 avatar May 04 '23 13:05 froloffw7

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

~$ 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

elfmz avatar May 04 '23 14:05 elfmz

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

$ sftp remote.lan
[email protected]'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

froloffw7 avatar May 04 '23 14:05 froloffw7

1. Вставлять ./ перед именем файла в командной строке только для файлов с установленным атрибутом exec.

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

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

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

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

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

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

  • Shift+Enter в панели на ..
  • вставить в ком.строку . и те же Shift+Enter

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

akruphi avatar Jun 22 '23 09:06 akruphi

  1. Это не то же, что #1167 ?

unxed avatar Oct 04 '23 13:10 unxed