View Issue Details

IDProjectCategoryView StatusLast Update
0002208WishesHistorypublic2015-04-14 13:12
Reporterfml2 Assigned To2useven10  
PrioritynormalSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
Summary0002208: Запоминать, в какой папке была запущена команда
DescriptionБыло бы удобно, если бы Фар запоминал не только ранее выполненные команды, но и для каждой команды запоминал бы, из какой папки (каталог, директорий) она была запущена. Часто в команде есть, например, локальное имя файла, так что эту команду имеет смысл запускать только из этой папки. Но, как заметил один (на мой взгляд, очень знающий) человек, Фар не запоминает, откуда были выполнены команды.

Обсуждение (точнее, пока, его отсутствие) в форуме: http://forum.farmanager.com/viewtopic.php?f=4&t=7507
TagsNo tags attached.
Build4450

Relationships

parent of 0002973 closed2useven10 Far Manager Нажатие Enter или клик на элементе списка итории каталогов по Alt-F12 не делает переход в каталог 

Activities

DrKnS

2012-11-25 13:26

administrator   bugnote:0009761

Расскажите, как вы себе это представляете в плане интерфейса.

Диалог "а не перейти ли в папку? да/нет", или отдельное сочетание клавиш для запуска с переходом, или еще что.

fml2

2012-11-25 14:44

reporter   bugnote:0009762

Например, можно было бы так: нажимаем Alt+F8 -- появляется история команд. Далее: при нажатии "Ввод" команда выполняется как и прежде, т.е. из текущей папки. При нажатии Ctrl+Enter (или Alt+Enter) команда выполняется из той папки, из которой она была выполнена ранее. Ну или авторы плагинов (MoreHistory, AltHistory) придумают что-нибудь еще. При нажатии Ctrl+F10 (или как там?) текущей становится папка, из которой команда была выполнена (по аналогии с редактором и просмотрщиком). Вариантов много.

О деталях пользовательского интерфейса (кнопках и т.д.) можно договориться. Главная проблема, как я понимаю, состоит в том, что в истории команд вообще не сохраняется, откуда была запущена команда (так говорит MaxRusov). Поэтому, например, плагинам неоткуда взять эту информацию. Ну либо плагинам надо перехватывать выполнение команд и самим как-то сохранять папку -- много мороки.

vskirdin

2012-11-25 14:50

administrator   bugnote:0009763

Может имеет смысл отдать ЭТО макросам? Т.е.
1. информацию хранить
2. эту информацию отдавать макросам
3. стандартный интерфейс не трогать (оставить как есть)

fml2

2012-11-25 14:55

reporter   bugnote:0009764

Я согласен с vskirdin: не обязательно встраивать *интерфейс* в Фар. Но механизм хранения хорошо бы встроить, чтобы каждому плагину/макро не приходилось реализовывать этот механизм самому.

DAtaMan

2012-11-25 15:27

reporter   bugnote:0009765

В плане интерфейса можно так:
По Ctrl-1 история отображается с группировкой по датам - то, что есть сейчас.
А по Ctrl-2 история отображается с группировкой по папке запуска.

И в макросах тоже не помешает получать такую инфу. :)

fml2

2013-02-21 21:56

reporter   bugnote:0010366

Попробовал поискать в коде, что надо было бы изменить, чтобы сохранять и каталог, из которого была запущена команда. Если я правильно понял, некоторая проблема заключается в том, что для хранения всех историй (команды, просмотрщик, редактор) используется один и тот же класс, History, который находится в файле history.hpp/cpp и который -- и в этом заключается проблема -- умеет хранить только строки и обращаться только со строками. А не, например, с парами строк.

Запоминание выполненной команды в истории команд производится в cmdline.cpp, строки

if (!(Global->Opt->ExcludeCmdHistory&EXCLUDECMDHISTORY_NOTCMDLINE))
   Global->CtrlObject->CmdHistory->AddToHistory(strStr);

Вот тут-то бы и надо подправить, чтобы как-то сохранять не только команду, но и каталог, который при этом был текущим каталогом. Но ведь одного этого недостаточно! Надо еще расширить API, чтобы предоставить эту информацию всем желающим. А вот как ЭТО сделать элегантно и в соответствии с идеологией Фар, я не знаю. Может, кто выскажет мысли на эту тему?

DrKnS

2013-02-22 00:56

administrator   bugnote:0010368

Как вы собираетесь отличать ситуацию, когда папку надо запоминать, от ситуации, когда не надо?

Например, для make - надо.
А для regedit, ping или ipconfig - нет.

vskirdin

2013-02-22 06:04

administrator   bugnote:0010369

> Вот тут-то бы и надо подправить, чтобы как-то сохранять не только команду
Это не проблема (как и не проблема с парами строк) заменить
Global->CtrlObject->CmdHistory->AddToHistory(strStr);
на
Global->CtrlObject->CmdHistory->AddToHistory(strStr, 0, nullptr, nullptr, strCurDir, false);
(и не только здесь надо делать!)

Здесь так же нужно в самом History изменения делать, чтобы в хистори попали и make из c:\foo.bar, так и make из c:\devel.foo (представляю как разрастется история)

...ну и то, что описал DrKnS о различаемости ситуаций.

fml2

2013-02-22 08:36

reporter   bugnote:0010371

Мне кажется, тут довольно нетрудно придумать приемлемое решение. Например, можно ввести опцию, которая регулировала бы, сохранять ли каталог запуска. Она могла бы иметь следующие значения: всегда, никогда, сохранять только для указанных команд (которые перечисляются в другом поле), не сохранять только для указанных, не сохранять только для программ из PATH.

Потом, независимо от этой опции, можно в диалоге выбора команд сделать возможность показывать каталог или не показывать. Если каталог показан, то одинаковые команды, но запущенные из разных каталогов, показываются как отдельные записи. Если каталог не показывается, то они показываются как одна запись.

Дальше можно подумать, как эти команды запускать: с предварительным переходом или без такого перехода в "исходный" каталог.

Ну и т.д. Интерфейс можно навернуть какой угодно сложности. Но, как было сказано выше, не обязательно делать это прямо в Фар, ведь есть плагины или макро. Главное, чтобы эта информация была где-то в базе. А уж применение ей найдется. Я вообще удивился, когда обнаружил, что такой функции еще нет. Ведь Фар предназначен для удобного запуска команд (ну и, конечно, еще многих вещей), а с такой функцией запуск было бы осуществлять удобнее.

fml2

2013-11-15 22:42

reporter   bugnote:0011539

Вот, создал патч. Надеюсь, подправил все места, где дополняется история команд. Но почему-то Фар после этого не запускается. Сначала у меня было подправлено только cmdline.cpp -- и Фар работал. А потом я подправил еще и filetype.cpp и filelist.cpp -- и он перестал. Поменял filetype.cpp и filelist.cpp обратно, но Фар все равно не запускается. Поэтому закачиваю полный патч со всеми изменениями. См. файл curdir-cmdhistory.diff.

fml2

2013-11-15 22:42

reporter  

curdir-cmdhistory.diff (2,357 bytes)   
Index: cmdline.cpp
===================================================================
--- cmdline.cpp	(revision 11195)
+++ cmdline.cpp	(working copy)
@@ -408,7 +408,7 @@
 			ActivePanel->SetCurPath();
 
 			if (!(Global->Opt->ExcludeCmdHistory&EXCLUDECMDHISTORY_NOTCMDLINE))
-				Global->CtrlObject->CmdHistory->AddToHistory(strStr);
+				Global->CtrlObject->CmdHistory->AddToHistory(strStr, 0, nullptr, nullptr, strCurDir.data(), false);
 
 			if (!ActivePanel->ProcessPluginEvent(FE_COMMAND, UNSAFE_CSTR(strStr.data())))
 				ExecString(strStr, false, Key==KEY_SHIFTENTER||Key==KEY_SHIFTNUMENTER, false, false,
Index: filelist.cpp
===================================================================
--- filelist.cpp	(revision 11195)
+++ filelist.cpp	(working copy)
@@ -2557,7 +2557,7 @@
 			QuoteSpace(strFileName);
 
 			if (!(Global->Opt->ExcludeCmdHistory&EXCLUDECMDHISTORY_NOTPANEL) && !PluginMode) //AN
-				Global->CtrlObject->CmdHistory->AddToHistory(strFileName);
+				Global->CtrlObject->CmdHistory->AddToHistory(strFileName, 0, nullptr, nullptr, strCurDir.data(), false);
 
 			Global->CtrlObject->CmdLine->ExecString(strFileName, PluginMode, SeparateWindow, true, false, RunAs);
 
Index: filetype.cpp
===================================================================
--- filetype.cpp	(revision 11195)
+++ filetype.cpp	(working copy)
@@ -232,7 +232,11 @@
 			Global->CtrlObject->CmdLine->ExecString(strCommand,AlwaysWaitFinish, false, false, ListFileUsed, false,
 				Mode == FILETYPE_VIEW || Mode == FILETYPE_ALTVIEW || Mode == FILETYPE_EDIT || Mode == FILETYPE_ALTEDIT);
 			if (!(Global->Opt->ExcludeCmdHistory&EXCLUDECMDHISTORY_NOTFARASS) && !AlwaysWaitFinish) //AN
-				Global->CtrlObject->CmdHistory->AddToHistory(strCommand);
+			{
+				string curDir;
+				Global->CtrlObject->CmdLine->GetCurDir(curDir);
+				Global->CtrlObject->CmdHistory->AddToHistory(strCommand, 0, nullptr, nullptr, curDir.data(), false);
+			}
 		}
 	}
 
@@ -254,7 +258,9 @@
 
 	if (!(Global->Opt->ExcludeCmdHistory&EXCLUDECMDHISTORY_NOTWINASS) && !AlwaysWaitFinish)
 	{
-		Global->CtrlObject->CmdHistory->AddToHistory(strName);
+		string curDir;
+		Global->CtrlObject->CmdLine->GetCurDir(curDir);
+		Global->CtrlObject->CmdHistory->AddToHistory(strName, 0, nullptr, nullptr, curDir.data(), false);
 	}
 }
 
curdir-cmdhistory.diff (2,357 bytes)   

2useven10

2013-11-15 23:10

developer   bugnote:0011540

3713

fml2

2013-11-25 18:20

reporter   bugnote:0011551

Last edited: 2013-11-25 18:20

Годится! Я бы, наверное, сохранял команду, запущенную из многих каталогов, много раз, а не только один. Но и так нормально. Можно хотелку закрывать. Спасибо всем, кто сделал это возможным.

2useven10

2015-03-25 10:17

developer   bugnote:0013592

Last edited: 2015-03-25 12:56

http://forum.farmanager.com/viewtopic.php?f=3&t=8366
http://forum.farmanager.com/viewtopic.php?f=60&t=8289#p113808

2useven10

2015-03-25 10:36

developer   bugnote:0013593

4324 - можно писать дубли команд в историю (System.PerFolderCmdHistory)

2useven10

2015-03-28 07:16

developer   bugnote:0013600

Здесь не всё ещё доделано.
Например, перебор команд Ctrl-E/Ctrl-X при включённой опции показывает дубли.
Вообще хотелось бы получить фидбэк - если фича невостребована, проще откатить, чем допиливать.

fml2

2015-03-28 11:25

reporter   bugnote:0013601

> Вообще хотелось бы получить фидбэк

Лично я сначала думал, что мне это понадобится. Но потом оказалось, что могу обходиться и без этого (дубли команд). У меня ситуация такая: я в разных каталогах запускаю программу с именами файлов в качестве параметров. Файлы лежат в том каталоге, откуда запускается команда, и поэтому их имена задаются локально (без пути). Т.к. названия этих файлов в разных папках разные, то и команды (их полный текст) получаются разными. Поэтому и можно обходиться без дублей.

Если бы имена файлов были одинаковые, то я бы голосовал за дубли.

Но это моя конкретная ситуация.

2useven10

2015-04-14 13:10

developer   bugnote:0013634

4350 -- откатил. потому как никому не нужно.

Issue History

Date Modified Username Field Change
2012-11-24 21:21 fml2 New Issue
2012-11-25 13:26 DrKnS Note Added: 0009761
2012-11-25 14:44 fml2 Note Added: 0009762
2012-11-25 14:50 vskirdin Note Added: 0009763
2012-11-25 14:55 fml2 Note Added: 0009764
2012-11-25 15:27 DAtaMan Note Added: 0009765
2013-02-03 00:31 alexy Severity minor => feature
2013-02-21 21:56 fml2 Note Added: 0010366
2013-02-22 00:56 DrKnS Note Added: 0010368
2013-02-22 06:04 vskirdin Note Added: 0010369
2013-02-22 08:36 fml2 Note Added: 0010371
2013-11-15 22:42 fml2 Note Added: 0011539
2013-11-15 22:42 fml2 File Added: curdir-cmdhistory.diff
2013-11-15 23:10 2useven10 Note Added: 0011540
2013-11-15 23:10 2useven10 Assigned To => 2useven10
2013-11-15 23:10 2useven10 Status new => feedback
2013-11-25 18:20 fml2 Note Added: 0011551
2013-11-25 18:20 fml2 Status feedback => assigned
2013-11-25 18:20 fml2 Note Edited: 0011551
2015-03-25 10:17 2useven10 Note Added: 0013592
2015-03-25 10:22 2useven10 Note Edited: 0013592
2015-03-25 10:36 2useven10 Note Added: 0013593
2015-03-25 10:36 2useven10 Status assigned => feedback
2015-03-25 12:56 2useven10 Note Edited: 0013592
2015-03-28 07:12 2useven10 Relationship added parent of 0002972
2015-03-28 07:16 2useven10 Note Added: 0013600
2015-03-28 07:18 2useven10 Relationship added parent of 0002973
2015-03-28 07:18 2useven10 Relationship deleted parent of 0002972
2015-03-28 11:25 fml2 Note Added: 0013601
2015-03-28 11:25 fml2 Status feedback => assigned
2015-04-14 13:10 2useven10 Note Added: 0013634
2015-04-14 13:10 2useven10 Status assigned => feedback
2015-04-14 13:12 2useven10 Build => 4450
2015-04-14 13:12 2useven10 Status feedback => closed
2015-04-14 13:12 2useven10 Resolution open => fixed