Comments (15)
edit模式是我自造的,就是指候选词popover弹出来的状态。
ebb8a49 支持了左右Alt键,因为是edit模式,所以是在你找的代码块后边。
from my_rime.
非edit模式下,Tab有明确的转移焦点的默认行为,所以不支持。你可以改代码强行支持。
在onKeydown
打一个断点,然后按Tab键,单步执行,就会发现是
my_rime/src/components/MyPanel.vue
Line 228 in ebb8a49
document.activeElement !== textarea || (!isPrintableKey && key !== 'Tab')
,就可以把Tab也交给librime。类似的操作也可以在
onKeyup
搞一遍,结果是把my_rime/src/components/MyPanel.vue
Line 286 in ebb8a49
(editing.value && isPrintable(key)) || key === 'Tab'
from my_rime.
以及感谢对lua的支持!现在我的方案终于能用了,基本所有功能都是正常的,就是上面测试的几个问题。超过我的预想。没想到竟还有环境变量hh
from my_rime.
哦还有,我的emoji引导不知道为什么不编码提示了。就emoji引导不行,其他的都可以。
from my_rime.
4最简单,你按文档里加disabled: true
就行了。
你的schemas.json贴一下我好测。
from my_rime.
我这个方案可能有些复杂。不知其他过多不相关的东西会不会影响到。
[
{
"id": "luna_pinyin",
"name": "朙月拼音",
"emoji": true,
"target": "luna-pinyin",
"dependencies": ["stroke"],
"license": "LGPL-3.0-only"
},
{
"id": "stroke",
"name": "五笔画",
"target": "stroke",
"dependencies": ["luna_pinyin"],
"variants": [],
"license": "LGPL-3.0-only"
},
{
"id": "tiger",
"name": "虎码",
"target": "bczhc/rime-demo",
"dependencies": [
"tiger_core2022",
"PY_c",
"emoji",
"html_chars",
"latin_international",
"ipa_yunlong",
"short_punct",
"named_ipa_diacritics"
]
},
{
"id": "tiger_guihu",
"name": "九重鬼虎",
"target": "bczhc/rime-demo",
"dependencies": [
"tiger_core2022",
"PY_c",
"emoji",
"html_chars",
"latin_international",
"ipa_yunlong",
"short_punct",
"named_ipa_diacritics"
]
},
{
"id": "zrm_pinyin",
"name": "自然码+辅助码",
"target": "bczhc/rime-demo",
"dependencies": ["chaizi"]
},
{
"id": "kongmingma",
"name": "空明码",
"target": "bczhc/rime-demo",
"dependencies": []
},
{
"id": "tiger_core2022",
"name": "tiger_core2022",
"target": "bczhc/rime-demo",
"dependencies": []
},
{
"id": "PY_c",
"name": "PY_c",
"target": "bczhc/rime-demo",
"dependencies": ["stroke"]
},
{
"id": "emoji",
"name": "emoji",
"target": "bczhc/rime-demo",
"dependencies": []
},
{
"id": "html_chars",
"name": "html_chars",
"target": "bczhc/rime-demo",
"dependencies": []
},
{
"id": "latin_international",
"name": "latin_international",
"target": "bczhc/rime-demo",
"dependencies": []
},
{
"id": "ipa_yunlong",
"name": "ipa_yunlong",
"target": "bczhc/rime-demo",
"dependencies": ["named_ipa_diacritics"]
},
{
"id": "short_punct",
"name": "short_punct",
"target": "bczhc/rime-demo",
"dependencies": []
},
{
"id": "named_ipa_diacritics",
"name": "named_ipa_diacritics",
"target": "bczhc/rime-demo",
"dependencies": []
},
{
"id": "chaizi",
"name": "chaizi",
"target": "bczhc/rime-demo",
"dependencies": []
}
]
from my_rime.
左右Alt是在这个地方return掉了,但不是按这里说的,在edit模式下会发送所有keydown。我没办法让它simulate左右Alt。所谓的edit模式是什么?
my_rime/src/components/MyPanel.vue
Lines 222 to 232 in 6e8da57
from my_rime.
b754aa5 修复了emoji的问题。在我集成emoji时tips: none
还不是默认(这个commit改的),导致每个emoji后面都有文字rime/rime-emoji#24 (comment) ,于是我把emoji后面的comment全屏蔽了。现在默认显示所有comment,提供了hideComment: "emoji"
专门屏蔽emoji的comment。
from my_rime.
好吧,既然
keydown的handler是异步的(因为我让librime跑在worker线程),在第一个await之前必须决定是否prevendDefault,所以只要让librime处理就不可能走默认行为了。
的话,那就只能没法处理非composing模式下的Tab了。
就是在composing模式下,Release+Tab好像没处理。处理下这个就好了。
from my_rime.
就是在composing模式下,Release+Tab好像没处理。处理下这个就好了。
可以,5c14af4 处理了。当时过滤是因为onKeyup
只是为了宫保拼音加的,没考虑定制需求。
from my_rime.
1的话我用KeySequence::Parse
空格字符和{space}
,效果是一样的。所以问题应该不是发送{space}
和
之前的区别。
debug on之后,比如那个虎码的cpo
是空码,我在下面发送key的地方输入cpo
回车,再输单一一个空格,再回车,这时上方文本框会多出一个空格,非预期行为;但我如果一次性输入cpo_
(_是空格),回车,上方不会上那多的一个空格。
不表达那么多,简明的测试例子就是:
a_cpo_b_
-> 来如
但a_cpo
, _
, b_
-> 来 如
它们俩应是一样的,即来如
from my_rime.
空格是在这里上屏的:
my_rime/src/components/MyPanel.vue
Lines 162 to 168 in 5c14af4
写着REJECTED,但事实上这里空格应该是被消费的,也就是RimeProcessKey
会返回True,所以这里不应该来到这个if分支。
我不太懂Emscripten WASM和前端,似乎没看到Module.ccall('process', ...
相应的C函数?而且rime_api好像也并没有一个叫process
的函数吧。本来就是想看一下这个process
的返回值是哪里构建的,据我看的librime源码,RimeSimulateKeySequence
好像不能直接从它的返回值得知是否被processors消费掉,741行的返回值并没有使用,返回False只是代表着Parse失败:
https://github.com/rime/librime/blob/d0d227c70daa25c9671e8355b042c0c1697c2de4/src/rime_api.cc#L730-L744
只有RimeProcessKey
可以反映出:
https://github.com/rime/librime/blob/d0d227c70daa25c9671e8355b042c0c1697c2de4/src/rime/engine.cc#L96-L115
from my_rime.
process
定义在
Line 7 in 5c14af4
到这里还是在主线程。我把worker通信逻辑(postMessage)封装在了https://github.com/LibreService/my_worker
然后这里就已经是worker线程了
Lines 91 to 93 in 5c14af4
ccall能调的函数要么是被
EMSCRIPTEN_KEEPALIVE
修饰,要么是在emcc/em++时显式export my_rime/scripts/build_wasm.mjs
Line 38 in 5c14af4
最终找到https://github.com/LibreService/my_rime/blob/master/wasm/api.cpp ,封装了librime,把结果以json形式传给前端。
from my_rime.
哦看到了。刚才IDEA发毛病了,全局搜索没搜到。似乎不应以是否commit了来判断key event是否被消费掉?
我也试着写了个rime-tui,就是用的之前我说的,如果processors没处理再执行默认行为。用的就是RimeProcessKey
。没有问题。
https://github.com/bczhc/rime-tui/blob/cc5c7894c48bf8fe4b15fe49c962bb5f8c9948e2/src/main.rs#L85-L99
https://github.com/bczhc/librime-rs/blob/8b745820b8b28d7a007f436605f3bcc882ede72e/src/lib.rs#L129-L132
from my_rime.
ba81732 解决了。我本来打算在前端搞,然后发现你说的对,这其实是后端没能区分是透传还是丢弃。但是rime api没开我要的口子(既parse又给process返回值),我就用上一步有没有pre edit来区分了。反正测试都在,要是还有特殊情况我再想办法。
from my_rime.
Related Issues (20)
- 能否让Vercel保持为最新的master HOT 4
- 粵語拼音支持簡體中文 HOT 1
- 支持`alternative_select_labels`和`page_size` HOT 3
- Font HOT 3
- artifact 中未生成 reverse.bin 和 table.bin HOT 2
- 改進建議-默認設定、記住選項、方案選單、載入速度、群組指南 HOT 3
- 改進建議-候選框方向、候選項數量 HOT 3
- 改進建議 - 記錄用戶設定、提升被搜尋引擎搵到嘅效率 HOT 1
- Missing text for librime BSD license HOT 1
- 支持「声笔」打字方案 HOT 2
- 是否可以把 librime 提供的 CAPI 转换成 HTTP API 或 RPC ? HOT 6
- Error while running `pnpm run schema` with node v21 HOT 2
- 用到`ReverseDb`的都无效了 HOT 1
- 构建问题:卡在`pnpm run schema` HOT 13
- lua扩展支持 HOT 5
- 处理组合键 HOT 8
- 似乎资源不是相对引用? HOT 3
- 请问怎么编写 schemas.json ? HOT 8
- 打不出字,请问是不是不支持小键盘输入? HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from my_rime.