Страница 2 из 3
Добавлено: Пн окт 06, 2025 23:32
yozhik
Orion9
К слову о коммитах (если уже знаете, то пардон, я так недавно): если на GitHub'е к адресу коммита добавлять ?w=1, то он прячет шелуху (изменение в пробелах, табах, etc.) — удобнее, лаконичней. Пример:
https://github.com/yozhic/AkelPad-coder ... 983c6d?w=1
Добавлено: Ср окт 08, 2025 19:23
Orion9
yozhik
Нет, не знал. Спасибо инфу. Мне еще понравилось описание в вашем профиле - читал как на иголках. Одна строчка, а словно
триллер качественный посмотрел )
Добавлено: Пн окт 13, 2025 12:31
Orion9
yozhik
Боюсь, что эпопея с CodeFold еще не закончена и, вероятно, еще долго будет длиться.
После такой функции следующие за ней функции вкладываются:
Код: Выделить всё
Func WdxFieldType(ft_num)
Local s
Switch ft_num
Case 0
s = "ft_nomorefields"
Case 1
s = "ft_numeric_32"
Case 2
s = "ft_numeric_64"
Case 3
s = "ft_numeric_floating"
Case 4
s = "ft_date"
Case 5
s = "ft_time"
Case 6
s = "ft_boolean"
Case 7
s = "ft_multiplechoice"
Case 8
s = "ft_string"
Case 9
s = "ft_fulltext"
Case 10
s = "ft_datetime"
Case 11
s = "ft_stringw"
Case 12
s = "ft_fulltextw"
EndSwitch
Return s
EndFunc
В другом модуле вкладываение начинается после такой строчки:
Код: Выделить всё
If bkg1 = -1 Then bkg1 = 1*255 + 256*255 + 65536*255
Добавлено: Пн окт 13, 2025 14:11
yozhik
Orion9
Первое поправил — Case..EndSwitch был жадным и блокировал Switch..EndSwitch.
А второе не получается воспроизвести. Если можно, выложите модуль посмотреть, может там не в If..Then дело, а в чём другом.
Добавлено: Пн окт 13, 2025 16:32
Orion9
yozhik
Да, я давно заметил, что ему именно Case..EndSwitch не "заходит". Взял исправленный .coder, проблема ушла, но частично. Теперь другие функции ниже WdxFieldType вкладываются. Надо бы все модули перетряхнуть, раз уж взялся, но вы пока посмотрите пару моментов.
1) Пример из справки. За DateDiff функции вкладываются:
Код: Выделить всё
Func DateDiff(DateTime1, DateTime2, Unit)
Local TS1 = IsInt(DateTime1) ? DateTime1 : ToDateTime(DateTime1)
Local TS2 = IsInt(DateTime2) ? DateTime2 : ToDateTime(DateTime2)
Local Diff = (TS1 - TS2) / 10000000
Switch Unit
Case "M"
Return Floor(Diff / 60)
Case "H"
Return Floor(Diff / 3600)
Case "D"
Return Floor(Diff / 86400)
Else
Return Diff
EndSwitch
EndFunc
2) Проблема действительно была не в If..Then, а в том, что выше по телу функции есть такое:
Код: Выделить всё
If lParam = 1 And IsPressed(0x5B) Then
SwitchColors(1)
Return
EndIf
Видимо ему не нравится имя функции SwitchColors:
Код: Выделить всё
RegisterCommand 70051 "SwitchColors"
Func SwitchColors(lParam)
EndFunc
Добавлено спустя 7 минут:
После этой функции тоже вкладываются:
Показать
Код: Выделить всё
Func CreateUwdxBar(Barname)
Local i = 0
Local bar, br2, wdx
# относительный путь к утилите
Local uwdx_dir = REL_UWDX
Local uwdx_exe = "%COMMANDER_PATH%" & uwdx_dir & "uwdx.exe"
Local uwdx_con = "%%COMMANDER_PATH%%" & uwdx_dir & "uwdx.exe"
Local uwdx_obj = "%P%N"
bar = DIR_BARS & barname & ".bar"
br2 = DIR_BARS & barname & ".br2"
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%bar%"""
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%br2%"""
If FileExist(bar) Then
MsgBox("Ошибка удаления " & bar, "uwdx")
Return 0
Endif
IniWrite %bar% "Buttonbar" "Buttoncount" "0"
If ERROR = 1 Then
MsgBox("Ошибка создания " & bar, "uwdx")
Return 0
EndIf
While i < 100
IniRead /R wdx %COMMANDER_INI% "ContentPlugins" %"i" "stop"
If wdx="stop" Then Break
wdx = StrTrim(StrRight(wdx, StrLen(wdx)-StrPos(wdx, "\", -1)))
IniWrite %bar% "Buttonbar" %"'Button' & i+1" %uwdx_exe%
IniWrite %bar% "Buttonbar" %"'Menu' & i+1" %wdx%
IniWrite /EV- %bar% "Buttonbar" %"'Cmd' & i+1" "%COMSPEC% /k"
Switch Barname
Case "Auto_uwdxa"
IniWrite %bar% "Buttonbar" %"'Param' & i+1" '"""%uwdx_con%""" /I %wdx% ""%uwdx_obj%""'
Case "Auto_uwdxe"
IniWrite %bar% "Buttonbar" %"'Param' & i+1" '"""%uwdx_con%""" /E /I %wdx% ""%uwdx_obj%""'
Else
IniWrite %bar% "Buttonbar" %"'Param' & i+1" '"""%uwdx_con%""" /I "%wdx%"'
EndSwitch
i = i + 1
Wend
IniWrite %bar% "Buttonbar" "Buttoncount" %i%
Return 1
EndFunc
Добавлено спустя 11 минут:
Еще одна от Loopback:
Показать
Код: Выделить всё
Func FindSelectedAndClear(hMenu, bRight)
Local nCount = DllCall("GetMenuItemCount", "handle", hMenu)
If nCount = 0 Then Return 0
Local Result = 0
Static lpmii = Buffer(AUTORUN_TCARCH = 64 ? 80 : 48)
lpmii.Zero()
lpmii.SetNum(0, "uint", lpmii.size, "uint", 1) # MIIM_STATE
For i = nCount - 1 to 0 Step -1
DllCall("GetMenuItemInfoW", "handle", hMenu, "uint", i, "bool", 1, "ptr", lpmii.ptr)
If lpmii.GetNum(12) = 0x8 Then # MFS_CHECKED
Switch i
Case 0
Result = bRight ? 201 : 101
Case 1
Result = bRight ? 202 : 102
Case 2
Result = bRight ? 200 : 100
Case 3
Result = bRight ? 169 : 69
Else
Result = 70 + i - 7
If Result < 100 Then
If bRight Then Result += 100
Else
Result += (bRight ? 7030 : 6530) - 100
EndIf
EndSwitch
EndIf
DllCall("RemoveMenu", "handle", hMenu, "uint", i, "uint", 0x400)
Next
Return Result
EndFunc
Добавлено: Пн окт 13, 2025 21:11
yozhik
Orion9
Путаницу Else..EndSwitch с Else..EndIf пока поборол.
Для разграничения Switch и Switch... пока соорудил костыль. Все последние примеры обрабатываются сейчас корректно. По идее не должно было так произойти, чтобы SwitchColor прокатил вместо Switch, плагин должен проверять разделитель (пробел) справа от Switch. Или я, как обычно, недопонял чего

Написал пока
на форуме AkelPad, поглядим что скажут.
Добавлено: Пн окт 13, 2025 22:58
Orion9
yozhik
Спасибки ) Вот теперь первые впечатления, что всё нормально.
Панель CodeFold непривычно наполнилась новыми функциями, даже приятно стало перемещаться по коду и в самом окне CodeFold. Но завтра еще буду проверять.
Добавлено: Вт окт 14, 2025 10:49
Orion9
yozhic
Проверил все модули. Проблемы с вложением функций больше нет. Теперь если что-то и искать, то только внутри самих функций и скорее всего с другими блоками. Но важно, что при открытии модуля все его функции сейчас видны и доступны для корректных операций в плагине Coder.
Добавлено: Вт окт 14, 2025 11:02
yozhik
Orion9
Добро. Осилили совместными усилиями

Я ещё жду ответа о работе Coder с разделителями в Folds. Бывает, надо подождать, автор — человек отзывчивый, но занятой.
Добавлено: Ср окт 15, 2025 18:39
Orion9
yozhik
Да, доведём до совершенства рано или поздно. Я довольно часто пользуюсь, поэтому что будет попадаться на глаза сразу буду сообщать.
Добавлено: Пт окт 24, 2025 20:17
AkulaBig
yozhik
Смутило, что в версии 0.15.6 появилась надпись в заголовке: This file must be encoded in UTF-16 LE. Я спросонья начал переводить mnu в юникод. Убил ТС. Хотелось-бы, чтобы эта надпись исчезла. Ни к чему она. И так понятно, что файлы кодера должны быть в юникоде. А кому не понятно. они вообще не будут в этот файл заглядывать.
Добавлено: Пт окт 24, 2025 20:33
yozhik
AkulaBig
Ух, вон как бывает, я бы и не подумал даже.
Я бы лучше заменил на «Coder-file must be encoded...», чтобы исключить двусмысленность. Идёт?
Если честно, совсем убирать как-то душа не лежит

Потому что если кодировка другая, то AkelPad просто тихо игнорирует файл. Если бы он ругался, тогда ладно. Но он вот именно что тихо, ничего не сообщает, и ломай потом голову почему у тебя подсветка не работает.
Добавлено: Пт окт 24, 2025 21:44
AkulaBig
yozhik писал(а):если кодировка другая, то AkelPad просто тихо игнорирует файл
Это понятно. Но кто будет делать этот файл в другой кодировке? В поставляемых с AkelPad файлах кодировки нет никаких упоминаний про юникод. И получается разночтение. У Андрея Аверина тоже нет. Получается только у вас есть.
Добавлено: Пт окт 24, 2025 22:20
jentoso
AkulaBig
Про UTF-16LE было известно ещё давно, но автор так и не указал это в справке
https://akelpad.sourceforge.net/forum/v ... 6LE#p21954
Добавлено: Пт окт 24, 2025 23:02
yozhik
jentoso
Вот, значит, проблема есть, не надумана. Хотя в «справке» я это уже указал:
https://github.com/yozhic/AkelPad-coder ... ER.TXT#L12
Вы как считаете, удалить комментарий «Coder-file must be encoded in UTF-16 LE» из coder-файлов или оставить?