View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002208 | Wishes | History | public | 2012-11-24 21:21 | 2015-04-14 13:12 |
Reporter | fml2 | Assigned To | 2useven10 | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Summary | 0002208: Запоминать, в какой папке была запущена команда | ||||
Description | Было бы удобно, если бы Фар запоминал не только ранее выполненные команды, но и для каждой команды запоминал бы, из какой папки (каталог, директорий) она была запущена. Часто в команде есть, например, локальное имя файла, так что эту команду имеет смысл запускать только из этой папки. Но, как заметил один (на мой взгляд, очень знающий) человек, Фар не запоминает, откуда были выполнены команды. Обсуждение (точнее, пока, его отсутствие) в форуме: http://forum.farmanager.com/viewtopic.php?f=4&t=7507 | ||||
Tags | No tags attached. | ||||
Build | 4450 | ||||
|
Расскажите, как вы себе это представляете в плане интерфейса. Диалог "а не перейти ли в папку? да/нет", или отдельное сочетание клавиш для запуска с переходом, или еще что. |
|
Например, можно было бы так: нажимаем Alt+F8 -- появляется история команд. Далее: при нажатии "Ввод" команда выполняется как и прежде, т.е. из текущей папки. При нажатии Ctrl+Enter (или Alt+Enter) команда выполняется из той папки, из которой она была выполнена ранее. Ну или авторы плагинов (MoreHistory, AltHistory) придумают что-нибудь еще. При нажатии Ctrl+F10 (или как там?) текущей становится папка, из которой команда была выполнена (по аналогии с редактором и просмотрщиком). Вариантов много. О деталях пользовательского интерфейса (кнопках и т.д.) можно договориться. Главная проблема, как я понимаю, состоит в том, что в истории команд вообще не сохраняется, откуда была запущена команда (так говорит MaxRusov). Поэтому, например, плагинам неоткуда взять эту информацию. Ну либо плагинам надо перехватывать выполнение команд и самим как-то сохранять папку -- много мороки. |
|
Может имеет смысл отдать ЭТО макросам? Т.е. 1. информацию хранить 2. эту информацию отдавать макросам 3. стандартный интерфейс не трогать (оставить как есть) |
|
Я согласен с vskirdin: не обязательно встраивать *интерфейс* в Фар. Но механизм хранения хорошо бы встроить, чтобы каждому плагину/макро не приходилось реализовывать этот механизм самому. |
|
В плане интерфейса можно так: По Ctrl-1 история отображается с группировкой по датам - то, что есть сейчас. А по Ctrl-2 история отображается с группировкой по папке запуска. И в макросах тоже не помешает получать такую инфу. :) |
|
Попробовал поискать в коде, что надо было бы изменить, чтобы сохранять и каталог, из которого была запущена команда. Если я правильно понял, некоторая проблема заключается в том, что для хранения всех историй (команды, просмотрщик, редактор) используется один и тот же класс, History, который находится в файле history.hpp/cpp и который -- и в этом заключается проблема -- умеет хранить только строки и обращаться только со строками. А не, например, с парами строк. Запоминание выполненной команды в истории команд производится в cmdline.cpp, строки if (!(Global->Opt->ExcludeCmdHistory&EXCLUDECMDHISTORY_NOTCMDLINE)) Global->CtrlObject->CmdHistory->AddToHistory(strStr); Вот тут-то бы и надо подправить, чтобы как-то сохранять не только команду, но и каталог, который при этом был текущим каталогом. Но ведь одного этого недостаточно! Надо еще расширить API, чтобы предоставить эту информацию всем желающим. А вот как ЭТО сделать элегантно и в соответствии с идеологией Фар, я не знаю. Может, кто выскажет мысли на эту тему? |
|
Как вы собираетесь отличать ситуацию, когда папку надо запоминать, от ситуации, когда не надо? Например, для make - надо. А для regedit, ping или ipconfig - нет. |
|
> Вот тут-то бы и надо подправить, чтобы как-то сохранять не только команду Это не проблема (как и не проблема с парами строк) заменить 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 о различаемости ситуаций. |
|
Мне кажется, тут довольно нетрудно придумать приемлемое решение. Например, можно ввести опцию, которая регулировала бы, сохранять ли каталог запуска. Она могла бы иметь следующие значения: всегда, никогда, сохранять только для указанных команд (которые перечисляются в другом поле), не сохранять только для указанных, не сохранять только для программ из PATH. Потом, независимо от этой опции, можно в диалоге выбора команд сделать возможность показывать каталог или не показывать. Если каталог показан, то одинаковые команды, но запущенные из разных каталогов, показываются как отдельные записи. Если каталог не показывается, то они показываются как одна запись. Дальше можно подумать, как эти команды запускать: с предварительным переходом или без такого перехода в "исходный" каталог. Ну и т.д. Интерфейс можно навернуть какой угодно сложности. Но, как было сказано выше, не обязательно делать это прямо в Фар, ведь есть плагины или макро. Главное, чтобы эта информация была где-то в базе. А уж применение ей найдется. Я вообще удивился, когда обнаружил, что такой функции еще нет. Ведь Фар предназначен для удобного запуска команд (ну и, конечно, еще многих вещей), а с такой функцией запуск было бы осуществлять удобнее. |
|
Вот, создал патч. Надеюсь, подправил все места, где дополняется история команд. Но почему-то Фар после этого не запускается. Сначала у меня было подправлено только cmdline.cpp -- и Фар работал. А потом я подправил еще и filetype.cpp и filelist.cpp -- и он перестал. Поменял filetype.cpp и filelist.cpp обратно, но Фар все равно не запускается. Поэтому закачиваю полный патч со всеми изменениями. См. файл curdir-cmdhistory.diff. |
|
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); } } |
|
3713 |
|
Годится! Я бы, наверное, сохранял команду, запущенную из многих каталогов, много раз, а не только один. Но и так нормально. Можно хотелку закрывать. Спасибо всем, кто сделал это возможным. |
|
http://forum.farmanager.com/viewtopic.php?f=3&t=8366 http://forum.farmanager.com/viewtopic.php?f=60&t=8289#p113808 |
|
4324 - можно писать дубли команд в историю (System.PerFolderCmdHistory) |
|
Здесь не всё ещё доделано. Например, перебор команд Ctrl-E/Ctrl-X при включённой опции показывает дубли. Вообще хотелось бы получить фидбэк - если фича невостребована, проще откатить, чем допиливать. |
|
> Вообще хотелось бы получить фидбэк Лично я сначала думал, что мне это понадобится. Но потом оказалось, что могу обходиться и без этого (дубли команд). У меня ситуация такая: я в разных каталогах запускаю программу с именами файлов в качестве параметров. Файлы лежат в том каталоге, откуда запускается команда, и поэтому их имена задаются локально (без пути). Т.к. названия этих файлов в разных папках разные, то и команды (их полный текст) получаются разными. Поэтому и можно обходиться без дублей. Если бы имена файлов были одинаковые, то я бы голосовал за дубли. Но это моя конкретная ситуация. |
|
4350 -- откатил. потому как никому не нужно. |
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 |