Необычные функции

Здесь можно оставить пожелание относительно функций, которых в программе нет, но которые вам хотелось бы в ней видеть.

Модератор: motyara

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Необычные функции

Сообщение Qwertiy »

Немного странно создавать тему для моего вопроса, но и писать на 27 странице темы "Чего не хватает в Unreal Commander" тоже не хочется (а более подходящего ничего не нашёл). Поэтому решил создать более широкую тему - может кто-нибудь ещё что-то сюда напишет :) ... Что-то из области "Нигде никогда не было, но очень хотелось бы увидеть в UC"...

Сразу просьба к тем, кто будет писать:
заголовок не "RE: Необычные функции", а что-нибудь более содержательное...
И к Максу Дизелю:
не отвечать на всё "Этого нигде нет, и вряд ли кто-то будет этим пользоваться"...
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Смена диска без пути

Сообщение Qwertiy »

Хотелось бы иметь возможность перейти с одного диска на другой, не изменяя при этом каталог (кроме буквы диска), нажав на Ctrl (или Alt) и кнопку смены диска.

Т.е. текущий каталог
C:\Temp\
я нажимаю Ctrl+[Drive D] и получаю
D:\Temp\
Разумеется, это должно работать и для нескольких уровней вложенности, причём, если начиная с какого-то уровня совпадений нет, то должен быть получен именно он, т.е. из
C:\Temp\SomeFolder1\SomeFolder2\SomeFolder3\StopHere\QQQ\WWW\
я должен получить
D:\Temp\SomeFolder1\SomeFolder2\SomeFolder3\StopHere\
при условии отсутствия в ней папки QQQ.

Ещё, по возможности, хотелось бы сделать возможным переход в папку с похожим именем, например из
C:\Temp\SomeFolder1\SomeFolder2\SomeFolder3\StopHere\
в
D:\Temp\SomeFollder1\SomeFolde2\SomeDolder3\StopHere!\

Для этого предлагаю в случае отсутствия точного совпадения имён, найти все каталоги, имена которых отличаются по длине не более чем на один символ, и проверить, есть ли такие, из которых можно получить исходное имя путём изменения, добавления или удаления одного символа. Это можно сделать с помощью следующей функции:

Код: Выделить всё

bool check(char *s1, unsigned l1, char *s2, unsigned l2)
{
char *e1=s1+l1-1, *e2=s2+l2-1;
for(; *s1==*s2; ++s1,++s2);
for(; *e1==*e2; --e1,--e2);
return e1<=s1 && e2<=s2;
}
Здесь s1 и s2 - указатели на строки; l1 и l2 - длины строк s1 и s2 соответствено. Длины передаются для ускорения выполнения функции (т.к. для получения длины строки, её надо пройти до конца, а раньше уже должна была быть сделана проверка, что эти длины отличаются не более, чем на 1).
Если получено несколько вариантов, выбрать одно из следующих действий:
1. посмотреть, какой из них даёт лучшее совпадение последующих каталогов (не считаю этот вариант хорошим - может потребоваться слишком много времени);
2. выбрать любой (считаю этот вариант лучшим, кроме 5);
3. считать, что подходящего каталога нет;
4. спросить у пользователя, в какой перейти (тоже плохой вариант, т.к. возникновение запроса (а тем более нескольких) может быть нежелательным);
5. выбрать исходя из других соображений.

PS: знаю, что теоретически можно исправить 1 букву (букву диска) в строке адреса, но:
1. В неё нельзя попасть, если весь путь в ней не помещается;
2. Действие с кнопкой быстрее;
3. В случае реализации перехода в похожую папку, эти действия не будут эквивалентны.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

А практический смысл где?
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):А практический смысл где?
Часто из-за того, что объём диска ограничен, на разных дисках создаются папки с одинаковыми именами, которые из логических соображений надо бы поместить на один диск. Файлы или папки, находящиеся в них дополняют друг друга.
Если я не нашёл что-то в такой папке на диске D, то я точно знаю, что оно находится в папке с таким же именем на диске C. Поэтому быстрое переключение между ними было бы очень удобным.

PS: знаю людей, у которых то же самое, но с большим числом дисков...
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Хм... весьма экзотический способ размещения файлов. Вероятно в такой ситуации поможет использование символьных ссылок (они создаются для каталогов по нажатию Ctrl+Alt+F5).
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Хм... весьма экзотический способ размещения файлов. Вероятно в такой ситуации поможет использование символьных ссылок (они создаются для каталогов по нажатию Ctrl+Alt+F5).
У символьных ссылок есть недостатки:
1. Они позволяют создать некое подобие сетевой структуры каталогов, которая плоха своей запутанностью;
2. Они могут быть применены только к папкам, но не к файлам;
3. Файлы размещаются так не потому, что так захотелось, а потому, что не хватает места, т.е. впоследствие, когда место освободится, есть желание перенести их "обратно".

И, наконец, (точно не знаю, не разбирался), по-моему, символьные ссылки криво копируются и даже перемещаются, т.е. возможно, что при перемещении папки с символьной ссылкой, она может быть превращена в папку, а её содержимое ________________.

PS: Вчера эксперементировал с копированием вложенных символьных ссылок (в UC), и получил что-то неожиданное в виде 7 уровней вложенности папок со скопированным файлом (на каждом уровне, кроме последнего). Ещё не писал про это, т.к. не разбирался, связано ли это с их вложенностью, или дело в чём-то другом. Ждите в ближайшие дни сообщение в разделе для багов.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):У символьных ссылок есть недостатки:
1. Они позволяют создать некое подобие сетевой структуры каталогов, которая плоха своей запутанностью;
2. Они могут быть применены только к папкам, но не к файлам;
3. Файлы размещаются так не потому, что так захотелось, а потому, что не хватает места, т.е. впоследствие, когда место освободится, есть желание перенести их "обратно".
1 - многое зависит от того, насколько рационально пользователь создал ссылки... циклические однозначно создавать не нужно (если их смысл не в том чтобы запутать файловую систему),
3 - меня не особо интересует мотив использования экзотического метода размещения файлов по нескольким дискам, просто с символьными ссылками можно половину каталогов разместить на первом диске, половину на втором, а на первый вынести ссылки указывающие на каталоги второго. Отговаривать от неиспользования такого метода я пожалуй не стану...

Qwertiy писал(а):И, наконец, (точно не знаю, не разбирался), по-моему, символьные ссылки криво копируются и даже перемещаются, т.е. возможно, что при перемещении папки с символьной ссылкой, она может быть превращена в папку, а её содержимое ________________.
Насчет "превращений содержимого" я пока что не в курсе, обычно все копируется и перемещается корректно (впрочем нужно учитывать что при копировании и перемещении на другой диск ссылки не будут рассматриваться как ссылки, они будут восприняты как каталоги).
Qwertiy писал(а):PS: Вчера эксперементировал с копированием вложенных символьных ссылок (в UC), и получил что-то неожиданное в виде 7 уровней вложенности папок со скопированным файлом (на каждом уровне, кроме последнего). Ещё не писал про это, т.к. не разбирался, связано ли это с их вложенностью, или дело в чём-то другом.
Как я уже упомянул, циклические ссылки создавать не нужно... и тогда не будет проблем с уровнями вложенности. Вот элементарный вариант использования символьных ссылок: браузер Опера держит в каталоге пользовательского профиля огромное количество своих файлов, переносим каталог с этими файлами на другой логический диск (то есть не рассматриваем вариант когда сам каталог пользовательского профиля средствами системы переносится на другой логический диск), а на место где он находился ставим символьную ссылку на результирующий каталог другого логического диска, в результате Опера по умолчанию работает со своим каталогом (символьно сосланным на другой диск). В случае неожиданного падения системы нужно будет просто восстановить ссылку и все настройки/вкладки/закладки Оперы будут теми же что и до падения, не придется настраивать программу заново. Также можно поступить с сохранениями игр и любой другой подобной информацией. А размещение в каталог "c:\Файлы\" ссылки на этот же самый каталог вряд ли приведет к каким-либо практичным результатам.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Предназначение и возможности символьных ссылок я представляю примерно так же. А циклическую сделал просто ради эксперимента.

Но, когда надо записать что-то нужное на диск D, а места мало, то что-то менее нужное надо переместить с него на C (в моём случае, если с системой что-нибудь случится, то его только форматировать). Как-то не хочется в такой ситуации на каждую перемещённую папку создавать символьную ссылку, особенно учитывая что после того, как место на D освободится, я скорее всего верну папки обратно...
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):И, наконец, (точно не знаю, не разбирался), по-моему, символьные ссылки криво копируются и даже перемещаются, т.е. возможно, что при перемещении папки с символьной ссылкой, она может быть превращена в папку, а её содержимое ________________.
Насчет "превращений содержимого" я пока что не в курсе, обычно все копируется и перемещается корректно (впрочем нужно учитывать что при копировании и перемещении на другой диск ссылки не будут рассматриваться как ссылки, они будут восприняты как каталоги).
В смысле когда ссылка копируется с одного диска на другой или когда ссылка, ссылающаяся на один диск, копируется в пределах того, на котором она находится?
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):В смысле когда ссылка копируется с одного диска на другой или когда ссылка, ссылающаяся на один диск, копируется в пределах того, на котором она находится?
В обоих случаях. То есть при копировании символьный каталог воспринимается как обычный. Символьная ссылка останется символьной ссылкой лишь при переносе в пределах одного логического диска (то есть фактически при переименовании).
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):В смысле когда ссылка копируется с одного диска на другой или когда ссылка, ссылающаяся на один диск, копируется в пределах того, на котором она находится?
В обоих случаях. То есть при копировании символьный каталог воспринимается как обычный. Символьная ссылка останется символьной ссылкой лишь при переносе в пределах одного логического диска (то есть фактически при переименовании).
А может стоит добавить опцию в диалог копирования?
Во Фрегате помню флажок "Раскрывать ярлыки", хотя никогда им не пользовался и не знаю, что он делал.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Вероятно надо бы, но это позже.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Вероятно надо бы, но это позже.
Согласен. Это не срочно.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Так что насчёт обработки Ctrl (или Alt - на Ваше усмотрение) при выборе диска?
По-моему это не сложно добавить (по крайней мере самый простой вариант). Тем более, что Shift уже обрабатывается (не знал раньше, а это удобно - открывать диск сразу в новой вкладке).
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Так что насчёт обработки Ctrl (или Alt - на ваше усмотрение) при выборе диска?
На мой взгляд функция недостаточно актуальная чтобы цеплять ее на такой "стратегический запас" как кнопки Alt, Ctrl или Shift. Подозреваю что пользователей у этой функции будет <=1, а это маловато.
Ответить