Skip to content

janghe11/nimf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nimf is an input method framework, it has a module-based client-server
architecture where applications act as clients and communicate with the Nimf
server via toolkit-specific input context modules and one socket per process.

Nimf provides

  * Input Method Server
    * nimf-daemon including XIM

  * Language Engines
    * Chinese:  nimf-sunpinyin (in alpha stage, based on sunpinyin)
    * Japanese: nimf-anthy     (not yet, based on anthy)
    * Korean:   nimf-libhangul (based on libhangul)

  * Client Modules
    * GTK+2, GTK+3, Qt4, Qt5

  * Indicator
    * nimf-indicator (based on libappindicator3) for Unity, GNOME Panel, KDE

  * Development files


Project Homepage: https://github.com/cogniti/nimf


License
-------

  Nimf is free software: you can redistribute it and/or modify it
  under the terms of the GNU Lesser General Public License as published
  by the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  Nimf is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the GNU Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public License
  along with this program;  If not, see <http://www.gnu.org/licenses/>.


Install
-------

  * Compile

    ./autogen.sh
    make
    sudo make install
    sudo ldconfig
    sudo make update-gtk-im-cache
    sudo make update-gtk-icon-cache

  * To use symbols in libhangul engine

    wget https://raw.githubusercontent.com/choehwanjin/libhangul/master/data/hanja/mssymbol.txt
    sudo mv mssymbol.txt /usr/share/libhangul/hanja/
    ls /usr/share/libhangul/hanja/mssymbol.txt


Configure
---------

  * For GNOME Shell, use 3rd party gnome-shell-extension-appindicator

    https://extensions.gnome.org/extension/615/appindicator-support/
    https://github.com/rgcjonas/gnome-shell-extension-appindicator

  * Configure im-config

    Run im-config, then select Nimf, logout and login.

  * Configure Hangul/Hanja key if you use a keyboard
    without hardware Hangul/Hanja key

    Use xkb-data >= 2.14, then
    Select "Right Alt as Hangul, right Ctrl as Hanja" or
           "Right Ctrl as Hangul, right Alt as Hanja" from gnome-tweak-tool.


Troubleshoot
------------

* Failed to load shared library
  Check /etc/ld.so.conf and /etc/ld.so.conf.d/ for /usr/local/lib path


Architecture
------------

      +- im modules --+       +-- each process ---+   +- a process --+
      | gtk im module |       |  nimf-indicator   |   |   X server   |
      | qt  im module |       +-------------------+   +--------------+
      +---------------+                |                    ^ |
              | calls                  | calls              | |
     +-----------------+      +--------------------+        | |
     | nimf IM library |      | nimf agent library |        | | communicates
     +-----------------+      +--------------------+        | |
             ^ |                      ^ |                   | |
             | |   communicates       | |                   | |
             | |   via Unix Socket    | |                   | |
             | v                      | v                   | v
          +---------------------- a process ----------------------+
          |               nimf-daemon (including XIM)             |
          +-------------------------------------------------------+
                          | calls                  | create instance
                          | singleton instance     | (not module yet)
                +---------------+            +------------------+
                | engine module |   calls    | candidate module |
                |   interface   | ---------> |    interface     |
                +---------------+            +------------------+
                  |                            |
                  +- nimf-sunpinyin            +- nimf-candidate (gtk3)
                  +- nimf-anthy
                  +- nimf-libhangul


Debugging
---------
    nimf-daemon --debug
    tail -f /var/log/daemon.log

    export GTK_IM_MODULE="nimf"
    export QT4_IM_MODULE="nimf"
    export QT_IM_MODULE="nimf"
    export XMODIFIERS="@im=nimf"
    export G_MESSAGES_DEBUG=nimf
    gedit # or kate for Qt


References
----------

  * API

  http://www.x.org/releases/X11R7.6/doc/libX11/specs/XIM/xim.html
  http://www.w3.org/TR/ime-api/
  https://developer.chrome.com/extensions/input_ime
  https://docs.enlightenment.org/stable/efl/group__Ecore__IMF__Lib__Group.html
  http://doc.qt.io/qt-4.8/qinputcontext.html
  http://doc.qt.io/qt-5/qinputmethod.html
  https://git.gnome.org/browse/gtk+

  * Language Engines

  https://github.com/sunpinyin/sunpinyin
  https://github.com/choehwanjin/libhangul

  * Implementations

  https://github.com/choehwanjin/nabi
  https://github.com/choehwanjin/imhangul
  https://github.com/choehwanjin/ibus-hangul
  https://github.com/ibus/ibus
  https://github.com/fcitx/fcitx
  https://github.com/fcitx/fcitx-qt5
  https://github.com/uim/uim