新しいアウトラインプロセッサ機能について


 [2008/12/23] 


 ここでは新しくCalendarMemo の目次シートに追加した簡易アウトラインプロセッサ機能について紹介しています。まだ完成とは言えませんが、従来のアウトラインプロセッサの定義には当てはまらない変わった機能をお楽しみ下さい。


 なお、本来のアウトラインプロセッサは トップダウン形式で文章を作成する手法です。でも CalendarMemo のアウトラインプロセッサはメモを書きながら、書いている途中で文章全体をまとめるボトムアップ形式のアウトラインプロセッサ機能です。そのためアウトラ インプロセッサとは言えないのかもしれません(ハッキリ言って何て呼べば良いのか)。


● 従来の目次シートの機能


 これまで目次シートでは指定された文字(■□,etc)が行頭にあれば段落として認識 し目次シートに表示していました。単に目次としての機能であればこれで充分なのですが欲を出し目次シート上で章を上下するとそれに伴い本文にも反映する簡 易アウトラインプロセッサ的な機能を追加していた訳です。


memoPicture001.jpg memoPicture002.jpg

目次シートで「準備」を選択


memoPicture003.jpg memoPicture004.jpg

「準備」を「序論」の前に移動

この移動が左本文にも反映される様子

● 新しい目次シートでは


 パラグラフ(段落)の字下げ(インデント)機能(⌘+option+左右矢印キー)を強化したのに伴い目次シートにもインデントを反映させたら使い勝手が良くなるのではと思い目次シートの表示に字下げ幅を反映するよう改良してみました。

memoPicture005.jpg memoPicture006.jpg

単に目次シートでも字下げ表示をしているだけ


 これが改良版の目次シートです。左本文のインデントが右目次シートに反映しているのが 判ると思います。また上記右の目次シートで「要約」を選択すると「要約」が及ぼす範囲(深い字下げ)にある段落が自動で選択されるようにしました。またこ の状態で目次シートの項目を drag & drop で移動すると左本文にも移動が反映されます。


● 矛盾


 CalendarMemo (CM) は思いつくままそれを記録に残し、後で読む事を基本にしています。これに対しアウトラインプロセッサは長文を効率よく書く為、最初に大まかな文章構成を考 えブロック単位で文章を追加していく、トップダウン形式の文書作成方式です。CM の目的を考えるとアウトラインプロセッサ的な処理には向かない矛盾した機能のようです。


 でもアウトラインプロセッサ的な機能があれば便利かもしれない、そう思い追加した機能です。また、この矛盾点を解決する方法があるのではと模索している最中でもあります。


● 解決する案


 アウトラインプロセッサは長文を効率的に書く為のトップダウン形式の文書作成方式です。それなら CalendarMemo では、その逆の発想、ボトムアップ形式で長文が書けるようにしてみようと考えました。


 元々、CM の目次シートはインターネットで検索した長文の記事を効率よく読めるよう適当な段落にタイトルを付け、その行頭に(■□,etc)のような文字を追加して目次としていました。


 新しい目次シートではパラグラフ(段落)がその役目を負っています。従来の■□,etc の機能も残しています。新しい目次シートでは行頭に特定の文字が無くても適当に書いたメモでも勝手に目次を作ってくれるものです。


 メモをある程度書き上げたら目次シートで段落を drag & drop し文章の体裁を整える作業を行う。これが新しい CM のメモ作成術です。


 最初に何を書こうか判らないが思いついたままをとりあえずメモに残しておく。書いているうちにメモを残す目的を考え文章全体の体裁を考える。これこそが行き当たりばったりで仕事をしている私らしいメモ書きの手法だと思います(国語の先生には怒られるかも)。


 そんな訳で、新しい目次シートにはパラグラフ単位で目次が作れる機能を追加しています。実は前バージョンにもあったのですが、インデントが反映されていなかったのであまり活用できなかった機能です。


 これが新しい目次シートの説明なのですが、書いている自分も上手く説明できず困っています。これを読者もさぞ大変だと思います。今週中に新しい CalendarMemo をリリースする予定なので、興味があれば実際に試してみた方が早いと思います。


● 困った事


【発端】

 目次シートにインデントを反映させるのは比較的簡単にできました。欲を出し目次シートを開いた状態でリアルタイムに、文字入力・編集の結果を目次シートに反映させることに。


【現象】

 textDidChange で文字入力・編集のイベントを検出し、その都度目次作成処理をさせようとしたら字下げ幅が全部一定になる現象がみつかりました。面白い事にデリートやペー ストでは本文の字下げ幅は正確に NSTextView から受け取れるのですが、キーボードから文字を入力すると NSTextView から受け取る字下げ幅はいつも一定なのです。これには困りました。


【光明】

 ある時間経過すると正常に字下げ幅を受け取れるようで、再度「目次作成」ボタンをクリックすると期待した通りの目次シート表示なります。


【解決】

 そこで、これを裏手にとり文字入力から一定時間(ここでは1秒)後に目次シートに反映 させることにしました(NSTimer)。これで本文の字下げ幅は正確に NSTextView から受け取れ期待した通りの目次シート表示なります。目次シートを開いていれば1秒遅れのリアルタイムで本文が目次シートに反映されます。


【疑問】

 文字入力直後に NSTextView から受け取る字下げ幅が一定になる現象、何なんですかね。MacOSXの仕様なんでしょうか。