はじめに

背景
プログラムを書いていると、ソースコードの一部を Evernote にアップして、ノウハウとして蓄積したくなります。ファイル単位であればエクスプローラでファイル選択して Evernote に送るか、 Evernote に付属の ENScript.exeだけで行けそうですが、ENScript.exeの場合は漢字コードが UTF8でないと駄目とか、ファイル拡張子が .txt じゃなきゃだめとか、いろいろ制約があります。
そこで、秀丸エディタ使用中にいつでも簡単に Evernote へ転送する仕組みを作ってみました。
これで秀丸エディタが Evernote へのメモ投稿のフロントエンドになり、遅いと言われる Evernoteのクライアントソフトを起動しないまま、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 <tag名> という形式で指定できます。
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==2) selectall ;
else if (#r==3) selectline ;
else if (#r==4) goto EndOfMacro ;
else #r=-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
関連レシピ
- 「Twilog」でツイートをダウンロードする方法
- 新人webディレクターが入社したら速攻入れるべきソフト8選(windows編)
- 怠け者だけどEvernoteのタグとノートブックの使い分けについて教えるよ
- Twitterのお気に入りを、Evernoteで上手に管理するレシピ(Android)
- 「Evernote」で新規ノートブックを作成する方法
この記事に関連するランキング
単語をクリックすると、この記事に関連するランキングを見ることが出来ます。
enscript.exe evernote 秀丸 マクロ bom 作り方 evernoteのエディタ editor C++ コード
このライフレシピへのコメント・反応