Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update highlight dialog #2452

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
Open

Update highlight dialog #2452

wants to merge 13 commits into from

Conversation

anta999
Copy link
Contributor

@anta999 anta999 commented Oct 20, 2024

NEW_HL

@spnethw
Copy link
Contributor

spnethw commented Oct 20, 2024

There are still some unresolved issues with file marking.

@anta999 anta999 closed this Oct 20, 2024
@anta999 anta999 reopened this Oct 20, 2024
@spnethw
Copy link
Contributor

spnethw commented Oct 20, 2024

Yep, now fixed, markers are shown.

@akruphi
Copy link
Contributor

akruphi commented Oct 20, 2024

Please mention in HACKING.md all changes/additional to plugin interface from far2l/far2sdk/farplug-wide.h.

@spnethw
Copy link
Contributor

spnethw commented Oct 20, 2024

Some strange variations of dir names are offered when switching by Ctrl+Alt+D.

@anta999
Copy link
Contributor Author

anta999 commented Oct 20, 2024

CTRL+ALT+D - Смена стиля имени директорий
CTRL+ALT+L - Показывать размер sym links
CTRL+ALT+N - Показать/Спрятать маркировку файла в status bar
CTRL+, - Горизотальный режим и обратно
CTRL+M В диалогах фильтров - смена стиля аттрибутов: короткий/длинный

@spnethw
Copy link
Contributor

spnethw commented Oct 20, 2024

CTRL+, - Горизотальный режим и обратно

Horizontal mc-like mode is a great idea, but the implementation is still buggy and needs some fixing/polishing.

изображение
изображение

@spnethw
Copy link
Contributor

spnethw commented Oct 20, 2024

Погонял разные фичи из PR. В общем, косяков пока два вижу:

  1. Какая-то ерунда с наименованиями директорий/ссылок/etc по CTRL+ALT+D — там даже в farlang.templ.m4 наверчено. Плюс что-то с процессингом этого: у меня в цикле переключения четырежды повторяются одни и те же наименования, разбавляемые другими вариантами. Я бы сократил варианты всего этого до минимума. Выставить нужное сейчас — это какой-то квест.
Из farlang.templ.m4
DirUp
"Вверх"
"Up"

DirUp2
"КАТАЛОГ"
"UP--DIR"

DirUp3
"ДИР-ВВЕРХ"
"DIR-UP"

DirUp4
"ДИР-ВВЕРХ"
"DIR-UP"

DirName
"Папка"
"Folder"

DirName2
"КАТАЛОГ"
"SUB-DIR"


DirName3
"ДИРЕКТОРИЯ"
"DIRECTORY"


DirName4
"ПОД-ДИРЕК"
"SUB-DIR"

JunctionName
"Связь"
"Junction"

JunctionName2
"СВЯЗЬ"
"JUNCDIR"


JunctionName3
"СВЯЗЬ"
"JUNCDIR"


JunctionName4
"СВЯЗЬ"
"JUNCDIR"


SymLinkName
"Ссылка"
"Symlink"

SymLinkName2
"Ссылка"
"Symlink"


SymLinkName3
"ССЫЛКА"
"SYMLINK"


SymLinkName4
"ССЫЛКА"
"SYMLINK"
  1. Визуальные глюки в горизонтальном режиме панелей. Тут, похоже, иногда накладывается на фичу от скрытия командной строки от @elfmz. Что-то с прорисовкой сбоит. Плюс ещё баги возникают, когда меняешь размеры по Ctrl-Shift-Up/Down. Плюс иногда можно уменьшить панель до нулевой вместимости, но это не критично, точно так же можно и увеличить.

@spnethw
Copy link
Contributor

spnethw commented Oct 21, 2024

В общем, по п.1 проблема действительно есть.

При Opt.DirNameStyle от 0 до 15 включительно 4 раза по кругу идут одни и те же nameindex [0..3],
при этом выравнивания по центру и символов вокруг нет, так как
Opt.DirNameStyle & DIRNAME_STYLE_SURR_CH == 0 и Opt.DirNameStyle & DIRNAME_STYLE_CENTERED == 0

Отсюда получаем 4 раза подряд одни и те же "стили".

@akruphi
Copy link
Contributor

akruphi commented Oct 21, 2024

Такое множество стилей (aж 64 🔥) совершенно не человеколюбиво переключать на лету подряд - так с обычным терпением не дотыкаешь до нужного.

По CTRL+ALT+D лучше вызывать диалог с нужными галочками, причём внутри диалога иметь поле которое динамически (при перещелкивании галочек) отображает примеры выбранного стиля.

Ну, если совсем полноценный диалог тяжело, то хотя бы VMenu с 64-мя строками, где каждая явно объясняет что будет применено.

@anta999
Copy link
Contributor Author

anta999 commented Oct 21, 2024

CTRL+, - Горизотальный режим и обратно

Horizontal mc-like mode is a great idea, but the implementation is still buggy and needs some fixing/polishing.

изображение изображение

Как это сделать ? Опиши плиз.

@spnethw
Copy link
Contributor

spnethw commented Oct 21, 2024

Как это сделать ? Опиши плиз.

  1. переключаемся в горизонтальный режим.
  2. гасим верхнюю панель (Ctrl-F1).
  3. надвигаем нижнюю панель на командную строку (Ctrl-Down).
  4. уменьшаем её размер (Ctrl-Right)

причём глюк отрисовки только когда командная строка скрыта.

Added dir name cfg dialog
Fixed draw artefacts
@anta999
Copy link
Contributor Author

anta999 commented Oct 23, 2024

All fixed
CTRK+ALT+D - DirCfg Dialog

fixed elfmz#2461 Garbage in the terminal after running menu command with hidden command line
Updated DirName Config Dialog
@spnethw
Copy link
Contributor

spnethw commented Oct 25, 2024

Заметил одну проблему, которая в будущем может привести к серьёзной путанице в коде... имхо, лучше разгрести её сейчас.

Из far2m перетянута инфраструктура процессинга масок, включая имя "CaseSens" для параметров/флагов, отвечающих за "регистрозависимость".
При этом в far2l осталась часть кода, использующая имя "ignorecase", отвечающее за "регистронезависимость".

Всё бы ничего, но сейчас в некоторых (?) случаях "CaseSens" используется в значении "ignorecase", т.е. в инвертированном.

Например, у функции CFileMask::Compare() была сигнатура:

bool CFileMask::Compare(const wchar_t *FileName, bool ignorecase) const

а стала:

bool CFileMask::Compare(const wchar_t *FileName, bool CaseSens, bool SkipPath) const

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

Скажем, CFileMask::Compare() вызывается в MaskGroups.cpp:303:

if ( !chkFileMask.Compare(Value.CPtr(), !(bool)(bCaseSensitive)) ) {

и в filelist.cpp:3442:

Match = FileMask.Compare(CurPtr->strName, !Opt.PanelCaseSensitiveCompareSelect, false);

Видимо, там много мест таких, это как пример.

@spnethw
Copy link
Contributor

spnethw commented Oct 25, 2024

Думаю, если быть последовательным, наиболее правильный вариант сейчас — проапдейтить сигнатуры функций

bool CmpName(const wchar_t *pattern, const wchar_t *str, bool skippath = true, bool ignorecase = true);
static bool CmpName_Body(const wchar_t *pattern, const wchar_t *str, bool ignorecase)

из far2l/far2l/src/mix/processname.cpp

на

bool CmpName(const wchar_t *pattern, const wchar_t *str, bool skippath = true, bool CaseSens = false);
static bool CmpName_Body(const wchar_t *pattern, const wchar_t *str, bool CaseSens)

соответствующим образом инвертировав ветки в CmpName_Body(), а потом аккуратно пройтись по дереву вызовов и пофиксить инвертированное, где нужно. 🤔

@spnethw
Copy link
Contributor

spnethw commented Oct 25, 2024

возможно, проверять & инвертировать (где необходимо) придётся не так много (UPD: хотя нет, больше...), навскидку:

MaskGroups.cpp:303

if ( !chkFileMask.Compare(Value.CPtr(), !(bool)(bCaseSensitive)) ) {

filefilterparams.cpp:369

if (FMask.Used && !FMask.FilterMask.Compare(strFileName, FMask.IgnoreCase)) {  // Файл не попадает под маску введённую в фильтре?

filetype.cpp:89 — тут поведение в PR изменилось, было с игнорированием регистра, а стало регистрозависимо (?)

if (!FMask.Compare(Name, false))

filetype.cpp:145 — тут поведение в PR изменилось, было с игнорированием регистра, а стало регистрозависимо (?)

if (FMask.Compare(Name, false)) {

findfile.cpp:1142

if (!FileMaskForFindFile.Compare(FileName, !Opt.FindOpt.FindCaseSensitiveFileMask))

mix.cpp:101 — тут поведение в PR изменилось, было с игнорированием регистра, а стало регистрозависимо (?)

if (FMask.Compare(FindData.strFileName, false)) {

filelist.cpp:3442

Match = FileMask.Compare(CurPtr->strName, !Opt.PanelCaseSensitiveCompareSelect, false);

history.cpp:83

return !(fmp.Set(Opt.AutoComplete.Exceptions.CPtr(), FMF_ADDASTERISK) && fmp.Compare(Str,true));

@anta999
Copy link
Contributor Author

anta999 commented Oct 27, 2024

Чтобы ничего не сломать я оставил ignorecase и переименовал CaseSens в filemask.

@spnethw
Copy link
Contributor

spnethw commented Oct 27, 2024

Чтобы ничего не сломать я оставил ignorecase и переименовал CaseSens в filemask.

Имхо, зря. Название CaseSens было бы точнее (в интерфейсе везде чекбоксы «С учетом регистра», а не "Игнорировать регистр"), и ближе к far2m.

Ближе к телу: в таком случае есть другие места, которые нужно изменить, как минимум в far2l/src/mix/processname.cpp:

int WINAPI ProcessName(const wchar_t *param1, wchar_t *param2, DWORD size, DWORD flags)
{
	...
	bool casesens = (flags & PN_CASESENSITIVE);
	...

	if (mode == PN_CMPNAME)
		return CmpName(param1, param2, skippath, casesens) ? TRUE : FALSE;

	else if (mode == PN_CMPNAMELIST || mode == PN_CHECKMASK)
	{
		...
		return Masks.Compare(param2, casesens, skippath) ? TRUE : FALSE;
	}
	...
}

Флаг PN_CASESENSITIVE, наверное, можно и оставить. Внутри только casesens на ignorecase заменить и инвертировать его выставление.

@spnethw
Copy link
Contributor

spnethw commented Oct 27, 2024

Потестил в разных кейсах, вроде бы проблем не вызывает.
Приятный PR, с интересными/полезными фичами.

@spnethw
Copy link
Contributor

spnethw commented Oct 27, 2024

@elfmz есть замечания?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants