トップ «前の日(06-29) 最新 次の日(07-01)» 追記

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|

2010-06-29

_ [KEKB]運転終了

1999年に始まったKEKBの運転がついに終了。

トンネル内では、アップグレードに向けた解体作業が始まり、 トンネルの外では、設計&開発が続きます。

_ [雑記]GCC LTO

4.5.1 or 4.6.0で ELF環境以外での LTOサポートが始まるようですが、 Darwinに関しては x86_64のみです。つまり、32bitモードは 未サポートってことでよいのかな?


2024-06-29

_ [FreeBSD]xterm + ibus-anthyでXIM入力

kterm + ibus-anthyで、なぜか全角\がXIM経由で入力出来ない

確認した振る舞い

  • xterm + ibus-anthyなXIM入力
    • U+FF3C(FULLWIDTH REVERSE SOLIDUS)が入力される
  • kterm + ibus-anthyなXIM入力
    • OverTheSpotで入力列を確定しても、shell promptに入力されない
  • emacs + ibus-anthyなXIM入力
    • OverTheSpotで入力列を確定しても、bufferに入力されない

前のWAVE DASHの件と異なり、U+FF3CはEUC側にもCode Pointが定義されているはずなのだが…

ktermにデバック用のパッチを当てた状態での観測

  • デフォルトのEUC-JPなXIMだと、OverTheSpotで確定した文字列のEUC-JP符号で\相当の部分が欠損して到着している
  • XIMをja_JP.UTF-8ロケールで初期化すると、U+FF3Cに対応するUTF-8符号列 0xef 0xbc 0xbcが届く

従って、XIM層かibus側で欠損が発生している模様

現時点で判明している事実と今後調べるべき場所

確認済みの事実

  • ibus-anthyの入力処理engineの実装(pythonによる)では、変換表等はUTF-8で取り扱われている
  • UTF-8 modeなxtermやXIMをUTF-8 localeで初期化したktermには、UTF-8符号列でU+FF3Cが欠落せず届く
  • kterm defaultなXIM入力は、EUC-JP符号列で届くが、EUC-JPに対応する符号点があるにも関わらずU+FF3Cが欠落して届く
  • emacs + ibus-anthyなXIM入力でも同様の欠落が見られる

作業仮説

  • UTF-8 → EUC-JPへの変換過程で何らかの事情でU+FF3Cが欠落したと推論される
    • UTF-8とEUC-JPの相互変換では、EUC-JP側にU+FF3Cに対応するJISX0208由来の符号が存在するので、以下の可能性が考えられる
      • UTF-8 → EUC-JPの変換表の実装ミス
      • UTF-8 → EUC-JPの変換過程に、中間コードを経由しており、中間コードを介した変換時に符号落ちもしくは変換表の実装ミスがある

今後調べる場所

  • emacs + ibus-anthyなXIM入力でも欠損が再現しているので、emacsのXIM初期化時のlocaleを特定すべき
    • EUC-JP系以外であれば、消失地点を絞り込むヒントになる
  • XIM実装側の入出力列の変換機構
    • 少なくともXIM client libraryを含むlibX11には、エンコード変換ヘルパー関数群が実装されている

調べた

  • libX11/src/xlibi18n/lcUniConv/jisx0208.hの変換テーブルが臭い
    • JISX0208→CS(UCS-4)の変換jisx0208_mbtowcが参照するjisx0208_2uni_page21テーブルの実装
      • JISX0208 0x21-0x40 → U+FF3Cを実装
    • CS(UCS-4)→JISX0208の変換jisx0208_wctombが参照するjisx0208_uni2indx_pageff, jisx0208_2charsetテーブルの実装
      • U+005C → JISX0208 0x21-0x40
      • U+FF3C → INVALID
    • xlibi18nの実装を見る限り、U+FF3CをJISX0208側にマップ出来ていないぽぃ
      • JISX0208経由でEUC-JPへの変換が構成されている場合、U+FF3Cは消失しても不思議は無い気がする
      • 変換テーブルを修正してU+FF3C → 0x21-0x40のマッピングを追加したlibX11を作って、ktermを再起動してみたが治らない (外れ?それとも、ibus側の再起動が必要?)X sessionを再起動したら、U+FF3Cを入力出きるようになった
        • emacs + ibus-anthyなXIM入力もU+FF3Cが入るようになった
          • xtermの動作との違いから、XIM入力時のlocaleはUTF-8ではない?
      • 従って、本件の原因はlibX11/src/xlibi18n/lcUniConv/jisx0208.hの実装で確定

カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記