tkcon

tkconは、Tk標準のコンソール(wishのコンソール)を置き換えるために作られた拡張コンソールです。
tkconは、標準のコンソールより更に多くの機能を持っています。また、使いやすさも抜群です。
100% Pure Tclで記述されているため、UNIX(Linux),Windows,Macのプラットフォームで動作します。
tkconは、最近のActiveTclにも添付されています。

主な特徴

tkconの主な特徴は以下の通りです。

スクリーンショット

メインウィンドウはこんな感じです。キーワードが色分けされて見やすくなっています。

tkconの画面

tkconは非常に強力な機能なので、すべての機能を紹介したいところですが、
紙面の都合もあるので?、主な機能だけを紹介します。(^^;)

フォント設定

GUI上からフォント設定はできないので、起動時に読み込まれる$env(HOME)の初期化ファイル
.tkcon.cfg(Windowsの場合は、tkcon.cfg)にフォントの設定を追加します。

# Windowsの例
tkcon font {MS ゴシック} 10

現在のフォント設定は、tkcon fontコマンドで確認できます。

ヒストリ

bash風のヒストリ機能を持っています。
historyコマンドでコマンドの履歴を表示できるのは当然ですが、
表示されたヒストリ番号を指定してコマンドの再実行ができます。
'!'に続いて、ヒストリ番号を指定します。'!!'は直前のコマンドを再実行します。

(tkcon-2.3) 1 % echo foo
foo
(tkcon-2.3) 2 % echo bar
bar
(tkcon-2.3) 3 % history
    1  echo foo
    2  echo bar
(tkcon-2.3) !2
echo bar
bar
(tkcon-2.3) !!
echo bar
bar

tkconを終了する時に、それまで打ち込んだコマンドのヒストリは$env(HOME)の
.tkcon.hstファイル(Windowsの場合は、tkcon.hst)に保存され、次にtkconを起動したときに復元されます。

入力の補完

bash風の入力補完機能を持っています。
ファイル名、ディレクトリ名、コマンド名、プロシジャ名、変数名の入力時に
途中まで打ち込んでTabキーを押すと残りを補完してくれます。
非常に便利なので、積極的に使いましょう。

Emacs風のキーバインド

Emacs風(bash風?)のキーバインドを備えています。
たとえば、最後に実行したコマンドを表示するには、Ctrl+pその逆はCtrl+nで、
この2つのキーさえ知っていれば、ヒストリを上から下までたどれます。
またヒストリの検索は、前方向はCtrl+rで、後方向はCtrl+sでできます。

キャプチャ

tkconで実行した結果をファイルに出力できます。
FileメニューのSave...からもできますが、tkcon saveコマンドでもできます。
出力する際に、すべて、ヒストリ、stdout、stdin、stderrから選択できます。

ホットエラー

コマンド実行の結果がエラーになった場合、エラーメッセージの行が赤くなります。
赤いメッセージの行をクリックすると、スタックトレースが表示されます。
スタックトレースからバグを即座に見つけ出すことができるかもしれません。

電卓

通常はexprコマンドを使わないと計算はできませんが、
PrefsメニューのCalculatorをチェック状態にすると、
コマンドを省略して、1+2とか入力するだけで、結果を返してくれます。

(tkcon-2.3) % 1+2
3
(tkcon-2.3) % expr 1+2
3

ファイルの閲覧と編集

ファイルの閲覧と編集の機能があります。
less, more, editのコマンドでファイルの閲覧および編集ができます。
いずれも別ウィンドウが開きます。簡易エディタだと思ってください。

(tkcon-2.3) more foo.txt

内部コマンド

tkconには、便利な内部コマンド(built-in)があります。
UNIXでお馴染みのコマンドもありますが、内部コマンドは以下の通りです。

alias, clear, dir, echo, eidt, less, ls, more, unalias, what, which
dump, idebug, lremove, observe, puts, tkcon, tclindex

Tclコマンドか内部コマンドかを確認するのには、whichコマンドを使います。

通信

tkcon同士や他のアプリケーションとコミュニケーションができます。
socketを使った簡単な電卓サーバーの例を紹介します。(Tcl/Tk8.3以上必須)
まず、wishで以下の電卓サーバスクリプトを実行します。

interp create -safe calc

proc accept {sock ip port} {
    fconfigure $sock -blocking 0
    fileevent $sock readable [list respond $sock]
}

proc respond {sock} {
    if {[catch {read -nonewline $sock} data] || [eof $sock]} {
	catch {close $sock}
	return
    }
    if {0} {
	# dangerous regular evaluator
	catch $data result
    } else {
	# safe calculator style evaluator
	catch {interp eval calc [list expr $data]} result
    }
    puts $sock $result
    flush $sock
    puts "\"$data\" => $result"
}

socket -server accept 7272

次に、tkconを起動して、Consoleメニュー → Attach to → Socket → Create Connectiondで、
以下のダイアログが開くので、localhostと7272を入力してOKボタンを押します。

tkconで、計算式を入力すると、結果が表示されます。

(tkcon-2.3) % 1+2
3
(tkcon-2.3) % 3+4
7

これは先ほどの電卓機能とは違って、計算式を電卓サーバーに送り、計算を行い、
その結果(答え)を返してもらっています。

Tcl拡張のロード

InterpメニューのPackagesを選択すると、現在インストールされているTcl拡張の一覧が表示されます。
この中からTcl拡張を選択すると、ロードして使える状態にしてくれます。

ライセンス

tkconのライセンスは、ちょっと変わっています。LICENSE TERMSの最後を良く読むと
「このソフトウェアはバーボンウェアである」と(英語ですが)書かれています。
昔はビアウェアと書いてあったので、ビールはもう飽きてしまったのかもしれません。(^^;)
いずれにしろ、作者のJeffさんに会う機会がなく、バーボンをおごることはできないので、
実質、フリーウェア(のようなもの)になると思います。(^^;)


tkcon