結論
環境変数SDL_HINT_IME_SUPPORT_EXTENDED_TEXTを"1"に設定する。
制限を超えた分は複数のイベントに分けて送信されるので、それを処理する。
解説
Pygameでテキスト入力を実現するには、入力の内容をTEXTINPUT、TEXTEDITINGイベントから取得するのが一般的です。
TEXTEDITINGイベントでは、pygame.event.get()で取得したEventオブジェクトにtext(入力テキスト), start(入力の編集カーソル位置), length(編集カーソル位置からの編集文字数)属性が設定され、TEXTINPUTイベントでは、text属性にTEXTEDITINGで入力した内容が格納されます。
SDL_HINT_IME_SUPPORT_EXTENDED_TEXTとは?
初期状態では、 SDL_TEXTEDITINGEVENT_TEXT_SIZEという環境変数で保持できるテキストのサイズがあらかじめ設定されており、サイズはchar(1バイト) × 32ですから、それを超える分の入力は確定しても捨てられます。(UTF-8の日本語は一文字3バイト、ほぼ使われないが最大4バイトの文字まで定義されている)
これを事実上解除する設定がSDL_HINT_IME_SUPPORT_EXTENDED_TEXTというわけです。
仕様
SDL_HINT_IME_SUPPORT_EXTENDED_TEXT="1"では、TEXTEDITINGイベントのtext属性で SDL_TEXTEDITINGEVENT_TEXT_SIZEを超える分は、複数回のTEXTINPUTイベントに分けて送信されることになります。
参考