View Issue Details

IDProjectCategoryView StatusLast Update
0000528Far Manager 1.7xCommand Line/Executepublic2009-11-03 13:39
ReporterHaRTAssigned Toalexy 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version1.71 
Target VersionFixed in Version1.75 
Summary0000528: Неправильное развыделение при применении одной общей команды
DescriptionЕсли по Apply command (CtrlG из файловой панели) используются такие Символы (например, !&, !@!), что выполняется одна общая команда для всех выделенных элементов, то после её окончания выделение снимается только с последнего по порядку элемента, а не со всех.
Steps To Reproduce1. Открыть файловую панель с несколькими элементами
2. Выделить несколько элементов вразбивку
3. Применить команду echo !& или echo !@!
4. Удостовериться, что выделение снялось только с последнего элемента
TagsNo tags attached.
Build2607

Activities

samlyukov

2008-07-08 11:35

reporter   bugnote:0001665

Last edited: 2009-02-22 10:53

как это сейчас работате - в строке из !& формируется список файлов, затем этот список скармливается запусатору, цикла как такового нет и в помине.
соответственно после обработки делается всего одно ClearLastGetSelection().
Выход - для ApplyCommand() всегда снимать всё! выделение с панелей.

samlyukov

2009-02-22 10:57

reporter   bugnote:0002559

Ы?

HaRT

2009-02-24 17:09

reporter   bugnote:0002567

> Выход - для ApplyCommand() всегда снимать всё! выделение с панелей.
Тут несколько моментов:
1. Если оно будет сниматься так, чтобы могло быть восстановлено по CtrlM, то почему бы и нет?
2. Однако если какие-то запускаемые команды могут управлять Фаром извне (например, через SHPCE или через PowerShellFar --- возможно ли такое?), то более правильно будет сбрасывать только ту часть выделения, которая не была затронута выполнявшимися командами. Однако это кажется очень экзотическим случаем, да и не слишком просто аккуратно реализовать.
3. В любом случае, хорошо бы снимать выделение только с тех элементов, для которых запустить команду удалось. А если для каких-то НЕ удалось (например, имя программы зависело от имени файла, и в результате такой не нашлось), то оставлять их выделенными.

samlyukov

2009-02-24 17:35

reporter   bugnote:0002569

>снимать выделение только с тех элементов, для которых запустить команду удалось
сейчас так и сделано - результат ты видишь.

HaRT

2009-02-24 17:39

reporter   bugnote:0002570

>> снимать выделение только с тех элементов, для которых запустить команду удалось
> сейчас так и сделано - результат ты видишь
Так ведь в случае применения общей команды ко всему списку успешность запуска определяется тоже для всего выделения сразу, т.ч. и развыделение должно быть для них общим (если получилось запустить).

>>> выделение с панелей
Кстати, я надеюсь, тут всё же имеется в виду только активная панель?

samlyukov

2009-02-24 17:46

reporter   bugnote:0002572

Last edited: 2009-02-24 17:47

еще раз, код:
 
\\ работаем в цикле:
  while (GetSelName(&strSelName,FileAttr,&strSelShortName) && !CheckForEsc())
  {
    string strConvertedCommand;
    string strListName, strAnotherListName;
    string strShortListName, strAnotherShortListName;

    strConvertedCommand = strCommand;

    {
 //преобразуем метасимволы в строке из !& в строку имен файлов!!
int PreserveLFN=SubstFileName(strConvertedCommand,strSelName,strSelShortName,&strListName,&strAnotherListName,&strShortListName, &strAnotherShortListName);
      PreserveLongName PreserveName(strSelShortName,PreserveLFN);
// запустим, т.е. у нас получается пускаемся ОДИН раз, а не на каждый файл!!
      Execute(strConvertedCommand,FALSE,FALSE);
// снели выделение с последнего обработанного...
      ClearLastGetSelection();
    }
  }
// вышли..

HaRT

2009-02-24 17:49

reporter   bugnote:0002573

> еще раз, код
Спасибо конечно. Только вот не очень понятно, к чему это. Мне казалось, что мы обсуждаем, какое поведение удобно пользователю. При чём тут этот код?

samlyukov

2009-02-24 17:56

reporter   bugnote:0002574

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

HaRT

2009-02-24 17:59

reporter   bugnote:0002575

> мы обсуждаем баг
По существу вопроса мне нечего добавить к тому, что я высказал в 0000528:0002567 и 0000528:0002570

samlyukov

2009-06-08 22:36

reporter   bugnote:0003523

в 983 были сделаны изменения обработки Ctrl-G - и развыделяться стало :)

JohnDoe

2009-11-03 13:22

updater   bugnote:0004471

Вроде ж пофикшено? почему бы не закрыть?

HaRT

2009-11-03 13:28

reporter   bugnote:0004473

Проверено на сборке 2607 x86

Issue History

Date Modified Username Field Change
2008-05-06 06:56 HaRT New Issue
2008-05-06 06:56 HaRT Status new => assigned
2008-05-06 06:56 HaRT Assigned To => alexy
2008-07-08 11:35 samlyukov Note Added: 0001665
2008-11-16 19:19 alexy Assigned To alexy =>
2008-11-16 19:19 alexy Status assigned => new
2009-02-22 10:53 samlyukov Note Edited: 0001665
2009-02-22 10:57 samlyukov Note Added: 0002559
2009-02-24 17:09 HaRT Note Added: 0002567
2009-02-24 17:35 samlyukov Note Added: 0002569
2009-02-24 17:39 HaRT Note Added: 0002570
2009-02-24 17:46 samlyukov Note Added: 0002572
2009-02-24 17:47 samlyukov Note Edited: 0002572
2009-02-24 17:49 HaRT Note Added: 0002573
2009-02-24 17:56 samlyukov Note Added: 0002574
2009-02-24 17:59 HaRT Note Added: 0002575
2009-06-08 22:36 samlyukov Note Added: 0003523
2009-11-03 13:22 JohnDoe Note Added: 0004471
2009-11-03 13:22 JohnDoe Status new => feedback
2009-11-03 13:28 HaRT Note Added: 0004473
2009-11-03 13:28 HaRT Status feedback => resolved
2009-11-03 13:39 alexy Build => 2607
2009-11-03 13:39 alexy Status resolved => closed
2009-11-03 13:39 alexy Fixed in Version => 1.75
2009-11-03 13:39 alexy Resolution open => fixed
2009-11-03 13:39 alexy Assigned To => alexy