豆腐メンタルは崩れない

小説家ワナビ視点で、主に執筆環境について書きます。

FoldingText 2.0 の「Expand / Collapse By Level」について検証してみた

https://itunes.apple.com/jp/app/foldingtext/id540003654?mt=12&uo=4&at=10l8JW&ct=hatenablog

関連

実は2.0はまだ正式リリースされていないのだが、それもそろそろみたいですよ!

Expand / Collapse By Levelって結局どういう挙動になるの?

前回記事の該当部分を引用する。

  • 見出しセクションで有効
  • 従来のFold(⌘/)では、カーソル行のアイテムの子アイテム全てをFoldする
    • 例えば、見出しレベル1(#)の行で実行した場合、下の見出しレベル2〜6(########)のセクションは全てFoldされる
  • Expand / Collapse By Level(⌥⌘→/⌥⌘←)では、カーソル行のアイテムの子アイテムのうち、最も遠い子から順にFold/展開する
    • 例えば、見出しレベル2〜3のセクションを内包する見出しレベル1セクションで「Collapse By Level」を実行した場合、まずレベル3セクションが、次いでレベル2セクションがFoldされる
      • インデントされたリストブロック/パラグラフが内包される場合、リストブロック/パラグラフのインデントレベルの高い行からFoldされる

オーケーわからん!

簡単にいえば子孫アイテムから順に畳んでいくということなのだが、実際どういう挙動になるのかわかりづらすぎるので検証してみた。

以下、キャプチャー画像多数。

原文

  • f:id:catfist:20140601195351j:plain
  • カーソル位置は# 見出しレベル1の行
  • 挙動をわかりやすくするため、あえて見出しレベル2/3の位置を逆にした。

順番にCollapse By Levelを実行する

  • f:id:catfist:20140601195355j:plain
  • f:id:catfist:20140601195357j:plain
  • f:id:catfist:20140601195400j:plain
  • f:id:catfist:20140601195403j:plain
  • f:id:catfist:20140601195405j:plain
  • f:id:catfist:20140601195407j:plain
  • Expandはこの逆回し。

Paragraph(通常の行)とListを比較すると、n回インデントされたListは、n+1回インデントされたParagraphと同じLevelとしてfoldされている。つまり、ドキュメント全体の構造レベルで見ると、リストブロック全体が、Paragraphより1レベル低い扱いを受けていることになる。

なお、引用ブロックの構造レベルはParagraphと同様の扱いである。つまり、「引用ブロック内の引用ブロック」と、「1回インデントされたパラグラフ」が同レベルになる。

実用的な例:Expand By Levelで文書を読んでいく

  • このようなドキュメントがあるとする。
  • f:id:catfist:20140601203032j:plain
  • セクション「献立」「買い物」がFoldしてあるとする。
  • f:id:catfist:20140601202843j:plain
  • 「買い物」セクションを読んでいく。
  • f:id:catfist:20140601202905j:plain
  • f:id:catfist:20140601202914j:plain
  • f:id:catfist:20140601202917j:plain
  • f:id:catfist:20140601202920j:plain

どんな時に有効なのか?

CollapseよりExpandが重要そう。

ユーザーガイドにもあるが、ドキュメントの大半をFoldしておいて、必要なセクションのみを掘り下げていくような使い方が適しているのではないか。

文書構造をきちんと組んでおく必要はあるが、重要度の低い情報を自然とFoldしておける点は便利そうに思える。

FoldingText ユーザーガイド超雑訳

https://itunes.apple.com/jp/app/foldingtext/id540003654?mt=12&uo=4&at=10l8JW&ct=hatenablog

  • 原文は2.0 build 732の「Help > User's Guide」
    • 1.2の同ドキュメントに比べ、大幅に改定されている。
    • 当然、ショートカットキーは2.0準拠になっている。
  • 使い方がマジわかんないので訳した。
    • 本アプリ特有でない一般的な情報や、一般ユーザーに不要と思われる部分は省いた。
    • 難しくてわかんないところも省いた。
    • 他にも見りゃ分かるとかめんどいところは適当に省いた。
    • 原文の微妙なニュアンスも省いた。
  • 正直、itemとかstructureとかthingとかsectionとかどう違うのかサッパリわからん。

Welcome to the User's Guide

省略


Part 1: FoldingText's Story

省略


Part 2: Markdown text editor

省略


Formatting Your Document

省略

Editing Your Document

省略

Auto-Formatted Lists

リスト編集中にリターンキーを押すと、リストに次のアイテムが追加され、必要なシンタックスが自動的に挿入される。これは順序なしリストと順序リストの両方で有効である。

Selecting Text

ショートカットキーでテキストの選択、その解除が可能。

Move Items Around

ショートカットキーで選択部分、またはカーソル行の移動が可能。

さらに、リストをブランチ単位で移動することも可能。

Placing the Text Cursor
  • URLをクリックするとリンク先をブラウザで開く。
  • 見出しの '#' をクリックするとその見出しをfoldする。

オプションキーを押しながらクリックするとこれらの動作をエスケープできる。

マルチカーソルに対応している。コマンドキーを押しながらクリックでカーソルを追加し、コマンドキーを押さずにクリックすると元に戻る。

Text Replacements

タブキーでテキストの置換を行う。

Typewriter Scrolling

省略

Folding Your Document to Hide Details

foldによってドキュメントの一部を非表示にすることができる。

  • 先頭の "#" をクリックするとfold。
  • 再度 "#" クリックするか、 "…" をクリックすると解除。
  • 「View > Fold (Command-/)」でfold。リストなどの、 "#" を含まない構造においても、この操作は有効。
  • 「View > Expand By Level」「View > Collapse By Level」は、選択されたアイテムの「子孫」をfoldする。これらのコマンドは徐々に詳細を見ることを可能にする。全選択してから実行するとわかりやすい。

foldを含むドキュメントの左上隅には、 "folds" を示す三角形が表示される。これをクリックすると、全てのfocusによる自動的foldを解除する。再度クリックすると、上記の方法により追加された手動foldを解除する。

「View > Show All (Command-Shift-A)」で、即時に全てのfoldを解除することができる。

Focusing Your Document to See Things

"Focus"はドキュメントの一部を非表示にする点でfoldに似ているが、「隠したいものではなく見たいものを指定する」点で異なる。

  • 「View > Focus (Command-U)」でカーソル位置のアイテムをfocusする。そのアイテムが子アイテムを持たない場合、そのアイテムの親アイテムをフォーカスする。
  • 「View > Focus Heading (Option-Command-U)」で、ポップアップ表示された見出しの一覧から選択することで、選択した見出しとその内容のみを表示する。
  • 「View > Focus Tag (Control-U)」で、ポップアップ表示されたタグの一覧から選択することで、選択されたタグを含むアイテムと構造のみを表示する。

これらの方法で追加された自動的foldは、手動foldと同じ方法で解除することができる。クリックすればよい。

Using FoldingText's Command Mode

コマンドモードでは、メニューアイテムから選択する代わりに、名称を入力することでコマンドを実行できる。この方法は高速で、キーボードショートカットを覚える必要がない。

  • 「Command-'」でコマンドモードを開く。
  • コマンド名を入力してリターンキーを押すと実行する。
  • エスケープキーを押すと終了する。

多くのプラグインは、その機能を発揮するために、コマンドモードを利用する。

Sharing Your Document

省略

初期設定では、本アプリは、一般的なMarkdownファイル拡張子の代わりに 'ft' を利用する。それは、次項で解説する、独自の追加フォーマットを利用するためである。

ただ、重要なことだが、本アプリのファイルもMarkdownファイルもただのプレーンテキストであるから、あらゆるテキストエディタで開くことができる。同様に、あらゆるプレーンテキストを本アプリで開くことができる。


Part 3: Plain Text Productivity

私がこのプロジェクトを開始した時、そのゴールは単なるMarkdownエディタを作ることではなかった。私はプレーンテキストで働くことが好きで、まさにそのためのよりより場所を求めていた。私のゴールはプレーンテキスト生産性なのだ!

これから、本アプリの拡張Markdown書式が、どのようにプレーンテキスト生産性のための総合的ツールを作成するかを解説する。例としてはこんな感じ:

Jesse's.todo - Show an example @done - Describe how modes work - Describe tags and properties

このように、ToDoリストができる。これは、本アプリがMarkdownに追加した3つのものによって可能になっている。

  1. Modes. 上記の例でいうと ".todo" が、その下部のテキストに "todo" 機能を与える。例として、順序なしリストはチェックボックスとして表示される。 ".todo" を削除すると、この機能は失われる。

  2. Metadata. Modes はしばしば追加の情報を必要とする。例えば、 "todo" mode はタスクがいつ実行されたかの情報が必要である。そのため、このメタデータを格納するための "@done" tagを追加してある。

  3. Node Paths. これにより、ドキュメントをいい感じにfocusすることができる。例えば、node pathを使えば、 "@done" タグを付けられていないToDoアイテムのみを表示することができる。

それは本アプリのプレーンテキスト生産性に対するビジョンでもある:構造化テキストのためのMarkdownメタデータのための標準的シンタックス、アプリの振る舞いをカスタマイズするためのモード、focusのためのノードパス。

Modes for Custom Behavior

todoモードに限らず、モードをインストールすることで、本アプリを拡張することができる。

Tags and Properties for Metadata

本アプリにおいて、見出し、リスト、パラグラフは "things" である。 "things" に追加の情報を与えたい場合、タグとプロパティのシンタックスを利用することができる。 "@done" タグのように。

  • タグを作成するには、"@"を入力する。続くテキストがタグ名になる。
  • タグにバリューを割り当てるには、 "(value)" をタグの直後に入力する。例えば、 @due(2012-11-26) のように。
  • タグをfocusするには、タグ名をクリックする。バリューをクリックすると、そのタグおよびバリューを持つnodesのみをfocusする。

以下の言葉は、タグ名として利用できない。"id", "class", "type", "line", "mode", "modeContext", "level", "property", "name", and "value"

プロパティは、専用の行に存在することを除けば、タグと似たようなものである。例えば、 .timer mode では、開始時刻を記録するために "start" プロパティを利用する。

  • プロパティを作成するには、専用の行に一単語のプロパティ名を入力し、続けて " : " (space, colon, space)を入力する。
  • バリューをプロパティに与えるには、 " : " シンタックスの後ろにバリューを入力する。

タグおよびバリューのテキストが長かったり複雑だったりしない場合、一般的には、プロパティの代わりにタグを利用する。タグおよびバリューが長く複雑になる場合、代わりにプロパティを利用することを考えてほしい。

※訳者による補足

  • 簡単に言うと、プロパティは「専用の行」「半角スペースで区切らないプロパティ名」「" : "シンタックス」「バリュー」によって成る。
    • シンタックスの前にプロパティ名を書く。
    • シンタックスの後にバリューを書く。バリューは一単語である必要はなく、長大かつ複雑な内容をセットできる。
      • 日時などの、ぐちゃぐちゃしたバリューをセットするためにプロパティがあると言ってよさそう。
  • プロパティによってfocusすることはできない。
    • プロパティもバリューも、クリックしても反応しない。
  • 恐らく、プロパティはモードに利用される。

Node Paths for Focusing

内部的には、各種の行(見出し、リストアイテム、その他)は "node" によって代表されている。ノードという用語は、我々がツリー構造を扱っていることを強調している。例えば、見出しの下にある全てのパラグラフは、見出しノードの子ノードとして格納されている。

ノードパスは、ドキュメント内部で該当するノードを見付けるために利用される。例えば、このノードパスは、ドキュメント内部のトップレベルである "inbox" セクションにおける、全ての "@today" タグを含むノードを返す。

/inbox//@today

ノードパスは、内部的にはドキュメントをfocusするために使われる。タグをクリックすると、そのタグを持つノードをfocusし、その他のノードをfoldするために、ノードパスが作成される。

現在、ノードパスを編集し、その値を求めるためのユーザーインターフェースは存在しない。しかし、AppleScriptまたはJavaScriptを利用することで、ノードパスを求めることができる。

Part 4: Platform SDK

省略

Simplenoteクライアント比較(Mac)

参考:カッコイイMarkdownエディタの機能にいい感じの呼び名をつけよう - 豆腐メンタルは崩れない

ほぼ自分用メモ。

メモ取りにSimplenoteを活用している。ただし、Markdownを多用していると、Web版&公式Macアプリへの不満が出てきた。

  • 入力補完が一切ない
    • iOS版ではオートバレットできるのに
  • シンタックスハイライトがない
  • 公式クライアントではプレビューができない(Mac/iOSとも)

そこで、無料のものに限定して、サードパーティ製クライアントの機能を比較してみた。

機能比較表

アプリ タグ ピン プレーンテキスト保存 オートバレット タブキーインデント スマートハイライト タイトル同期 プレビュー
Simplenote o o x x x x o x
web o o x x x x o o
nvALT o x o o o x x o
Nottingham o o o x x x x o
Metanota o o x x x o o x

個別評価

nvALT

  • オートバレット&タブキーインデントえらい
    • ただしソフトタブ幅不定
      • 仕様なのか不具合なのかもわからない
    • オートインデントがReturn連打では解除されない
      • Opt+Returnで解除
  • ショートカットでノート移動えらい
  • プレビューも可能
    • テンプレート/CSSを編集できるため、自分のブログにデザインを合わせたりできる
  • プレーンテキストとしてローカル保存可能
  • 新規ノート作成オペレーションが独特
    • ノート検索から存在しないノートタイトルを入力してReturn
  • [[ノートタイトル]]と書くとリンクされる
    • そこからノート作成も可能
  • TaskPaper記法対応
    • リストに @done を書くと完了タスク扱いに
  • ピンに対応していない
  • Simplenote側でタイトル変更しても同期しない
    • リネームは可能
  • 手動同期不可
    • たまに恐ろしく同期が遅い
  • Preview > Enable Markdown Completion」にチェックしておけば、シンタックス挿入できる
    • メニューバーに存在しないが、⇧⌘+で見出し(#)追加

入力補完と同期のトレードオフ

Nottingham

  • ピン対応えらい
  • 入力補完は皆無
  • プレビュー可能
  • プレーンテキストとしてローカル保存可能
  • 文中に既存のノートタイトルを書くと自動リンクされる
  • 新規ノート作成オペレーションはnvALT同様できらい
  • 同期が怪しい
    • Simplenote側でタイトル変更しても同期しない
      • リネームできないっぽい。そんなばかな
    • たまにファイルが増殖して悲惨な目に遭う
    • フォルダパスに日本語が含まれると同期しない
  • 重い

ピンに対応した上で、ローカル保存もできる。ただし、同期が怪しすぎる。

Metanota

  • ピン対応えらい
  • スマートハイライトえらい
  • ショートカットで新規ノート一発作成えらい
  • サードパーティで唯一、タイトルも含めた完全な同期が可能
  • フォント周りが気持ち悪い
    • サイズしか変更できない
    • 行間広すぎ
  • 3ペインきらい
  • 重い

スマートハイライトできる「完全な」Simplenote
ただし見た目と重さが酷すぎる。

まとめ

  • 入力補完とローカル保存のnvALT
  • ピン対応とローカル保存のNottigham
  • スマートハイライトと完全同期のMetanota
  • 個人的にはnvALT一択。
    • 入力補完って素晴らしい。
    • 実はローカル保存は母艦のWinに任せてしまっている。

和文フォントでMarkdownスマートハイライトが利かないのはフォントが起因だった!+その対策

https://itunes.apple.com/jp/app/notebooks-write-documents/id862961526?mt=12&uo=4&at=10l8JW&ct=hatenablog

ATOM

ATOM

  • GitHub, Inc.
  • 無料(執筆時点)

https://itunes.apple.com/jp/app/foldingtext/id540003654?mt=12&uo=4&at=10l8JW&ct=hatenablog

スマートハイライトとは?

Markdownエディタで、見出しを大きな文字にしたりしてくれる機能のこと。

参考:カッコイイMarkdownエディタの機能にいい感じの呼び名をつけよう - 豆腐メンタルは崩れない

非常に快適……なのだが、この機能を持つアプリであっても、日本語環境では正常に機能しないことが多い。というか多すぎる。

あまりに多すぎることに気付いて目眩がしてきたので、この問題で苦しんでいるかもしれない誰かのために調査結果をレポートする。

※2014-05-21 あまりに大いなる勘違いが明らかになったため全面改稿。

原因はなんなのか?

参考: ウエイトとファミリー | フォント製品 | 株式会社モリサワ

コンピュータ内のフォントは、いくつかの類似した書体がセットになって「ファミリー」を形成している。ソフトウェアの使用フォント指定においては、一般的に「フォントファミリー」が選択され、用途に応じて異なる書体を選択できるようになっている。

ここにおいて、欧文フォントファミリーでは一般に文字のスタイル和文フォントファミリーでは文字のがセットされている。

例として、Macの標準フォントである「Helvetica」(欧文)および「ヒラギノ角ゴPro」の書体セットを挙げる。

  • Helvetiva
    • ライト
    • レギュラー
    • イタリック
    • ライト・オブリーク
    • ボールド
    • ボールド・イタリック
  • ヒラギノ角ゴPro
    • W3
    • W6

このように、欧文フォントファミリーでは文字スタイルが異なる多数の書体が用意されているのに対し、和文フォントファミリーでは2種の文字幅が用意されているにすぎない。

この点が、テキストに対してスタイルを適用するテキストエディタワードプロセッサ等のアプリケーションにおいて問題になる。これらのアプリケーションは、一般にフォントファミリーから適切な書体を選択することでスタイルを表現するが、和文フォントファミリーを指定した場合、選択すべき書体が存在しないのである。

そのため、Markdownエディタにおいても、フォントファミリーの指定によってはスマートハイライト(イタリックないしボールドのスタイル適用)が機能しない事象が発生する。これは、アプリケーションの問題でもOSの問題でもなく、フォントに起因する事象なのだ。

つまり、フォントファミリーを指定できるMarkdownエディタにおいては、イタリックおよびボールドの書体を持つフォントファミリーを選択することでこの事象を回避できる。

ただし、和文文字を保有しないフォントファミリーにおいては、和文入力時に同様の事象が発生することに注意せねばならない。このような場合も、一部のエディタは、プログラム的に文字幅を増加することでボールドを表現する機能を有するが、イタリックを表現できるエディタは極めて少ない。

これらのフォントに起因する事象を完全に解決するには、イタリック書体を有する和文フォントファミリーを使用すればよいわけだが、そもそも和文においてイタリックを使用する例が少ないため、このようなフォントファミリーは、簡単に入手できる範囲には存在しない。

以上を踏まえて、和文を含むMarkdownドキュメントの作成にあたり、適切にスマートハイライトを活用する方法を検討してゆく。

なお、以下の文章はMac OS Xを前提とする。

フォントファミリー指定にかかわらず、ボールド/イタリックの適用が可能なアプリ

  • ATOM
  • Notebooks for Mac
  • FoldingText

神様。崇め奉るべき。

これらのアプリは、(恐らく)プログラム的な文字幅の増加/書体の傾けによってボールド/イタリックを表現する機能を有する。そのため、好みに応じて幅広いフォントファミリー指定が可能である。

ただし、ボールド/イタリック書体を有するフォントファミリーを指定した場合と比較すれば、見栄えの美しさは損なわれる。

フォントファミリー指定にかかわらず、イタリックの適用が可能なアプリ

  • Mou

ボールド化は不可能、イタリック化は可能。そのため、多くの和文フォントファミリーが選択対象に入ってくる。

フォントファミリーの指定自体が不可能/面倒だが、デフォルトのフォントでボールド/イタリック指定が可能なアプリ

  • HarooPad

ハイライトテーマの指定が可能なアプリ

  • LightPapar
  • Ulysses III
  • TextMate2
  • SublimeText

これらのアプリは、シンタックスハイライトのスタイル指定自体を変更することができる。そのため、MarkdownにおけるStrong/Emphasisマークアップに対して、書体変更ではなくカラーリングなどを適用することにより、適切なハイライトが可能である。

ただし、スマートハイライトに比較すれば視認性は落ちるため、このような観点からは次善の選択肢になるだろう。

欧文フォント指定時の問題

大半のアプリケーションでは、汎用的な欧文フォントファミリーを指定することで、和文イタリックを除くスタイル指定は表現できる。

ただし、一部のアプリケーションでは、和文文字を含まない欧文フォントファミリーを指定した際、半角英数と和文を混在させると、行の高さがおかしくなって、表示がカクつく。そのため、これらのアプリケーションでは和文フォントファミリーの指定が推奨される。

  • Byword
  • textmate2

まとめ

  • スマートハイライトしたかったらATOMとかを使おう
  • フォントファミリーの中身にも注意しよう
  • 日本語つらい

FoldingText 2.0で不具合修正と機能向上が激しい

https://itunes.apple.com/jp/app/foldingtext/id540003654?mt=12&uo=4&at=10l8JW&ct=hatenablog

従来の不具合がほぼ修正されたため、修正点をまとめる。

比較対象は、App Store最新版のVer1.2。

追記

  • 2014-05-18 19:41:一度build 728準拠で公開したが、build 729でGoogle日本語入力のFixが入ったため記事修正した。死角が見当たらない
  • 2014-05-31 21:28:これが最終版らしいbuild 732準拠で追記・修正。また日本語変換の不具合が……
  • 2.0正式リリース後に公開された2.0.1で、変換前のテキストが横にずれる不具合は部分的に解消された。

参考

修正、機能向上

インラインシンタックス挿入時の不具合を修正

日本語入力時のスマートハイライト不具合を修正

  • テキストがシンタックス扱いでハイライトされる不具合を修正
    • ****入力時、**を修飾したようにハイライトされたり
    • 見出しの直後が薄くなったり

Google日本語入力のサジェスト表示不具合を修正

  • カーソル位置から離れた場所に表示されてしまっていた

日本語入力時のタイプライタースクロールのガタつきを修正

  • カーソル行が画面外に吹き飛ぶくらいガタついていた

リスト作成補助機能がアウトラインプロセッサ的にアップグレードされた

  • Focusでカーソル行とその親子項目のみを表示できる
  • 行単位のMoveとBranch(枝)単位のMoveが分離され、より複雑な操作が可能になった
わかりにくいので具体例

例えば以下のようなリストブロックがあるとする。

- 親項目1
    - 子項目1a
    - 子項目1b
- 親項目2
    - 子項目2a
    - 子項目2b

親項目1をMove Branch Down(⌃⌥↓)、または親項目2をMove Branch Up(⌃⌥↑)した場合、以下のようになる。

- 親項目2
    - 子項目2a
    - 子項目2b
- 親項目1
    - 子項目1a
    - 子項目1b

子項目2aのみを親項目1の子にしたい場合、親項目2をMove Down(⌥⌘])、または子項目2aをMove Up(⌥⌘[)すればいい。

- 親項目1
    - 子項目1a
    - 子項目1b
    - 子項目2a
- 親項目2
    - 子項目2b

Foldの解除が非常に楽になった

  • 「"…" をクリックして解除」を追加
  • 「View > Show All (Command-Shift-A)」で、即時に全てのfoldを解除
    • FocusによるものもFoldによるものも含む
    • 左上の三角形をクリックする必要なし、キーボード操作のみでOK!
    • これが欲しかった!

Critique Markup対応

  • 参考:CriticMarkup
    • Addition {++ ++}
      • 追記
    • Deletion {-- --}
      • 削除
    • Substitution {~~ ~> ~~}
      • 置き換え
    • Comment {>> <<}
      • コメント
    • Highlight {== ==}{>> <<}
      • ハイライト
  • ノートが書きやすくなった

テーマの編集(フォントの変更など)がしやすくなった

  • 「File > Open Application Folder」で「~/Library/Application Support/FoldingText」を開く
  • その中のuser.lessを編集する
  • 例えば以下のように記述するとフォントを変更できる

    @fontFamily: "MigMix 1M";

和文フォントでも正常にスマートハイライトされる

微妙な仕様変更

「タブキーインデント」「構造レベル変更」関係

  • 1.2では、タブキーでパラグラフ/リスト/見出し/引用ブロックのインデント、またはレベル変更が可能だった
  • 2.0では、タブキーは基本的にタブ記号を挿入する
    • パラグラフ/リスト/引用ブロックでは、行頭/シンタックス直後、またはテキスト選択時のみインデントする(タブキーインデント)
      • ⇧Tabでの逆インデント、複数行インデントも可能
      • 行頭/リストシンタックス直後以外でインデントするには、Move Left/Right(⌘[/⌘])を使う
    • 見出しレベルを設定/変更する方法
      • Move Branch Left/Right(⌃⌥←/⌃⌥→
        • 内包する下位見出しもまとめて変更される
      • Heading 1~6(⌘1~⌘6
      • リスト行や引用ブロック行も、見出し行に変換する

Fold/Focus関係

  • Focus Outの削除
    • Show Allに変更
  • 「By Level」foldの導入
    • 見出しセクションで有効
    • 従来のFold(⌘/)では、カーソル行のアイテムの子アイテム全てをFoldする
      • 例えば、見出しレベル1(#)の行で実行した場合、下の見出しレベル2〜6(########)のセクションは全てFoldされる
    • Expand / Collapse By Level(⌥⌘→/⌥⌘←)では、カーソル行のアイテムの子アイテムのうち、最も遠い子から順にFold/展開する
      • 例えば、見出しレベル2〜3のセクションを内包する見出しレベル1セクションで「Collapse By Level」を実行した場合、まずレベル3セクションが、次いでレベル2セクションがFoldされる
      • インデントされたリストブロック/パラグラフが内包される場合、リストブロック/パラグラフのインデントレベルの高い行からFoldされる

不具合/奇妙な仕様

継続して発生するもの

  • 空行でボールドのシンタックス****を挿入した場合、水平線と解釈され、自動的にセンタリングされる
    • うざい
  • リストの半角スペース×4によるネストをスマートハイライトできない
    • Soft Tabsできろとは言わないが理解はしてくれ

新たに発生したもの

  • 日本語変換時に変換前のテキストが激しく横にずれる(build 732で確認)
    • 変換中のテキストがWrapされると、タイプすることに右にずれていく
    • Google日本語入力およびことえりで確認
    • 何個か前のbluidではなかったはずなのに……
    • 2.0正式リリース後に公開された2.0.1で、部分的に解消された。
    • 入力中の移動は発生しない。ただし、変換前のテキストは、全て『2行目(折り返し先の行)』に表示される。
    • フォーラムで報告済み。
    • ダウンロードはこちら。FoldingText 2.0.2 Dev (735) - FoldingText Support Forums

削除された機能

  • Export as HTML
    • そういうアプリ(Markdownエディタ)じゃねえからこれ、という話はある

まとめ

FoldingTextが色々できすぎて謎なのでDemoで調べてみた

https://itunes.apple.com/jp/app/foldingtext/id540003654?mt=12&uo=4&at=10l8JW&ct=hatenablog

なんだか色々できるらしいけれど、詳しい操作方法とか日本語で書いた記事が見当たらなくてわけわからないので詳しく書いてみる。

参考

導入

Markdownエディタとして評価できる点

シンタックスハイライト関係

主にリスト関係

  • オートバレット実装
    • Option+Returnエスケープ
      • Shift+Returnエスケープしつつ改行×2
      • リスト行からスムーズに通常行へ遷移。
  • タブキーインデント実装!!!
    • 行中のどの位置で Tab を押しても、行頭にインデントが挿入される。
    • カーソル位置にタブ記号を挿入するにはOption Tabを押す
      • JISキーボードの場合、「fn+option」?
    • 対象はパラグラフ(通常行)、リスト(-など)
    • 見出し(#)、引用ブロック(>)
      • 見出しの場合、#の数を増減
  • Move Section Up等で、行/選択中テキストを移動。
    • 行を並べ替える、またはインデントする。
    • リストの場合、カーソル行の子項目ごと移動。
      • リストブロック全体を移動したり、枝構造を変更することが簡単にできる。
    • アウトラインプロセッサっぽい並べ替え操作が可能。

その他

  • Typewriter scrolling
    • 入力中の行が画面中央に
  • 文字サイズ変更
    • できない子もいるからね……

独自機能

fold:ドキュメントの一部を非表示

  • Folding機能により、リスト/見出し単位で折り畳んで不可視化できる
    • Focus inすると、カーソル行を含む見出し項目以外を不可視化できる。
      • Focus Outで戻す。
    • tag機能。 @tag のように書くと、クリックして該当するハッシュタグを含むブロック以外を折り畳む。
    • Command+L で見出し一覧をポップアップ表示する。
      • 選択するとその見出しの内容をFocusする。
    • コードエディタ的というかアウトラインプロセッサ的というか

mode:todo / timer

  • todo modeにより、文中にタスクリストを作成。
  • timer modeにより、文中にスケジュールを作成。
    • 書き方わかりづらいので以下詳細。
    • .timer で終わる行の下に、インデントし、所要時間を英語で記入すると、スケジュールが作成される
    • いずれかのスケジュールの開始時刻をクリックすると、それを現在時刻にリセットした上でカウントを開始。
      • 開始日時が、 .timer 行の直下に挿入される。
    • 実行中のスケジュールをハイライト。
      • 他のスケジュールの開始時刻をクリックすると、そこからカウント開始。
      • 行頭に現在時刻が挿入される。これは暫定開始時刻となる
      • さらに同様の行を加えると、所要時間が計算されて自動的に開始時刻が挿入される
    • これでもわかりづらいな!

クセのある点

  • 行頭にシンタックスを書いた場合、マイナスインデントがかかって、シンタックスの次の文字が行頭揃えされる。
    • iA Writer風というのだろうか。個人的には気持ち悪い。
  • テーマ機能は未実装。フォントさえ変えられない。
  • 保存ファイルのデフォルト拡張子が独自形式(.ft)
    • それMarkdownエディタとしてどうなのかしら。
  • Soft Tabs(タブ記号の代わりに半角スペース×4を挿入)非対応

不具合、または奇妙な仕様

  • ショートカットキーでBold等を挿入した歳、シンタックスが選択された状態になる。真ん中にカーソル動かしてくれてもいいじゃん!
    • bold 入力すると、 ** を挟んだ扱いでイタリックになるのも気持ち悪い
  • 日本語が絡むと、スマートハイライトの挙動がおかしい。
    • シンタックスの後ろに日本語を書くと、シンタックス扱いになって色が薄くなる。やばい。
    • ** で囲んだところに日本語を書くと、イタリック扱いになる
    • カーソル移動で解消。
    • 対策は半角スペースで区切ること。
  • 空行でボールドのシンタックス****を挿入した場合、水平線と解釈され、自動的にセンタリングされる
    • うざい
  • Typewriter Scrollingオンで日本語書いた時にガクガクする。
    • カーソル位置によっては使いものにならないくらい激しい。
  • リストを半角スペース×4でネストしたファイルを読み込ませると、スマートハイライトしない。

まとめ

  • 日本語関係が完全に狂ってる
  • 単純にMarkdownエディタとして見ても怪しすぎる
  • 独自の機能には魅力を感じる
  • 不具合については2.0βでほとんど修正済み。詳しくは次回の記事にて。

Byword (Mac) まとめ

Byword

Byword

  • Metaclassy, Lda.
  • 仕事効率化
  • ¥1,340

参考:カッコイイMarkdownエディタの機能にいい感じの呼び名をつけよう - 豆腐メンタルは崩れない

Markdown/テキストエディタとしての行き届いた機能

  • スマートハイライト
  • リスト記述支援
    • オートバレット
      • タブキーインデント
      • ショートカットキーインデント
    • リスト種別変換
  • シンタックス挿入ショートカット
    • 各種インラインシンタックス(bold等)
    • リスト
    • ブロック引用
    • 見出し
    • 強制改行(⌃↩︎)
  • 行の並べ替え
  • HTML変換機能
  • 外部サービス投稿機能
  • MultiMarkdown対応

表示の美しさ、安定性

  • ミニマルで美しいインターフェース
  • フォーカス
    • パラグラフ
    • ライン
  • タイプライタースクロール
    • 日本語でもガタつかない
  • 日本語でも行の高さなどが崩れない

Markdown/テキストエディタとしての高度な機能には実装されていないものも

  • アウトライン・ジャンプ機能なし
  • 正規表現検索/変換不可
  • ライブプレビュー不可
    • プレビューをメモリ上に常時展開しないため動作負荷が低いという長所も
  • テーマ変更不可
    • プレビューテーマも

コードエディタ的な運用が想定されていない

  • 作成時のデフォルト拡張子はtxt/rdfのみ
  • インラインコードおよびコードブロックのシンタックス挿入ショートカットがない
    • コードブロック化できないのはけっこう困る
  • 「他のアプリで開く」的な機能もない

マシな方だが、日本語特有の不具合も

  • たまにシンタックスハイライトが利かない
  • ショートカットキーでインラインシンタックス挿入時に、直前の文字/単語が挟まれる
    • テストの直後でCmd+Bすると**テスト**になったり。本来はテスト****になるべき
    • 選択テキストに付与する場合は正常

まとめ

  • とにかく美しい
    • いわゆる「iA Writer風」、見出しとリストのシンタックスがマイナスインデントされるやつ大きらいなので、なくてよかった
    • フォーカスしてなくても、上端と下端がグラデーションするのはきらい
  • リスト作成支援機能は非常に強力
    • リスト種別変換で数字付きリストにしたとき、ちゃんと順番通り番号振ってくれるのが気持ちいい
  • タイプライタースクロールが安定しているだけでホッとする自分がかなしい
  • 変換・投稿系の機能は便利
    • ただし外部サービスへの直接投稿はプレミアム専用
    • はてなブログに投稿できればなあ
  • 日本語圏の基本権は脅かされている
  • コード的に複雑なドキュメントを書くには向かない
  • 想定されている通りの使い方をする分には極めて快適だが、その範囲が意外と狭い