φ(.. ) 備忘録
amazonアソシエイト

2021年10月11日月曜日

指定したフォルダでminttyを起動する

右クリックの送るメニューに、minttyを起動するメニューを追加することで、マウス操作で指定したフォルダをカレントディレクトリとしたminttyを起動する。
ネットワークフォルダ(UNCパス)にも対応。
メニューの作り方は以下。
任意のフォルダに「minttyを起動する.js」を作成する。スクリプトの内容は以下。
var dir=WScript.Arguments.Unnamed(0);
var fs = new ActiveXObject( "Scripting.FileSystemObject" );
if( fs.FolderExists(dir) ){
    var sh = new ActiveXObject( "WScript.Shell" );
    sh.CurrentDirectory = dir;
    sh.Run( "C:\\Cygwin\\bin\\mintty.exe" );
}
エクスプローラーで「shell:sendto」を開き、作成したスクリプトのショートカットを配置。ショートカットの名前がそのままメニューの名前になるので、「minttyを開く」に名前を変更。

minttyで開きたいフォルダを右クリックし、「送る」→「minttyを開く」を選択すると、指定フォルダでminttyが起動する。


hubotの文字化け対策

IRCボットのhubotはISO-2022-JPな環境で使うと文字化けする。なぜなら、hubotはUTF-8を前提として作られているから!

そのため、ZNC等のIRC proxyを介して接続するのが一般的だが、今回はhubotを直接いじって、文字化けを解決する手法を見つけたので紹介する。

#以前、irc.coffeeを改変して対応していたが、それより簡単にできる方法を見つけたので記事にする。
まずは、こちらの記事を参考にインストール。

次に、必要なモジュールをインストール。

$ cd ~/hubot
$ npm install jschardet
$ npm install iconv

次に、irc.jsのパッチを作成する。

$ cd ~/hubot/node_modules/irc/lib
$ cp irc.js irc.js.org
$ vi irc.js.patch
以下の内容をirc.js.patchとして保存。
--- irc.js.org  2021-10-06 21:44:28.692961900 +0900
+++ irc.js      2021-10-06 22:09:47.822961900 +0900
@@ -30,6 +30,9 @@ var CyclingPingTimer = require('./cyclin

 var lineDelimiter = new RegExp('\r\n|\r|\n')

+var Jschardet = require('jschardet');
+var Iconv = require('iconv').Iconv;
+
 function Client(server, nick, opt) {
     var self = this;
     self.opt = {
@@ -108,6 +111,11 @@ function Client(server, nick, opt) {
     }

     self.addListener('raw', function(message) {
+       for(i in message.args){
+            detectResult = Jschardet.detect(message.args[i]);
+           iconv = new Iconv(detectResult.encoding,'UTF-8//TRANSLIT//IGNORE');
+           message.args[i]=iconv.convert(message.args[i]).toString();
+       }
         var channels = [],
             channel,
             nick,
@@ -934,7 +942,10 @@ Client.prototype.send = function(command
         util.log('SEND: ' + args.join(' '));

     if (!this.conn.requestedDisconnect) {
-        this.conn.write(args.join(' ') + '\r\n');
+       iconv = new Iconv('UTF-8','ISO-2022-JP//TRANSLIT//IGNORE')
+       str = iconv.convert(args.join(' ')).toString()
+//      this.conn.write(args.join(' ') + '\r\n');
+        this.conn.write(str + '\r\n');
     }
 };
次に、irc.jsにパッチをあてる。
$ patch -p1 irc.js < irc.js.patch
これでhubotを再起動すれば、文字化けは解消しているはず。 notice発言や日本語チャンネル名も問題なくjoin可能!