rime / librime

Rime Input Method Engine, the core library
https://rime.im
BSD 3-Clause "New" or "Revised" License
3.37k stars 551 forks source link

支持非ascii字符编码模式 #644

Open liwenyi777 opened 1 year ago

liwenyi777 commented 1 year ago

我在trime项目贴了一个帖子(unicode模式:接受任何字符作为编码手段):https://github.com/osfans/trime/issues/850 大概是设计一个unicode转换编码模式,类似于中文模式,任何unicode文字编码都能接受作为编码键入的一部分,由于我提出的基于是虚拟键盘(字符映射)的方案,而不是基于键盘映射方案,就好比是实体键盘上的A映射成"非ascii字符",而不是新增一个有键盘代码的"非ascii字符"的实体键,可能这个unicode模式对桌面操作系统用处不大(没有那么多实体按键被映射成非ascii字符)。 这个unicode转换编码模式会有什么作用呢:键入万国音标的输入编码输出中文、日文、谚文、西夏文等等,或者是拥有300个汉字的实体键盘,以这300个汉字作为形码组合编码输出中文字。

LEOYoon-Tsaw commented 1 year ago

現在就支持所有 Unicode 字符作編碼。這是我的一個方案的 dict:

image
liwenyi777 commented 1 year ago

現在就支持所有 Unicode 字符作編碼。這是我的一個方案的 dict: image

旧的librime版本,比如说bă,在中文模式下,单独键入ă会直接上屏这个字符不会上编码区,先输入b再输入ă上不了编码区(只有b没有ă上去)。同文的话,如果是大小写字母,看这个帖子:https://github.com/osfans/trime/issues/824 输入的字符先交给librime处理一遍,同文再处理一遍,a(按shift a)A是可以作为编码的。 我设想的unicode编码转换模式呢,输入bă,可以当做bă是文本字符来处理,不要当做keycode来处理。

mokapsing commented 1 year ago

我用中文编码仓颉方案似乎是不可以的

image

liwenyi777 commented 1 year ago

我用中文编码仓颉方案似乎是不可以的

image

中文模式下,汉字的字符编码输入好像会被librime处理一遍,所以不会上编码区。

mokapsing commented 1 year ago

我用中文编码仓颉方案似乎是不可以的 image

中文模式下,汉字的字符编码输入好像会被librime处理一遍,所以不会上编码区。

我用lua_translator将输入的英文字母转成了中文再去查字,但是还是不行,应该是不支持中文编码

liwenyi777 commented 1 year ago

我用中文编码仓颉方案似乎是不可以的 image

中文模式下,汉字的字符编码输入好像会被librime处理一遍,所以不会上编码区。

我用lua_translator将输入的英文字母转成了中文再去查字,但是还是不行,应该是不支持中文编码

IMG_20230505_162008 中文模式下,能上界面编码区的字符基本是部分ascii字符,trime的话,键入汉字、拉丁字母的字符会先通过librime处理一遍,trime再处理一遍,换句话说,db已经存储了汉字编码(unicode)的字典,但你输入这些汉字编码的时候被librime算法处理掉了(一般是非ascii字符和大写字母A-Z(按shift+a-z键))会直接上屏而不会上界面编码区)导致不能去db字典搜索符合的编码,trime中文模式是有个漏网之鱼就是先输入非大写字母的字符(能上编码区的字符)随后再跟大写字母是可以上编码区的(例如aA可以上编码区,Aa不可以,先输入A会直接上屏导致只能输入a)。

mokapsing commented 1 year ago

我己经完成了用中文编码仓颉,不过要借助lua,不得不说librime+lua真的太好用了

image

image

groverlynn commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

liwenyi777 commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

IPA只是提出来的一种是输入方案,目前普遍输入ipa也是需要用ASCII字符的编码转写一遍,而虚拟键盘可以直接编排IPA音标字符不需要转写。象形文字确实是用形码更好,不用考虑字的读音,IPA相当于音码。300个实体键只是句玩笑话,引用维基百科-中文输入法:[台湾的交通大学1973年研发“字根键盘”,用496个键输入,每键代表一个字根,属于中键盘。],之后中国大陆和台湾100个键或以上的汉字形码(字根)输入法产品也出现过,台湾的三角输入法当时就要用到100个按键(现在放到数字小键盘那里了,只用到10个按键),支持unicode字符就能复刻这些形码输入法(调侃意味)了。不用IPA做例子,用日本万叶假名(汉字)编码平/片假名,象形文字编码表音文字。我的意思更多是:开放unicode字符,让用户有更多的DIY功能。说一下郑码,郑码是双编码字根,b bd c cd f fd这些,*d的字根编码其实是妥协的产物,郑码可以设计成b B c C f F,或者b 另外的拉丁字符之类的。而librime算法会处理掉大写字母和非ASCII字符,导致不能上编码区。设计输入法方案可以从unicode选取更多想要的字符,而不局限于ASCII字符,设计者要用上万个字符组合他的输入法方案我认为是个失败的方案(学习成本太高)。

groverlynn commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

IPA只是提出来的一种是输入方案,目前普遍输入ipa也是需要用ASCII字符的编码转写一遍,而虚拟键盘可以直接编排IPA音标字符不需要转写。象形文字确实是用形码更好,不用考虑字的读音,IPA相当于音码。300个实体键只是句玩笑话,引用维基百科-中文输入法:[台湾的交通大学1973年研发“字根键盘”,用496个键输入,每键代表一个字根,属于中键盘。],之后中国大陆和台湾100个键或以上的汉字形码(字根)输入法产品也出现过,台湾的三角输入法当时就要用到100个按键(现在放到数字小键盘那里了,只用到10个按键),支持unicode字符就能复刻这些形码输入法(调侃意味)了。不用IPA做例子,用日本万叶假名(汉字)编码平/片假名,象形文字编码表音文字。我的意思更多是:开放unicode字符,让用户有更多的DIY功能。说一下郑码,郑码是双编码字根,b bd c cd f fd这些,*d的字根编码其实是妥协的产物,郑码可以设计成b B c C f F,或者b 另外的拉丁字符之类的。而librime算法会处理掉大写字母和非ASCII字符,导致不能上编码区。设计输入法方案可以从unicode选取更多想要的字符,而不局限于ASCII字符,设计者要用上万个字符组合他的输入法方案我认为是个失败的方案(学习成本太高)。

那你要怎麼輸入這些字符?像是注音、倉頡、五筆都是映射到美式ANSI鍵盤上的。至多從ascii擴展到latin-1用來支持歐陸ISO鍵盤。

liwenyi777 commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

IPA只是提出来的一种是输入方案,目前普遍输入ipa也是需要用ASCII字符的编码转写一遍,而虚拟键盘可以直接编排IPA音标字符不需要转写。象形文字确实是用形码更好,不用考虑字的读音,IPA相当于音码。300个实体键只是句玩笑话,引用维基百科-中文输入法:[台湾的交通大学1973年研发“字根键盘”,用496个键输入,每键代表一个字根,属于中键盘。],之后中国大陆和台湾100个键或以上的汉字形码(字根)输入法产品也出现过,台湾的三角输入法当时就要用到100个按键(现在放到数字小键盘那里了,只用到10个按键),支持unicode字符就能复刻这些形码输入法(调侃意味)了。不用IPA做例子,用日本万叶假名(汉字)编码平/片假名,象形文字编码表音文字。我的意思更多是:开放unicode字符,让用户有更多的DIY功能。说一下郑码,郑码是双编码字根,b bd c cd f fd这些,*d的字根编码其实是妥协的产物,郑码可以设计成b B c C f F,或者b 另外的拉丁字符之类的。而librime算法会处理掉大写字母和非ASCII字符,导致不能上编码区。设计输入法方案可以从unicode选取更多想要的字符,而不局限于ASCII字符,设计者要用上万个字符组合他的输入法方案我认为是个失败的方案(学习成本太高)。

那你要怎麼輸入這些字符?像是注音、倉頡、五筆都是映射到美式ANSI鍵盤上的。至多從ascii擴展到latin-1用來支持歐陸ISO鍵盤。

安卓同文可以编排一个虚拟键盘,可以输入编排好的"字符"。同样的想法套用到实体键盘上,既然市面上实体键盘不能满足需求,便DIY一个出来去满足需求,而不是用映射字符到键位去解决。

groverlynn commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

IPA只是提出来的一种是输入方案,目前普遍输入ipa也是需要用ASCII字符的编码转写一遍,而虚拟键盘可以直接编排IPA音标字符不需要转写。象形文字确实是用形码更好,不用考虑字的读音,IPA相当于音码。300个实体键只是句玩笑话,引用维基百科-中文输入法:[台湾的交通大学1973年研发“字根键盘”,用496个键输入,每键代表一个字根,属于中键盘。],之后中国大陆和台湾100个键或以上的汉字形码(字根)输入法产品也出现过,台湾的三角输入法当时就要用到100个按键(现在放到数字小键盘那里了,只用到10个按键),支持unicode字符就能复刻这些形码输入法(调侃意味)了。不用IPA做例子,用日本万叶假名(汉字)编码平/片假名,象形文字编码表音文字。我的意思更多是:开放unicode字符,让用户有更多的DIY功能。说一下郑码,郑码是双编码字根,b bd c cd f fd这些,*d的字根编码其实是妥协的产物,郑码可以设计成b B c C f F,或者b 另外的拉丁字符之类的。而librime算法会处理掉大写字母和非ASCII字符,导致不能上编码区。设计输入法方案可以从unicode选取更多想要的字符,而不局限于ASCII字符,设计者要用上万个字符组合他的输入法方案我认为是个失败的方案(学习成本太高)。

那你要怎麼輸入這些字符?像是注音、倉頡、五筆都是映射到美式ANSI鍵盤上的。至多從ascii擴展到latin-1用來支持歐陸ISO鍵盤。

安卓同文可以编排一个虚拟键盘,可以输入编排好的"字符"。同样的想法套用到实体键盘上,既然市面上实体键盘不能满足需求,便DIY一个出来去满足需求,而不是用映射字符到键位去解决。

DIY出來實體鍵盤嗎?如果不是,那還不是要先映射到ASCII或LATIN-1?

liwenyi777 commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

IPA只是提出来的一种是输入方案,目前普遍输入ipa也是需要用ASCII字符的编码转写一遍,而虚拟键盘可以直接编排IPA音标字符不需要转写。象形文字确实是用形码更好,不用考虑字的读音,IPA相当于音码。300个实体键只是句玩笑话,引用维基百科-中文输入法:[台湾的交通大学1973年研发“字根键盘”,用496个键输入,每键代表一个字根,属于中键盘。],之后中国大陆和台湾100个键或以上的汉字形码(字根)输入法产品也出现过,台湾的三角输入法当时就要用到100个按键(现在放到数字小键盘那里了,只用到10个按键),支持unicode字符就能复刻这些形码输入法(调侃意味)了。不用IPA做例子,用日本万叶假名(汉字)编码平/片假名,象形文字编码表音文字。我的意思更多是:开放unicode字符,让用户有更多的DIY功能。说一下郑码,郑码是双编码字根,b bd c cd f fd这些,*d的字根编码其实是妥协的产物,郑码可以设计成b B c C f F,或者b 另外的拉丁字符之类的。而librime算法会处理掉大写字母和非ASCII字符,导致不能上编码区。设计输入法方案可以从unicode选取更多想要的字符,而不局限于ASCII字符,设计者要用上万个字符组合他的输入法方案我认为是个失败的方案(学习成本太高)。

那你要怎麼輸入這些字符?像是注音、倉頡、五筆都是映射到美式ANSI鍵盤上的。至多從ascii擴展到latin-1用來支持歐陸ISO鍵盤。

安卓同文可以编排一个虚拟键盘,可以输入编排好的"字符"。同样的想法套用到实体键盘上,既然市面上实体键盘不能满足需求,便DIY一个出来去满足需求,而不是用映射字符到键位去解决。

DIY出來實體鍵盤嗎?如果不是,那還不是要先映射到ASCII或LATIN-1?

如果是实体键盘,确实先要映射ASCII或LATIN-1的键位。我提出一个解决方案:电脑上可以设计一个屏幕键盘(屏幕虚拟键盘)让用户去编排unicode字符编码(但鼠标单点输入效率低,可以换个多点触控的屏幕,双食指点击屏幕,或者屏幕套个实体键盘套多指操作,点击键盘会压到触控屏幕相应位置上的虚拟键盘字符)。DIY实体键盘,创建新键位时,输入的字符要和键位码绑定,而虚拟键盘不和键位码绑定,DIY新建的键位码也不符合通用标准。unicode的空余字符编码,相关组织可以提出申请某个文字去找到个位置安放下来,随着unicode迭代就可以输出该文字。而DIY实体键盘的键位码(ASCII和LATIN-1的之外字符),似乎没有相关标准去让人申请。

groverlynn commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

IPA只是提出来的一种是输入方案,目前普遍输入ipa也是需要用ASCII字符的编码转写一遍,而虚拟键盘可以直接编排IPA音标字符不需要转写。象形文字确实是用形码更好,不用考虑字的读音,IPA相当于音码。300个实体键只是句玩笑话,引用维基百科-中文输入法:[台湾的交通大学1973年研发“字根键盘”,用496个键输入,每键代表一个字根,属于中键盘。],之后中国大陆和台湾100个键或以上的汉字形码(字根)输入法产品也出现过,台湾的三角输入法当时就要用到100个按键(现在放到数字小键盘那里了,只用到10个按键),支持unicode字符就能复刻这些形码输入法(调侃意味)了。不用IPA做例子,用日本万叶假名(汉字)编码平/片假名,象形文字编码表音文字。我的意思更多是:开放unicode字符,让用户有更多的DIY功能。说一下郑码,郑码是双编码字根,b bd c cd f fd这些,*d的字根编码其实是妥协的产物,郑码可以设计成b B c C f F,或者b 另外的拉丁字符之类的。而librime算法会处理掉大写字母和非ASCII字符,导致不能上编码区。设计输入法方案可以从unicode选取更多想要的字符,而不局限于ASCII字符,设计者要用上万个字符组合他的输入法方案我认为是个失败的方案(学习成本太高)。

那你要怎麼輸入這些字符?像是注音、倉頡、五筆都是映射到美式ANSI鍵盤上的。至多從ascii擴展到latin-1用來支持歐陸ISO鍵盤。

安卓同文可以编排一个虚拟键盘,可以输入编排好的"字符"。同样的想法套用到实体键盘上,既然市面上实体键盘不能满足需求,便DIY一个出来去满足需求,而不是用映射字符到键位去解决。

DIY出來實體鍵盤嗎?如果不是,那還不是要先映射到ASCII或LATIN-1?

如果是实体键盘,确实先要映射ASCII或LATIN-1的键位。我提出一个解决方案:电脑上可以设计一个屏幕键盘(屏幕虚拟键盘)让用户去编排unicode字符编码(但鼠标单点输入效率低,可以换个多点触控的屏幕,双食指点击屏幕,或者屏幕套个实体键盘套多指操作,点击键盘会压到触控屏幕相应位置上的虚拟键盘字符)。DIY实体键盘,创建新键位时,输入的字符要和键位码绑定,而虚拟键盘不和键位码绑定,DIY新建的键位码也不符合通用标准。unicode的空余字符编码,相关组织可以提出申请某个文字去找到个位置安放下来,随着unicode迭代就可以输出该文字。而DIY实体键盘的键位码(ASCII和LATIN-1的之外字符),似乎没有相关标准去让人申请。

你以為實體鍵盤是怎麼輸入的?實體鍵盤也不綁定到鍵帽上打印的那個鍵位碼的啊(根本不存在這種鍵位碼)。實體鍵盤的內碼也是1,2,3,4,5…之類的,然後由系統套用的某個鍵盤佈局映射到相應鍵位。鍵盤佈局可以更改的,

所以你追求的無非是自定義鍵盤佈局罷了。

liwenyi777 commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

IPA只是提出来的一种是输入方案,目前普遍输入ipa也是需要用ASCII字符的编码转写一遍,而虚拟键盘可以直接编排IPA音标字符不需要转写。象形文字确实是用形码更好,不用考虑字的读音,IPA相当于音码。300个实体键只是句玩笑话,引用维基百科-中文输入法:[台湾的交通大学1973年研发“字根键盘”,用496个键输入,每键代表一个字根,属于中键盘。],之后中国大陆和台湾100个键或以上的汉字形码(字根)输入法产品也出现过,台湾的三角输入法当时就要用到100个按键(现在放到数字小键盘那里了,只用到10个按键),支持unicode字符就能复刻这些形码输入法(调侃意味)了。不用IPA做例子,用日本万叶假名(汉字)编码平/片假名,象形文字编码表音文字。我的意思更多是:开放unicode字符,让用户有更多的DIY功能。说一下郑码,郑码是双编码字根,b bd c cd f fd这些,*d的字根编码其实是妥协的产物,郑码可以设计成b B c C f F,或者b 另外的拉丁字符之类的。而librime算法会处理掉大写字母和非ASCII字符,导致不能上编码区。设计输入法方案可以从unicode选取更多想要的字符,而不局限于ASCII字符,设计者要用上万个字符组合他的输入法方案我认为是个失败的方案(学习成本太高)。

那你要怎麼輸入這些字符?像是注音、倉頡、五筆都是映射到美式ANSI鍵盤上的。至多從ascii擴展到latin-1用來支持歐陸ISO鍵盤。

安卓同文可以编排一个虚拟键盘,可以输入编排好的"字符"。同样的想法套用到实体键盘上,既然市面上实体键盘不能满足需求,便DIY一个出来去满足需求,而不是用映射字符到键位去解决。

DIY出來實體鍵盤嗎?如果不是,那還不是要先映射到ASCII或LATIN-1?

如果是实体键盘,确实先要映射ASCII或LATIN-1的键位。我提出一个解决方案:电脑上可以设计一个屏幕键盘(屏幕虚拟键盘)让用户去编排unicode字符编码(但鼠标单点输入效率低,可以换个多点触控的屏幕,双食指点击屏幕,或者屏幕套个实体键盘套多指操作,点击键盘会压到触控屏幕相应位置上的虚拟键盘字符)。DIY实体键盘,创建新键位时,输入的字符要和键位码绑定,而虚拟键盘不和键位码绑定,DIY新建的键位码也不符合通用标准。unicode的空余字符编码,相关组织可以提出申请某个文字去找到个位置安放下来,随着unicode迭代就可以输出该文字。而DIY实体键盘的键位码(ASCII和LATIN-1的之外字符),似乎没有相关标准去让人申请。

你以為實體鍵盤是怎麼輸入的?實體鍵盤也不綁定到鍵帽上打印的那個鍵位碼的啊(根本不存在這種鍵位碼)。實體鍵盤的內碼也是1,2,3,4,5…之類的,然後由系統套用的某個鍵盤佈局映射到相應鍵位。鍵盤佈局可以更改的,

所以你追求的無非是自定義鍵盤佈局罷了。

实体键盘分为keycode和charcode,keycode是内码(键盘上的键,而不是贴在"键"上面的字符),charcode是unicode码(非键盘上的键,而是贴在"键"上的字符),keycode有它的一套标准,不分字母大小写,日文键盘上的键(keycode)是转写(翻译,可以理解为映射),而不是新增一套内码。按你说,如果我追求的的是自定义的键盘,那好,我新增一套A-Z的keycode内码,而不是用charcode映射到既有的keycode内码,librime接收A-Z的keycode(charcode),它还是会处理掉它不会让它上候选编码框。换言之,我想让A-Z上候选编码框,如果它能上,那么unicode字符也可以上,然后发现实体键盘不能满足unicode的按键需求。现在你说我追求的是键盘自定义布局,安卓同文就能满足我的需求,该issue我提出的是librime算法的改进,电脑rime自定义键盘是后面讨论当中附带提出的。

groverlynn commented 1 year ago

IPA是用來準確一致地記錄語音的,即便是採用拼音文字的語文都普遍有正字法完全無法簡單對應IPA的問題,何況還要考慮方言、口音、歷史語音等。用純語音的IPA來編碼表意的象形文字就更荒唐了。 至於300個漢字的實體鍵盤……嗯,如果是康熙部首的話,那麼你過半時間都只會用固定的十數個鍵,還有十數個鍵你一年到頭估計就碰兩三下。 十指卅鍵是相對合理的設計。ASCII近百個可打印字符,容量上綽綽有餘。捨棄ASCII已經搭好的底層積木,直接把上萬個散裝積木扔到一起……呃……

IPA只是提出来的一种是输入方案,目前普遍输入ipa也是需要用ASCII字符的编码转写一遍,而虚拟键盘可以直接编排IPA音标字符不需要转写。象形文字确实是用形码更好,不用考虑字的读音,IPA相当于音码。300个实体键只是句玩笑话,引用维基百科-中文输入法:[台湾的交通大学1973年研发“字根键盘”,用496个键输入,每键代表一个字根,属于中键盘。],之后中国大陆和台湾100个键或以上的汉字形码(字根)输入法产品也出现过,台湾的三角输入法当时就要用到100个按键(现在放到数字小键盘那里了,只用到10个按键),支持unicode字符就能复刻这些形码输入法(调侃意味)了。不用IPA做例子,用日本万叶假名(汉字)编码平/片假名,象形文字编码表音文字。我的意思更多是:开放unicode字符,让用户有更多的DIY功能。说一下郑码,郑码是双编码字根,b bd c cd f fd这些,*d的字根编码其实是妥协的产物,郑码可以设计成b B c C f F,或者b 另外的拉丁字符之类的。而librime算法会处理掉大写字母和非ASCII字符,导致不能上编码区。设计输入法方案可以从unicode选取更多想要的字符,而不局限于ASCII字符,设计者要用上万个字符组合他的输入法方案我认为是个失败的方案(学习成本太高)。

那你要怎麼輸入這些字符?像是注音、倉頡、五筆都是映射到美式ANSI鍵盤上的。至多從ascii擴展到latin-1用來支持歐陸ISO鍵盤。

安卓同文可以编排一个虚拟键盘,可以输入编排好的"字符"。同样的想法套用到实体键盘上,既然市面上实体键盘不能满足需求,便DIY一个出来去满足需求,而不是用映射字符到键位去解决。

DIY出來實體鍵盤嗎?如果不是,那還不是要先映射到ASCII或LATIN-1?

如果是实体键盘,确实先要映射ASCII或LATIN-1的键位。我提出一个解决方案:电脑上可以设计一个屏幕键盘(屏幕虚拟键盘)让用户去编排unicode字符编码(但鼠标单点输入效率低,可以换个多点触控的屏幕,双食指点击屏幕,或者屏幕套个实体键盘套多指操作,点击键盘会压到触控屏幕相应位置上的虚拟键盘字符)。DIY实体键盘,创建新键位时,输入的字符要和键位码绑定,而虚拟键盘不和键位码绑定,DIY新建的键位码也不符合通用标准。unicode的空余字符编码,相关组织可以提出申请某个文字去找到个位置安放下来,随着unicode迭代就可以输出该文字。而DIY实体键盘的键位码(ASCII和LATIN-1的之外字符),似乎没有相关标准去让人申请。

你以為實體鍵盤是怎麼輸入的?實體鍵盤也不綁定到鍵帽上打印的那個鍵位碼的啊(根本不存在這種鍵位碼)。實體鍵盤的內碼也是1,2,3,4,5…之類的,然後由系統套用的某個鍵盤佈局映射到相應鍵位。鍵盤佈局可以更改的, 所以你追求的無非是自定義鍵盤佈局罷了。

实体键盘分为keycode和charcode,keycode是内码(键盘上的键,而不是贴在"键"上面的字符),charcode是unicode码(非键盘上的键,而是贴在"键"上的字符),keycode有它的一套标准,不分字母大小写,日文键盘上的键(keycode)是转写(翻译,可以理解为映射),而不是新增一套内码。按你说,如果我追求的的是自定义的键盘,那好,我新增一套A-Z的keycode内码,而不是用charcode映射到既有的keycode内码,librime接收A-Z的keycode(charcode),它还是会处理掉它不会让它上候选编码框。换言之,我想让A-Z上候选编码框,如果它能上,那么unicode字符也可以上,然后发现实体键盘不能满足unicode的按键需求。现在你说我追求的是键盘自定义布局,安卓同文就能满足我的需求,该issue我提出的是librime算法的改进,电脑rime自定义键盘是后面讨论当中附带提出的。

自定義鍵盤佈局當然是不改變keycode(目前全球在用的就只有ANSI、ISO、JIS三種,日文鍵盤JIS還就是和歐ISO美ANSI不一樣),而是改變charcode。你能先自己拎拎清楚嗎?前後矛盾都不知道你想表達什麼…… ASCII範圍內能不能上編碼框speller/alphabet可以設定。ASCII以外實體鍵可以用key_binder映射,自定義鍵盤佈局可以通過speller/algebra或者translator/preedit_format映射。注音、倉頡等等都是這樣實現的

liwenyi777 commented 1 year ago

自定义键盘方面:ANSI、ISO、JIS键盘是有一套标准的,假设我有一个需求是设计一个600个字符需要去编排实体按键,我的意思是600字符当中有字符超出“ANSI、ISO、JIS键盘标准”之外的字符,需要新增keycode,但新增的keycode不符合主流"标准",也没有组织去推行这样的标准。 编码区问题:方案有个是“金 金”,用AHK直接映射中文字"金"到c键,按下c,"金"上不了编码区。我估计用rime配和脚本语言输入先将"金"转成c传入librime让其识别(没实操),但如果方案里有600个字符作为编码字符,显然会不够用。ANSI之外的字符传入librime会被处理掉,所以我提出一个unicode模式的需求。

groverlynn commented 1 year ago

600字符当中有字符超出“ANSI、ISO、JIS键盘标准”之外的字符,需要新增keycode

根本不存在“ANSI、ISO、JIS键盘标准”之內的字符。三大標準差別在ANSI主鍵盤比ISO主鍵盤少一個符號鍵,ISO主鍵盤比JIS主鍵盤少兩個功能鍵,三者左首和右首的個別案件佈局稍有不同。 同一個ISO鍵盤,依賴不同佈局能(系統級的)輸入拉丁字母、西里爾字母、希臘字母、希伯來字母、阿拉伯字母及他們的變體。 你要新增的是charCode,不是keyCode。charCode隨便你改,不僅可以軟件層面自定義,現在已經有硬件層面可以自定義charCode的鍵盤了。rime也不處理keyCode,畢竟三大平臺的keyCode設定都不一樣。rime過濾掉的是ASCII可打印字符以外的unicode字符。

方案有个是“金 金”,用AHK直接映射中文字"金"到c键,按下c,"金"上不了编码区

把映射的環節放到rime方案裏面就可以了啊,這有很難理解嗎?

但如果方案里有600个字符作为编码字符,显然会不够用

600個字符你的鍵盤也不夠用啊!你還要先設計一個輸入法用鍵盤輸入600個字符,然後再在上面套一個輸入法……

Newdea commented 5 months ago

我己经完成了用中文编码仓颉,不过要借助lua,不得不说librime+lua真的太好用了

image

image

@mokapsing 你好,请问你用lua是怎么实现的呢,能否分享下呢?

目前想用五笔的拆分表做码表,然后用Speller/algebra 运算将字根处理转换为[a-y]按键。

mokapsing commented 5 months ago

我己经完成了用中文编码仓颉,不过要借助lua,不得不说librime+lua真的太好用了 image image

@mokapsing 你好,请问你用lua是怎么实现的呢,能否分享下呢?

目前想用五笔的拆分表做码表,然后用Speller/algebra 运算将字根处理转换为[a-y]按键。

用lua_translator,将a-z转成五笔拆分去木查字,用Speller/algebra做不到

Newdea commented 5 months ago

用lua_translator,将a-z转成五笔拆分去木查字,用Speller/algebra做不到

这样是个思路,但一个按键是对应多个字根的,而且是在输入过程中处理,对性能会有影响的吧