[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

xterm -cjk_width と utf-translate-[...] (was: Correct? Display Horizontal Ellipsis on UTF-8 env)



飛田です。

;; 毎度要領を得ない内容ですみません。

ひょっとして xterm の `-cjk_width' オプションって
utf-translate-cjk-set-unicode-range の効いた emacs 専用のオプション
だったりしますか?

>>>>> In [emacs-w3m : No.09459] 
>>>>>	Tatsuya Kinoshita <tats@xxxxxxxxxxxxxx> wrote:

[...]

> 結局、カーソルの動きについてはどうだったのでしょうか。
> japanese-jisx0208なのに「’」の位置で2カウントしてしまうのでしょうか。
> だとすると、私の手元では再現できず、原因もわかりません。

いえ、再度確認してみた所、1カウントしかしませんので、おそらく想定通りだ
と思います。私が確認する段階でなんか変な事してたのだと思います。_o_

[...]

> > で、#x2019 を utf-translate-cjk-set-unicode-range から除外すると、
> > `xterm -cjk_width' 上で `emacs -nw' した場合に、
> [...]
> > > Emacs単独で使う場合には問題なさそうですが、たとえば、-cjk_width付き
> > > のxtermで使うなら、それに合わせる必要があります。上記の設定だと、
> > > U+2018, U+2019を表示すると、Emacsの動作はhalfwidthだけど表示はfullwidth、
> > > というふうになって、カーソルがずれてしまったりするものと思います。
> > 
> > この問題が起こりうまくない、という事だったかと思います。

> はい。「それに合わせる」というのは、-cjk_widthで2桁分の表示になる文字
> についてutf-translate-cjk-set-unicode-rangeで設定しておく、という意味
> になります。

やっと分かってきました。

> なお、先に挙げたDebianパッケージlanguage-env, mule-ucsでの設定例は、
> 主にjapanese-jisx0208に対応する文字について2桁扱いになるよう設定して
> あるだけで、[emacs-w3m:09351]でも述べたとおり、U+2460-U+2473など設定
> できていない文字はありますし、UTF-8環境での文字幅問題が完全に解消され
> るわけでもありません。

むぅ.. なんだかやっかいですね..

> > しかし、これは utf-translate-cjk-set-unicode-range に U+2018, U+2019 が
> > 含まれるか否か、という問題に限った話ではなくて、xterm の `-cjk_width'
> > オプションがどうもおかしいのではないかと思い、今回の utf8 のテキストを
> > 添付したのです。

> どのように-cjk_widthがおかしいと思われているのでしょうか。

> U+00E0等について、xtermは-cjk_width付きでも1桁分で表示すべきだという
> ご意見なのでしょうか。

いえ、`-cjk_width' を付けた時にカーソル位置と実際に表示されている文字列
の位置がずれるのがおかしいと思うのですが、ひょっとしてこれはそういう物
なのでしょうか??

> U+00E2等が2桁分の表示になっていないことについてはおかしいと思いまし
> たが、そういうことをおっしゃっているようには見えませんでした。

私自身が混乱しており、目の前の現象を明確に理解できてないため、うまく説
明出来ず申し訳ありません。

先に木下さんに添付致だいた u2019.html をもとに
utf-translate-cjk-set-unicode-range と xterm の `-cjk_width' オプション
との関係を、以降の 1. と 2. で述べ、先に私の添付させて頂いたた utf-8 の
テキストを元に 3. で xterm の `-cjk_width' オプションと _emacs 以外_ の
場合の説明を試みます。

1. [u2019.html] を元に、
   xterm は `uxterm -cjk_width' で起動し、`emacs -nw'

 (1) utf-translate-cjk-set-unicode-range が _無効_ の場合。
    - C-x C-f ~/tmp/u2019.html
    - C-u 2 C-n C-u 2 C-f すると、`:' の位置にカーソルが移動。
    - C-d すると `:U' の2文字が消去されるように見える。
    - C-x C-w ~/tmp/u2019.mod.html して、再度、
    - C-x C-f ~/tmp/u2019.mod.html すると、実際に消去されたのは `U' の
      みで、`:' は消去されずに残っている。
      
    * 見えている情報と編集結果が齟齬を起こす。これを解消するために
      utf-translate-cjk-set-unicode-range を設定する。

 (2) utf-translate-cjk-set-unicode-range が _有効_ で 2019 も _含む_ 場合。
    - C-x C-f ~/tmp/u2019.html
    - C-u 2 C-n C-u 2 C-f すると、`U' の位置にカーソルが移動。
    - C-d すると、`U' 1文字が消去される。同様、`:' 1文字も正しく消去可
      能。カーソルの動きには違和感はなく、期待通り正しく動作している。
      
    * 期待通りの正しい動作。

    
2. [u2019.html] を元に
   xterm は `uxterm' で起動し、`emacs -nw' (-cjk_width なし)

 (1) utf-translate-cjk-set-unicode-range が _無効_ の場合。
 
    * 移動、編集ともまったくもって普通。期待通り。
     
 (2) utf-translate-cjk-set-unicode-range が _有効_ で 2019 も _含む_ 場合。
    - C-x C-f ~/tmp/u2019.html
    - C-u 2 C-n C-f すると、`U' の位置にカーソルが移動
      -> `:' に移動する事が期待される。
    - C-d すると、何も消去されないように見える。
      -> しかし、C-x u すると、`:' が挿入されてしまうがここではしない。
    - C-x C-w ~/tmp/u2019.mod2.html C-x k してから、再度、
    - C-x C-f ~/tmp/u2019.mod2.html すると、実際には `:' が消去されている。

    * 見えている情報と編集結果が齟齬を起こす。

 (3) utf-translate-cjk-unicode-range が _有効_ で 2019 を _除外した_ 場合。
    o xterm は `uxterm' で起動し、`emacs -nw' (-cjk_width なし)
    - C-u 2 C-n C-f すると、`:' の位置にカーソルが移動。
    - C-d で `:' を消去。
    - C-x C-w ~/tmp/u2019.mod3.html C-k してから、再度、
    - C-x C-f ~/tmp/u2019.mod3.html すると、期待通り `:' が消去されている。

    * 期待通り。

上記、1. 2. の結果から、`xterm' に `-cjk_width' を付けた場合は
utf-translate-cjk-set-unicode-range は必須。逆に `-cjk_width' を付けな
い場合はおそらくこれを使わないほうが良い。
    
3. [test-u8-accentuated.txt]
   xterm は `uxterm -cjk_width' で起動し、_emacs 以外_ で確認。

 (1) vim ~/tmp/test-u8-accentuated.txt した場合。
    - j で 1行移動。
      -> アクサンつき文字列の行へ。
      
    - $ でカーソルを1行目の行末に移動
      -> カーソルは s の位置に。
      -> 実際にはその先に見える `Z' に移動してほしい。
      
    - x でカーソル位置 `s' の 1文字削除
      -> カーソル位置から後ろが削除されてしまったように見える。
      -> カーソルは 1文字前の `r' へ移動。
      
    - :w ~/tmp/test-u8-accentuated.vimod.txt で別名保存
    - :wq で一旦終了。
    
    - vi ~/tmp/test-u8-accentuated.vimod.txt で別名保存したものを再度編
      集する。
    - j で 1行移動。
    - $ で行末へ
    - カーソル位置は 49桁目の `r' へ移動。
      -> 先ほど見えなくなった `r' 以降は存在しており、実際に削除された
         のは行末 `Z' 1文字のみ。
	 
    - 17h で `I with umlaut' の次にある `a' に移動。
    - x でカーソル位置 1文字削除。
      -> `a' 1文字を削除したつもりが `a' から `k' までの 11文字が消えた
         ように見える。行末から 3文字は `zZZ' のはずがなぜか `zZq' になっ
         ている。[*1]
	 
    - :w ~/tmp/test-u8-accentuated.vimod2.txt
    - :wq
    
    - 再度 vi ~/tmp/test-u8-accentuated.vimod2.txt すると、`a' を消去し
      たつもりが、実際には `k' が削除されている。行末は `zZZ' と編集前
      と変化しておらず、ファイル保存時とは見えていた情報と異なっている。

   [*1] この時点で C-l すると、`a' は消えておらず実際には `k' 1文字が消
        えただけである事が分かる。
      
    * なんかうまく編集できない。

試しに、http://www.stained-g.net/shinichiro/test-u8.html というページを
作ってみました。

もしよろしければ emacs-w3m あるいは各種ターミナル上の w3m 単体でテスト
(C-i とか <TAB> でリンクを辿りながら C-l をタイプ) してみて下さい。
    
-- 
  Shinichiro HIDA  shinichiro@xxxxxxxxxxxxx
  GPG fingerprint = 5F2D 1656 FFF6 F691 A51C  5E61 E416 D398 470C 1CE9