问题标签 [input-method-kit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3141 浏览

swift - 如何在 Swift 中为 Mac OS X 开发一个简单的输入法?

我知道InputMethodKit 框架有一个API 参考。Objective-C中也有示例代码,但它没有提供 Swift 中的示例。

有谁知道如何在 Swift 中制作一个简单的 IME?它可以具有重复字母但什么都不做的功能,所以我可以知道它确实有效。您使用哪些 Xcode SDK 构建并成功运行它?

0 投票
0 回答
171 浏览

objective-c - 可以使用 IMKCandidates `setCandidateData:` 代替 IMKInputController `candidates:` 委托方法吗?

我正在为我的 Input Method Kit 输入法创建一个 IMKCandidate 候选窗口:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/IMKCandidates_Class/

然后,您需要覆盖 IMKInputController 方法 CandidateSelectionChanged: 和 CandidateSelected: 以及在您的委托对象中实现候选者方法。IMKInputController 子类通过实现 Candidate 方法为 IMKCandidates 对象提供候选项。当您准备好显示候选人窗口时,调用候选人方法来更新候选人并显示候选人窗口。

我已经实现了 IMKInputControllercandidates:方法来提供候选数组。这很好用。

<code>候选人:</code> 方法

但我注意到setCandidateData:添加了一个方法来设置候选字符串,作为依赖委托方法的替代方法。这在我的输入法中会更方便。

@abstract 直接设置候选人数据,而不是通过[IMKInputContoller candidates:].

-(void)setCandidateData:(NSArray*)candidatesArray AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER;

所以我注释掉该candidates:方法,并setCandidateData:改用:

但是,以这种方式执行此操作时,不会显示候选窗口:

在此处输入图像描述

我也通过控制台看到了这个错误:

CandidateWindowNoCandidatesException:IMKCandidates 显示:无法获取候选字符串。

文档看起来很清楚,setCandidateData:可以用来代替candidates:. 那么为什么不显示候选人呢?

0 投票
1 回答
407 浏览

qt - 在 OSX 上打开 InputWindow 进行文本输入,同时用亚洲语言输入文本

我正在开发一个用 C++ 引擎和 Qt for UI 编写的文本编辑器。我想允许用户使用任何输入源(任何语言的键盘)进行书写。这一切都很好,直到我支持具有 1-1 键盘映射的语言(例如法语/俄语键盘)。我eventFilter安装了一个Qwidget我正在渲染文本并在其中捕获键盘输入的设备QEvent::InputMethod

但是当我开始使用亚洲语言(如日文/中文)时,我无法支持使用这种语言进行文本编辑所需的所有功能,这种情况的典型示例是用户使用日文(平假名)编写一些文本时的分割下划线IME )并按空格键,帮助用户确定所有字符将替换为预测对话框中的内容。见下图使用日文输入法(平假名)在 TextEdit 应用程序上编写的一些文本,请注意当用户按下空格键时出现拆分下划线,::

在挣扎了一段时间后,我发现 Qt 没有提供关于被替换的字符串的拆分或长度的足够信息,我放弃了自己创建所有这些视觉外观的想法。

但后来我发现有些应用程序使用一些特定于操作系统的输入法来处理这种复杂的文本。一个例子是 OSX Finder,如果我们将输入法更改为日语(平假名)并在 finder 窗口处于焦点时开始输入,它会弹出一个浮动窗口,接受我的所有输入并将其传递给 finder。见下图在此处输入图像描述

我挖掘得更多,我发现有这样一个框架,它早先作为文本服务管理器提供,有很多文档(“ http://mirror.informatimago.com/next/developer.apple.com/technotes/te/ te_27.html#Downloads " ) 这对我来说可以很容易地完成这个技巧但是这个 API 已经被弃用并且不再可用。

我现在正在寻找的是这个已弃用的 API 的替代方案。我们是否有一个可可 API 可以帮助我将这个操作系统输入法组件引入到简单的文本输入中?

0 投票
0 回答
43 浏览

android - 为 KEYCODE_DEL 擦除一堆文本而不是单个文本

我通过扩展 InputMethodService 类将 InputMethodService 用于我的贴纸键盘 android 应用程序,如下所示:

键盘布局是在我的 .java 文件中动态创建的。

我的键盘上有一个退格按钮,我已经使用KEYCODE_DEL成功实现了它,如下所示:

下面是您可以检查的sendDownAndUpKeyEvent()方法:

内部方法如下:

现在,因为我在我的btnDelete上采取了点击监听器,所以每次按下我的btnDelete按钮时,只有一个值被删除。

当用户按下按钮时,我还必须擦除值,即必须同时擦除多个值。

简而言之,BackSpace 应该与设备默认键盘的返回键相同。

有什么想法来处理它吗?谢谢。

0 投票
1 回答
331 浏览

android - 我需要创建 Android 键盘应用程序,但有些类已被弃用

我需要开发 android 键盘应用程序,但 Android 开发者网站告诉我们,KeyboardViewKeybordApi 29 之后不推荐使用类来为键盘创建 UI。

此类在 API 级别 29 中已弃用。以下是我发现的消息:

此类已弃用,因为这只是一个方便的 UI 小部件类,应用程序开发人员可以在现有公共 API 之上重新实现它。如果你已经依赖这个类,可以考虑将 AOSP 的实现复制到你的项目中,或者自己重新实现一个类似的小部件

那么如果类在 Api 29 之后无法运行,我该如何开发应用程序?有什么建议吗?

0 投票
0 回答
31 浏览

linux - How to input non-alphabetic letters (such as Chinese, Japanese, Korean) in unix/linux console without X running

How to input non-alphabetic letters without built-in input method tool (vim, emacs and so on)?

0 投票
1 回答
91 浏览

macos - 如何在 NSTextInputClient 中检查输入法的状态?

从文档中,我可以看到输入上下文会将以下方法之一发送到文本视图。

  • insertText:replacementRange:
  • setMarkedText:selectedRange:replacementRange:
  • doCommandBySelector:

在我的测试用例中,当启用输入法时,keyDown可以触发setMarkedText:selectedRange:replacementRange,但是如果我一直删除markedText到最后一个字符,那么输入法将被停用而不会触发上述任何方法。

是否有类似停用的钩子,以便在输入法停用后我可以立即执行某些操作?

0 投票
0 回答
31 浏览

c++ - 如何让 QWidget 在 Mac 上获取输入法焦点

我正在使用QWidget在 MacOS 上创建手机的镜像窗口。

我正在使用setAttribute(Qt::WA_InputMethodEnabled, true);,以便我Qwidget可以从 Mac 上的搜狗输入法获取文本输入。

QOpenGLWidget我的只有一个QWidget显示手机镜像。当我点击某个位置Qwidget并输入时,搜狗输入法的显示位置总是在下方Qwidget,离我点击的地方很远,因为没有输入焦点QOpenGLWidget

我怎样才能做到这一点?

0 投票
0 回答
39 浏览

swift - 使用 swift 在 IMKKitcomposedString(_:) 中崩溃

我正在使用InputMethodKit编写一个快速输入法 (IM) 。IM 基本上可以工作,我从 Konsole 中获得击键inputText()并查看我的日志消息。

现在我composedString(_ sender: Any!)像这样快速实现:

我知道composedString(_ sender: Any!)我打电话时系统会调用它updateComposition()。情况确实如此,但composedString(_ sender: Any!)确实会崩溃显示该输出:

苹果文档说composedString(_:)

返回值:

当前组合的字符串,可以是 NSString 或 NSAttributedString 对象。返回的对象应该是一个自动释放的对象。

我想问题是我没有NSMutableString正确分配“自动释放和保留”。任何人都可以阐明崩溃的问题是什么以及如何解决它。

谢谢

0 投票
0 回答
19 浏览

swift - 如何在 Xcode 中加载自定义的按键布局文件?

我使用 Ukelele 创建了几个 keylayout 文件,并将它们打包成一个包,以确保每个 keylayout 都有其标识符,如org.atelierInmu.vChewing.keyLayouts.zhuyindachen.

然后我试图在我的输入法项目中使用它。但是,即使我手动设置以下内容,它看起来还远远不够:

关于我应该怎么做才能让它工作的任何说明?