Textwellがあれば段落単位でテキスト移動するのが簡単になる ReBlock

通勤中に 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,"&lt;");
      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