入力メソッド

XVaCreateNestedListネストされた変数引数リストを動的に割り当てる
XIM
XOpenIM入力メソッドを開く
XCloseIM入力メソッドを閉じる
XSetIMValues入力メソッドの属性を設定
XGetIMValues入力メソッドの値を取得
XDisplayOfIM入力メソッドに関連付けられたディスプレイを返す
XLocaleOfIM入力メソッドに関連付けられたロケールをす
XRegisterIMInstantiateCallback入力メソッドが使用可能になるたびに呼び出されるコールバックを登録
XUnregisterIMInstantiateCallbackXRegisterIMInstantiateCallback のコールバックを削除
XIC (コンテキスト)
XCreateIC入力コンテキストを作成
XDestroyICコンテキストを破棄
XSetICFocusキーボードフォーカスを受け取ったことを通知
XUnsetICFocusキーボードフォーカスが失われたことを通知
XmbResetIC
XwcResetIC
コンテキストをリセット
XIMOfICコンテキストに関連付けられた入力メソッドを返す
XSetICValuesコンテキストの属性をセット
XGetICValuesコンテキストの値を取得
ほか
XFilterEvent入力メソッドのイベントをフィルタ
XmbLookupString
XwcLookupString
入力メソッドから文字列を取得
コンテキスト・コールバック
GeometryCallbackジオメトリコールバック
DestroyCallback破棄コールバック
StringConversionCallback文字列変換コールバック
PreeditStartCallback前編集の開始
PreeditDoneCallback前編集の終了
PreeditDrawCallback前編集の描画
PreeditCaretCallback前編集のカーソル移動
StatusStartCallbackステータス開始
StatusDoneCallbackステータス終了
StatusDrawCallbackステータス描画
XVaNestedList XVaCreateNestedList(int dummy, ...);
メモリを割り当て、可変引数を単一のリストポインタにコピーします。
このリストポインタは、リスト値を必要とする引数の値として使用できます。

すべてのエントリは指定どおりにコピーされます。
参照によって渡されたデータはコピーされません。
呼び出し元は、ネストされたリストの存続期間中、データが有効なままであることを確認する必要があります。
リストが不要になった場合は、XFree を使用してリストを解放する必要があります。

可変長引数リストには、ネストされたリストが含まれる場合があります。
引数名の代わりに名前 XNVaNestedList が指定されている場合、次の値は、宣言時に元のリストに論理的に挿入された値のリストを指定する XVaNestedList 値として解釈されます。
NULL は、ネストされたリストの終わりを示します。
dummy
可変数引数にするため、最初の引数はダミーで使用されない。
他引数
名前(文字列)と値(XPointer) のペア。名前が NULL で終了。
XIM
XIM XOpenIM(Display *display, XrmDatabase db, char *res_name, char *res_class);
現在のロケールと修飾子の仕様に一致する入力メソッドを開きます。
現在のロケールと修飾子は、開始時に入力メソッドにバインドされます。

入力メソッドに関連付けられたロケールは動的に変更できません。
これは、特定の入力メソッドに関連付けられた入力コンテキストに対して XmbLookupString または XwcLookupString によって返される文字列が、入力メソッドが開かれた時点の現在のロケールでエンコードされることを意味します。

この呼び出しがルーティングされる特定の入力メソッドは、現在のロケールに基づいて識別されます。
XOpenIM は、現在のロケールに対応するデフォルトの入力メソッドを識別します。
このデフォルトは、入力メソッド修飾子の XSetLocaleModifiers を使用して変更できます。
db
入力メソッドにとってプライベートなリソースを検索するために、入力メソッドによって使用されるリソースデータベースです。
このデータベースは、入力コンテキストで IC 値として設定できる値を検索するために使用することを目的としていません。
db が NULL の場合、データベースは入力メソッドに渡されません。
res_name
アプリケーションのリソース名。
res_name と res_class は、この入力メソッド用に作成されるすべての入力コンテキストに対して、共通のリソースを検索するときに、入力メソッドによってプレフィックスとして使用されることを目的としています。
リソース名とクラスに使用される文字は、X ポータブル文字セットに含まれている必要があります。
res_name または res_class が NULL の場合、検索されるリソースは完全には指定されません。

res_name 引数と res_class 引数は、XOpenIM の呼び出し以降に存在するとは想定されません。
指定されたリソースデータベースは、入力メソッドの有効期間中は存在していると想定されます。
res_class
アプリケーションのクラス名
戻り値
入力メソッドを開くことができなかった場合、NULL を返す。
Status XCloseIM(XIM im);
入力メソッドを閉じる
char *XSetIMValues(XIM im,...);
指定された入力メソッドの属性を設定します。
可変引数には、名前(文字列)と値(ポインタ)のペアを渡し、NULL で終了する。

Xlib は、失敗した引数以降のリストから、引数を設定しようとしません。
失敗した引数の前にあるリスト内のすべての引数は、正しく設定されています。

XNResourceNameアプリケーション名
XNResourceClassクラス名
XNDestroyCallback破棄コールバック。XIMCallback 構造体のポインタ。

typedef struct {
  XPointer client_data;
  XIMProc callback;
} XIMCallback;

void DestroyCallback(XIM im, XPointer client_data, XPointer call_data);
//call_data = NULL

入力メソッドが何らかの理由でそのサービスを停止すると呼び出されます。
コールバックが呼び出された後、入力メソッドが閉じられ、関連する入力コンテキストが Xlib によって破棄されます。
したがって、クライアントは XCloseIM または XDestroyIC を呼び出すべきではありません。
XNR6PreeditCallback (廃止)-
戻り値
成功した場合は NULL。それ以外の場合は、設定できなかった最初の引数の名前を返します。
char *XGetIMValues(XIM im,...);
指定された入力メソッドの値を取得する。
名前のポインタと、値が入るポインタをペアで指定し、NULL で終了する。

XNQueryInputStyleサポートしている入力スタイルのリスト (XIMStyles **)。
XFree() で解放する。

typedef struct {
  unsigned short count_styles;
  XIMStyle *supported_styles;
} XIMStyles;

typedef unsigned long XIMStyle
XNQueryIMValuesListサポートされている XIM のプロパティ名のリスト (XIMValuesList **)。
XFree() で解放する。

typedef struct {
 unsigned short count_values; //個数
 char **supported_values; //名前のポインタの配列
} XIMValuesList;
XNQueryICValuesListサポートされている XIC のプロパティ名のリスト (XIMValuesList **)。
XFree() で解放する。
XNVisiblePositionXIMText 構造体の XIMFeedback の可視位置マスクが使用可能かどうか (Bool *)。
この値はオプションであるため、この引数を使用する前に、XNQueryIMValuesList で、この値がサポートされているかをチェックする必要がある。
リストに存在しない場合、XIMText 内の XIMFeedback の可視位置マスクは、可視位置を示すために使用されません。
戻り値
成功すると NULL を返す。それ以外の場合は、取得できなかった最初の引数の名前を返します。
Display *XDisplayOfIM(XIM im);
指定された入力メソッドに関連付けられたディスプレイを返します。
char *XLocaleOfIM(XIM im);
指定された入力メソッドに関連付けられたロケールを返します。
Bool XRegisterIMInstantiateCallback(Display *display, XrmDatabase db,
    char *res_name, char *res_class, XIDProc callback, XPointer *client_data);

typedef void (*XIDProc)(Display *display, XPointer client_data, XPointer call_data);
現在のロケールおよび修飾子に一致する新しい入力メソッドが使用可能になるたびに呼び出される、コールバックを登録します。
callback
コールバック関数。
call_data は使用されないため、常に NULL。
client_data
コールバック関数に渡されるユーザーデータ
戻り値
True で成功、それ以外は False
Bool XUnregisterIMInstantiateCallback(Display *display, XrmDatabase db,
    char *res_name, char *res_class, XIDProc callback, XPointer *client_data);
XRegisterIMInstantiateCallback で登録されたコールバックを削除します
戻り値
True で成功、それ以外は False
XIC (コンテキスト)
XIC XCreateIC(XIM im,...);
指定された入力メソッドで、コンテキストを作成します。

可変引数で、名前と値のペアを指定し、NULL で終了します。

一部の値は作成時に必須であり、それらの引数が指定されていない場合、入力コンテキストは作成されません。
必須の引数は、入力スタイルとテキストコールバックのセットです (選択した入力スタイルにコールバックが必要な場合)。
他のすべての入力コンテキスト値は後から設定することもできます。
戻り値
入力コンテキストを作成できなかった場合、NULL を返します。

・必須の引数が設定されていない。
・読み取り専用の引数が設定された (XNFilterEvents など)。
・名前が認識できない。
・入力メソッドで、入力メソッドの実装に依存するエラーが発生しました。
void XDestroyIC(XIC ic);
コンテキストを破棄
void XSetICFocus(XIC ic);
指定された入力コンテキストにアタッチされたフォーカスウィンドウが、キーボードフォーカスを受け取ったことを入力メソッドに通知する。
通知を受け取った入力メソッドは、適切なフィードバックを提供するためのアクションを実行する必要があります。
void XUnsetICFocus(XIC ic);
指定された入力コンテキストがキーボードフォーカスを失い、その入力コンテキストにアタッチされたフォーカスウィンドウで、これ以上の入力が期待されないことを入力メソッドに通知する。

XUnsetICFocus を呼び出しても、フォーカスウィンドウのプロパティ値には影響しません。
クライアントは、フォーカスウィンドウに向けられたイベントを、インプットメソッドから受け取る可能性があります。
char *XmbResetIC(XIC ic);
wchar_t *XwcResetIC(XIC ic);
コンテキストの XNResetState が XIMInitialState に設定されている場合、入力コンテキストを初期状態にリセットします。
XIMPreserveState に設定されている場合は、現在の入力コンテキストの状態は保存されます。
どちらの場合も、そのコンテキストで編集中の入力はすべて削除されます。

入力メソッドは、事前編集領域があればそれをクリアし、それに応じてステータスを更新する必要があります。
XmbResetIC または XwcResetIC を呼び出しても、フォーカスは変更されません。

マルチバイトまたはワイド文字列のいずれかで取得するかによって、関数が分かれます。
戻り値
現在の前編集文字列。XFree() で解放する。
ユーザーに描画または表示される前編集テキストがある場合、NULL 以外の文字列を返す必要があります。
表示されるま編集テキストがない場合、NULL でない文字列を返すか NULL を返すかは、入力メソッドの実装に依存します。
XIM XIMOfIC(XIC ic);
コンテキストに関連付けられた入力メソッドを返す
char *XSetICValues(XIC ic,...);
コンテキストの属性をセット。

次のいずれかの理由により、引数が設定されない可能性があります。

・引数は読み取り専用 (XNFilterEvents など)。
・引数名が認識できない。
・実装依存のエラーが発生。

設定する各値は、引数のセマンティクスによって強制されるデータ型と一致する、適切なデータである必要があります。
戻り値
成功時は NULL。それ以外の場合は、設定できなかった最初の引数の名前を返します。
char *XGetICValues(XIC ic,...);
コンテキストの値を取得。

各値は、IC 値が格納される場所を指している必要があります。
つまり、IC 値が T 型の場合、引数は T* 型でなければなりません。
T 自体がポインタ型の場合、XGetICValues は実際のデータを格納するためにメモリを割り当て、クライアントは返されたポインタを使用して XFree を呼び出してこのデータを解放する必要があります。

このルールの例外は、タイプ XVaNestedList の IC 値 (事前編集およびステータス属性の場合) です。
この場合、引数も XVaNestedList 型である必要があります。
次に、型 T を T* に変更し、割り当てられたデータを解放するというルールが、ネストされたリストの各要素に適用されます。
戻り値
成功時は NULL。それ以外の場合は、設定できなかった最初の引数の名前を返します。
ほか
Bool XFilterEvent(XEvent *event, Window w);
XNextEvent を呼び出した後に XFilterEvent を呼び出し、入力メソッドよって、対応するイベントを処理させる。

クライアントのユーザーインターフェイスポリシーは、他のイベント処理メカニズム (モーダルグラブなど) に対するイベントフィルターの優先順位を決定する場合があります。

クライアントは、フィルターが存在する場合、その数、およびフィルターが何を行うのかを知らない可能性があります。
クライアントはフィルタリングされたイベントを破棄する必要があります。

クライアントでグラブが発生し、XFilterEvent が True を返した場合、クライアントはキーボードのグラブを解除する必要があります。
w
フィルタを適用するウィンドウ。
None の場合、XEvent 構造体で指定されたウィンドウに対して、フィルターを適用します。
この引数は、イベントのリダイレクトを行う Xlib 上のレイヤーが、イベントがどのウィンドウにリダイレクトされたかを示すために提供されます。
戻り値
True を返した場合、何らかの入力メソッドによってイベントがフィルタリングされているため、クライアントはイベントを破棄する(それ以上処理しない)必要があります。
False を返した場合、クライアントはイベントの処理を続行する(通常のイベントとして処理する)必要があります。
int XmbLookupString(XIC ic, XKeyPressedEvent *event, char *buffer_return, int bytes_buffer, KeySym *keysym_return, Status *status_return);
int XwcLookupString(XIC ic, XKeyPressedEvent *event, wchar_t *buffer_return, int wchars_buffer, KeySym *keysym_return, Status *status_return);
指定された入力メソッドから文字列を返します。
文字列が返されない場合、buffer_return 引数は変更されません。

Xmb はマルチバイト、Xwc はワイド文字列で返します。

クライアントが KeyPress イベントを受け取った時に実行すること。KeyRelease イベントで実行したときの動作は未定義です。
keycode = 0 の KeyPress イベントは、入力メソッドからの文字列がある時に送られてきます。
buffer_return
通常のキー押し、または変換後テキストの文字列が入る。
指定された入力コンテキストの、入力メソッドにバインドされたロケールのエンコーディングでテキストを返します。
ロケールのエンコーディングの初期状態から始まります (ロケールのエンコーディングが状態に依存する場合)。
keysym_return
NULL 以外で、keycode から変換した KeySym を返す。
文字列と KeySym の両方が返された場合、KeySym 値は返された文字列に必ずしも対応するとは限りません。
status_return
何が返されたかを示す値が入る。

XBufferOverflowbuffer_return のサイズが足りない。
必要なサイズが戻り値で返され、buffer_return および keysym_return の内容は変更されません。
XLookupNone文字列も KeySym もない。
buffer_return と keysym_return の内容は変更されず、関数はゼロを返します。
XLookupCharsbuffer_return のみに文字列が入った。
文字列は、入力コンテキストにバインドされたロケールでエンコードされます。keysym_return 引数の内容は変更されません。
XLookupKeySymKeySym のみが入った。
buffer_return 引数の内容は変更されず、関数はゼロを返します。
XLookupBothKeySym と文字列の両方が返されます
戻り値
XmbLookupString は文字列の長さをバイト単位で返し、XwcLookupString は文字列の長さを文字単位で返します。
コンテキスト・コールバック
void GeometryCallback(XIC ic, XPointer client_data, XPointer call_data);
[XNGeometryCallback] ジオメトリコールバックは、クライアントにジオメトリをネゴシエートすることを要求することを示すために、入力メソッドによってトリガーされます。
call_data
NULL
void DestroyCallback(XIC ic, XPointer client_data, XPointer call_data);
[XNDestroyCallback] destroy コールバックは、何らかの理由でサービスを停止したときに入力メソッドによってトリガーされます。
コールバックが呼び出された後、入力コンテキストは Xlib によって解放されます。
call_data
NULL
void StringConversionCallback(XIC ic, XPointer client_data, XIMStringConversionCallbackStruct *call_data);

//文字列
typedef struct _XIMStringConversionText {
    unsigned short length;
    XIMStringConversionFeedback *feedback;
    Bool encoding_is_wchar;
    union {
    char *mbs;
    wchar_t *wcs;
    } string;
} XIMStringConversionText;

typedef short XIMStringConversionPosition;
typedef unsigned short XIMStringConversionOperation;

typedef struct _XIMStringConversionCallbackStruct {
 XIMStringConversionPosition position;
 XIMCaretDirection direction;
 short factor;
 XIMStringConversionOperation operation;
 XIMStringConversionText *text;
} XIMStringConversionCallbackStruct;

#define XIMStringConversionSubstitution (0x0001)
#define XIMStringConversionRetrieval    (0x0001)

typedef enum {
  XIMForwardChar, XIMBackwardChar,
  XIMForwardWord, XIMBackwardWord,
  XIMCaretUp, XIMCaretDown,
  XIMNextLine, XIMPreviousLine,
  XIMLineStart, XIMLineEnd,
  XIMAbsolutePosition,
  XIMDontChange
} XIMCaretDirection;
[XNStringConversionCallback]
文字列変換コールバックは、入力メソッドによってトリガーされ、変換される文字列を返すようにクライアントに要求します。
返される文字列は、入力コンテキストにバインドされたロケールと一致するエンコーディングを備えたマルチバイト文字列またはワイド文字列のいずれかになります。
call_data
変換する文字列の量を指定します。

positionXIMStringConversionText の文字列の開始位置を指定します。
この値は、クライアントのバッファ内のクライアントのカーソル位置を基準とした位置を文字単位で識別します。
direction文字列の方向
factor文字列の終了位置を示す値。direction を基準とした相対位置。
direction = XIMLineEnd で、factor が 1 の場合、position から現在行の末尾までのすべての文字が返される。
direction = XIMForwardChar or XIMBackwardChar の場合、factor は開始位置からの相対位置を文字で指定します。
operation変換される文字列をクライアントのバッファから削除 (置換) するかコピー (取得) するかを指定します。
XIMStringConversionSubstitution の場合、クライアントは変換対象の文字列を自身のバッファから削除する必要があります。
XIMStringConversionRetrieval の場合、クライアントは変換対象の文字列をバッファから削除してはなりません。
通常、置換操作は再変換と音訳変換に使用され、検索操作は通常、コンテキスト依存の変換に使用されます。
textクライアントによって入力される XIMStringConversionText 構造体。
入力メソッドに送信されるテキストを記述します。
text と feedback が指すデータは、コールバックが返された後、入力メソッドによって XFree を使用して解放されます。
したがって、クライアントは、クライアントにとって重要な内部バッファを指すべきではありません。
同様に、フィードバック要素は現在将来の使用のために予約されているため、クライアントはフィードバックを NULL に設定して、初期化されていないポインターが原因でライブラリがランダムな場所でメモリを解放しないようにする必要があります。
int PreeditStartCallback(XIC ic, XPointer client_data, XPointer call_data);
入力メソッドが事前編集を開始した時に呼び出される。
前編集に関する初期化などを行う。

PreeditDoneCallback が呼び出されるまでは、再度呼び出されることはありません。
call_data
NULL
戻り値
前編集文字列の最大サイズを返します。
正の数は前編集文字列で許可される最大バイト数を示し、-1 の場合は制限がないことを示します。
void PreeditDoneCallback(XIC ic, XPointer client_data, XPointer call_data);
指定された入力コンテキストで事前編集が停止すると、呼び出されます。
クライアントは、PreeditStartCallback によって割り当てられたデータを解放できます。
call_data
NULL
void PreeditDrawCallback(XIC ic, XPointer client_data, XIMPreeditDrawCallbackStruct *call_data);

typedef struct _XIMPreeditDrawCallbackStruct {
  int caret;
  int chg_first;
  int chg_length;
  XIMText *text;
} XIMPreeditDrawCallbackStruct;

//テキスト
typedef struct _XIMText {
  unsigned short length; //文字数
  XIMFeedback *feedback; //各文字のレンダリング
  Bool encoding_is_wchar;
  union {
    char *multi_byte;
    wchar_t *wide_char;
  } string;
} XIMText;

//feedback
typedef unsigned long XIMFeedback;

#define XIMReverse              1L
#define XIMUnderline            (1L<<1)
#define XIMHighlight            (1L<<2)
#define XIMPrimary              (1L<<5)
#define XIMSecondary            (1L<<6)
#define XIMTertiary             (1L<<7)
#define XIMVisibleToForward     (1L<<8)
#define XIMVisibleToBackward    (1L<<9)
#define XIMVisibleToCenter      (1L<<10)
前編集の描画を行う必要がある時に呼ばれる。
文字列を描画した後、文字カーソルを指定された場所に移動する必要があります。
XIMPreeditDrawCallbackStruct
描画に関する情報。

caret前編集バッファへの変更が完了した後に、カーソルを置くべき文字位置
chg_first変更されるテキストの先頭位置
chg_length変更されるテキストの文字数。
0 の場合、chg_first の位置にテキストを挿入する。
text挿入または置き換える文字列の情報。
NULL で、指定範囲のテキストの削除。
text->feedbackstring の各文字の描画タイプの指定。
NULL の場合、前編集バッファ内の周囲と同じタイプを適用する。
NULL でない場合、length 文字分の配列。
text->stringポインタが NULL の場合、テキストの変更はなく、描画の状態のみを更新する。
その場合、feedback は chg_first から length 文字分の個数になる。

text = NULL の場合、chg_first から chg_length 文字分を削除。
chg_length = 0 の場合、chg_first の位置に text の文字列を挿入。
それ以外は、chg_first から chg_length 文字分のテキストを、text の文字列に置き換える。
その後、caret の位置へカーソルを移動する。
XIMFeedback
描画されるテキストのレンダリングは、一般的な方法 (プライマリ、セカンダリなど) または特定の方法 (反転、下線) で指定されます。

XIMVisibleToForward: 前編集テキストが前編集領域のキャレット位置から前方の主描画方向に表示されることが望ましい。
XIMVisibleToBackword: 前編集テキストが、主描画方向に対して、前編集領域のキャレット位置から後方に表示されることが望ましい。
XIMVisibleToCenter: 前編集テキストが前編集領域のキャレット位置を中央に配置して表示されることが望ましい。

上記の可視性のヒントが使用されている場合、前編集文字列の挿入ポイントが可視領域の外側に存在する可能性があります。
前編集文字列全体に対して有効なのは、マスクのうちの 1 つだけであり、特定の入力コンテキストに対するこれらのフィードバックの 1 つを一度に保持できるのは、1 つの文字だけです。
このフィードバックは、別のハイライト (XIMReverse など) と OR 演算できます。
直近に設定したフィードバックのみが有効となり、それ以前のフィードバックは自動的にキャンセルされます。
これはクライアントへのヒントであり、クライアントは前編集文字列を表示する方法を自由に選択できます。

XIMReverse は、前景色と背景色を交換して描画する必要があります。
XIMUnderline は、下線が付けられます。
XIMHighlight、XIMPrimary、XIMSecondary、XIMTertiary のハイライトを使用して描画される文字は、XIMReverse および XIMUnderline とは異なる独自の方法で描画される必要があります。

※ XIMPrimary、XIMSecondary、XIMTertiary の値は、R5 仕様で誤って定義されていたため、X11R6 でそれらを使用できないよう、3,4bit はスキップされている。
void PreeditCaretCallback(XIC ic, XPointer client_data, XIMPreeditCaretCallbackStruct *call_data);

typedef struct _XIMPreeditCaretCallbackStruct {
   int position;     /* Caret offset within preedit string */
   XIMCaretDirection direction;     /* Caret moves direction */
   XIMCaretStyle style;     /* Feedback of the caret */
} XIMPreeditCaretCallbackStruct;

//direction
typedef enum {
  XIMForwardChar, XIMBackwardChar,
  XIMForwardWord, XIMBackwardWord,
  XIMCaretUp, XIMCaretDown,
  XIMNextLine, XIMPreviousLine,
  XIMLineStart, XIMLineEnd, 
  XIMAbsolutePosition,
  XIMDontChange,
} XIMCaretDirection;

//style
typedef enum {
   XIMIsInvisible,   /* Disable caret feedback */ 
   XIMIsPrimary,     /* UI defined caret feedback */
   XIMIsSecondary,   /* UI defined caret feedback */
} XIMCaretStyle;
事前編集中にテキスト挿入ポイントを移動します。
コールバックは、挿入ポイントを新しい位置に移動し、初期位置からの新しいオフセット値を position で返す必要があります。

入力メソッドには、ユーザーが前編集領域でテキスト挿入ポイントを移動 (たとえば、前後に移動) できるようにする、独自のナビゲーションキーがある場合があります。
したがって、入力メソッドは、テキスト挿入ポイントを移動する必要があることを、クライアントに示す必要があります。
XIMCaretStyle
XIMForwardCharキャレットを 1 文字位置前に移動します
XIMBackwardCharキャレットを 1 文字位置後方に移動します
XIMForwardWordキャレットを 1 単語前に移動します
XIMBackwardWordキャレットを 1 単語後方に移動します
XIMCaretUp現在の水平オフセットを維持したまま、キャレットを 1 行上に移動します
XIMCaretDown現在の水平オフセットを維持したまま、キャレットを 1 行下に移動します
XIMPreviousLineキャレットを前の行の先頭に移動します
XIMNextLineキャレットを次の行の先頭に移動します
XIMLineStartキャレットを、そのキャレットを含む現在の表示行の先頭に移動します
XIMLineEndキャレットを、そのキャレットを含む現在の表示行の末尾に移動します
XIMAbsolutePositionコールバックは、プリエディット テキストの先頭から開始して、文字で示されるコールバック データの位置フィールドで指定された位置に移動する必要があります。
したがって、値 0 は、編集前テキストの先頭に戻ることを意味します。
XIMDontChangeキャレットの位置は変更されません
void StatusStartCallback(XIC ic, XPointer client_data, XPointer call_data);
入力コンテキストが作成されるかフォーカスを取得すると、入力メソッドは StatusStartCallback コールバックを呼び出します。
void StatusDoneCallback(XIC ic, XPointer client_data, XPointer call_data);

typedef enum {
     XIMTextType,
     XIMBitmapType,
} XIMStatusDataType;

typedef struct _XIMStatusDrawCallbackStruct {
     XIMStatusDataType type;
     union {
          XIMText *text;
          Pixmap  bitmap;
     } data;
} XIMStatusDrawCallbackStruct;
入力コンテキストが破棄されるかフォーカスを失うと、入力メソッドは StatusDoneCallback を呼び出します。
void StatusDrawCallback(XIC ic, XPointer client_data, XIMStatusDrawCallbackStruct *call_data);
入力コンテキストのステータスを更新する必要がある場合、入力メソッドは StatusDrawCallback を呼び出します。