View previous topic :: View next topic |
Author |
Message |
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Sun Aug 19, 2012 18:15 Post subject: Копирование имён только выделенных файлов и каталогов |
|
|
Какие есть способы скопировать имена только выделенных файлов и каталогов? Возможно, хитрости через комбинацию cm-команд. Возможно, простым скриптом.
Стандартная команда 2017 если ничего не выделено - то копирует имя файла под курсором.
А нужно: Если что-то выделено (файлы или каталоги) - то копируем их имена (стандартная работа команды 2017). Если выделен один файл/каталог и курсор находится на нём - копируем имя этого одного файла/каталога. Если ничего не выделено - то содержимое буфера очищается. При этом положение курсора и состояние выделения не должно изменяться. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10263 Location: Россия, Саратов
|
(Separately) Posted: Sun Aug 19, 2012 19:12 Post subject: |
|
|
Просто в порядке реплики с места. Вспомнил тему, где обсуждалась специфика поведения выделенных объектов и объектов под курсором.
MVV wrote: | везде в тотале при отсутствии выделения файл под курсором считается выделенным (копирование/перемещение и т.п.). |
_________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Aug 19, 2012 19:16 Post subject: |
|
|
LonerD wrote: | Если ничего не выделено - то содержимое буфера очищается. | А это для чего
Avada
И я вспомнил, заодно посмотрев тамашний скрипт, который можно модифицировать под указанную задачу, но даже в таком случае для LonerD, ессно (пока не портабл), не подойдёт.. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Mon Aug 20, 2012 01:35 Post subject: |
|
|
Да не то, чтобы не подойдёт, но очень громоздко.
Вообще дело началось с небольшой команды - перейти к следующему расширению файла с сохранением выделения.
Задача решилась вот таким способом:
TCFS2.exe /ef msg($0B,0) tcm(2017) tcm(524) tcm(527) tcm(525) tcm(3305) tcm(2053) tcm(524) tcm(2033) msg($0B,1) redraw()
Если на панели есть выделение, то всё работает. А если ничего не выделено, то получается некрасиво - после перехода к следующему расширению тот файл, который изначально был под курсором, становится выделенным. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Aug 20, 2012 16:20 Post subject: |
|
|
LonerD
Ты в команде забыл tcm(2918) перед redraw() поставить в конце. И вообще можно было бы вполне обсудить по месту назначения, а не пытаться искать в отдельном топике ответ на вопрос, который исходной задачи касается только косвенно.
Last edited by Flasher on Wed Aug 22, 2012 22:37; edited 1 time in total |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Wed Aug 22, 2012 03:23 Post subject: |
|
|
Quote: | А может сначала снять выделение и послать нажатие Insert? |
Вся суть в том, чтобы сохранить выделение если что-то выделено.
Quote: | который исходной задачи касается только косвенно. |
Данной задачи касается косвенно, потому я и не стал изначально описывать её.
Потому как могут возникать и другие задачи, требующие работы только с выделенными объектами.
PS. Да, кстати, частная задача решена.
Но глобальная так и осталась открытой.
Приходит в голову только алгоритм скрипта (не слишком сложный, но и не очевидный):
1. Копировать имена файлов в буфер.
2. Если в буфере несколько строк, то на этом алгоритм закончен (выделение есть).
3. Если в буфере одна строка - сохранить эту строку в переменную.
3.1. Инвертировать выделение.
3.2. Копировать имена файлов в буфер.
3.3. Инвертировать выделение.
3.4. Сравнить сохранённую переменную со строками полученного списка; если есть совпадения - то очистить буфер, иначе поместить в буфер значение сохранённой переменной. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Wed Aug 22, 2012 09:39 Post subject: |
|
|
LonerD wrote: | Вся суть в том, чтобы сохранить выделение если что-то выделено. |
Посылаешь tcm(530) вместо tcm(2017), потом делаешь своё черное дело, потом посылаешь tcm(524) и tcm(529) вместо tcm(2033). А блин, тотал его сбрасывает при вызове cm_ClearAll... О, а при вызове cm_ClearAllFiles не сбрасывает!
Итого,
Code: | TCFS2.exe /u- /ef msg($0B,0) tcm(530) tcm(524) tcm(527) tcm(525) tcm(3305) tcm(2053) tcm(3304) tcm(529) redraw() msg($0B,1) tcm(2918) |
Последняя команда - для перерисовки курсора (поставьте что получше, если есть). _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Aug 26, 2012 14:14 Post subject: |
|
|
LonerD wrote: | Но глобальная так и осталась открытой. | Для чего эта глобальная? Зачем нужен буфер в ней? Чтобы его содержимое куда-то скопировать? Ты и так видишь, выделено у тебя что-то в панели или нет. Зачем тут костыли? |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Sun Aug 26, 2012 21:45 Post subject: |
|
|
MVV
Спасибо, у меня было несколько другое решение, не такое элегантное.
Значит, при копировании в буфер файл под курсором в любом случае считается выделенным если отсутствуют другие выделения.
А команда 530 (Сохранить выделение временно) не считает одиночный файл выделенным. Интересное поведение, надо будет запомнить. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Thu Jun 13, 2013 15:49 Post subject: |
|
|
Можно ли каким-то образом получить тот текст (те выделенные строки), которые сохранются командой 530?
Куда они сохраняются? Куда-то в память? Можно ли считать эту информацию из памяти (каким образом) ? _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 13, 2013 15:56 Post subject: |
|
|
LonerD wrote: | Можно ли считать эту информацию из памяти (каким образом) ? | Думаю, тебе на этот вопрос только Гислер ответит.. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Thu Jun 13, 2013 17:50 Post subject: |
|
|
Жаль, а я думал программисты смогут прояснить вопрос.
В частности пока не могу понять и воспроизвести алгоритм работы восстановления выделения по нажатию Esc в плагине TwinKey; создаётся впечатление что плагин считывает и запоминает результат работы команды 530 (cm_SaveSelection).
Вот тут упоминалось о возможности реализации проверки "нет ли в панели выделенных файлов". Интересен механизм этой проверки в случае одного файла - выделен он или просто курсор располагается на нём... _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Thu Jun 13, 2013 20:12 Post subject: |
|
|
Думаю, гораздо проще послать команду сохранения выделения в файл и перехватить диалог выбора файла, чем ковыряться в памяти и искать непонятно что (сперва придется неслабо поковырять программу, чтобы найти, где что, но в другой версии всё будет в других местах). _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
|