Nimf is a lightweight, fast and extensible input method framework.

Because this document contains upstream content, there may be errors in the build.
If you have any questions, please visit the address below.
https://github.com/hamonikr/nimf/wiki
https://github.com/hamonikr/nimf/issues

Nimf provides:
  * Input Method Server:
    * nimf
  * Language Engines:
    * System keyboard
    * Chinese (based on librime)
    * Japanese (based on anthy)
    * Korean (based on libhangul)
    * Various languages (based on m17n)
  * Service Modules:
    * Indicator (based on appindicator)
    * Wayland
    * NIM (Nimf Input Method)
    * XIM (based on IMdkit)
    * Preedit window
    * Candidate
  * Client Modules:
    * GTK+2, GTK+3, Qt5
  * Settings tool to configure the Nimf:
    * nimf-settings
  * Development files:
    * C library, headers and documents

Project Homepage:
  * https://github.com/hamonikr/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/>.


Downloads
---------

  Download latest snapshot of the current master branch

  * Clone with HTTPS

    git clone https://github.com/hamonikr/nimf/nimf.git

  * Download tar.gz

    https://github.com/hamonikr/nimf/archive/master/nimf-master.tar.gz



Compiling and installing
------------------------

  * Debian, Ubuntu, Kubuntu

    First of all, install devscripts, build-essential, debhelper.

      username:~$ sudo apt install devscripts build-essential debhelper

    After installing devscripts, build-essential perform the following commands.

      username:~$ cd
      username:~$ mkdir tmp-build
      username:~$ cd tmp-build
      username:~/tmp-build$ wget https://github.com/hamonikr/nimf/archive/master/nimf-master.tar.gz
      username:~/tmp-build$ tar zxf nimf-master.tar.gz
      username:~/tmp-build$ cd nimf-master
      username:~/tmp-build/nimf-master$ dpkg-checkbuilddeps

    You may see something like:

      dpkg-checkbuilddeps: Unmet build dependencies: some-package1 some-package2 ...

    Install all dependent packages and perform the following commands.

      username:~/tmp-build/nimf-master$ debuild -b -uc -us
      username:~/tmp-build/nimf-master$ cd ..
      username:~/tmp-build$ ls
      libnimf1_YYYY.mm.dd_amd64.deb
      libnimf1-dbgsym_YYYY.mm.dd_amd64.deb
      nimf_YYYY.mm.dd_amd64.build
      nimf_YYYY.mm.dd_amd64.buildinfo
      nimf_YYYY.mm.dd_amd64.changes
      nimf_YYYY.mm.dd_amd64.deb
      nimf_YYYY.mm.dd.dsc
      nimf_YYYY.mm.dd.tar.xz
      nimf-anthy_YYYY.mm.dd_amd64.deb
      nimf-anthy-dbgsym_YYYY.mm.dd_amd64.deb
      nimf-dbgsym_YYYY.mm.dd_amd64.deb
      nimf-dev_YYYY.mm.dd_amd64.deb
      nimf-libhangul_YYYY.mm.dd_amd64.deb
      nimf-libhangul-dbgsym_YYYY.mm.dd_amd64.deb
      nimf-m17n_YYYY.mm.dd_amd64.deb
      nimf-m17n-dbgsym_YYYY.mm.dd_amd64.deb
      nimf-master
      nimf-rime_YYYY.mm.dd_amd64.deb
      nimf-rime-dbgsym_YYYY.mm.dd_amd64.deb

    Install deb packages.

      username:~/tmp-build$ sudo dpkg -i nimf_YYYY.mm.dd_amd64.deb \
      libnimf1_YYYY.mm.dd_amd64.deb nimf-anthy_YYYY.mm.dd_amd64.deb \
      nimf-libhangul_YYYY.mm.dd_amd64.deb nimf-m17n_YYYY.mm.dd_amd64.deb \
      nimf-rime_YYYY.mm.dd_amd64.deb

  * CentOS

    Open the terminal and run the following commands step by step.

    wget https://gitlab.com/nimf-i18n/nimf/-/archive/master/nimf-master.tar.bz2
    tar -jxvf nimf-master.tar.bz2

    NIMF_VERSION=`grep AC_INIT nimf-master/configure.ac | \
      grep -Po '\d{4}.\d{2}.\d{2}'`

    cp -r nimf-master nimf-$NIMF_VERSION
    tar -jcvf nimf-master.tar.bz2 nimf-$NIMF_VERSION
    mkdir -p rpmbuild/SOURCES
    cp -f nimf-master.tar.bz2 rpmbuild/SOURCES
    sudo yum install epel-release

    sudo yum install gcc-c++ libtool glib2-devel pkgconfig intltool \
      gtk3-devel gtk2-devel qt5-qtbase-devel qt5-qtbase-private-devel \
      libappindicator-gtk3-devel librsvg2-tools google-noto-cjk-fonts \
      libhangul-devel anthy-devel anthy libxkbcommon-devel wayland-devel \
      libxklavier-devel gtk-doc

    rpmbuild -bb nimf-master/nimf.spec
    ls -R rpmbuild/RPMS/

    sudo yum install \
      rpmbuild/RPMS/`uname -m`/nimf-YYYY.mm.dd-1.el7.`uname-m`.rpm

  * Other Linux distributions

    There are configuration options. Use it for your situation.

      --disable-hardening     Disable hardening
      --disable-nimf-anthy    Disable nimf-anthy
      --disable-nimf-m17n     Disable nimf-m17n
      --disable-nimf-rime     Disable nimf-rime
      --with-im-config-data   Install im-config data
      --with-imsettings-data  Install imsettings data

    Open the terminal and run the following commands step by step.

      username:~$ cd
      username:~$ mkdir tmp-build
      username:~$ cd tmp-build
      username:~/tmp-build$ wget https://gitlab.com/nimf-i18n/nimf/-/archive/master/nimf-master.tar.gz
      username:~/tmp-build$ tar zxf nimf-master.tar.gz
      username:~/tmp-build$ cd nimf-master

    If you are using im-config

      ./autogen.sh --with-im-config-data

    If you are using im-chooser

      ./autogen.sh --with-imsettings-data

    Otherwise

      ./autogen.sh

      make
      sudo make install
      sudo ldconfig
      sudo make update-gtk-im-cache
      sudo make update-gtk-icon-cache

    To uninstall nimf, run the following command.

      sudo make uninstall


Configure
---------

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

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

  * How to enable Nimf on systems using im-config

      im-config -n nimf

  * How to enable Nimf on systems using im-chooser

      imsettings-switch nimf

  * How to enable Nimf on systems using systemd v233 or later

    Run nimf-settings.
    Turn on the "Setup environment variables" option in the Nimf menu.


Debugging
---------

  nimf --debug
  nimf-settings --gapplication-service & # for nimf-indicator
  tail -f /var/log/daemon.log # or /var/log/syslog

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


Participate
-----------

  * Development

    You may send pull requests.
    https://github.com/hamonikr/nimf/pulls

  * Translation

    You can make nimf.pot using the following commands.

      git clone https://github.com/hamonikr/nimf/nimf.git
      cd nimf
      ./autogen.sh
      cd po
      make nimf.pot

    Then, you may translate nimf.pot into your native language.


References
----------

  * APIs

    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+/tree/gtk/gtkimcontext.c

  * Language Engines (alphabetically listed)

    http://anonscm.debian.org/cgit/collab-maint/anthy.git
    https://github.com/libhangul/libhangul
    https://github.com/rime/librime
    https://www.nongnu.org/m17n/

  * Implementations

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