выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Здесь обсуждается всё, что касается макросов.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

выделить все вхождения слова под курсором

Post by citRiks »

Latest post of the previous page:

Массивные улучшения
* CtrlF5 теперь сразу переводит в режим "автовыделения", отменяя до этого выделенное по Ф5
Это убирает смущение пользователей (и меня самого) когда делаешь CtrlF5 и "ничего не происходит"
* придуман механизьм для "безоконных" (или как это назвать?) сообщений,
прежний не работал возможно изза "autodeleted colors"
* Теперь появляется "безоконное" собщение типа "далее ничего нет" когда переходить некуда по Альт/ШифтФ5
* Другие улучшения там и сям

https://github.com/dr-dba/far-lua-editor-color-word/
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

выделить все вхождения слова под курсором

Post by Ann »

citRiks,

На посты в этой теме я почему-то попадаю не непосредственно, а через череду разных переходов. И иногда и не добираюсь до них.
Поэтому прошу Вас поместить скрипт в раздел макросов и скриптов. Последний по времени вариант скрипта, на мой взгляд, очень хорош. Благодарствую.

Добавлено: только попросил, а скрипт уже здесь. Респект модераторам.
Last edited by Ann on Sun 25 Apr, 2021 10:54, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

выделить все вхождения слова под курсором

Post by citRiks »

John Doe wrote: Sun 31 Jan, 2021 16:05
citRiks wrote: Sun 31 Jan, 2021 15:13 и как отличить регексп от не-регекспа?
Если строка не содержит спецсимволов, или не компилируется в регэксп, то третий режим точно можно пропускать.
если это Луа-выражения, как проверить их компиляцию?
это в смысле "не падает при пробном поиске как РегЕксп" ?
Я пока не придумал ничего лучше как так:

Code: Select all

local function fnc_cfind_safe(line, the_quote, line_pos, plain)
	local	res, quote_pos, quote_end, quote_str
			= pcall(utf8.cfind, line, the_quote, line_pos, plain)
	return	res,
	not	res and quote_pos or nil,
		res and quote_pos or nil,
		quote_end, quote_str
end

local RAND_CHK_STR = utf8.upper(win.Uuid(win.Uuid()))
local function fnc_regex_check(expr)
--! is the "expr" plain text or valid regular expression?
	local	str = RAND_CHK_STR..expr..RAND_CHK_STR
	local	res, msg, found_pos, found_end, found_str = fnc_cfind_safe(str, expr)
	if	res
	then	return not found_str 
	else	return true, msg
	end
end
User avatar
buniak_a_h
Posts: 4260
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by buniak_a_h »

citRiks wrote: Tue 27 Apr, 2021 02:07 если это Луа-выражения, как проверить их компиляцию?
Может, regex.new ?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by citRiks »

buniak_a_h wrote: Tue 27 Apr, 2021 03:51Может, regex.new ?
ключевое слово было: "для Луа-(регекс) выражений"
правда с не-Луа регекспами я тоже не очень дружу :)
User avatar
buniak_a_h
Posts: 4260
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by buniak_a_h »

citRiks wrote: Tue 27 Apr, 2021 09:44 для Луа-(регекс) выражений
Извините, не понял, что значит Луа-выражения.
Вызвать ексепшн для регэкспов в стиле Луа мне не удалось. Видимо, Луа считает ВСЕ выражения валидными. Правда, некоторые при этом никогда ни с чем не совпадут. Например, "abc("
User avatar
buniak_a_h
Posts: 4260
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by buniak_a_h »

Хотя нет, удалось. "[qwe"
Тогда так:
local ok,res=pcall(function(s,m) return s:match(m) end, ss, mm)
Возвращает false, malformed pattern (missing ']')
Last edited by buniak_a_h on Tue 27 Apr, 2021 11:11, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4260
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by buniak_a_h »

citRiks, Кстати, в самом ФАРе во многих местах вопрос решён просто: если маска начинается со слэша и заканчивается слэшом, после которого идут опционально 4 буквы (наизусть только i помню), то это - регэксп. Я тоже такой логики придерживался в своих поисковых скриптах.
Last edited by buniak_a_h on Tue 27 Apr, 2021 11:18, edited 1 time in total.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by Shmuel »

citRiks wrote: Wed 28 Apr, 2021 19:07 идея в том чтобы распозновать рeгекспы без таких подсказок
Не получится. Например, ".". Точка может быть как регекспом, так и просто точкой для буквального поиска. То же самое и любой другой регексп - это может быть как регексп, так и буквальная строка.

Функции string.find (или utf8.find) имеют возможность указать, регексп или нет четвёртым параметром. Другие ф-ции такой возможности не имеют.
User avatar
buniak_a_h
Posts: 4260
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by buniak_a_h »

Shmuel wrote: Wed 28 Apr, 2021 19:21 Функции string.find (или utf8.find) имеют возможность указать, регексп или нет четвёртым параметром. Другие ф-ции такой возможности не имеют.
Если знаешь заранее, то я на просторах этого форума видел скрипт, переводящий строку в регэксп, соответствующий этой строке. Что-то типа "экранирования" спецсимволов. Вся проблема в том, что скрипт не знает, что имел в виду юзер, вводя строку. Потому либо (а) чекбокс, либо (б) правило /…/, либо на свой страх и риск.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by citRiks »

(В гитхабе произведена починка багов, косметика:)
https://github.com/dr-dba/far-lua-editor-color-word/
buniak_a_h, Shmuel,
у меня есть режим как простого текста так луа-выражений,
работает базовое детектирование неправильности луа-выражений,
и в принципе этим можно удовлетворится.
Shmuel wrote: Wed 28 Apr, 2021 19:21 Функции string.find (или utf8.find) имеют возможность указать, регексп или нет четвёртым параметром. Другие ф-ции такой возможности не имеют.
В вроде тоже есть параметр plain, надо будет исследовать чем это отличается от match-a.
может в матч-е детектить кривые выражения будет правильнее действительно
Last edited by citRiks on Sat 01 May, 2021 14:14, edited 1 time in total.
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by dmitrik »

А что теперь понимается под зависимостями, описанными в README? Без них теперь не будет работать? Если да, то куда их лучше положить — в Macros\scripts, где лежит сам основной макрос, или Macros\modules?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by citRiks »

dmitrik, это модули, класть соответственно в:
%APPDATA%\Far Manager\Profile\Macros\modules\,
в следующем заходе я уточню описание
Last edited by citRiks on Sun 02 May, 2021 18:55, edited 1 time in total.
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by dmitrik »

Может, лучше сделать архив-релиз со всем правильным, что там должно быть? 🙂
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

выделить все вхождения слова под курсором (@Xer0X & @citRiks)

Post by citRiks »

dmitrik,
лучше конечно, но откуда брать время?
При каждом изменении где-либо придется все перепаковывать.
Могу лишь дать идею желающим реализовать подобное.
Путь решения который мне видится.

Написать скрипт который знает и умеет скачивать определенные файлы с гитхаба,
и сохраняет их в определенные директории как макросы и модули.

да, для этого есть например LuaRocks,
именно это онo и делает, типа lua package management.
но все же окунаться в LuaRocks нет времени тоже.
И, что самое главное, смысла тоже нет,
так как аудитория малочисленна и сами умеют раскладывать файлы
Post Reply

Return to “Обсуждение макросов”