Skip to content

しょぼいアウトライナー。#でノードを示す構造化テキストファイルのアウトラインを表示し、構造を編集したり、編集対象ノードをエディタに流し込むTUIツール

Notifications You must be signed in to change notification settings

y-mikou/WriggleKick

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

目的

  • 短い小説執筆のための安定したアウトライナーを作成する。
  • 枯れた技術・簡易な手段で実装し、完成後のメンテナンスコストを低減する。
  • 上記を満たす範疇で、可能な限り複数の環境で動作することを目指す。
  • 意図せずサ終しない。
    • ハルナアウトライン愛してた

本音を言うと一度作ったら一生手入れしたくない。
アプリケーションとしての寿命を優先したい

ファイルの可搬性

  • 操作対象は構造化テキストファイル
  • ディレクトリによるアウトライン管理ではない

やはり作品一つをテキストファイル一つに収めることは重要

アプリの可搬性

  • Linuxターミナルで動作するTUIツールにて実現する

携帯電話でも動くようにできる
UIも静かで良い

外部エディタの使用

  • micro、editなどの任意の(ユーザが導入した)エディタも指定可能とする
  • less、moreなどのコマンドにビューワ機能を肩代わりさせる

下手なものを作ってしょぼくするくらいなら他の人の良いエディタ等に乗っかる。

ハルナアウトラインになかった機能

  • android以外での動作
  • 一部分のみのファイル出力機能
  • フォーカス機能
  • 行数表示

機能/実装進捗

  • ツリー表示
    • 開始行番号あり
    • 開始・終了行番号、深さなど可能なオプションをすべて表示
    • 不可視ノードの非表示(折りたたみの代用)
  • ノードの閲覧
    • 単一ノードの閲覧
    • 配下ノードを含んだ貫通閲覧
  • ノードの追加
    • 追加後、即編集
    • 追加時に新ノードの名称を指定(未指定でデフォルト)
    • ノード指定なしで、末尾への追加とする
  • ノードの編集
  • (ある程度)任意の使用エディターの指定
  • (ある程度)任意の使用ビューワーの指定
  • ノードの削除
    • 単一ノードの削除
    • 配下ノードを含んだ一括削除
  • 不可視ノードの切り替え
    • 単一ノードの不可視フラグ設定
    • 配下ノードを含んだ不可視フラグ設定
  • ノードの名称変更→ノードの編集で兼務
  • ノードの移動(上下交換)
    • 単一ノードの削除
    • 配下ノードを含んだ移動(グループ上下交換)
  • ノードの深さ変更
    • 単一ノードの深さ変更
    • 配下ノードを含んだ深さ変更(グループ深さ変更)
  • フォーカス表示(詳細表示含む)
  • ノードの結合
    • ひとつ下のノードどの結合
    • 配下ノードを含んだノードの結合
  • [ ] ノードの分割→自動化は無理では?
  • 完了マーク
    • 単一ノードの完了/未了
    • 配下ノードを含んだ完了/未了
  • ノードの特性を示すシンボル
  • ノードの別ファイル保存
    • 配下ノードを含んだ別ファイル保存
  • ノードごと個別の折り畳み/展開表示→不可視ノードの設定に機能変更
  • 空行とタイトル行を除いたコンテンツ部分の文字数表示
    • 単一ノードの文字列をツリーに表示
    • 配下ノードを含んだ文字列を取得するコマンド
    • ツリー表示時に全体の文字数を表示
    • フォーカス表示時に配下ノードを含んだ文字列を表示
  • 各動作バリエーションのデフォルト動作を指定
    • tを常にtl/taにする
    • fを常にfl/faにする
    • iを常にieにする
  • コメント行(ファイル出力されず文字カウントもされない行)

使い方

インストール

  • とくになし。
  • Linuxターミナルが使える場所を用意する。
    • chromebookのcrostini
    • Android携帯のtermux
    • とか
  • ただのbashスクリプトなので、好きな場所において実行する。

実行方法

$ bash wrigglekick.sh [第1引数] [第2引数] [第3引数] [第4引数]

  • 引数1:対象File
  • 引数2:動作指定
    • t.....ツリービュー(省略可) hオプション:不可視フラグonのノードを非表示
    • tl....行番号付きツリービュー hオプション:不可視フラグonのノードを非表示
    • ta...行番号範囲深さ付きツリービュー hオプション:不可視フラグonのノードを非表示
    • f.....フォーカスビュー hオプション:不可視フラグonのノードを非表示
    • fl....行番号付きフォーカスビュー hオプション:不可視フラグonのノードを非表示
    • fa...行番号範囲深さ付きフォーカスビュー hオプション:不可視フラグonのノードを非表示
    • v.....対象ノードの閲覧
    • gv....対象ノードの配下ノードを横断的に閲覧
    • e.....対象ノードの編集
    • d.....対象ノードの削除
    • gd....対象ノードの配下ノードをまとめて削除
    • h.....対象ノードに不可視フラグを設定(1:不可視/0:可視)
    • gh....対象ノードの配下ノードにまとめて不可視フラグを設定(1:不可視/0:可視)
    • i.....対象ノードの下に新規ノード挿入。追加引数としてノード名
    • ie....対象ノードの下に新規ノード挿入、即編集モードへ。追加引数としてノード名
    • mu....対象ノードひとつを上へ移動
    • md....対象ノードひとつを下へ移動
    • ml....対象ノードひとつを左へ移動(浅くする)
    • mr....対象ノードひとつを右へ移動(深くする)
    • gmu...自分の配下ノードを引き連れて上へ移動
    • gmd...自分の配下ノードを引き連れて下へ移動
    • gml...自分の配下ノードを引き連れて左へ移動(浅くする)
    • gmr...自分の配下ノードを引き連れて右へ移動(深くする)
    • j.....指定ノードを、下のノードと結合
    • gj....自分の配下ノードを、自分に統合
    • k.....指定ノードの済/未マークを切り替える
    • gk....自分の配下ノードにまとめて済/未フラグを設定(1:済/0:未)
    • gc....自分の配下ノードを含んだ文字数を通知する
    • s.....指定ノードに表示シンボルを設定する。追加引数でシンボルを指定(1文字)
    • o.....自分の配下ノードを含んだ範囲を別ファイル出力する。追加引数で出力ファイル名
    • 数字...対象ノードを編集(eと引数3を省略)
  • 引数3:動作対象ノード番号/ノード指定の無い動作ではオプション
  • 引数4:動作指定ごとに必要なオプション

./tgt.txtのノード情報をツリー表示する

$ bash wrigglekick.sh ./tgt.txt t

./tgt.txtの2番目のノードを編集する

(ツリー表示後、ヒストリーから少し変えて)
$ bash wrigglekick.sh ./tgt.txt e 2

Image

機能について補足

模倣・実装しない機能

  • 文章の編集機能(ツリー操作のみ行うツールとする)
  • 複数の構造化テキストファイルへの対応
  • 葉と枝の区別(全てがタイトルを持った葉とする)
  • ディレクトリでのツリー化
  • 文字コード、改行コードの判定
  • 単一ノードの上下交換では、深さが違っても交換可能とする
  • 配下ノードを含む上下移動では、深さが同じもの同士のみを許容する
  • ツリー表示での各ノードの冒頭プレビュー

ファイルフォーマット

  • 特に指定しない。
  • プレーンテキストで、指定のエディタが許容するもの?
  • 改行コードはlf

ノードについて

  • ノードは「タイトル行」と「コンテンツ」からなる
    • タイトル行は先頭1行のみ
    • コンテンツは2行目以降(次のノード開始行の1行前まで)
  • タイトル行は、後述の「ノードシンボル」「タイトル」「メタデータ」からなる。
    • タイトル行の要素は、それぞれ半角スペースで区切られる
    • メタデータは [完了フラグ,シンボル,非表示フラグ] の形式

フォーマット例:
# 旅立ち [1,🔞,0]

  • 深さ1
  • ノードタイトル「旅立ち」
  • 完了
  • シンボル「🔞」
  • 可視(tコマンドなどでhオプションを付けても表示される)

の意味

ノードシンボル

  • 行頭「#」はノードタイトル
  • 「#」の個数によってツリーの深さを示す。
  • 数/深さが多い場合の表示の保証はしない

タイトル

  • 空も許可する。
  • メタデータの開始を示す [ 文字までがタイトルとして扱われる

メタデータ

  • [完了フラグ,シンボル,非表示フラグ] の形式で、カンマ区切りで3つのフィールドを持つ
  • 括弧は常に必要。空のフィールドは連続したカンマで表現される(例: [1,,]
  • 完了フラグ: 0(未完了)または1(完了)
  • シンボル: 1文字のラベル(絵文字など)
  • 非表示フラグ: 0(可視)または1(不可視)

レベル(深さ)判定

  • 同じ高さのノードを自動で特別化したりはしない
  • レベルは抜いて設定できる(レベル1の下にレベル10のノードが直接ぶら下がれる)

順序

  • 判定しない。ファイル上の順行に従う。

性能

  • 1MByteのファイルを、5秒以内にオープンできること。
    • 実際にはパフォーマンスはノード数に依存する

About

しょぼいアウトライナー。#でノードを示す構造化テキストファイルのアウトラインを表示し、構造を編集したり、編集対象ノードをエディタに流し込むTUIツール

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages