自用rime-lua腳本及方案分享
本項目使用TypeScriptToLua(tstl)將ts代碼轉譯成lua代碼來執行。
.lua文件產出于lua/TswG
目錄下。
文檔可能有過時及不正確之處,請見諒。
可以通過打字來執行一些操作。如輸入$s
切換到簡體、輸入$S
切換成繁體等。
默認用$
號作爲命令前綴、用,
作爲參數分隔符、用空格提交命令。
基本命令:
-
$s
: 切換到簡體 -
$S
: 切換到繁體 -
$l
: 調用lua的load
函數來上屏lua表達式的結果。可用作簡易計算。
如執行 $l,2+3
後上屏5
; 執行$l,'\t'
後上屏製表符; 執行$l,math.log(5)
上屏 1.6094379124341
。
下圖是動圖
u
: 以十六進制上屏unicode字符。
(下圖是gif)
第一個參數: 16進制unicode字符碼。 如 $u,4e2d
-> 中
;
第二個參數: 可選、表示上屏的字符數、按unicode順序遞增。
如 $u,4000,10
-> 䀀䀁䀂䀃䀄䀅䀆䀇䀈䀉
(10個漢字、範圍為U+4000
到U+4009
)
說明書詳見ts_cmd.md
聯想詞
支持主動聯想(上屏後主動顯示聯想詞),
被動聯想(輸入旹、候選詞的詞序根據之前的輸入而調整);
支持動態聯想詞庫
說明書詳見ts_predict.md
自動造詞
日期輸入
_tsToLua/ # TypeScriptToLua根目錄
tsconfig.json # ts編譯器配置文件
doc/ # 文檔
src/TswG/ # ts源碼
mod/ # 各模塊的ts源碼
lualib_bundle.lua # tstl運行依賴。
TswG/ # 產出的.lua文件。每個.ts對應一個.lua。目錄結構與ts源碼相同。
librime-lua 版本 >= 200 (小狼毫版本 >= 0.15.0)
若您不瞭解在輸入方案中部署lua腳本的流程、建議您先閱讀librime-lua文檔前面部分。
警告: 若您不了解lua腳本的部署流程、爲防止與原本用戶文件夾中的內容衝突、建議您另設一個用戶文件夾、測試完畢後再遷移到原本用戶文件夾。按照以下步驟操作:
假設: 您使用小狼毫、您的用戶文件夾爲User_Data
-
退出小狼毫算法服務、並將用戶文件夾改名、如改名作
_User_Data
-
複製本倉庫到本地:
手動下載 或 用git clone
。
使用命令:
git clone https://github.com/Tsinswreng/rime-TswG.git
或手動下載zip包並解壓縮
-
將獲取到的文件夾改名作
User_Data
、置於原本的User_Data
位置處。 -
從源碼構建(或從release下載預先編譯好的lua文件夾壓縮包)。源碼構建方法見後文。構建成功後、/lua目錄下會有產出的lua腳本。
-
按需安裝、參考
_tsToLua/doc
下相應模塊的說明書。 -
調試無誤後、恢復至原本的用戶文件夾。
-
確保你已經安裝了node.js
-
確保你已經安裝了typescript, typescript-to-lua
如未安裝、可執行以下命令安裝:
npm install -D typescript typescript-to-lua
- 進入tstl項目根目錄
cd _tsToLua
- 將ts代碼編譯成lua
npx tstl -p .
(這一步報錯是正常的)
執行命令後、會在<項目根目錄>/lua
目錄下輸出編譯產物。
有問題發issue。
2024-05-06T21:39:31.266+08:00
該項目曾經由純lua語言編寫、現已改用typescirpt重構。原先的lua文件夾已移至/old目錄下、且不再維護。以下爲舊版的README.md。
實時觀察日誌輸出:
小狼毫:
在powershell中執行以下命令:
$path = "$env:LOCALAPPDATA\Temp\rime*INFO*"
Get-Content -Path $path -Wait | ForEach-Object {
if ($_ -match '^I') {
Write-Host $_ -ForegroundColor White
} elseif ($_ -match '^W') {
Write-Host $_ -ForegroundColor Yellow
} elseif ($_ -match '^E') {
Write-Host $_ -ForegroundColor Red
} else {
Write-Host $_
}
}
或者使用bash終端(如Git bash)
tail -f ~/AppData/Local/Temp/rime*INFO* | awk '
BEGIN { e="\033[31;1m" ; w="\033[33;1m" ; r="\033[0m" }
/^I/ { printf r }
/^W/ { printf w }
/^E/ { printf e }
{print $0}
'
rime-TswG-example.schema.yaml
是帶有腳本的樣例方案。使用明月拼音的碼表
建議另外用一個文件夾並設作用戶文件夾㕥測試(即按下文的步驟)、無問題後再參照樣例方案按需引入你自己的方案裏。否則可能容易踩坑
體驗rime-TswG-example:
要求: librime-lua 版本 >= 200
版本 >= 0.15.0
- 執行以下命令
git clone https://github.com/Tsinswreng/rime-TswG.git #或者手動下載
cd rime-TswG
npm i clipboardy #可選
-
退出算法服務
-
把當前的用戶文件夾改名、假設你的用戶文件夾爲
User_Data
則可改名作_User_Data
-
用 從此倉庫下載下來的代碼文件夾 代替 原本的用戶文件夾 (名稱, 路徑要一致)
-
重新開啓算法服務、並在輸入法設定選中
rime-TswG-example
-
重新部署
-
按
F4
或ctrl+` 打開輸入法選單、選中rime-TswG-example
-
完成。
測試無問題後再參照樣例方案按需引入你自己的方案裏。參照每個lua模塊的開頭的說明。注意require的文件必須要存在于lua/目錄下。否則腳本不能正常運行。
- Android 同文:
仿照windows 小狼毫的安裝流程、或先在電腦上跑通後再遷移到同文上
- 其他平臺:
沒試過 自己摸索罷()
歡迎提出問題或想法
lua腳本模塊:
- init.lua 用于初始化配置
- predict.lua 動態聯想詞
- userWordCombiner.lua 輸入歷史組詞記入詞庫
- cmd.lua 命令、當前支持開關轉換, 輸出unicode字符, 輸出lua表達式(可當計算器用), 讀取剪貼板處理內容後輸出(簡繁轉換,字串反轉,豎排等)
- jp.lua 繁轉日
- getSingleCharFromPhrase.lua 以詞定字
- hintTrad.lua 簡體模式下提示傳統漢字
- fillMenu.lua 單字組詞出候選
- deleteSelectionOn0.lua 0鍵刪詞
- filterOnAddtionalCode.lua 針對使用輔助碼旹的filter(僅用于dks方案)
- limitFilter.lua 置于filters最前面㕥限制filter中候選詞的數量、㕥防後續filter處理過多不需要的候選
- time_translator.lua 輸出當前時間
- clearOnKey.lua 按下shift又直接松開旹 清空菜單
工具等:
- config.lua 用戶配置
- shared.lua 跨模塊共享變量/函數
- type.lua librime-lua類型聲明
- ArrayDeque.lua 循環數組雙端隊列
- HistoryDeque.lua 繼承ArrayDeque用于錄限定個數的輸入歷史
- ut.lua 工具
- algo.lua 算法工具
- rimeUtil.lua 輸入法工具
方案:
- prd 僅用于部署後生成靜態聯想詞詞庫給lua腳本調用
- dks 魔改上古音三拼 (待分享)
- cangjie7-1 魔改三碼倉頡 (待分享)
聯想詞。支持動態聯想
開啓後、每次上屏後自動在菜單中顯示聯想候選詞。
當已經顯示聯想詞旹:
- 使用空格或數字鍵(1-9)可以直接使聯想詞上屏。
- 按0鍵刪除當前高亮候選。
- 按上下箭頭可使其他候選項變高亮 (即默認行爲)
除此之外、所有的按鍵事件都會使聯想詞菜單消失。
聯想詞菜單不會干擾後續正常打字。
使用HistoryDeque.lua、默認容量爲4
靜態聯想詞庫來自處理後的essay.txt
用戶動態聯想詞詞庫名稱默認爲prd
大致算法:
來自動態聯想詞庫候選詞權重更大;
若用戶輸入了春眠不覺
四個字(無論是一次性上屏輸入還是逐字分四次上屏輸入)則程序用以下字串去查字典:
春眠不覺
眠不覺
不覺
覺
越靠前的字串、若有查找結果則所得候選詞權重越高
(下圖是gif)
註釋可關
(下圖是gif)
同文
(gif)
已知bug:
- 小狼毫0.15.0 按數字鍵2欲擇第二個聯想候選項旹 菜單直接消失 (同文運行相同腳本無此bug)
使用HistoryDeque.lua。默認容量爲4。
根據用戶輸入歷史組詞並寫入動態用戶詞庫
如 依次上屏["輸","入","歷","史"]
四個字則會將
["輸入歷史", "入歷史", "歷史"]
記入當前方案所使用的userdb。下次可只需按srls
(假設用的方案是拼音)即可使輸入歷史
顯于候選
示例:
按照rime默認行爲、須一次性上屏氓之蚩蚩
四個字旹 輸入法纔會將氓之蚩蚩
錄入用戶詞典。若分開逐字上屏則不會把氓之蚩蚩
一詞錄入用戶詞典。
(gif)
使用此插件後
第一次輸入mtee
旹 候選項中無氓之蚩蚩
逐字上屏氓
,之
,蚩
,蚩
後再輸入mtee
旹可見氓之蚩蚩
已現于候選首位、即氓之蚩蚩
已被錄入用戶詞典。
但是、在此過程中並非只有氓之蚩蚩
一詞被錄入了用戶詞典。以下標黃的字串也會被錄入用戶詞典
有些詞並不是我們想要的。因此 此插件可能污染用戶詞庫。請慎用
默認配置:
- 不錄單字
- 上屏歷史雙端隊列容量爲4。
繁轉日
開啓後:
乘
->乗
歸
->帰
命令
默認配置:引導符$
、參數分隔符,
、空格提交命令
- 簡體模式:
開: $s
關: $S
(下圖是gif)
全角:
開: $fu
關: $Fu
日語新字體(需要部署jp.lua):
開: $jp
關: $Jp
聯想詞(需要部署predict.lua):
開: $p
關: $P
- 以十六進制上屏unicode字符
$u,4e2d
-> 中
(下圖是gif)
- 上屏lua表達式(可當簡易計算器用)
$l,2-3
-> -1
$l,math.log(5)
-> 1.6094379124341
(下圖是gif)
依賴clipboard.lua
需要node.js
在用戶文件夾根目錄運行
npm i clipboardy
(只在windows10上測試過、直接用powershell.exe -command "Get-Clipboard"
總是卡死、所以改用npm的clipboardy庫)
獲取剪貼板的原理: lua通過os.execute
使操作系統將剪貼板內容寫入預定的文件、然後lua讀取該文件
使用旹 閃過cmd是正常現象
警告:字符過多旹輸入法和當前聚焦的窗口會卡死、需要退出算法服務
- 字體轉換並粘貼
$v,
後接opencc
目錄中的json文件名
t
:繁體; s
: 簡體; jp
: 日語新字體; 2
: to
如$v,t2s
對剪貼板內容繁轉簡後上屏
(下圖是gif)
- 剪貼板字串逆序上屏
$r
(下圖是gif)
- 豎排右換行分段輸出
$f,vr,4,8
每列最多4個字符、每段最多8列(若不指定則無限制)
$f,vrf,4,8
若第二個參數用vrf
而非vr
則會將其中含有的ascii字符轉全角
$fv,4,8
等同於 $f,vrf,4,8
不分段示例:
$fv,7
:
分段示例:
原文:
天生萬物以養民,民無一善可報天。不知蝗蠹遍天下,苦盡蒼生盡王臣。人之生矣有貴賤,貴人長為天恩眷。人生富貴總由天,草民之窮由天譴。忽有狂徒夜磨刀,帝星飄搖熒惑高。翻天覆地從今始,殺人何須惜手勞。不忠之人曰可殺!不孝之人曰可殺!不仁之人曰可殺!不義之人曰可殺!不禮不智不信人,大西王曰殺殺殺!我生不為逐鹿來,都門懶築黃金台,狀元百官都如狗,總是刀下觳觫材。傳令麾下四王子,破城不須封刀匕。山頭代天樹此碑,逆天之人立死跪亦死!ab12!@
$fv,8,9
針對librime-lua提供的接口的類型聲明。在編輯器中開啓相關插件(如vscode的lua插件)後可獲得更好的代碼提示和類型檢查。
基于循環數組實現的雙端隊列
繼承ArrayDeque.lua、用于記錄有限個上屏記錄。隊列滿旹 再在隊尾添加元素 則會先使隊頭出隊。
魔改三碼倉頡、今僅用于與主方案混輸及作輔助碼
首碼更改:
z: 辶
x: 訁
,: 彳
.: 絲
非首碼之構件
,:也
.:非
不足三碼者用;
補
日語假名。 拼音方案非全同羅馬音、而似IPA音位記音
j : /j/
q : っ
l : ー
x : 小寫假名
わたしはにんけんじゃない wa ta si va ni nn ke nn zja na i
魔改上古音三拼
鍵位圖:
支持cangjie7-1混輸、可選;
作後綴
支持cangjie7-1作輔助碼
輔助碼用例:
kya
: /*krˁa/ 候選: 家傢鎵...
若此時欲鎵
、則添Co
、即kyaCo
、緣鎵
之倉頡碼首碼爲c
、末碼爲o
首碼須大寫(即按住shift後對應的字符)、倉頡末碼可省
:
: 地球拼音反查 陰平不標、;.,分別對應陽平、上聲、去聲。
;;
: 倉頡反查
'
: 輸入平假名
"
: 輸入片假名