|
function wrapLineBasedOnWidth(maxWidth, windows, lineToWrap)
--三个参数分别为:每行宽度,一个含窗口名的表,该行的文本
lineToWrap = lineToWrap or getCurrentLine()
local wrapAt = {}
local index = 1
local lineWidth = 0
local length = utf8.len(lineToWrap)
local totalWidth = utf8.width(lineToWrap, true, 0)
local wrapCount = totalWidth / maxWidth
if wrapCount <= 1 then
return
end
--开始计算换行位置
while wrapCount > 1 and index <= length do
local char = utf8.sub(lineToWrap, index, index)
local charWidth = utf8.width(char, true, 0)
lineWidth = charWidth + lineWidth
if lineWidth > maxWidth then
table.insert(wrapAt, 1, (index - 1))
wrapCount = wrapCount - 1
lineWidth = charWidth
end
index = index + 1
end
--开始换行
if wrapAt then
for i = 1, #wrapAt do
for j = 1, #windows do
local latestline = getLastLineNumber(windows[j])
moveCursor(windows[j], wrapAt[i], latestline - i)
insertText(windows[j], "\n")
echo(windows[j], "")
end
end
end
end
行首触发器例子:【闲聊】
local currentLine = line
geyser_GUI.chat_window.cut()
上面这个函数里有copy()和appendBuffer()
local miniconsoles = {"all_miniconsole", "chat_miniconsole"}
上面这个表是我需要换行的窗口
wrapLineBasedOnWidth(utility.chat_console_width, miniconsoles, currentLine)
utility.chat_console_width是我用getColumnCount()算好的变量
|
|