d.sunnyone.org
sunnyone.org

ページ

ラベル Loqui の投稿を表示しています。 すべての投稿を表示
ラベル Loqui の投稿を表示しています。 すべての投稿を表示

2021-02-12

Loqui 0.7.0 リリース

Gtk3に対応したLoqui 0.7.0をリリースしました。 

 https://github.com/sunnyone/loqui/releases 

微妙に見た目が違うのですが、まずは動くのが大事だと思ったのでリリースしました。何かおかしかったら教えてください。 

レポジトリはLaunchPadからGitHubに移動しました。本当はActionsでビルドできるようにしようかなと思ったのですが、結構手間がかかりそうなのでとりあえずパス。 

gtk2から3の変更点はここに書いている通りで、deprecatedを許容すれば、基本的には機械的に変えていけばいいものばかりなんですが、CSSでスタイリングするようになったためなのか、サイズを変えてるような処理のところがちょっと形を変えないといけないかなという感じです。


2015-12-13

Loqui 0.6.4 リリース

今回のリリースは主に、昨晩の「Ubuntu 15.10 リリース記念オフラインミーティング 15.12」のあとの飲み会で、@ut_maito氏が初めて使っているところを見て、使いにくそうに見えた部分のうち、さらっと改善できそうな部分についての対応です。バグを見つけたので併せて直しました。

主な変更点はこんなかんじ。

* Shift+Enterで送信する機能の追加
→複数行モードのときキーボードで送信する手段がなかったので送信できるようにした。すでにCtrl+Enterは1行モード時にNOTICEとして送信にしていたので、Shift+EnterでPRIVMSGで送信。1行の側もShift+Enterで送信できるようにして、どちらもCtrl+EnterでNOTICE / Shift+EnterでPRIVMSGになるよう統一した。

* 初回起動時にアカウント設定ダイアログを表示
→最初に何していいかわからない感じが強く出ていたので、手っ取り早くできそうなところで、最初に使うことになるアカウント設定ダイアログを出すことにした。

* アカウント削除時にクラッシュするバグの修正
→アカウント設定の検証をしていたら、アカウント削除で落ちることがあるバグを見つけたので修正。

* アカウント設定からプロトコル選択の削除
* 不要な「ツール」メニューの削除
→拡張用に若干複雑なUIになっていたのだけど、多分追加しないので削除。プロトコル選択画面で選べるIP Messenger機能は若干実装されていたのだけど、使っている人はいないよね。


初回起動時はチャンネルバッファの部分が余っているので、ここにガイド的なことを書いてあげたいなぁと思ったのだけど、だいぶ拡張がいりそうなので見送り。

キー(Ctrl+↑/Ctrl+↓)でチャンネルを選択すると、チャンネルツリーの選択部分がわかりにくいという話もあったのだけど、直そうとするとややこしそうなので見送り。手元のCinnamonだと起きないので、テーマに依ってしまう部分もある。

こんなんだけど、ちょっとでもわかりやすくなってるといいな。

2015-11-15

Loqui 0.6.3 リリース(クラッシュバグの修正)/Git移行

Loqui 0.6.3をリリースしました。一部環境でチャンネルツリーを(ダブル)クリックしたとき、segfaultして落ちることがあるようです。ここでは再現しないのですが、影響する環境では発生頻度は高そうなので、基本的にバージョンアップをおすすめします。
https://launchpad.net/loqui

Gitの特殊オペレーションに慣れすぎてBazzarがしんどくなってきたので、メインのブランチをGitに移行しました。レポジトリはLaunchpadのままです。基本 https://code.launchpad.net/loqui にある通りですが、sshを使う場合はlaunchpad login名をgit+ssh://hoge@ というふうにつけてあげる必要があるのでご注意ください。


---
落ちていた場所は、Gtk側からのツリーノードの件数の取得要求に答えるコードで、GtkTreeModelの規約にあっていなかった。呼ばれてなくても呼ばれていてもまぁそういうメソッドかな、数数えるならこっち呼んだほうがよくねって呼ぶようになったのかなという感じなんだけど、環境によって呼ばれたり呼ばれなかったりするのは謎。

2015-10-26

Loqui 0.6.2 リリース

Loqui 0.6.2 をリリースしました。
https://launchpad.net/loqui

内容は、共通バッファ(見ているチャンネル以外が全て流れてくる左下のペイン)のメッセージの行のどこかをダブルクリックすると、そのメッセージのチャンネルを選択する機能の追加。

実用的になったタイミングから、あったほうが便利だよなーと思いつつ、これ作るのいろいろ手加えなきゃで大変だよなーと思ってたんだけど、当初想定よりもっとざっくりした方法でだいたい動く作り方を思いついたからそれで作った。あればいいよなーと思ってから実装されるまで10年以上かかってる機能になるね...

2015-07-04

Loqui 0.6.1 リリース(タブ補完機能の追加)

0.6.1を出しました(0.6.0はバグがあったので、すぐに0.6.1をリリース)。前回が2013-03なので、2年ぶりくらいですね。

そこまで大きな変更はないのですが、タブ補完機能は純粋に新機能なので、新しいバージョンにしてみました。現在のアカウントのチャンネル名と、現在のチャンネルのnick名を補完できます。かぶっていた場合はステータスバーに候補を出すので、意味ないから消してたという人がいたら、一度出してみてください(UIとしてはイマイチですが、邪魔にならず、しかも一番楽に作れたので...)

launchpadがGitに対応しているらしいので、本当はgitに移行しようかなとも思ったんですが、過去のリンクを切ってまでこれから変更していくこともないかなと。

昨日フォントが変えられず困っている方がいたので、確認してみたところ、チャンネルバッファのフォントが変更できないバグがあったので直したのが0.6.0のきっかけです。フォントは~/.loqui/stylercのGlobalFontの行を以下のように変更することで、変えることができます。

GlobalFont=Takao Gothic 14

2013-03-20

Loqui 0.5.5リリース/LoquiのISO-2022-JP半自前変換の仕組み

Loqui 0.5.5を出しました。受信時に行なっていたISO-2022-JPの半自前変換を、送信時にも行うようにしました。ただし、受信時と異なり、「半角カナ」などの文字は、エラーにします。

これもまたSolaris用で、Solaris iconvでUTF-8からISO-2022-JPに変換すると、IRCNet的に困ったエスケープシーケンスをつけてしまうことへの対応です。Solarisで起きる現象については、この一連のスレッドにまとまっています(もう少しするとopensolaris.orgがなくなるので消えてしまうのですが…)

GNU iconvではこのようなことがないので、Linuxユーザの方は今までのままで大丈夫です(0.5.5からLinuxでも自前になるので、かえってあやしいかもしれません。うまく変換できていたのにいかなくなったケースがあれば教えてもらえると助かります。)

さて、せっかくなのでずっと前から実装されていた半自前変換について書いておこうと思います。UTF-8⇔ISO-2022-JP変換をする人の参考になれば。(パフォーマンスはよくないし、ISO-2022-JP-2004なども視野に入れるとやることが増えるので、対応できるケースは限られるのですが…)

Loquiの半自前UTF-8⇔ISO-2022-JP変換


Loquiでは、アカウント設定の「コード」の「一覧から選択する」で「Japanese」を選んだ場合、あるいは「ロケール情報から自動判定する」を選んで「ja_JP」から始まるlocaleで利用している場合、(ただのiconv呼び出しでない)ISO-2022-JP向けの文字コード変換ロジックが動きます。

この変換ロジックはいわゆる「半角カナ」や機種依存文字(の一部:NEC特殊文字(13区))を受信しても化けずに表示させるためのものなのですが、ざっくり言うと、「iconvが失敗しそうな文字は自前で変換」「そうでない文字はiconvに変換してもらう」(半自前変換)という処理になっています。ただし、以下の図のような、ちょっと変わった流れをしています。


Gtk+(2以降)は、画面に表示するためにUTF-8を要求するのですが、日本語でIRCを使おうとすると、ISO-2022-JPを使っていることがあるので、この場合ISO-2022-JPからUTF-8に変換しないといけません。pureにISO-2022-JPのバイト列が来るならGLibのiconv wrapperでさくっと変換するだけで良いのですが、先の「半角カナ」があったりするので、手を入れないといけないわけです。

まぁ、変換処理を自前で持とう、という話になるのですが、ISO-2022-JPは漢字にJIS X 0208という文字セットを使っているのに対し、UTF-8はUnicodeなので、基本的には1文字1文字の変換テーブルを持つ必要があり、いろいろな意味でちょっとつらいです。そのため、「特殊な対応が必要な文字だけ自前で変換し、そうでないものはiconvに変換してもらう」というアプローチを考えます。

ところが、そうすると1文字1文字変換する必要がでてきますが、困ったことにISO-2022-JPは「ここからJIS X 0208の漢字だよー」といったような、文字セットの呼び出しがあり、コンテキストに意味をもったエンコーディングなのです。そのため、ISO-2022-JPのバイト列のままiconvに渡そうとすると、特殊な文字が入ってきたりこなかったりして、状態の管理がちょっとしんどくなります。

そこでどうするかというと、いったんISO-2022-JPからEUC-JPに変換します。EUC-JPでもJIS X 0208を使っているので、ISO-2022-JPからは計算式的に変換できる一方で、EUC-JPはISO-2022-JPと異なり、持続する文字セットの呼び出し(コンテキストの永続的変更)がない(次の文字だけ変更というのはあります)ので、状態の管理が簡単になります。これが上図のようなちょっと変わった流れをしている理由です。

詳しく知りたい方は、loqui_codeconv_tools.cを見てください。

ちなみに、Loquiはこういった言語ごとの特殊ロジックとlocale名の対応テーブルを持っています。10年以上に渡り、日本語以外に使われたことはないのですが…

余談

0.5.5を出してこの図を描こうと思ったら、いつのまにか横道にそれてました

2013-01-27

Loqui 0.5.4 released (bug fix for Solaris11)

久々に出しました。Loqui 0.5.4です。ほぼほぼSolaris11で動くようにしただけなので、すでに動いてる環境の方々は別に上げなくても大丈夫です。具体例がSolaris11ですが、特殊対応をしたわけではなく、「これだと裏でunsigned使われてたらうまくいかないよなぁ」という感じのものを直しただけなので、もしかしたら前は動かなかったけどこれで動くようになったプラットフォームがあるかもしれません。

aboutの画面を書きかえたときに、「Copyright (C) 2002-2013」というのを見て、ブランクがあるとはいえ結構な時間たってるんだなーと思ってちょっと驚いた。もう10年以上経つのね...