KeySnailネタ。moozさんのアイコンかわいいよね。
というわけで、なんか、Firefoxがバージョンアップしたら.keysnail.jsの「以前にコピーしたテキスト一覧から選択して貼り付け」のletでエラーが出るらしく、久しぶりに.keysnail.jsを編集しました。
すでに修正されてた(´・д・`)
自分で修正しんたんすけど、もしかしてって見てみたら、keysnail/functions.js at f22a53fac0c693ccb939b5398494be63d7e1e011 · mooz/keysnail · GitHubにもう一ヶ月ぐらい前に更新されてましたよー。
うん、Firefox自動更新してないんだ。ごめんね。
というわけで、コピって貼り付け。
if (!command.kill.ring.length) return; let ct = command.getClipboardText(); if (!command.kill.ring.length || ct != command.kill.ring[0]) { command.pushKillRing(ct); } prompt.selector( { message: "Paste:", collection: command.kill.ring, callback: function (i) { if (i >= 0) key.insertText(command.kill.ring[i]); } } );
Kill Lineがなんか変
日頃からどーもなんか気にくわないな、とおもっていたKeySnailのkill-line。
というのもこれ。ここ(↓)で、Ctrl+Kを押すと………
うん、問題ないね。
でも、ここ(↓)でCtrl+Kを押すと………
あっるぅぇえ?(´・д・`) なぜか私のパソコンではこんなんになってなまいます。
私のパソコンでもこう(↓)なってほしいんですよね。
あと、気になるのこれ。
論理行で削除するんじゃなくって、テキストエリアの折り返し行までが削除されるの。これ気に入らないの。
というわけで、ついでだったので、そうなるように修正したのがこちら。
key.setEditKey('C-k', function (ev) { if (command.marked(ev)) command.resetMark(ev); let ta = ev.originalTarget; let str = ta.value; let i = ta.selectionStart; for(let e=ta.value.length;i<e;i++){ let c = str.charAt(i); if(c == "\r" || c == "\n" || c=="\u0085"){ break; } } ta.selectionEnd = i; let cstr = ta.value.substring(ta.selectionStart,ta.selectionEnd).trim(); command.copySelectedText(ta); goDoCommand('cmd_delete'); if(!cstr){ goDoCommand('cmd_beginLine'); let pos = ta.selectionStart; goDoCommand('cmd_endLine'); if(pos != ta.value.length){ goDoCommand('cmd_deleteCharForward'); }else{ goDoCommand('cmd_deleteCharBackward'); } } }, 'カーソルから先を一行カット (Kill line)');
Emacsのkill-lineは削除した文字が空(空白のみの文字列含む)だと、改行文字も消すっぽいので、その処理を追加してあります。
ちなみに、どうもうまく動かない戦犯は"cmd_deleteToEndOfLine"らしく、こいつを使わないようにすることが重要。なんか、このコマンドって条件はよくわからないんだけど、正しく動作しないことがあるっぽいです。
最初は、if(!str)ブロックの中身も"cmd_deleteToEndOfLine"を呼び出してただけなんだけど、なぜか2行目にカーソルがあるときに、正しく動かないという状況がまれに発生しました。発生条件は全くもって不明。というわけで、上記の形になっています。文字列処理は嫌ので、キャレットの位置変化から最後の行かどうか判定しています。
あ、なお、これはFirefoxのバグか、私のプライグイン環境との相性のバグなのかのどっちかです。
KeySnailのバグではありません。
あと、ついでに、Ctrl+Jで次の行を生成して移動するってのを作っておいた。
単に改行だけにしたい人は、goDoCommandを削除してください。
key.setEditKey("C-j",function(ev){ goDoCommand("cmd_endLine"); key.generateKey(ev.originalTarget,KeyEvent.DOM_VK_RETURN,true); },"新しい行を作成",true);
以上です。
ところで、EdgeでFirefoxのプラグインが動かせるかもという噂ですが、KeySnailがEdgeで動くかなぁ。
動けばいいなぁ~ヽ( ・∀・)ノ