忍者ブログ
Home > 記事一覧

rago1975の部屋

このブログは管理人が個人的に興味がある事項を書き留めておくメモみたいなものです。当面は、Manjaro Linux関係の記事が中心になります。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


qterminal における East Asian Ambiguous の取扱いについて(あるいは、封印されたコードについて)

先日、qterminalを使いこなす。という記事を書いて、そこで、qtermwidgetのソースコードに変更を加えることによって、qterminal で「※」「☆」といった全角記号を表示させる方法を書きました。この方法を使えば、vimでambiwidthを設定することができます。しかし、前回書いた方法は、ちょっと泥縄的だったと思います。今回、もう少し筋の通ったやり方にします。

qtermwidget のソースコードはgithub上にあるのですが、実際に文字の種類による文字幅を定義しているのは lib/konsole_wcwidth.cppというファイルです。前回の記事では、このファイルの130〜138行目のところに色々な文字を追加していました。今回はこの場所はそのままにしておきます。

実は、このファイルの142行目から216行目にかけて、「#if 0」でコメントアウトされた部分があります。この部分が上述の「※」「☆」等を含むいわゆるEast Asian Ambiguous カテゴリー(wikipediaの記述)に属する文字の幅を全角として処理するコードになります。わざわざコードを書いたうえで、「#if 0」で封印している事情は、詳細は分からないのですが、東アジア以外ではこれらの文字は半角扱いされるので敢えて適用しない、という事なのだと思います。
「#if 0」を外して、他のファイルも一部修正してビルドすると、きちんと全角文字が表示され、vimのambiwidthを設定することができるようになりました。修正箇所はこの通り

それはさておき、わざわざ手動でビルドするのは大変です。上記の経緯を考えると、「#if 0」を外す形でPull request を出すのも、通らなさそうです。

やり方としては、今回の変更を含むソースコードを「qtermwidget-cjk-patched-git」みたいな適当な名前でパッケージ化して、AURに掲載して配布するのが、多分一番手っ取り早いと思います。(AURへの掲載については、私がこれから勉強しなければならないので、ちょっと時間がかかると思いますが。。)


PR

Manjaro Japanという名のサイトについて(私は関与していません。)

どうやら、Manjaro Japanという名のサイトが開設されたらしいです。(Manjaro Forumのトピック

断っておきますが、私はこのサイトには、関わっていません。
このサイトの開設者であるballoon氏より、Manjaro JP(私がやっている日本語ローカライズされたISOの配布元)のリンクについての掲載確認が求められたので、(どのような形であれ)広く頒布されるのは好ましいので、掲載可と回答したところです。それ以外の作業については、関知していません。

で、私がtwitterを観測している範囲で、今日になって「Manjaro Japanというところからいきなりフォローされた」というツイートがチラホラ見られます。どうやら、そのアカウントは最近Manjaroについて言及した人に、手当たり次第にフォローを投げているみたいです。私は、こういう一種のbotまがいの行為には感心しません。Manjaro Linuxそのものに対して、印象を悪くする人が出てこないか、少し心配しています。

balloon氏によると、「日本語コミュニティを整えたい。」とのことです。

私個人としては、ある程度Manjaro Linuxに精通した(公式Forumでの議論に参加できるくらいの)ユーザーが何人か集まって、運営方式等を比較的オープンな場所で議論し、各ユーザーのコンセンサスがとれて運営できる目処が付いた上で、はじめてコミュニティを開くことができるのかな、と考えていました。少なくともそれくらいの準備をしないと(本来の意味での)コミュニティとして機能しないと、思います。

その私の意見は、balloon氏には、前段の問い合わせがあった時に、既に伝えています。(彼は違う考えを持っているみたいですが。)

ともあれ、私は、今後も私のできる範囲で、(そのサイトに関係なく)淡々とManjaro関係の活動を所存ですので、よろしくお願いします。

(追記)
Manjaro Linux の公式Forumは登録(register)すれば、誰でも投稿できます。日本語でも投稿できます。「Planet Manjaro」カテゴリの「Other Language」という板で、非英語圏言語(イタリア、スペイン、ドイツが多い)によるトピックが建てられています。ぜひとも活用してください。

追記 (2016/1/30 7:30)

2ch経由で知ったのですが、どうやらサイトが削除されたみたいです。Twitterのフォローも外されていました。


qterminalを使いこなす。

qterminalについては、先日、日本語(を含む全角文字)の表示について、記事を書いたところですが、今回はVimなどの動かす場合などに使えそうな小技について書きたいと思います。

全角記号の表示

いわゆる、漢字・かなについては、きれいに表示されるのですが、「★」や「※」などのいわゆる全角記号は半角文字と認識されているので表示がくずれます。通常の端末として使用する分にはあまり問題がない(ファイル名にこれらの記号を含むことが無い限り)のですが、Vimを動かしてテキストファイルを編集する場合は少し困ります。
文字の表示幅を決めているのがqtermwidgetというパッケージの中の、lib/konsole_wcwidth.cppというファイルになります。この記事を参照にして、こんな感じで表示したい文字のコードを追加します。なお、各文字のユニコードはこちらのサイトで調べることができます。ファイルの修正後、ビルドします(ビルドの方法はAURでPKGBUILDを見れば良いと思います)。

コマンドラインでの、これらの文字の入力については、まだ不具合がありますが、これは別に良いでしょう。
なお、Vim(Neovim)上で、これらの文字を全角として扱うために、.vimrc(Neovimの場合~/.config/nvim/init.vim)に以下の行を追加します。
set ambiwidth=double

256色環境への設定

Vimには、様々なcolor schemeがありますが、color schemeを反映させるためには、環境変数TERMを(例えば xterm-256color といった)多色対応のものに変更する必要があります。私の環境ではTERMのデフォルトの値がxtermになっていたので、.bashrcに以下の行を加えました。

  if [ -e /usr/share/terminfo/x/xterm-256color ]; then
      export TERM='xterm-256color'
  else       
      export TERM='xterm-color'
  fi

【メモ】mikutter 3.3.3を(作者の環境を推量しながら)Manjaro Linux できちんと動くようにする。

mikutter については、以前、Ruby-mini_portile をアップデートしたら、mikutter の画像表示ができなくなった件という記事で書いたのですが、mikutter のバージョンが3.3.3にアップされて状況が変わりました。
mikutter をAURパッケージとしてインストールすることを考えます。AURパッケージとして、依存パッケージは、ここに示されているとおりです。しかし、そのままyaourt -Sコマンドでインストールしても起動しないか、あるいは起動しても、以前書いたように画像のリンクをクリックしてもウィンドウがポップアップしたまま止まってしまう現象が発生します。

色々試した結果、うまく動かない要因とその対策について、このようにまとめました。

Ruby-mini_portile2 をインストール。

AUR上ではruby-nokogiriのバージョンは 1.6.6.2-2ですが、最新のバージョンは1.6.7.1です。ruby-nokogiriのバージョンが上がった際に、依存関係が変わってしまい、ruby-mini_portileではなくて、ruby-mini_portile2に依存するかたちになっています。ruby-mini_portile2はAUR上にあるので、yaourt コマンドでインストールできます。
yaourt -S ruby-mini_portile2

Ruby-nokogiri のバージョンを上げる。

AUR上ではruby-nokogiriの最新のバージョンはありません。これは手動でgem install コマンドを実行します(管理者権限でインストールする場合)。
sudo gem install nokogiri --no-user-install

Ruby-totoridipjp のインストール

ruby-nokogiriのバージョンアップした後で、mikutterを起動させようとすると、「totoridipjpが無い」という趣旨のエラーメッセージが出て止まってしまいました。途方に暮れ、調べてみるとなぜがAUR上にあったのでyaourtでインストールします。
yaourt -S ruby-totoridipjp

ここまですると、mikutterがうまく動くようになるのではないかと思います。各パッケージのメンテナにつきましては、適切なバージョンアップをお願いしたく思います。

備考

  • AUR上でorumin氏によるmikutter-git というパッケージを見つけたのですが、うまくビルドできませんでした。。(ruby-unfのファイル整合性のチェックに失敗。)
  • 私の手持ちのプラグインのうち、画像投稿プラグインの mikutter-uwm-hommageが動かないです。(/opt/mikutter/core/plugin/gtk/mikutter_window.rb の34行目でエラーが出るっぽい。)

追記(2016/1/18 6:30)

mogunoさんからコメントを頂きまして、それにしたがい、mikutter-uwm-hommageを更新したら動作しました。ありがとうございました。

qterminalの日本語の表示がおかしい件について、修正しようと思った。

先日、【メモ】Manjaro Linux LXQtでNeovimを使ってみるという記事を書きましたが、その中で現在の公式リポジトリに入っているqterminalのバージョンではneovimが動作せず、qterminalの構成要素であるqtermiwidgetを最新のgitバージョンに差し替えると、Neovimは動いたものの、「日本語の全角文字の文字間隔がおかしい」という現象が現れるという話をしました。

具体的な状態は、こんな感じです。全角と半角が混在する行では、文字が重なってしまいます。


その原因を調べるために、ソースコードを読んでみました。去年の2月ぐらいに、qterminalをプロポーショナルフォントで使用できるようにしよう、という修正がなされたみたいでした。等幅フォントの場合、文字を描画する位置は、単純に(フォント幅)×(列位置)になるのですが、プロポーショナルフォントの場合、一文字ごとにQFontmetricsでフォント幅を見て、それを積算して描画する位置を決めるかたちになっていました。
で、そのコードの中で、日本語の全角文字は自動的にプロポーショナルフォント扱いにされ、全角文字のフォント幅が、(実はここらへんの仕様が、私にはよくわからないのですが)厳密には半角文字の2倍になっていないので、上の図のような全角と半角で描画の位置がずれるという現象が発生しているのではないか、と推測されました。

ということで、「日本語の全角文字は自動的にプロポーショナルフォント扱いにする」という部分のコードを削除すれば良いんじゃないか、と思って、コードをいじってやってみたら、こんな感じになりました。



ということで、GithubにPull requestを送りました。その結果です。深夜の錆びついた頭の状態で作業したので、ひどいタイポがあったのですが、そこは見逃してください、、、。

プロフィール

HN:
rago1975 (Takefumi Nagata)
HP:
性別:
男性
自己紹介:
熊本在住の一般人です。Manjaro Linux関係の翻訳などを少々やっています。
twitter: https://twitter.com/rago1975

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

P R