通勤中に iPod touch で文章を作り、wri.pe に保存。帰宅してから iPad で繋ぎ直して文章を編集する。毎日のルーティンが出来上がり、長文を量産できる環境になったのですが、問題は推敲の方略。全体構成を見渡すには何か足りない。
Textwell 1.2.4
分類: 仕事効率化,ユーティリティ
価格: \300 (Sociomedia)
公式アクションの Reorder もあるけれど、ずるずる動かすのは何か違う。バッサリ捨てるべき時節もある。けれど、空行で挟まれる範囲を「段落」と見なす発想は有用です。不要な範囲を空行で仕切っておけば、虹村億泰のハンドのように切り取れる。編集しやすい。それと拙作の ReLine とをフュージョンして、新しいアクション ReBlock を作ってみました。
登録リンクはこちら→ http://tinyurl.com/m9bgd83
起動すると、段落が短冊状に並ぶ。本文をタップすると、そこにカーソルが移動し、テキスト編集画面に戻ります。基本はジャンプ機能。デフォルトはHTMLタグが有効なプレビュー形式ですが、指二本でスワイプするとソース表示に切り替わります。
短冊の左端、緑帯をタップすると、その段落をカット。スタックに積み上がる方式なので、連続カットしても、内部に段落を記憶します。これが再利用できる。
本文側をタップすると、スタックした段落を貼り付け。LIFO方式で、タップするごとスタックを吐き出す。スタックが空っぽになると、タイトルバーが「ReBlock」に戻ります。
ReBlock は、長文に限らず、ブログの下書きにも便利。空行で区切るだけで、アウトライナーの代用になる。ReLine だとコマコマした繰り返しになるのが、これだとバッサバッサと刻んでいける。カードデータベースもどきも作れるし、全体を見渡して移動する Jumper の代わりにもなる。意外と応用の利くアクションじゃないかな。
Textwellが行編集エディタに変身する ReLine(灰帯版)
赤とグレーのコンビネーション。エディタは文字単位で編集するものですが、それだと木を見て森を見ず。森を見るのがこのReLineです。Vimの行編集をイメージ。行単位での削除や移動が出来ます。ところが、使...
行単位の移動なら ReLine をどうぞ。
【ソース】
<meta name=viewport content=initial-scale=1,user-scalable=no> <style> body{ margin:0; background:#eee; word-wrap:break-word; } hr{ border:1px #fafafa solid; } table{ width:100%; table-layout:fixed; font-size:small; } td.num{ width:36px; color:white; background:#0c3; vertical-align:top; text-align:center; } </style> <title>ReBlock</title> <body id=wine></body> <script> last=0; view=1; stack=new Array(); list=new Array(); list=T.text.split("\n\n"); Disp(); len=T.text.length; wine.ontouchstart=switchView; T.closelets([{ title:"再配置する", fn:function(){saveText()} }]) function Disp(){ s="<hr>"; for(i=0;i<list.length;i++){ content=(view)?list[i]:list[i].replace(/</g,"<"); s+="<table><td class=num onClick=Minus("+i+")>"+("000"+(i+1)).slice(-4)+"</td><td onClick=Plus("+i+")>"+content.replace(/\n/g,"<br/>")+"</td></table><hr>\n"; } wine.innerHTML=s; t=stack[stack.length-1] || "ReBlock"; T.title(t); } function Plus(x){ Count(x); if(stack.length){ s=stack.pop(); list.splice(x,0,s); Disp(); }else{ saveText(); } } function Minus(x){ s=list[x]; if(s) stack.push(s); list.splice(x,1); Disp(); Count(x); } function Count(x){ last=0; for(i=0;i<x;i++)last+=list[i].length+2; } function switchView(e){ if(e.touches.length>1){ view=1-view; Disp(); } } function saveText(){ s=list.join("\n\n"); T("replaceRange",{ text:s, replacingRange:{len:len}, selectingRange:{loc:last} }); } </script>
登録リンクはこちら→ http://tinyurl.com/m9bgd83