サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

CotEditor をストップウォッチとして使う_文字数も数える

はじめに

執筆の時間計測に使いたいので、早速導入しました。テキストを開いたときの文字数取得とストップウォッチを止めたときの文字数取得し、増えた文字数をカウントするにはどうしたらいいでしょうか……? id:rainlittle

まず...

 CotEditor の「環境設定」を開き、「ウィンドウ」の設定で「ステータスバー表示」のところから「文字数」にチェックを入れます。

 それで、ステータスバーに現在の書類の文字数が表示されますので、それを自分でメモするのではダメでしょうかね。

スクリプトでのやり方

 CotEditor スクリプトは、編集中のテキスト全部をもらうディティクティブがあり、PHP には md_strlen() があるので、それが使えるでしょうね。

使い方

  1. CotEditor でドキュメントを開きます。
  2. はじめに、ストップウォッチをスタートさせるスクリプトを実行します。
  3. 次に、ラップタイムを記録するスクリプトを実行します。

実行結果

  1. スタートのスクリプトを実行すると、CotEditor で編集中のドキュメントの文字数を保存しておきます。見た目には何も起きません。
  2. ラップタイムのスクリプトを実行すると、スタートからのラップタイムと、増えた文字数を新規ドキュメントに出力します。

注意点

  • 増えた文字数は「スタート」からの文字数になります。ラップ取得時ではありません。
  • 前回と同じく、「書類」フォルダの下に、テキストファイルを一つ作成します。「com.hatenablog.saponte.StopWatchWithCharCount.txt」です。

ショートカット

 前回の記事を参照ください。

スクリプト

 以下の PHP スクリプトを、上記のように好みのファイル名で保存していただき、実行権を与えて、CotEditor のスクリプトフォルダに格納してください。

 UTF-8 で保存してください。

 実行権を忘れないでくださいね。

StopWatchWithCharCount_Start.php

#!/usr/bin/php -q
<?php
// %%%{CotEditorXInput=AllText}%%%

$doc = file_get_contents('php://stdin');

file_put_contents(
    $_SERVER['HOME'] . '/Documents/com.hatenablog.saponote.StopWatchWithCharCount.txt'
    , microtime(true) . "\t" . mb_strlen($doc)
    );

StopWatchWithCharCount_Lap.php

#!/usr/bin/php -q
<?php
// %%%{CotEditorXInput=AllText}%%%
// %%%{CotEditorXOutput=NewDocument}%%%

$doc = file_get_contents('php://stdin');
$start_info = file_get_contents($_SERVER['HOME'] . '/Documents/com.hatenablog.saponote.StopWatchWithCharCount.txt', false);
$tmp = explode("\t", $start_info);
$start_time = $tmp[0];
$start_strlen = $tmp[1];
$lap_time = microtime(true) - $start_time;
$inc = mb_strlen($doc) - $start_strlen;

list($sec, $millisec) = explode('.', $lap_time . '');
$m = floor($sec / 60);
$s = $sec % 60;

echo str_pad($m, 2, 0, STR_PAD_LEFT) . ':' .
     str_pad($s, 2, 0, STR_PAD_LEFT) . '.' .
     substr($millisec, 0, 3) . "\n" .
     $inc . " 文字増えました。\n";

おわりに

 動作を確認したサポンテの Mac では PHP のバージョンは 7.3.11、CotEditor のバージョンは 4.0.8(471) でした。