はじめに

エバーノートをダウンロードしてみたものの、いまいち使い勝手が悪く、活用できていない方はいませんか?そんな方のために、ここでは秀丸エディタから Evernote へ簡単にメモを送る方法をご紹介します。

本レシピは掲載しているプログラムを使って実現します。プログラムの内容については細心の注意を払っていますが、全てのシステムで正しく動作する事を保障することができません。その当たりをご了承頂いた上でご覧下さい。

背景

プログラムを書いていると、ソースコードの一部を Evernote にアップして、ノウハウとして蓄積したくなります。ファイル単位であればエクスプローラでファイル選択して Evernote に送るか、 Evernote に付属の ENScript.exeだけで行けそうですが、ENScript.exeの場合は漢字コードが UTF8でないと駄目とか、ファイル拡張子が .txt じゃなきゃだめとか、いろいろ制約があります。

そこで、秀丸エディタ使用中にいつでも簡単に Evernote へ転送する仕組みを作ってみました。

これで秀丸エディタが Evernote へのメモ投稿のフロントエンドになり、遅いと言われる Evernoteのクライアントソフトを起動しないまま、Evernote にメモを書き込めます。

本レシピを使わずとも CTRL+C , CTRL+ALT+V で Evernoteに送る方法があります。本レシピの本質は、ノートブックの指定と、タグの指定ができる点にあります。

準備

用意するのは以下のものです。

  • 秀丸エディタ Version 8.0 以上
  • (もちろん)Evernote クライアントソフト(Version 3.5)

あらかじめ "秀丸エディタ" と "Evernote" をインストールしておいて下さい。
本レシピを使用するために、インストールの際に特別気にすることはないと思います。

使用するマクロ及びファイル

今回作成したファイルは

  • SendToEvernote.cmd (バッチファイル)
  • SendTextToEvernote.mac (秀丸マクロ)

の2つで、同じホルダーに置く事を前提にしています。

使い方

  1. 秀丸エディタ使用中に、マクロを起動するだけ!(起動方法はいろいろありますのでお好みで)
  2. 起動した時点で選択されていた範囲の情報だけを Evernoteにアップします。
  3. 範囲選択されていない場合は、ファイル全体をアップするか確認してきます。(キャンセルも可能)

どのノートブックにアップするかは SendToEvernote.cmd の中の NOTEBOOK という変数を書き換える事で指定できます。
何というタイトルにするかは SendToEvernote.cmd の中の TITLEという変数で指定します。
ノートへデフォルトで付けるタグも同様に SendToEvernote.cmd の最終行で /t という形式で指定できます。

SendToEvernote.cmd

@echo off

REM

=
REM これは 秀丸マクロから Evernote に登録するためのマクロです
REM 秀丸マクロでは複雑なパラメータを取るプログラムが指定できません
REM ここでは秀丸マクロの runex 文から呼び出すだけで Evernoteの所定の
REM ノートブック内にメモとして書き込むためのバッチファイルを提供します
REM 必要に応じて変更して下さい
REM

=

SET NOTEBOOK=#001
SET TITLE="Memo from HIDEMARU"

REM

=

SET ENScript="C:\Program Files\Evernote\Evernote3.5\ENScript.exe"

REM

=

%ENScript% createNote /s %1 /n %NOTEBOOK% /i %TITLE% /t Hidemaru /t Memo >> G:\HideMacro\Evernote\executelog.txt

SendTextToEvernote.mac

/////////////////////////////////////////////////////////////////
// 秀丸エディタ用マクロ
//
// 秀丸エディタ用 Evernote マクロ
// このマクロを実行するには、Evernote の Windows Client が
// インストールされている必要があります。
//
/////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////
// カスタマイズ可能な変数
// #CAUTIONSIZE 送信サイズが大きい場合の確認を求めるサイズ
/////////////////////////////////////////////////////////////////

CAUTIONSIZE= 1024##1024 ; // 1Mバイト

/////////////////////////////////////////////////////////////////
// マクロ内で使用するファイル類
/////////////////////////////////////////////////////////////////

$ENVPATH = currentmacrodirectory + "\" ;
$TEMPPATH = getenv( "TEMP" ) ;
if ( strlen( $TEMPPATH )

0 ){
$TEMPPATH

getenv( "TMP" ) ;
if ( strlen( $TEMPPATH )

0 ){
$TEMPPATH

$ENVPATH ;
}
}

$ENScript = $ENVPATH + "SendToEvernote.cmd" ;
$LogFile = $ENVPATH + "SentToEvernote.log" ;

$TempFilePrefix = $TEMPPATH + "_$$TempFile" ;

/////////////////////////////////////////////////////////////////
// 添付ファイル名の生成
/////////////////////////////////////////////////////////////////

title "Evernote Macro",1 ;

if ( version < 800 )
{
message "本マクロは 秀丸エディタの Verson 8.00 以上のマクロ関数を使用しています。\nVersion 8.00 の秀丸エディタでご利用下さい" ;
goto EndOfMacro ;
}

$TempFile="" ;

seq = 0 ;

while ( #seq < 1000 ){
$TempFile = $TempFilePrefix + str(#seq) + ".txt" ;
if ( !existfile( $TempFile ) ) {
//ダミーでファイルを作っておく
runex "echo",1,0,"",2,$TempFile,0,"",0,"",2,1,0;
break ;
}
#seq = #seq + 1 ;
}

if ( #seq

1000 ) {
message "中間ファイルが大量に残っているため実行できませんでした。" ;
goto EndOfMacro ;
}

/////////////////////////////////////////////////////////////////
// 文字が選択されているかどうかで処理を変更する
//
/////////////////////////////////////////////////////////////////

selectState 1 ;

if ( ! selecting ){
// 選択されていない状態の場合
#selectState = 0 ;

#r = -1 ;
while ( #r < 0 ){
menu "処理を選択して下さい", "全ての内容を送信する", "カーソルのある行だけを送信する", "キャンセルする" ;
#r = result ;

   if (#r<p class="align-center">2)      selectall   ;
   else if (#r</p>=3) selectline  ;
   else if (#r<p class="align-center">4) goto    EndOfMacro  ;
   else #r</p>-1;

}
}

dataSize = charcount( 0x80000001 ) ;

if ( #dataSize > #CAUTIONSIZE ) {
$qmsg = "指定された領域のサイズが" + str( #dataSize ) + " byte 以上あります。\n送信しますか?" ;
question $qmsg ;
if ( result

no )
{
// 中間ファイルを削除して終了する
runex "cmd /C del " + $TempFile,0,0,"" ,0,"" ,0,"" ,0,"" ,2,1,0 ;
message "送信を中断しました." ;
goto EndOfMacro ;
}
}

/////////////////////////////////////////////////////////////////
// テンポラリファイルに対して選択範囲の文字をコピーして、
// UTF8(with BOM)でセーブします。
//
/////////////////////////////////////////////////////////////////

copy ; // 選択範囲をコピー
openfile "/h /n"; // テンポラリとして秀丸を開く
paste ; // 開いた秀丸に内容をペーストする
saveas $TempFile, utf8,bom ;
// UTF-8(BOM付き)でファイルをセーブする

runex "cmd /C \"" + $ENScript + " " + $TempFile + "\"",1,5,"" ,0,"" ,3,$LogFile ,0,"" ,2,1,0 ;
// ENScript を実行する

runex "cmd /C del " + $TempFile,0,0,"" ,0,"",0,"" ,0,"" ,2,1,0 ;

beep;
quit ;

message "Evernote への送信完了" ;

//////////////////////////////////////////////////////////////////
// マクロ最終処理
//////////////////////////////////////////////////////////////////

EndOfMacro:
title -1,1 ;
endmacro ;

最後に

レシピを書いたのは今回が初めてなので、いろいろご意見、ご感想を頂けると嬉しいです。
今後もソフト絡みで便利なツールや方法を提案してみたいと思います。

Twitter:@jabite