2012-01-22 3 views
1

Я пытаюсь создать новый метод ввода с использованием Input Method Kit. Документации очень не хватает, но я считаю, что правильно настроил проект и поместил метод ввода в ~/Library/Input Methods после его создания. Тем не менее, я вижу странное поведение при просмотре списка источников ввода в языке & Текстовые настройки.Ошибка настройки метода ввода (IMKit)

образец Ввод числа, кажется, работает хорошо для меня, и нет никаких различий в моем новом методе ввода, который я могу найти, кроме значений для tsInputMethodIconFileKey, InputMethodConnectionName, InputMethodServerControllerClass и CFBundleIdentifier в Info.plist. Но я вижу эти проблемы:

  • Когда я использую свой желаемый идентификатор пакета для приложения, в списке ничего не отображается. (Этот идентификатор пакета не существует нигде в моей системе.)
  • Изменение идентификатора связки, которое будет таким же, как и образец NumberInput, отображает его в списке, но когда я его выбираю, он иногда дублирует записи в список, и обычно ведет себя странно.
  • Поскольку я вношу небольшие изменения в идентификатор пакета, он, как представляется, ведет себя нормально, но как только я верну его обратно к исходному идентификатору (желаемому), он исчезает из списка.
  • Если я покинул процесс, связанный с моим методом ввода, его выбор в меню снова не возобновит его.

Кто-нибудь знает, что происходит? Документация Apple для IMKit практически не имеет аналогов, и, похоже, многие люди не зафиксировали свои собственные попытки создания методов ввода. Есть что-то, что мне не хватает?

Заранее благодарен!

P.S. Да, я попытался выйти из системы и вернуться в систему и даже перезагрузить свой компьютер, и ничего похожего не изменило поведение, о котором я говорил выше.

ответ

3

Это сработало для меня. Попробуйте это: убедитесь, что ваш идентификатор пакета содержит «inputmethod» где-то в пути. Пример "com.blugs.inputmethod.IPAPalette". Да, AFAIK полностью недокументирован. Да, документация ужасная. Надеюсь это поможет! Приветствия.

+0

Кажется, что это действительно решение. Грустно, что это что-то настолько простое, но недокументированное. Благодаря! – jtbandes

+0

Спасибо. Документация полностью ничего не говорит. Я потратил день на то, чтобы выяснить проблему, но вечером я нашел ваш ответ :( – Stackia

+0

Кажется, также нужно «inputmethod» в первых трех жетонах идентификатора пакета. В частности, 'com.myCompany.theInputName.inputmethod' не работайте для меня, но 'com.myCompany.inputmethod.theInputName' делает. Поэтому не просто добавляйте' .inputmethod' к * концу * имени вашего существующего идентификатора пакета. – pkamb

1

Принятый здесь ответ очень полезен, добавив .inputmethod. к вашему идентификатору пакета.

Я добавлю, что я нашел документацию для этого в TextInputSources.h, который содержит большое количество комментариев и документации, не найденных в Input Method Kit overview docs. Стоит прочитать.

Carbon > Frameworks > HIToolbox > TextInputSources.h

В Info.plist файле, то значение ключа CFBundleIdentifier должна быть строка, которая включает в себя ".keyboardlayout."; обычно это может быть что-то вроде "com.companyname.keyboardlayout.MyKeyboardLayouts" (перед Leopard требовалась строка, которая начиналась "com.apple.keyboardlayout", даже для раскладок клавиатуры, не поставляемых Apple).

и

Если этот ключ не задан, InputSourceID будет построен путем комбинирования BundleID с InputModeID суффиксом, образованного удалением любого префикса, который соответствует BundleID или который заканчивается в ".inputmethod."

+0

Хорошая находка! Я бы рекомендовал подать радар сообщив им, что эта документация существует только в заголовках Carbon. Очевидно, что ее нужно перемещать/копировать в другом месте! – jtbandes

 Смежные вопросы

  • Нет связанных вопросов^_^