Skip to content
KIHARA Hideto edited this page Jan 16, 2016 · 2 revisions

= uim-fep =

これは何?

uimとコンソールのブリッジ。 コンソールで入力を行なう場合に使う。

詳しくはuim-fep wikiを参考に。

使い方

LANGに使用する言語とエンコーディングを設定します。 LC_ALLかLC_CTYPEでもいいです。 サポートされている言語とエンコーディングは

locale -a

で確認できると思います。

例 sh系でja_JP.EUC-JPにする
$ LANG=ja_JP.EUC-JP ; export LANG

例 csh系でja_JP.UTF-8にする
% setenv LANG ja_JP.UTF-8

例 SolarisでEUC-JPで使う
$ LANG=ja ; export LANG
% setenv LANG ja
$ uim-fep

SHELLが起動します。

標準の入力方式はUimPrefで設定できます。 または~/.uimに

(define default-im-name 'anthy)

のように書きます。

リダイレクトの動作

標準出力のリダイレクトはuim-fepと子プロセス(シェル)のすべての出力を変更します。

例: logにすべての出力を書き込む(scriptコマンドと同じ)
$ uim-fep | tee log

入力のリダイレクトは子プロセスの標準入力を変更します。

例: lsの出力をw3mで見る
$ ls | uim-fep -e w3m

termcap/terminfo

uim-fepではtermcap/terminfoを使って端末の情報を取得します。 以下のエントリを使用してカーソルの位置や文字の属性を変えます。

ほとんどの端末の場合

<esc>

[6nでカーソル位置が取得できる端末では以下のエントリを使用します。

terminfo termcap 意味
smul us アンダーライン開始
rmul ue アンダーライン終了
smso so 強調開始
rmso se 強調終了
sgr0 me 全ての文字属性を終了
cup cm カーソルを指定した位置に移動

以下のエントリは最下行をステータスラインとして使うときだけ必要になります。

terminfo termcap 意味
el ce 行末まで削除
csr cs スクロール領域を変更
clear cl 画面を消去
ed cd カーソル位置から画面の最後まで消去

以下のエントリは-oオプションを指定した場合に使用されます。

terminfo termcap 意味
ich IC
dch DC

DOSプロンプト等

DOSプロンプトのような

<esc>

[6nでカーソル位置が取得できない端末では以下のエントリが必要になります。

terminfo termcap 意味
smul us アンダーライン開始
rmul ue アンダーライン終了
smso so 強調開始
rmso se 強調終了
sgr0 me 全ての文字属性を終了
sc sc カーソル位置を保存
rc rc カーソル位置を復元
cub1 le カーソルを左に移動
cuf1 nd カーソルを右に移動

以下のエントリは最下行をステータスラインとして使うときだけ必要になります。

terminfo termcap 意味
el ce 行末まで削除
csr cs スクロール領域を変更
clear cl 画面を消去
ed cd カーソル位置から画面の最後まで消去
cup cm カーソルを指定した位置に移動
cuu1 up カーソルを上に移動

以下のエントリは-oオプションを指定した場合に使用されます。

terminfo termcap 意味
ich IC
dch DC

キーを識別するために必要なエントリ

以下のエントリを利用して、押下されたキーが何であるかを判断します。

kbs kb backspaceキー
kdch1 kD deleteキー
kcub1 kl ←キー
kcuu1 ku ↑キー
kcur1 kr →キー
kcud1 kd ↓キー
kpp kP Page Upキー
knp kN Page Downキー
khome kh Homeキー
kend @7 Endキー
kich1 kI Insertキー
kf1 k1 F1キー
kf2 k2 F2キー
kf3 k3 F3キー
kf4 k4 F4キー
kf5 k5 F5キー
kf6 k6 F6キー
kf7 k7 F7キー
kf8 k8 F8キー
kf9 k9 F9キー
kf10 k; F10キー
kf11 F1 F11キー
kf12 F2 F12キー

どの端末のエントリを使うかは環境変数TERMで決まるのでTERMを使用している 端末に合うように設定してください。

端末の機能のメモ

  • mlterm (2.7.0)
    • save_cursor(sc)でカーソルの位置しか保存されない。
    • 一回のsave_cursor(sc)にたいして一回のrestore_cursor(rc)しかできない。
    • cursor_left(cub1)で右端から次の行の左端に移動できない。
    • cursor_right(cuf1)で左端から前の行の右端に移動できない。
    • 全角文字も1回のdelete_character(dch1)で消える。
    • cursor_invisible(civis)でカーソルが消えない。
    • termcap/terminfoのexit_standout_mode(rmso), exit_underline_mode(rmul)はexit_attribute_mode(sgr0)と同じになっている。
  • jfbterm (0.4.6)
    • save_cursor(sc)でカーソルの位置、色、属性が保存される。
    • save_cursor(sc)した回数だけrestore_cursor(rc)が使える。(スタック)
    • cursor_left(cub1)で右端から次の行の左端に移動できない。
    • cursor_right(cuf1)で左端から前の行の右端に移動できない。
    • cursor_invisible(civis)でカーソルが消えない。
  • kon
    • save_cursor(sc)でカーソルの位置、色、属性が保存される。
    • 一回のsave_cursorにたいして一回のrestore_cursor(rc)しかできない。
    • cursor_left(cub1)で右端から次の行の左端に移動できない。
    • key_left(kcub1)で右端から次の行の左端に移動できる。
    • cursor_right(cuf1)で左端から前の行の右端に移動できる。
    • cursor_invisible(civis)でカーソルが消える。
  • screen (4.0.2)
    • save_cursorで位置、色,属性が保存される。
    • save_cursor(sc)は1つしか保存できないが、restore_cursor(rc)で何回も復元できる。
    • cursor_left(cub1)で右端から次の行の左端に移動できる。
    • cursor_right(cuf1)で左端から前の行の右端に移動できない。
  • rxvt (2.7.10)
    • enter_ca_mode(smcup)の後にrestore_cursor(rc)ができなくなる。

オプション

-u ''入力方式名'':: 入力方式を指定します。-s {'''lastline''','''backtick''','''none'''}:: ステータスラインの表示場所を指定します。'''-sl'''、'''-sb'''、'''-sn'''のように省略できます。-b ''ファイル名'':: backtickで使うsocketのパスを指定します。相対パスのときは、環境変数'''TMP'''か/tmpからのパスになります。-w ''数値'':: ステータスラインの幅です。-t ''秒'':: rshを使っていると"F1"、"up"、"

<Alt>

a"などが認識されないことがあります。これはエスケープシーケンスが一度に入力されないからです。そのような場合はこのオプションでエスケープのあとの待ち時間を設定します。このオプションを付けないときの待ち時間は0秒です。

例 待ち時間を0.1秒にする
$ uim-fep -t 0.1

-C ''前景色:: 背景色'':編集領域や'''-s lastline'''のときのステータスラインの色を指定します。使用するアプリケーションの背景色が通常の背景色と違う場合にこのオプションで色を合わせてください。''前景色''、''背景色''の部分は次の16色が使えます。'''lightblack'''より下の色は表示できない端末があります。

省略記法
black k
red r
green g
yellow y
blue b
magenta m
cyan c
white w
lightblack lk
lightred lr
lightgreen lg
lightyellow ly
lightblue lb
lightmagenta lm
lightcyan lc
lightwhite lw
例 前景色を白、背景色を黒にしてjedを起動する
$ uim-fep -C white:black -e jed
例 背景色を青にする
$ uim-fep -C :blue
例 前景色を黄色にする
$ uim-fep -C yellow:

-c:: カーソル位置の文字を反転表示します。kterm、aterm、rxvt、teraterm(カーソル点滅なしの状態)などの端末では反転された文字にカーソルがあると反転が消えることがあります。このような場合はこのオプションを付けると反転文字にカーソルがあるときに反転されるようになります。-i:: ステータスラインを描画しているときや編集領域の末尾以外を編集しているときにカーソルを一時的に消します。カーソルの残像が気になるときはこのオプションを付けてください。-o:: 編集領域の表示スタイルをOn-The-Spotにします。jedなどの背景色があるアプリケーションを使うと右端の背景色が消えることがあります。-S:: GNU screenでフィルタとして使えるようにします。(GNU screen 4.0.2以降)例えば、~/.screenrcに

bind J exec | uim-fep -S
bind K eval 'exec cat' kill redisplay

このように書けば、Ctrl+a Jでuim-fepをフィルタとして起動し、Ctrl+a Kで終了できるようになります。'''-s'''オプションにかかわらずモード表示にはbacktickが使われます。'''UIM_FEP_SETMODE'''、'''UIM_FEP_GETMODE'''の値は$HOME/.uim.d/fep/setmode-$STY-$WINDOW-screen、$HOME/.uim.d/fep/getmode-$STY-$WINDOW-screenになります。

-f ''str'':: $UIM_FEP_SETMODEと$UIM_FEP_GETMODEのファイル名をuim-fep-setmode-{str}、uim-fep-setmode-{str}にします。{str}は'''-f'''オプションの引数です。'''UIM_FEP_SETMODE'''と'''UIM_FEP_GETMODE'''が置かれるディレクトリは$HOME/.uim.d/fep/です。-d:: 候補一覧の表示スタイルをddskkのようにします。-K:: 押されたキーの~/.uimでの表記を示します。'''-t'''オプション以外のオプションは無視されます。-e ''command arg1 arg2 ...'':: 起動するコマンドを指定します。このオプション以降の引数は''command''に渡されます。-h:: ヘルプメッセージを表示します。-v:: バージョンを表示します。

ファイル

/.uim.d/fep/getmode-$UIM_FEP_PID:: uim-fepのモードが書き込まれるファイル/.uim.d/fep/setmode-$UIM_FEP_PID:: このファイルにモードを書き込むとuim-fepのモードが変わる

環境変数

UIM_FEP_PID

UIM_FEP_GETMODE

UIM_FEP_SETMODE

backtickの使い方

GNU screen 3.9.15以降が必要です。

uim-fep-tickをパスの通ったところに置いてください。 ~/.screenrcに

backtick 0 0 0 uim-fep-tick
hardstatus alwayslastline "%0`"

と書きます。

screenのウィンドウで

$ uim-fep -s backtick

と起動します。

uim-fepはscreen内の複数のウィンドウで起動できます。

uim-fep-tickはscreenから起動されるため、screenの環境変数が引き継がれます。

backtickの反応がなくなったら

$ screen -X backtick 0 0 0 uim-fep-tick

と起動してください。

screen-uimのように使う

(screen 4.0.2以降) uim-fepはscreen-uimのようにscreen内でフィルタとして使うことができます。 あらかじめuim-fepを起動しておく必要がなく、起動したいときにすぐ起動できるのが便利です。

設定は~/.screenrcに

backtick 0 0 0 uim-fep-tick
hardstatus alwayslastline "%0`"
bind j exec | uim-fep -S
bind k eval 'exec cat' kill redisplay

このように書きます。 これで、C-a jでuim-fepが起動します。 モードはbacktickに表示されます。 終了はC-a kです。

フィルタは2つ起動できないので、uim-fepが起動しているときは他のフィルタは起動できません。 ですが、フィルタとして使っていないexecはbacktick 9 0 0で代用できます。 execの場合は起動されるプロセスにWINDOWとSTYの環境変数が設定されますが、backtickの場合はこれらの環境変数は設定されません。

uim-fep-tickのオプション

-s ''ファイル名'':: socketのパスを指定できます。相対パスのときは、$HOME/.uim.d/fep/からのパスになります。-h:: ヘルプメッセージを表示します。-v:: バージョンを表示します。

uim-fep-tickのファイル

/.uim.d/fep/getmode-$UIM_FEP_PID-$WINDOW-screen:: uim-fep-tickのモードが書き込まれるファイル。/.uim.d/fep/setmode-$UIM_FEP_PID-$WINDOW-screen:: このファイルにモードを書き込むとuim-fep-tickのモードが変わる。

問題点

表示の乱れ

編集領域の編集中に端末のサイズが変更されると表示が乱れることがあります。

暴走

screenの中でuim-fepを'''-s lastline'''で使っているとき端末のサイズを変更すると稀にscreenが暴走することがあります。

無反応になったり暴走したりしたら

$ kill -INT <uim-fepのpid>

このコマンドで直ると思います。 ただし変換はできなくなります。

注意

ペースト

中ボタンクリックやShift+Insertのペーストなどで一度に大量に入力されたときは変換せずにそのまま出力されます。 プリエディットを入力中にペーストすると無効になります。

端末の右端でプリエディットを開始すると次の行に移ります。

キー

Altキーを使うにはAltを押しながら他のキーを押したときに、^[が出力されるようにします。 mltermの場合は~/.mlterm/mainに次のように書きます。

mod_meta_mode=esc

ktermの場合は~/.Xresourceか~/.Xdefaultsに次のように書きます。

KTerm*EightBitInput: false

uim-fepはコンソールにおける制約をそのまま受けるため、標準のキー設定では以下の事ができません。

  • UimAnthyUimCannaUimManaUimWnnUimSj3
    • オン/オフができない(Shift+Space、全角/半角)
    • 入力モードの推移ができない(Shift+F{6,7,8,9,10})
    • 文節を縮められない(Shift+←、Ctrl+i)
  • UimByeoru
    • オン/オフができない(Shift+Space)
  • UimLook
    • オン/オフができない(Shift+Space、全角/半角)
  • UimPrime
    • 全角英数入力モードへ移行できない(Ctrl+L)

この問題を回避するには、UimPrefなどで適当なキーを追加してください。 uim-fepが利用可能なキーは、付属のuim:fep/README.keyに書かれています。 例外としてCtrl+iと共にTabキーを追加することで、Ctrl+iも使えるようになります。

Alt+F1、Alt+→などが使える端末もあります。

仕様

uim-fep -e screenで起動して入力した後、しばらく放置するカーソルが勝手に編集領域の先頭へ移動する。

Clone this wiki locally