mots quotidiens.
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp by hns, version 2.10-pl1.

先月 2024年03月 来月
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
31

2020年05月21日(木) [n年日記]

#1 ページャーとTcl/Tk

Macintosh や X-window でGUIを使い始めた1990年代の頃から, 「GUI環境にはまともなページャーがない」ということがずっと気になっていた。
Windowsでは *.txt のテキストファイルをクリックするとメモ帳が, 現在のMacではテキストエディットが立ち上がるが, これらは基本的にエディタ なので, 単純にテキストの中身を見るには次のような欠点がある。 一方でDOSには MIEL, 端末では lesslv のような高機能ページャーがあるので, GUIでも何とかならないかと考えていた。 *1 X-windowでは, 学部生の頃に買ったTcl/Tkの最初の本, Ousterhoutの "Tcl and Tk Toolkit" のサンプルプログラムにテキストを表示するサンプルがあったため, 自分はそれをほぼコピペして, テキストファイルを別の窓で見たい時に使っていた。

ただしこれはコピペなので, 内容を深く理解しているわけではなく, メニューがないなど使いやすさには大分距離があった。 今年のゴールデンウィーク中, 思い立ってTcl/Tkを学んでみることにしたので, それでこのプログラム Tkv を書き直してみた。

これはメニューから新しいファイルもオープンできる他, 下部に行数やバイト数も表示される。 特にGUI環境では, スクロールバーがあるので現在テキストのどこを見ているかが明確で, 大きな利点ではないかと思う。
簡単に使えるようにするため, less等と同様に単に q を押す (またはメニューからFile->Quitを選ぶ)と終了し, スペースまたは C-f で1画面先へ, バックスペースまたは C-b で1画面戻り, j,k (viバインド)で1行下/上に進むことができる。 必要な人がいるのか分かりませんが, 一応下に置いておきます。

なお, 上の画像は Tcl7.6jp/Tk4.2jp のもので, 現在のTk8.6では同じファイルでも, 以下のように全く話にならないユーザーインターフェイスになってしまう。

これはTcl/Tkが8.5あたりから, ネイティブのインターフェイスと統合するように なったからで, 正直なところ, 最初の画像のようにMotif風の美しいUIが 簡単に作れることがTkの一番の魅力だったのに, 論理的に合っているだけの 下のようなインターフェイスでは, まったく作る気がしません。 少し調べたところ, Tcl7.6jp/Tk4.2jpをコンパイルすることは今でも可能だった ようなので, 自分でコンパイルして実行することにしました。
なお, 現在はThemed Tk (ttk)というTkの拡張を使うと, 上のようなMotif風の インターフェイスにすることは原理的には可能なようですが, プログラムが 入れ替えになる上, 細かいところが違っているので, やはり元の方がよいように 私は思っています。ただし, Tk4.2jpではUTF-8に対応していないため, 本当は必要な場合には iconv で変換して読み込む, などの対策が必要では ないかと思います。

いずれにしても, 学部生の頃から気になっていた Tcl/Tk をようやく少し書ける ようになり, *2 これでGUIも必要に応じて作れるようになったので, 大変嬉しく思っています。


*1: 当時探したところ, WindowsではttPageというページャーがあったが, GUIのセンスといい, 使いやすさといい, 喜んで使えるソフトウェアではなかった。 一応XにはXlessというプログラムがあるようですが (画像) , これはlessのキーバインドは全然使えない上, 日本語は通らず, GUIとしても 完全に適当なので考慮の対象外になってしまう。リンクの画像は私がXawの代わりに NeXT風のlibneXtawに入れ替えているのでまだましな方で, 標準ではスクロールさえ難しいUIになっている。
*2: Pythonに付属している Tkinter で研究に必要な絵を書く, というくらいのことは 既にやっていました。

1 days displayed.
タイトル一覧
カテゴリ分類
 なかのひと
Powered by hns-2.10-pl1, HyperNikkiSystem Project