ヘルプのおまけ

マニアックなカスタマイズを行うためのヒント。


おちゅ〜しゃの定義するGtkAction

おちゅ〜しゃはGTK+-2.4で導入されたアクションベースのメニューやツールバーという概念を用いて実装されています。

そのためメニューやツールバーに現れる要素には、対応するGtkActionが定義されており、グローバルキーバインディングの設定メニュー・ツールバーのカスタマイズに用いることができます。

GtkActionは本質的にグローバルなオブジェクトであり、メニューバー、ツールバーおよびポップアップメニューの好きな所に、好きなように配置できるものです。

おちゅ〜しゃの定義するGtkActionはその操作の対象の性質で分類すると以下に記すように、グローバルなもの現在のセレクションを対象とするもの現在キーボードフォーカスを持つ表示部分を対象とするものおよび特定のコンテキストを対象とするものと、大凡四通りに分類できます。

以降の説明では次のような表記を用います。

識別子
accel-path
ニーモニック
キーバインディング
GtkActionの説明

補足

「識別子」はochusha-ui.xml内のaction属性の値として用いる識別子です。

「accel-path」はochusha-accel-map.rc内のaccel_path指定に用いる識別子です。

「ニーモニック」はメニューなどに表れる、このGtkActionの表記です。

「キーバインディング」はデフォルトのキーバインディングです。

「GtkActionの説明」はこのGtkActionの説明です。

「補足」は実装上の制限などに関する補足説明です。

グローバルなGtkAction

厳密にはおちゅ〜しゃ本体のウィンドウに関連付けられたGtkActionであり、グローバルという言葉ではやや語弊がありますが、基本的にウィンドウを一つしか開けない現状のおちゅ〜しゃでは「書き込みウィンドウ」などの一部の例外を除き、いつでも有効なGtkActionです。

次のようなものがあり、主にメニューバーやおちゅ〜しゃの設定ダイアログに現れる要素に対応しています。

本質的にグローバルなGtkAction

操作対象というモノを必要としないか、あるいは対象が常に存在するような操作に対応するGtkActionとしては次のようなものが定義されています。

OpenFile
<Actions>/OchushaActions/OpenFile
ファイルを開く(F)
ファイルを開きます。

実装されていません。

指定されたファイルがおちゅ〜しゃの管理下にあるDATファイルならば対象のスレを開き、管理下になければそのファイルをインポートするという機能になる予定です。

ClearCookies
<Actions>/OchushaActions/ClearCookies
クッキーを消去する
HTTPのCookieを一括消去します。

本当はウェブブラウザっぽく個々のCookieを選択的に消去するナイスなGUIが必要なのかもしれませんが、現状では余り使い道がないので一括消去の機能のみが実装されています。2ちゃんねるへの書き込み時に「ブラウザがおかしいですよん」などというエラーメッセージで書き込みに失敗した時などに使うかもしれません。

おちゅ〜しゃを起動していない状態で~/.ochusha/cookies.sqliteを削除しても同じ効果を得られます。おちゅ〜しゃの実行中におちゅ〜しゃを終了させずに消せるという点が唯一の存在意義です。

OpenURL
<Actions>/OchushaActions/OpenURL
URLを開く(L)
Ctrl+L
URLを指定してスレ一覧やスレを開きます。おちゅ〜しゃで開けることが明らかではない(既知の掲示板のものではない)URLが与えられた場合には外部ウェブブラウザで開きます。

ナビゲーションツールバーが表示されていれば、そのURLエントリにキーボードフォーカスが移り、それ以外の場合にはダイアログが表示されます。

Quit
<Actions>/OchushaActions/Quit
終了(Q)
Ctrl+Q
おちゅ〜しゃを終了します。
Stop
<Actions>/OchushaActions/Stop
中止(S)
現在進行中のネットワークアクセスを停止させます。

画像へのアクセス待ち行列を放置しているので完全に機能しているとは言い難いですが、これはバグと言うべきでしょう。

WorkOffline
<Actions>/OchushaActions/WorkOffline
オフライン作業(W)
おちゅ〜しゃをネットワークにアクセスしないモードに切り替えます。
Preferences
<Actions>/OchushaActions/Preferences
設定(N)
おちゅ〜しゃの設定ダイアログを開きます。
Login2chBe
<Actions>/BBS2chHelperActions/Login2chBe
2ch Beログイン(B)
2004年11月頃(?)に2ちゃんねるで導入されたユーザー登録の一種であるBeにログインし、内部的にセッションIDを取得します。
Login2chViewer
<Actions>/BBS2chHelperActions/Login2chViewer
2chビューア(●)ログイン(B)
2chビューア(いわゆる●)を使用するためにログインし、セッションIDを取得します。

現在は旧版おちゅ〜しゃの実装を元に実験的に実装してあるだけで、既に作者の●の契約が切れているため、動作確認は一切されていません。現状ではうまく動いたとしても書き込み時などに●を用いることができるだけの、いわゆる負け犬専用実装になっています。

FindAgain
<Actions>/MenubarActions/FindAgain
次を検索(G)
Ctrl+G
現在の検索文字列にマッチする次の要素を検索します。

検索バーの「次を検索(N)」に連動します。

SearchBoardlist
<Actions>/BoardlistActions/SearchBoardlist
板一覧の検索(D)
板一覧で文字列検索を行います。
RefreshBoardlist
<Actions>/BoardlistActions/RefreshBoardlist
板一覧の更新(D)
2ちゃんねるの掲示板一覧を再確認し、サーバの移転への追従や新規カテゴリ・掲示板の板一覧への追加を行います。
AddBoard
<Actions>/BoardlistActions/AddBoard
板の追加(A)
未知の掲示板へのアクセスにおちゅ〜しゃを利用可能にするために、掲示板を登録します。

追加できるのは2ちゃんねるの掲示板、2ちゃんねる互換、まちBBS、もしくはライブドアJBBS(旧したらばJBBS)掲示板のみです。

ManageBoardlist
<Actions>/BoardlistActions/ManageBoardlist
板一覧の管理(M)
板一覧を編集するためのウィンドウを開きます。

実装されていません。

ManageBookmarks
<Actions>/BookmarksActions/ManageBookmarks
ブックマークの管理(M)
ブックマークを編集するためのウィンドウを開きます。

実装されていません。

SelectListViewFonts
<Actions>/OchushaActions/SelectListViewFonts
板一覧とスレ一覧表示のフォント選択(L)
板一覧やブックマーク、スレ一覧の表示に用いるフォントを設定します。

「板一覧とスレ一覧表示のフォント選択」となっているのは、旧おちゅ〜しゃ時代の名残です。

SelectThreadViewFonts
<Actions>/OchushaActions/SelectThreadViewFonts
スレ表示のフォント選択(T)
スレの表示に用いるフォントを設定します。

レスエディタや「俺様用のしおり」の表示にも同じフォントが使われます。

DefaultThreadlistRule
<Actions>/BoardActions/DefaultThreadlistRule
スレ一覧表示のデフォルト規則(D)
スレ一覧表示のデフォルト規則を選択します。
RestoreAllBoards
<Actions>/BoardActions/RestoreAllBoards
全ての板の修復
持っているはずのスレが一覧に表示されていないことに気付いたユーザ、あるいは、おちゅ〜しゃの実装時にバグを埋め込んでスレの情報を壊した時の作者が使うと、手持ちのDATファイル群を漁ってある程度の情報を復元してくれるツールを起動します。
Notification
<Actions>/OchushaActions/Notification
通知(N)
サーバ移転時などに、その情報を表示するウィンドウを開きます。
DebugConsole
<Actions>/OchushaActions/DebugConsole
デバッグコンソール(D)
Ctrl+Shift+J
ネットワークアクセスの状況、経過、結果などデバッグ向きの情報を表示するウィンドウを開きます。
SchemeConsole
<Actions>/OchushaActions/SchemeConsole
Schemeコンソール(S)
Scheme手続きの出力を表示するウィンドウを開きます。Scheme手続きの実行時に発生したエラーもここに表示されます。

将来的にはEmacsのlisp-interactionモードっぽくしたいと考えています。

About
<Actions>/OchushaActions/About
おちゅ〜しゃについて(A)
おちゅ〜しゃのバージョン情報やライセンス情報などを表示するウィンドウを開きます。
Help
<Actions>/OchushaActions/Help
ヘルプ目次(H)
F1
ヘルプの目次ページを開きます。

現在表示されているスレ一覧を操作対象とするGtkAction

操作対象が「現在表示されているスレ一覧」と固定されているGtkActionとしては次のようなものが定義されています。

スレ一覧が表示されていない場合、これらのGtkActionはinsensitive(無反応状態)になります。

ThreadlistTabs
<Actions>/ViewManagerActions/ThreadlistTabs
スレ一覧のタブ(L)
現在スレ一覧ペインに表示されているタブの名前を表示します。またスレ一覧ペインで開かれているスレ一覧から表示するタブを選択します。
BoardArrowLeft
<Actions>/ViewManagerActions/BoardArrowLeft
左の板
現在表示されているスレ一覧タブの左のタブに移ります。
BoardArrowRight
<Actions>/ViewManagerActions/BoardArrowRight
右の板
現在表示されているスレ一覧タブの右のタブに移ります。
GoBackThreadlist
<Actions>/BoardActions/GoBackThreadlist
前のスレ一覧(B)
現在のスレ一覧タブで直前に開いていたスレ一覧に戻ります。
GoForwardThreadlist
<Actions>/BoardActions/GoForwardThreadlist
次のスレ一覧(F)
現在のスレ一覧タブで直後に開いたスレ一覧に戻ります。
BoardProperties
<Actions>/BoardActions/BoardProperties
板の情報(B)
現在のスレ一覧タブに表示されている板のプロパティを開きます。板固有の設定なども行えます。
NewThread
<Actions>/BoardActions/NewThread
新規スレッド(N)
現在表示されているスレ一覧に対応する掲示板で新規スレッドを立てるためのウィンドウを開きます。
ThreadlistRule
<Actions>/BoardActions/ThreadlistRule
現在のスレ一覧表示の規則(R)
現在表示されているスレ一覧に適用する表示規則を選択します。
CloseCurrentThreadlist
<Actions>/BoardViewManagerActions/CloseCurrentThreadlist
このスレ一覧を閉じる(L)
現在表示されているスレ一覧を閉じます。
SearchThreadlist
<Actions>/BoardViewManagerActions/SearchThreadlist
スレ一覧の検索(L)
現在表示されているスレ一覧で文字列検索を行います。
RefreshThreadlist
<Actions>/BoardViewManagerActions/RefreshThreadlist
スレ一覧の更新(L)
現在表示されているスレ一覧を更新します。
BookmarkCurrentBoard
<Actions>/BoardViewManagerActions/BookmarkCurrentBoard
この板をブックマーク(D)
現在表示されているスレ一覧に対応する板をブックマークします。
BoardInfo
<Actions>/BoardViewManagerActions/BoardInfo
板の情報(B)
現在表示されているスレ一覧に対応する板のプロパティを開きます。板固有の設定なども行えます。

現在表示されているスレを操作対象とするGtkAction

操作対象が「現在表示されているスレ」と固定されているGtkActionとしては次のようなものが定義されています。

スレが表示されていない場合、これらのGtkActionはinsensitive(無反応状態)になります。

ThreadTabs
<Actions>/ViewManagerActions/ThreadTabs
スレのタブ(T)
現在スレペインに表示されているタブの名前を表示します。またスレペインで開かれているスレから表示するタブを選択します。
ThreadArrowLeft
<Actions>/ViewManagerActions/ThreadArrowLeft
左のスレ
現在表示されているスレタブの左のタブに移ります。
ThreadArrowRight
<Actions>/ViewManagerActions/ThreadArrowRight
右のタブ
現在表示されているスレタブの右のタブに移ります。
WriteResponse
<Actions>/ThreadViewActions/WriteResponse
レスを書く(R)
現在表示されているスレにレスを投稿するためのウィンドウを開きます。
JumpToBookmark
<Actions>/ThreadViewActions/JumpToBookmark
しおりへ(J)
現在表示されているスレに挿入された「俺様用のしおり」の位置へ移動します。
GotoBottom
<Actions>/ThreadViewActions/GotoBottom
最後のレスへ(B)
現在表示されているスレの最後のレスへ移動します。
GotoTop
<Actions>/ThreadViewActions/GotoTop
最初のレスへ(T)
現在表示されているスレの最初のレスへ移動します。
GotoNext
<Actions>/ThreadViewActions/GotoNext
次へ(N)
現在のスレタブで直後に表示した位置もしくはページに移動します。
GotoPrev
<Actions>/ThreadViewActions/GotoPrev
前へ(P)
現在のスレタブで直前に表示していた位置もしくはページに移動します。
ResetCurrentThread
<Actions>/ThreadViewActions/ResetCurrentThread
スレをリセット
現在表示されているスレを閉じて読まなかったことにします。この時、スレのDATファイルも削除されます。
CloseCurrentThread
<Actions>/ThreadViewManagerActions/CloseCurrentThread
このスレを閉じる(T)
現在表示されているスレを閉じます。
SearchThread
<Actions>/ThreadViewManagerActions/SearchThread
スレの検索(T)
現在表示されているスレで文字列検索を行います。
RefreshThread
<Actions>/ThreadViewManagerActions/RefreshThread
スレの更新(T)
現在表示されているスレを更新します。
AutoRefreshThread
<Actions>/ThreadViewManagerActions/AutoRefreshThread
スレの自動更新
現在表示されているスレの自動更新を開始します。
ResetThreadClose
<Actions>/ThreadViewManagerActions/ResetThreadClose
リセット(R)
現在表示されているスレを閉じて読まなかったことにします。この時当該スレのDATファイルも削除されます。
BookmarkCurrentThread
<Actions>/ThreadViewManagerActions/BookmarkCurrentThread
このスレをブックマーク(T)
現在表示されているスレをブックマークします。
ThreadInfo
<Actions>/ThreadViewManagerActions/ThreadInfo
スレの情報(T)
現在表示されているスレのプロパティを開きます。
OpenBoardCM
<Actions>/ThreadViewManagerActions/OpenBoardCM
板を開く(D)
現在表示されているスレの属する板を開きます。
ThreadInfoCM
<Actions>/ThreadViewManagerActions/ThreadInfoCM
スレの情報(I)
現在表示されているスレのプロパティを開きます。

スレ表示内のコンテキストメニュー用にニーモニックだけを変えたThreadInfoと同等のGtkActionです。

BookmarkThreadCM
<Actions>/ThreadViewManagerActions/BookmarkThreadCM
このスレをブックマーク(M)
現在表示されているスレをブックマークします。

スレ表示内のコンテキストメニュー用にニーモニックだけを変えたBookmarkCurrentThreadと同等のGtkActionです。

AutoRefreshThreadCM
<Actions>/ThreadViewManagerActions/AutoRefreshThreadCM
スレの自動更新
現在表示されているスレの自動更新を開始します。

AutoRefreshThreadと同等です。というかダブリなので、いずれ削除します。

RefreshThreadCM
<Actions>/ThreadViewManagerActions/RefreshThreadCM
スレの更新(R)
現在表示されているスレを更新します。

スレ表示内のコンテキストメニュー用にニーモニックだけを変えたRefreshThreadと同等のGtkActionです。

SearchThreadCM
<Actions>/ThreadViewManagerActions/SearchThreadCM
スレの検索(S)
現在表示されているスレで文字列検索を行います。

スレ表示内のコンテキストメニュー用にニーモニックだけを変えたSearchThreadと同等のGtkActionです。

ResetThreadCloseCM
<Actions>/ThreadViewManagerActions/ResetThreadCloseCM
スレをリセット
現在表示されているスレを閉じて読まなかったことにします。この時、スレのDATファイルも削除されます。

ResetCurrentThreadと同等です。というかダブリなので、いずれ削除します。

おちゅ〜しゃの設定関連のGtkAction

おちゅ〜しゃでは、設定ダイアログだけでなくメニューバーやクリッカブルアイコンでも同じ設定を変更することができます。そのため、大多数の設定関連要素はGtkActionとして実装されています。

以下にあげるものが設定関連のGtkActionです。

NavigationToolbar
<Actions>/PreferenceActions/NavigationToolbar
ナビゲーションツールバー(N)
ナビゲーションツールバーの表示・非表示を選択します。
ThreadlistToolbar
<Actions>/PreferenceActions/ThreadlistToolbar
スレ一覧ツールバー(L)
スレ一覧ツールバーの表示・非表示を選択します。
ThreadToolbar
<Actions>/PreferenceActions/ThreadToolbar
スレッドツールバー(T)
スレッドツールバーの表示・非表示を選択します。
BoardlistToolbar
<Actions>/PreferenceActions/BoardlistToolbar
板一覧ツールバー(D)
板一覧ツールバーの表示・非表示を選択します。

実装されていません。

BookmarksToolbar
<Actions>/PreferenceActions/BookmarksToolbar
ブックマークツールバー(B)
ブックマークツールバーの表示・非表示を選択します。

実装されていません。

BoardlistSidebar
<Actions>/PreferenceActions/BoardlistSidebar
板一覧(D)
板一覧サイドバーの表示・非表示を選択します。
BookmarksSidebar
<Actions>/PreferenceActions/BookmarksSidebar
ブックマーク(B)
Ctrl+B
ブックマークサイドバーの表示・非表示を選択します。
HistorySidebar
<Actions>/PreferenceActions/HistorySidebar
履歴(S)
履歴サイドバーの表示・非表示を選択します。

実装されていません。

PostHistorySidebar
<Actions>/PreferenceActions/PostHistorySidebar
投稿履歴(P)
履歴サイドバーの表示・非表示を選択します。

実装されていません。

ShowHiddenBoardlistItems
<Actions>/PreferenceActions/ShowHiddenBoardlistItems
隠された要素を表示
隠すを設定された板一覧の板やフォルダも表示します。隠すを設定していた板やフォルダの隠す状態を解除する時に使います。

旧おちゅ〜しゃ時代から存在するためにShowHiddenBoardlistItemsと名前が付いていますが、ブックマークなどの表示にも同じ設定が用いられます。

ShowHiddenThreads
<Actions>/PreferenceActions/ShowHiddenThreads
隠されたスレを表示
隠すを設定されたスレもスレ一覧に表示します。隠すを設定していたスレの隠す状態を解除する時に使います。
VerticalPlacement
<Actions>/PreferenceActions/VerticalPlacement
スレ一覧表示とスレ表示を垂直に配置する
スレ一覧表示とスレ表示を垂直に配置します。
DefaultOpenInTab
<Actions>/PreferenceActions/DefaultOpenInTab
デフォルトでタブで開く
新しいページを開く時にタブで開くのをデフォルトにします。
SelectTabWhenOpened
<Actions>/PreferenceActions/SelectTabWhenOpened
新しいタブを開いた時にそのタブを選択する
新しいタブを開いた時にそのタブを選択します。
FocusFollowMouse
<Actions>/PreferenceActions/FocusFollowMouse
マウスポインタに合わせてフォーカスを移動する
マウスポインタの移動に合わせてキーボードフォーカスを移動します。
EmbededResponseEditor
<Actions>/PreferenceActions/EmbededResponseEditor
埋め込みレスエディタ(E)
スレ表示ペイン下部の埋め込み型レスエディタの表示・非表示を切り替えます。
PreferEmbededResponseEditor
<Actions>/PreferenceActions/PreferEmbededResponseEditor
埋め込みレスエディタ優先
レスエディタ選択時に埋め込みレスエディタを優先します。
ShrinkableBoardTab
<Actions>/PreferenceActions/ShrinkableBoardTab
板タブの縮小を許可する
スレ一覧のタブブックマーク部分の縮小表示を許可します。
BoardTabTooltips
<Actions>/PreferenceActions/BoardTabTooltips
板タブのツールチップを表示する
スレ一覧のタブブックマーク部分で板名をツールチップとして表示します。
ShowBoardTabAlways
<Actions>/PreferenceActions/ShowBoardTabAlways
板のタブを常に表示する
スレ一覧のタブブックマーク部分を常に表示します。
ShowBoardPaneAlways
<Actions>/PreferenceActions/ShowBoardPaneAlways
スレ一覧表示ペインを常に表示する
スレ一覧表示ペインを常に表示します。
ShrinkableThreadTab
<Actions>/PreferenceActions/ShrinkableThreadTab
スレタブの縮小を許可する
スレのタブブックマーク部分の縮小表示を許可します。
ThreadTabTooltips
<Actions>/PreferenceActions/ThreadTabTooltips
スレタブのツールチップを表示する
スレのタブブックマーク部分でスレタイをツールチップとして表示します。
ShowThreadTabAlways
<Actions>/PreferenceActions/ShowThreadTabAlways
スレのタブを常に表示する
スレのタブブックマーク部分を常に表示します。
ShowThreadPaneAlways
<Actions>/PreferenceActions/ShowThreadPaneAlways
スレ表示ペインを常に表示する
スレ表示ペインを常に表示します。
TransparentABone
<Actions>/PreferenceActions/TransparentABone
透明あぼーんを有効にする
ユーザの指示によりあぼーんされたレスを完全に非表示にします。
DisablePopupABone
<Actions>/PreferenceActions/DisablePopupABone
あぼーんレスのポップアップを無効にする
ユーザの指示によりあぼーんされたレスをポップアップ表示できないように表示します。
DisableABone
<Actions>/PreferenceActions/DisableABone
ローカルあぼーんを無効にする
ユーザによるレス番指定のあぼーんを無効にします。
EnableChainABone
<Actions>/PreferenceActions/EnableChainABone
連鎖あぼーんを有効にする
連鎖あぼーんを有効にします。

実装されていません。

ShowMailto
<Actions>/PreferenceActions/ShowMailto
メイル欄をスレ内に表示
メイル欄の内容をスレ表示に含めて表示します。
BeIcon
<Actions>/PreferenceActions/BeIcon
Beアイコン表示(B)
2008年9月の中頃に2ちゃんねるで導入された、(ウェブブラウザで見ると)アイコン持ちのユーザがBeでログイン中に書き込んだレスにアイコンが表示される機能に対応し、スレ内にアイコンを表示します。
InlineImage
<Actions>/PreferenceActions/InlineImage
インライン画像表示(I)
スレ内の画像っぽいリンクを自動的に開き、縮小して画像をスレ内のリンクの左に埋め込んで表示します。
DownloadShownImagesOnly
<Actions>/PreferenceActions/DownloadShownImagesOnly
表示されている画像のみダウンロードする(D)
おちゅ〜しゃにおいて画像ファイルのダウンロードはバックグラウンドで実行されます。そのため、実際に画像ファイルのダウンロードが始まろうとしている時には、切っ掛けとなったスレが閉じられている可能性があります。この場合に、待ち行列に並んでいる分の画像のダウンロードを取り止めます。
HideMyBookmark
<Actions>/PreferenceActions/HideMyBookmark
俺様用しおりの自動挿入を抑制する(S)
各スレの既得・新着レス境界への「俺様用のしおり」の自動挿入を抑制します。
PopupResponse
<Actions>/PreferenceActions/PopupResponse
レスのポップアップを有効にする
スレ表示内のリンクにマウスポインタが入った時に、リンク先が同じスレである場合にレスの内容をポップアップ表示します。
PopupImage
<Actions>/PreferenceActions/PopupImage
ポップアップ画像表示(P)
スレ表示内のリンクにマウスポインタが入った時に、それが画像っぽいリンクであるならば、対象を自動的に開き、ポップアップ表示します。
PopupTitle
<Actions>/PreferenceActions/PopupTitle
スレタイのポップアップを有効にする
スレ表示内のリンクにマウスポインタが入った時に、リンク先が別スレである場合にタイトルをポップアップ表示します。
PopupID
<Actions>/PreferenceActions/PopupID
IDポップアップを有効にする
スレ表示のID部分のリンクにマウスポインタが入った時に、そのスレ内で同IDを持つレス番リンクを集めてポップアップ表示します。
EnableProxyToRead
<Actions>/PreferenceActions/EnableProxyToRead
読み込み時にProxyサーバを使う
読み込み時にProxyサーバを使います。
EnableProxyToPost
<Actions>/PreferenceActions/EnableProxyToPost
書き込み時にProxyサーバを使う
書き込み時にProxyサーバを使います。
EnableProxyForImages
<Actions>/PreferenceActions/EnableProxyForImages
画像取得時にProxyサーバを使う
画像取得時にProxyサーバを使います。
EnableDebugConsole
<Actions>/PreferenceActions/EnableDebugConsole
デバッグコンソールの出力を有効にする
デバッグ用メッセージをデバッグコンソールに表示します。
EnableSchemeConsole
<Actions>/PreferenceActions/EnableSchemeConsole
出力をSchemeコンソールに表示する
Schemeインタプリタからの出力をSchemeコンソールに表示します。
Login2chBeAtStartup
<Actions>/PreferenceActions/Login2chBeAtStartup
起動時に2ちゃんねるBe掲示板にログインする
起動時に2ちゃんねるBe掲示板にログインします。
Save2chBePasswd
<Actions>/PreferenceActions/Save2chBePasswd
2ちゃんねるBe掲示板のパスワードを保存する
2ちゃんねるBe掲示板のパスワードを保存します。
Login2chViewerAtStartup
<Actions>/PreferenceActions/Login2chViewerAtStartup
起動時に2ちゃんねるビューア(●)にログインする
起動時に2ちゃんねるビューア(●)にログインします。
Save2chViewerPasswd
<Actions>/PreferenceActions/Save2chViewerPasswd
2ちゃんねるビューア(●)のパスワードを保存する
2ちゃんねるビューア(●)のパスワードを保存します。
RestoreOpenedTabs
<Actions>/PreferenceActions/RestoreOpenedTabs
起動時に前回終了時に開いていたタブを復元する
起動時に前回終了時に開いていたタブを復元します。

現在のセレクションへのGtkAction

主にコンテキスト(ポップアップ)メニューとして用いられるGtkActionとしては以下のようなものが定義されています。

CutSelection
<Actions>/OchushaActions/CutSelection
切り取り(T)
Ctrl+X
現在のセレクションを切り取り、クリップボードにコピーします。
CopySelection
<Actions>/OchushaActions/CopySelection
コピー(C)
Ctrl+C
現在のセレクションをクリップボードにコピーします。
PasteSelection
<Actions>/OchushaActions/PasteSelection
張り付け(P)
Ctrl+V
現在キーボードフォーカスを持つ部位にクリップボードの内容を張り付けます。
DeleteSelection
<Actions>/OchushaActions/DeleteSelection
削除(D)
Del
現在のセレクションを削除します。
ExternalTextTools
<Actions>/SchemeManagerActions/ExternalTextTools
テキスト用外部ツール
選択されたテキストに作用する外部ツールを選択します。

おちゅ〜しゃのデフォルトではGoogleや辞書、Wikipediaなどを使ってウェブ検索するツールが登録されています。

リンク専用のGtkAction

以下にあげるものは、スレなどに表示されるリンクや、板一覧の板、ブックマークのフォルダ以外の要素、スレ一覧のスレなど、おちゅ〜しゃ的にリンク扱いできるものをクリックしたり選択した結果セレクションにURLが存在する場合にのみ有効となるGtkActionです。

OpenLinkLocation
<Actions>/LinkUIActions/OpenLinkLocation
開く(O)
Ctrl+O
選択されたリンクを開きます。

板やスレ、ブックマークなど、サイドバーやスレ一覧で選択されたモノの内、選択された内容がURLで表現できる場合には、このGtkActionの対象となります。

OpenLinkLocationInTab
<Actions>/LinkUIActions/OpenLinkLocationInTab
タブで開く(T)
Ctrl+T
選択されたリンクをタブで開きます。

板やスレ、ブックマークなど、サイドバーやスレ一覧で選択されたモノの内、選択された内容がURLで表現できる場合には、このGtkActionの対象となります。

OpenLinkLocationWithWebBrowser
<Actions>/LinkUIActions/OpenLinkLocationWithWebBrowser
ウェブブラウザで開く(W)
選択されたリンクをウェブブラウザで開きます。

板やスレ、ブックマークなど、サイドバーやスレ一覧で選択されたモノの内、選択された内容がURLで表現できる場合には、このGtkActionの対象となります。

BookmarkLinkLocation
<Actions>/LinkUIActions/BookmarkLinkLocation
ブックマーク(B)
選択されたリンクをブックマークします。

板やスレ、ブックマークなど、サイドバーやスレ一覧で選択されたモノの内、選択された内容がURLで表現できる場合には、このGtkActionの対象となります。

CopyLinkLocation
<Actions>/LinkUIActions/CopyLinkLocation
URLをコピー(C)
選択されたリンクのURLをクリップボードにコピーします。

板やスレ、ブックマークなど、サイドバーやスレ一覧で選択されたモノの内、選択された内容がURLで表現できる場合には、このGtkActionの対象となります。

ExternalLinkTools
<Actions>/SchemeManagerActions/ExternalLinkTools
リンク用外部ツール
リンクに作用する外部ツールを選択します。

おちゅ〜しゃのデフォルトではwgetやd4xといったダウンローダやInternet Archive Wayback Machineで開くといったツールが登録されています。

CopyFileLocation
<Actions>/ImageLinkActions/CopyFileLocation
ファイルの位置をコピー(F)
画像キャッシュファイルのフルパスをクリップボードにコピーします。

このGtkActionは、リンクが画像っぽいと判断され、更に、その画像がキャッシュされている場合にのみ有効になります。

TenureLinkImage
<Actions>/ImageLinkActions/TenureLinkImage
リンク画像を保存
キャッシュされた画像ファイルを(容量などの設定により表示されないでいると勝手に消去される)一時キャッシュではなく、削除するまで消えない永続キャッシュへと移動します。

このGtkActionは、リンクが画像っぽいと判断され、更に、その画像が一時キャッシュに格納されている場合にのみ有効になります。

ABoneLinkImage
<Actions>/ImageLinkActions/ABoneLinkImage
リンク画像をあぼーん
画像をあぼーんします。キャッシュされていた画像も削除され、これ以降同じURLの画像は完全に無視されるようになります。

このGtkActionは、リンクが画像っぽいと判断され、更に、その画像がキャッシュされている場合にのみ有効になります。

ABoneLinkServer
<Actions>/ImageLinkActions/ABoneLinkServer
リンク先鯖をあぼーん
画像をダウンロードしたサーバをあぼーんします。同じサーバからダウンロードされキャッシュされている全ての画像も削除され、これ以降同じサーバの画像は完全に無視されるようになります。
ExternalImageTools
<Actions>/SchemeManagerActions/ExternalImageTools
画像用外部ツール
キャッシュされた画像ファイルに作用する外部ツールを選択します。

このGtkActionは、リンクが画像っぽいと判断され、更に、その画像がキャッシュされている場合にのみ有効になります。

おちゅ〜しゃのデフォルトでは名前を付けて画像をcpコマンドにより保存する機能や、eogやgimpなどの画像用のツールが登録されています。

板一覧やブックマーク専用のGtkAction

以下にあげるものは板一覧やブックマークで要素が選択されている時にのみ有効となるGtkActionです。

NewFolder
<Actions>/TreeUIActions/NewFolder
新しいフォルダ(F)
選択した位置に新しいフォルダを作ります。
HideTreeItem
<Actions>/TreeUIActions/HideTreeItem
隠す(H)
選択された掲示板、ブックマーク要素やフォルダを隠します。
ToggleTreeItemHiddenState
<Actions>/TreeUIActions/ToggleTreeItemHiddenState
隠す状態を反転(H)
選択された掲示板、ブックマーク要素やフォルダの隠す状態を反転します。
CopyTreeItemName
<Actions>/TreeUIActions/CopyTreeItemName
名前をコピー(N)
選択された掲示板、ブックマーク要素やフォルダの名前をクリップボードにコピーします。
CopyTreeItemNameURL
<Actions>/TreeUIActions/CopyTreeItemNameURL
名前とURLをコピー(A)
選択された掲示板、ブックマーク要素の名前とURLをクリップボードにコピーします。
TreeItemProperties
<Actions>/TreeUIActions/TreeItemProperties
プロパティ(P)
選択された掲示板、ブックマーク要素やフォルダのプロパティを開きます。

ブックマークフォルダ専用のGtkAction

以下にあげるものはブックマークフォルダが選択されている場合にのみ有効となるGtkActionです。

OpenFolderAsThreadlist
<Actions>/BookmarksActions/OpenFolderAsThreadlist
フォルダをスレ一覧として開く(L)
選択されたフォルダをスレ一覧として開きます。

ブックマークフォルダ専用です。

OpenFolderAsThreadlistInTab
<Actions>/BookmarksActions/OpenFolderAsThreadlistInTab
フォルダをスレ一覧としてタブで開く(T)
選択されたフォルダをスレ一覧としてタブで開きます。

ブックマークフォルダ専用です。

スレ一覧専用のGtkAction

以下にあげるものはスレ一覧でスレが選択されている場合にのみ有効となるGtkActionです。

OpenTrackbackWithWebBrowser
<Actions>/ThreadlistActions/OpenTrackbackWithWebBrowser
トラックバックをウェブブラウザで開く(B)
選択されたスレのトラックバックをウェブブラウザで開きます。
MarkThread
<Actions>/ThreadlistActions/MarkThread
印を付ける(M)
選択されたスレに印を付けます。
UnmarkThread
<Actions>/ThreadlistActions/UnmarkThread
印を外す(U)
選択されたスレの印を外します。
HideThread
<Actions>/ThreadlistActions/HideThread
隠す(H)
選択されたスレを隠します。
ToggleThreadHiddenState
<Actions>/ThreadlistActions/ToggleThreadHiddenState
隠す状態を反転(H)
選択されたスレの隠す状態を反転します。
ResetThread
<Actions>/ThreadlistActions/ResetThread
リセット(R)
選択されたスレを読まなかったことにします。この時当該スレのDATファイルも削除されます。
CopyThreadURL
<Actions>/ThreadlistActions/CopyThreadURL
URLをコピー(C)
選択されたスレのURLをクリップボードにコピーします。
CopyThreadTitle
<Actions>/ThreadlistActions/CopyThreadTitle
スレタイをコピー(N)
選択されたスレのタイトルをクリップボードにコピーします。
CopyThreadTitleURL
<Actions>/ThreadlistActions/CopyThreadTitleURL
スレタイとURLをコピー(A)
選択されたスレのタイトルとURLをクリップボードにコピーします。
ThreadProperties
<Actions>/ThreadlistActions/ThreadProperties
プロパティ(P)
選択されたスレのプロパティを開きます。

スレ内の特殊リンクを対象とするGtkAction

おちゅ〜しゃのスレ表示には見た目はリンクっぽいが、役割が特殊なものが現れます。以下にあげるものは、そういった特殊なリンクをクリックした時にのみ有効となるGtkActionです。

WriteResponseToThisResponse
<Actions>/ResLinkActions/WriteResponseToThisResponse
このレスにレス(W)
書き込みエディタを開き、「>>レス番号」を挿入します。

最近使用したエディタがウィンドウであれば書き込みウィンドウが、埋め込みレスエディタであれば埋め込みレスエディタが開かれます。

InsertBookmark
<Actions>/ResLinkActions/InsertBookmark
俺様用のしおりを挿入
クリックしたレスの直後に「俺様用のしおり」を挿入します。
ABoneResponse
<Actions>/ResLinkActions/ABoneResponse
あぼーん
クリックしたレスをあぼーんします。

実装の都合により、あぼーんは次回以降スレを開く時まで反映されません。また「ローカルあぼーんを無効にする」を設定している場合にはこの選択によるあぼーんが無効化されます。

UnABoneResponse
<Actions>/ResLinkActions/UnABoneResponse
あぼーん解除
クリックしたレスのあぼーんを解除します。

実装の都合により、あぼーんの解除は次回以降スレを開く時まで反映されません。

ABoneIDInThisThread
<Actions>/IDLinkActions/ABoneIDInThisThread
IDをこのスレであぼーん
クリックしたIDを現在表示されているスレのあぼーんIDとして登録します。
ABoneIDInThisBoard
<Actions>/IDLinkActions/ABoneIDInThisBoard
IDをこの板であぼーん
クリックしたIDを現在表示されているスレ所属する板のあぼーんIDとして登録します。

現在のViewへのGtkAction

ここで言う現在のViewとは、「サイドバー」、「スレ一覧タブ」、「スレタブ」のいずれかの内、現在キーボードフォーカスを持っているか最後に持っていたものを示します。

時々おちゅ〜しゃがキーボードフォーカスの在処に追従できない場合があり、それはバグですが、サイドバーにキーボードフォーカスがある場合を除外すると、タイトルバーにスレタイが表示されている時は「スレタブ」、スレタイが表示されておらず板名が表示されている時は「スレ一覧タブ」が現在のViewになります。

BookmarkThisPage
<Actions>/CurrentViewActions/BookmarkThisPage
このページをブックマーク(B)
Ctrl+D
現在のViewをブックマークします。
CloseThisPage
<Actions>/CurrentViewActions/CloseThisPage
このページを閉じる(C)
Ctrl+W
現在のViewを閉じます。
FindInThisPage
<Actions>/CurrentViewActions/FindInThisPage
このページの検索(F)
Ctrl+F
現在のViewで文字列検索を開始します。
GoBack
<Actions>/CurrentViewActions/GoBack
戻る(B)
Alt+←
現在のViewで直前に表示していた位置もしくはページに戻ります。
GoForward
<Actions>/CurrentViewActions/GoForward
進む(F)
Alt+→
現在のViewで直後に表示した位置もしくはページに進みます。
PageInfo
<Actions>/CurrentViewActions/PageInfo
ページ情報(I)
Ctrl+I
現在のViewに対するプロパティを表示します。
RefreshThisPage
<Actions>/CurrentViewActions/RefreshThisPage
このページを更新(R)
Ctrl+R
現在のViewを更新します。

特定のコンテキストを対象とするGtkAction

以下は、スレ一覧もしくはスレのタブブックマーク部分のコンテキストメニュー専用のGtkActionです。

BookmarkTab
<Actions>/ViewManagerActions/BookmarkTab
このタブをブックマーク(T)
タブで表示されているスレ一覧に対応する板もしくはスレをブックマークします。
RefreshTab
<Actions>/ViewManagerActions/RefreshTab
このタブを更新(R)
タブで表示されているスレ一覧に対応する板もしくはスレを更新します。
CloseTab
<Actions>/ViewManagerActions/CloseTab
このタブを閉じる(C)
タブで表示されているスレ一覧に対応する板もしくはスレを閉じます。
AutoRefreshThreadTab
<Actions>/ViewManagerActions/AutoRefreshThreadTab
このタブの自動更新
タブで表示されているスレの自動更新を開始します。

スレタブ専用です。


おちゅ〜しゃのSchemeインタプリタについて

おちゅ〜しゃは自前のSchemeシステムを用いています(ソースツリーのlibtscore以下にまとまっています)。バージョン0.5.x以前にはTinySchemeをベースとして改造したSchemeインタプリタを用いていましたが、おちゅ〜しゃをC++で新規設計・実装するにあたり、主に速度とメンテナンス性を求めて自前実装に切り替えました。

サードパーティ製のものを用いることに抵抗感があるわけではないのですが、TinyScheme並にコンパクトでおちゅ〜しゃに組み込みやすく、かつ、性能が良いものを見つけるのは困難でした(Boehm GCなどを使っているものは、何時何が起こるのか予測しづらいので選択肢から除外しています)。

――Schemeの実装そのものとして配布されているものは、やはり単体でのプログラミング言語システムとしての完成度、添付ライブラリの充実などを主要な目標として発展しているので、良いもの程大きくなるのは当然です。また、どちらかというとプログラムの全部もしくは大部分をSchemeで書きたいというユーザ向けに設計されているので、余所の言語で書かれたプログラムに組み込んでちょろっとScheme手続きを呼び出す……などという使い方にはシステムが大げさすぎます。

ネタ的に一度は一から書いてみたかったという理由もあります。

おちゅ〜しゃでのSchemeの使い方

おちゅ〜しゃでは、設定ダイアログっぽいもので選択可能にするなどという方針では選択そのものが煩雑になってしまうか、選択肢そのものが極端に多様化しうるような、そもそもアプリ本体にハードコーディングしてしまうのがイクナイ感じが否めない様々なモノを提供しつつ、かつ、(ユーザなど)サードパーティによるカスタマイズの余地を残したい――という場面でSchemeによる実装を用いています。

具体的には、現時点で以下の目的でSchemeによる実装を用いています。

おちゅ〜しゃ特有の手続き

Scheme手続きによるおちゅ〜しゃのカスタマイズに利用可能なおちゅ〜しゃ特有のScheme手続きには、以下のようなものがあります。

ここに記載されていないものについては、今後仕様変更が予想されているか、現時点では全く使い道がないかのいずれかです。

現時点の実装では、実行時に板オブジェクトとスレオブジェクトの区別を厳密には確認してはいないため、これらを混同して適切でない手続きを呼び出すとおちゅ〜しゃがSegmentation Faultで落ちる可能性が高いことに注意。

(url-encode-string STRING)

STRINGをURLエンコードした文字列を返す。

(url-decode-string STRING)

URLエンコードされた文字列STRINGをデコードして得られた文字列を返す。

(board-get-bbs-type BOARD)

板オブジェクトBOARDの表す掲示板種別を示す整数値を返す。掲示板種別を表す数値は以下の変数に対応する。

OCHUSHA-BBS-TYPE-2CH
2ちゃんねる掲示板。
OCHUSHA-BBS-TYPE-MACHIBBS
まちBBS。
OCHUSHA-BBS-TYPE-JBBS-LIVEDOOR
ライブドアJBBS(旧したらばJBBS)。
OCHUSHA-BBS-TYPE-2CH-HEADLINE
2ちゃんねるヘッドライン。
OCHUSHA-BBS-TYPE-2CH-BE
(新設当時)文字エンコーディングがEUC-JPだった頃の2ちゃんねるBe掲示板。
OCHUSHA-BBS-TYPE-BBSPINK
BBSPink。
OCHUSHA-BBS-TYPE-BBSPINK-HEADLINE
BBSPinkヘッドライン。
OCHUSHA-BBS-TYPE-2CH-COMPATIBLE
2ちゃんねる互換の掲示板。
OCHUSHA-BBS-TYPE-2CH-COMPATIBLE-RO
2ちゃんねる互換の掲示板(読み込み専用)。
OCHUSHA-BBS-TYPE-2CHLIKE-EUCJP
文字エンコーディングがEUC-JPな2ちゃんねる風掲示板。
OCHUSHA-BBS-TYPE-UNKNOWN
OCHUSHA-BBS-TYPE-JBBS
OCHUSHA-BBS-TYPE-MITINOKU
OCHUSHA-BBS-TYPE-2CH-RESERVED
通常は現れない。

(board-get-url BOARD)

板オブジェクトBOARDの表す掲示板のURL文字列を返す。

(board-get-name BOARD)

板オブジェクトBOARDの表す掲示板名文字列を返す。

(thread-get-bbs-type THREAD)

スレオブジェクトTHREADの表すスレの掲示板種別を返す。値は(board-get-bbs-type BOARD)の返す値に準ずる。

通常は(board-get-bbs-type (thread-get-board THREAD))と同じ値が返るが、2ちゃんねるの「面白ねたニュース」板のように、鯖移転に伴い掲示板種別が変更になった場合には異なる値が得られる。

(thread-get-board THREAD)

スレオブジェクトTHREADの表すスレの属する掲示板を表す板オブジェクトを返す。

(thread-get-id THREAD)

スレオブジェクトTHREADの表すスレのID文字列を返す。

(thread-get-title THREAD)

スレオブジェクトTHREADの表すスレのスレタイ文字列を返す。

(thread-get-url THREAD)

スレオブジェクトTHREADの表すスレのURL文字列を返す。

(thread-get-rank THREAD)

スレオブジェクトTHREADの表すスレの属する板のスレ一覧内における最新の順位を返す。DAT落ちしたスレの場合には0が返る。

(thread-get-previous-rank THREAD)

スレオブジェクトTHREADの表すスレの属する板のスレ一覧内における前回の順位を返す。

(thread-get-number-of-responses-on-server THREAD)

スレオブジェクトTHREADの表すスレの鯖が保持していると期待されるレス数を返す。

(thread-get-number-of-responses-read THREAD)

スレオブジェクトTHREADの表すスレの既読レス数を返す。

(thread-get-number-of-new-responses THREAD)

スレオブジェクトTHREADの表すスレの前回のスレ一覧更新以降のレス数の増分を返す。

(thread-get-number-of-responses-available THREAD)

スレオブジェクトTHREADの表すスレのその時点で存在すると期待されるレス数を返す。

(thread-get-number-of-responses-to-read THREAD)

スレオブジェクトTHREADの表すスレの未読レス数を返す。

(thread-get-birthtime THREAD)

スレオブジェクトTHREADの表すスレのスレ立て日時を表すUTC時刻相当の整数値を返す。スレのID文字列を整数に変換したものと同値。

(thread-new? THREAD)

スレオブジェクトTHREADの表すスレがスレ一覧に表示されたことのないスレかどうかを返す。

(thread-alive? THREAD)

スレオブジェクトTHREADの表すスレが鯖に現存することが期待できるかどうかを返す。

(thread-stopped? THREAD)

スレオブジェクトTHREADの表すスレがスレストされていることが判明しているかどうかを返す。

(thread-marked? THREAD)

スレオブジェクトTHREADの表すスレに印がつけられているかどうかを返す。

(thread-hidden? THREAD)

スレオブジェクトTHREADの表すスレが隠されているかどうかを返す。

(register-threadlist-rule NAME LABEL DESCRIPTION PROCEDURE)

スレ一覧の表示規則を登録する。各引数の意味は以下の通り。

NAME
内部的に規則を識別するために用いられる文字列。同じ名前の規則が存在している場合、上書きされる。
LABEL
GUIのメニューなどに表示される文字列。
DESCRIPTION
規則の説明。GTK+-2.12以降の場合、規則選択のコンボボックスのツールチップとして表示される。
PROCEDURE
スレ一覧の表示時に、各スレについて一度ずつ実行される手続き。スレ一覧のスレはこの手続きの返す値の昇順でソートされ、#fが返されたスレはスレ一覧に表示されない。引数としてスレオブジェクトを一つだけ取る手続きでなければならない。

現時点でPROCEDUREの返す値はC/C++のlongとして取り扱われます。また、ソート済リストへの要素の追加に関して速度的に致命的な不具合を持っていたGTK+-2.4.x以前のGtkTreeSortableGtkListStore対策のための実装上の都合を由来として、現時点では正の整数であることが期待されます――既におちゅ〜しゃはバージョン2.4.x以前のGTK+はサポートしないと決めているのでいつでも完全な整数を許す実装に変更することはできますが、int64_tもしくはdoubleを用いるように変更するという選択肢もあるので、検討中です。

(register-external-tool NAME LABEL DESCRIPTION TOOL-TYPE TEMPLATEorPROCEDURE)

リンクなどのコンテキストメニューに現れる外部ツールを登録する。各引数の意味は以下の通り。

NAME
内部的に規則を識別するために用いられる文字列。同じ名前のツールが登録されている場合、上書きされる。
LABEL
GUIのメニューなどに表示される文字列。
DESCRIPTION
ツールの説明。ファイル選択ダイアログのタイトルに用いられる。
TOOL-TYPE
ツールの種別を示し、どのメニューに現れるべきかを決めるシンボル。現在内部的には、'link-tool、'image-tool、'text-toolの3種類が予約されている。
TEMPLATEorPROCEDURE
メニュー選択の結果何をすべきかを定義するコマンドラインテンプレート文字列、もしくは、コンテキストを元にテンプレートを計算する手続き。おちゅ〜しゃはテンプレート文字列内の"%ARG%"というキーワードをコンテキストとして与えられたURLや画像ファイルのパス名、選択中の文字列などで置換し、その結果として得られた文字列をコマンドラインとして外部プログラムを実行する。テンプレート文字列内に"%FILENAME_FROM_ARG%"や"%FILENAME%"が現れた場合には、ファイル選択ダイアログを表示し、ダイアログでユーザが選択したファイル名で置換する。

Schemeによるカスタマイズ詳細

おちゅ〜しゃは特定の場面で予約してあるScheme手続きを呼び出し、その手続きに計算を任せることで、ユーザのカスタマイズ対象となりうるad-hocな計算をおちゅ〜しゃ本体にハードコーディングすることを避けています。

ここでは、それらの手続きのおちゅ〜しゃからの要求仕様を簡単に書いておきます。

同内容は/usr/share/ochusha/ochusha-init.scm.defaultあるいは/usr/share/doc/ochusha-0.6/ochusha-init.scm.default辺りにインストールされているだろうサンプルプログラム内にコメントとして記載されています。

(decorate-list-entry THREAD)

引数としてスレオブジェクトTHREADを取り、スレ一覧におけるそのスレの配色を決定するペア(前景色 . 背景色)を返す。

前景色や背景色の値には、おちゅ〜しゃの設定ダイアログでユーザが変更可能な前景色・背景色それぞれ4通りの色を参照する定数扱いの変数や、(gdk-color-parse 色指定文字列)で得られる値を用いる。

(interest-thread? THREAD)

引数としてスレオブジェクトTHREADを取り、ユーザが興味を持っているスレかどうかを判定する。

スレ一覧のpやnによるカーソル移動やスペースキーでのスレ読み込みの対象となるべきスレかどうかを判定するために用いられる。

(rewrite-message MESSAGE)

MESSAGEとして与えられた文字列をレスの内容として、表示用に加工する。

(image-link? URL)

文字列URLが画像へのリンクっぽいかどうかを判定する。

(rewrite-image-link URL)

画像へのリンクっぽいと判定された文字列URLについて、実際にアクセスするURLを決定する。

手続きの値としてはURLそのものを表す文字列もしくは(URL文字列 . Referer文字列)というペアが期待される。それ以外の値が返された場合、おちゅ〜しゃはURLそのものを画像へのURLとして取り扱う。

(redirect-image-link URL PAGE-SOURCE)

文字列URLが画像へのリンクっぽいとしてアクセスした結果、文字列PAGE-SOURCEというHTMLソースがHTTPのステータスコード200で返された場合に呼び出される。この手続きがURL文字列を返した場合、おちゅ〜しゃは返されたURL文字列を画像へのURLとして画像のダウンロードを再度試みる。この時、引数URLがHTTPリクエストヘッダのRefererとして用いられる。

おちゅ〜しゃのSchemeシステムの仕様

Revised5 Report on the Algorithmic Language Scheme(R5RS)準拠を目指して実装されていますが、まだかなーり中途半端なので難しいことはできません。

Revised6 Report on the Algorithmic Language Scheme(R6RS)は、おちゅ〜しゃへの組み込み専用の仕様としては規模が大きすぎるし、文字をUnicode表現にしなければならないのが面倒すぎるのでR6RS準拠を目指すことは当面考えません。仕様という観点での目標はR5RS仕様への準拠になります。

R5RS仕様だけでは不便なので、作者が必要と思った時に必要と思った機能が順次追加されていますが、その場合の追加仕様はScheme Requests for Implementation(SRFI)に適当なものがあればその仕様を、無ければ良く知られたライブラリやGaucheのように手軽に使えて、実績のあるSchemeシステムが提供しているものの仕様を頂いてくるという方針で決定しています。いずれはR6RSから一部の仕様を頂いてくるということもあるかもしれません。

現時点で実装されているScheme仕様

R5RSの大部分(?)
大部分が実装されていますが、例えばNumbersがまともには実装されていない(全ての数値表現がfixnumあるいはflonumでしかない)ように、Schemeシステム単体としてはかなり中途半端です。実装上の制限に関する詳細については後述します
Basic String Ports (SRFI-6)
全部実装されているはずです。
Time Data Types and Procedures (SRFI-19)
date-week-numberdate->stringstring->date以外は実装されています。なぜこれらが実装されていないのかは忘れてしまいましたが、多分面倒だったからです。恐らく、使いそうだ……と思って実装を始めた挙げ句、やっぱイラネ……と思って放置されている悪寒。
Basic Format Strings (SRFI-28)
単純すぎるので、Intermediate Format Strings (SRFI-48)辺りを用意すべきかもしれません。
正規表現
正規表現はpregexp風のprocedureが実装され、プログラム内にはGauche風のリテラル表記(#/正規表現/もしくは#/正規表現/i(case insensitive)という表記)ができます。pregexpそのものではなく、実装に鬼車を用いているため、pregexp本来の正規表現とは異なる部分があるかもしれません。また、鬼車も全機能を使っているわけではありません。

おちゅ〜しゃのSchemeシステムにおける正規表現関連の手続きには以下のものがあります。

(string->regexp REGEXP)

文字列REGEXPに相当する正規表現オブジェクトを返す。#/REGEXP/との違いは、リテラル表記の場合にはSchemeコードのコンパイル時に一度だけ正規表現オブジェクトが作られるのに対し、手続きの場合には実行される度に作られるという点だけ(?)です。

もちろん引数のREGEXPは文字列に評価される任意の式が書けるので、リテラル表現としては書けない正規表現が必要な場合にはこの手続きが必要になります。

――リテラルでしかcase insensitiveが指定できないという違いもあるなー。

これはGaucheの仕様を真似した手続きです。

(regexp-match-positions REGEXP STRING)

正規表現オブジェクトREGEXPを文字列STRINGにマッチさせた結果の各捕獲集合について、STRINGに対応する部分文字列の(開始 . 終了)のようなペアのリストを返す。マッチしない場合は#fを返す。

(regexp-match REGEXP STRING)

正規表現オブジェクトREGEXPを文字列STRINGにマッチさせた結果の各捕獲集合について、STRINGに対応する部分文字列のリストを返す。マッチしない場合は#fを返す。

(regexp-split REGEXP STRING)

正規表現オブジェクトREGEXPを文字列STRINGにマッチする部分文字列をデリミタとして文字列STRINGを区切り、区切られた各部分文字列のリストを返す。

(regexp-replace REGEXP STRING REPLACEMENT)

正規表現オブジェクトREGEXPにマッチする文字列STRING中の最初の部分文字列を置換文字列REPLACEMENTで置き換えた文字列を返す。マッチしない場合は元の文字列そのものを返す。

(regexp-replace* REGEXP STRING REPLACEMENT)

正規表現オブジェクトREGEXPにマッチする文字列STRING中の全ての部分文字列を置換文字列REPLACEMENTで置き換えた文字列を返す。マッチしない場合は元の文字列そのものを返す。

(regexp-quote STRING)

文字列STRINGに正確にマッチする正規表現を返す。すなわち、文字列中に正規表現のメタ文字が含まれている場合にそれを'\'でエスケープした文字列を返す。

これらはpregexpの仕様を真似した手続きですが、以下の点においてpregexpとは違います。

おちゅ〜しゃのSchemeシステムの特徴

元々TinySchemeの改造で得た経験を元に設計・実装されていますが、ネタ的な目的もあって一から書いたのでそれなりに特徴があります。

覚えている分を列挙すると以下のようなものが挙げられます。

おちゅ〜しゃのSchemeシステムの実装上の制限

必要になってから実装するという方針で触っているので、現時点では以下のような制限があります。簡単に言えば、面倒だから書いてない部分がそれなりに存在します。

R5RS仕様の内、手抜き実装のもの

Numbers
面倒なので実装していません。おちゅ〜しゃ的にはfixnum程度の整数が扱えれば十分だと思っているので、fixnumな整数とflonumな実数だけを実装してお茶を濁してあります。fixnumはC/C++のlongの整数で、flonumdoubleの浮動小数点数です。
library syntax: (cond <clause1> <clause2> ...)
library syntax: (case <key> <clause1> <clause2> ...)
library syntax: (do ((<variable1> <init1> <step1>) ...) (<test> <expression> ...) <command> ...)
library syntax: (let <bindings> <body>)
以上は面倒なのでR5RSに記載されているdefine-syntaxによる定義をそのまま使っています。現状ではコンパイラが賢くないので手書きによる処理でコンパイルされる他の類似syntaxに比べると出来上がるバイトコードがかなり低質で実行コストが多少高く付きます。……とはいえ、syntax以外までを考慮に入れると、これらのコンパイル処理を手書きするよりはコンパイラを賢くする方が恐らく最終的なコードの質が良くなるので、当面はこのままの予定です。

R5RS仕様の内、実装されていないもの

以下に列挙します。ここで挙げられていないのに実装されていない……というものは、現時点で作者が抜けていることすら忘れています。

syntax: (let-syntax <bindings> <body>)
面倒なので実装していません。これの実装よりも前にコンパイラを書き直すと思います。
library syntax: (delay <expression>)
library procedure: (map proc list1 list2 ...)
library procedure: (for-each proc list1 list2 ...)
procedure: (eval expression environment-specifier)
library procedure: (force promise)
procedure: (values obj ...)
procedure: (call-with-values producer consumer)
procedure: (dynamic-wind before thunk after)
library procedure: (call-with-input-file string proc)
library procedure: (call-with-output-file string proc)
optional procedure: (with-input-from-file string thunk)
optional procedure: (with-output-to-file string thunk)
optional procedure: (load filename)
これらは面倒なので実装していませんが、その内実装します。mapfor-eachあたりは、おちゅ〜しゃのソースツリーに含まれているTinyScheme由来のinit.scmからSchemeによる実装を抜き出してそのまま使ってしまうのでも良いような気がしています。

謝辞

おちゅ〜しゃは現在SourceForge.jpのロゴのサービスを使って開発されています。

おちゅ〜しゃは正規表現ライブラリとして鬼車を用いています。


$Date: 2008/12/23 18:03:55 $