del.icio.usのタグに英語しか使わない人のためのGreasemonkeyスクリプト
せっかくなのでさっきのエントリの turnOffIME()
を使ってdel.icio.us用のGreasemonkeyスクリプトを書いてみました。Windows限定です。
機能は4つ。
- 投稿ページのtags欄にフォーカスするとIMEがオフになる。
- ページ上部のパンくずリストのタグを入力する所にフォーカスするとIMEがオフになる。
- 投稿ページを表示したときにtags欄にフォーカスする。
- 投稿ページじゃなかったらパンくずリストのタグを入力する所にフォーカスする。
追記 2007-01-15 19:55
IMEのキャレットが表示されなくなっていた不具合を修正しました。
コード
// ==UserScript== // @name del.icio.us IME OFF // @namespace http://d.hatena.ne.jp/margin/ // @include http://del.icio.us/* // ==/UserScript== (function(){ function turnOffIME(focusElement) { function c() { var s = document.createElement('span'); s.innerHTML = '<input type="password" style="visibility:hidden;position:fixed">'; return document.body.appendChild(s.firstChild); } var p = c(); p.focus(); document.body.removeChild(p); if (focusElement && focusElement.focus) { focusElement.focus(); } else { var x = turnOffIME.x = turnOffIME.x || c(); x.focus(); x.blur(); } } function turnOffIMEOnFocus(element) { element._focused = false; element.addEventListener('focus', function() { if(!this._focused) { this._focused = true; turnOffIME(this); } }, false); element.addEventListener('blur', function(){ this._focused = false; }, false); } window.addEventListener('load', function() { var crumb = document.getElementById('crumb'); if (crumb) { var crumbs = crumb.getElementsByTagName('input'); crumb = crumbs[crumbs.length-1]; turnOffIMEOnFocus(crumb); crumb.focus(); } var tags = document.getElementById('tags'); if (tags) { turnOffIMEOnFocus(tags); tags.focus(); } }, false); })();
Remember The MilkでIMEをオフにするGreasemonkeyスクリプト
Remember The Milkでキーボード・ショートカットを使っていて、ひとつ困ることがあります。タスクを追加したときにはすぐに d で期日を入力したいのですが、タスクの入力時にIMEがオンになっている場合、わざわざIMEをオフにしないとキーボード・ショートカットが使えません。というわけで、タスクを追加した後にIMEをオフにするGreasemonkeyスクリプトを書いてみました。
ついでにページの読み込み時にもオフにしています。IMEをオフにするやり方はLDRの棒人間に怒られないようにするGreaemonkeyスクリプト(Windows限定) - AUSGANG SOFTを参考にさせていただきました。したがってこのGreasemonkeyはWindows限定です。
追記 2006-01-15 21:30
タスクの追加だけではなく、全ての input[type="text"]
において、フォーカスが外れたときとエンターキーが押されたときににIMEをオフにするようにしました。後から追加されるフォームもDOMNodeInsertedイベントで捕まえて設定しています。
追記 2006-02-11 19:30
Flashを使ってちゃんとしたものを書いてくれた人がいるので皆さんこちらを使いましょう。
コード
// ==UserScript== // @name Remember The Milk IME OFF // @namespace http://d.hatena.ne.jp/margin/ // @include http://www.rememberthemilk.com/* // ==/UserScript== (function(){ function turnOffIME(focusElement) { function c() { var s = document.createElement('span'); s.innerHTML = '<input type="password" style="visibility:hidden;position:fixed">'; return document.body.appendChild(s.firstChild); } var p = c(); p.focus(); document.body.removeChild(p); if (focusElement && focusElement.focus) { focusElement.focus(); } else { var x = turnOffIME.x = turnOffIME.x || c(); x.focus(); x.blur(); } } function turnOffIMEOnBlur(element) { element.addEventListener('blur', turnOffIME, false); } function turnOffIMEOnBlurInput(element) { var type = element.type.toLowerCase(); if (type == '' || type == 'text') { element.addEventListener('blur', turnOffIME, false); element.addEventListener('keypress', function(e) { if (e.keyCode == 13) turnOffIME(); }, false); } } window.addEventListener('load', function() { Array.forEach(document.getElementsByTagName('input'), turnOffIMEOnBlurInput); Array.forEach(document.getElementsByTagName('textarea'), turnOffIMEOnBlur); document.addEventListener('DOMNodeInserted', function(event) { target = event.target; if (target.nodeType == 1) { tagName = target.tagName.toLowerCase(); if (tagName == 'input') { turnOffIMEOnBlurInput(target); } else if (tagName == 'textarea') { turnOffIMEOnBlur(target); } else { Array.forEach(target.getElementsByTagName('input'), turnOffIMEOnBlurInput); Array.forEach(target.getElementsByTagName('textarea'), turnOffIMEOnBlur); } } }, false); turnOffIME(); }, false); })();
IconizeTaskbarButton が欲しい
いやね、 Firefox 拡張の FaviconizeTab が恐ろしく便利で、これをタスクバー上でもやりたいと思ったわけです。 タスクトレイにアイコン化させるソフトはいっぱいあるのですけど、タスクバーのボタンをアイコンのみにするってのは、なかなか無い。 TClock2ch には「タスクスイッチにアイコンのみ表示」っていうのがあるみたいですけど、これだと全部アイコンのみになっちゃいます。 それで (何処かに無いかな && 誰か作ってくれないかな && 自分で作ろうかな) とか思ったわけですよ。 思っただけですけど。
Remember The Milk のキーボード・ショートカットを分かり易く表示する
すっごく今更ですけど Remember The Milk を使ってみました。 思い立ったのが今日の朝なので1日も使ってませんけど、しばらく使ってみることにします。
使うからにはキーボード・ショートカットを使ってサクサクっと編集したいのですけど、キーボード・ショートカットとか覚えたくない。 というか覚えられない。 というわけでそれっぽいところにキーボード・ショートカットを表示するユーザー・スタイルシートを自分用に書いてみました。 例によって userstyles.org に上げてあります。
ちなみにコードは以下。
@namespace url(http://www.w3.org/1999/xhtml); @-moz-document domain("www.rememberthemilk.com") { #detailstitle_highlight[title]::after { content: " (r)"; color: #575757; font-weight: normal; } #detailsdue::after { content: " (d)"; } #detailsreoccur::after { content: " (f)"; } #detailsduration::after { content: " (g)"; } #detailstags::after { content: " (s)"; } #detailslocation::after { content: " (l)"; } #detailsurl::after { content: " (u)"; } #detailspostponed::after { content: " (p)"; } #detailsnotes::after { content: " (y)"; } #tasksToolbox > .xtoolbox_selector > a:first-child::after { content: " (a)"; } #tasksToolbox > .xtoolbox_selector > a:last-child::after { content: " (n)"; } #addEntry > a::after { content: " (t)"; } #tasktabs:after, #detailstabs::after { content: "(h)"; line-height: 2; margin: 0 0.5em; } #searchtogglewrap::before { content: "(C-S-/) "; margin-left: -10em; } #viewSelector > a[href="#section.overview"]::after { content: " (C-S-6)"; } #viewSelector > a[href="#section.tasks"]::after { content: " (C-S-7)"; } #viewSelector > a[href="#section.locations"]::after { content: " (C-S-8)"; } #viewSelector > a[href="#section.contacts"]::after { content: " (C-S-9)"; } #viewSelector > a[href="#section.settings"]::after { content: " (C-S-0)"; } #viewSelector > a::after { font-size: 80%; } #appheaderlogo { position: absolute !important; } #topnav { position: relative !important; } #statusboxUndo > a::after { content: " (z)"; } #tasksToolbox > .xtoolbox_actions > form > div::after { content: " Complete (c), Postpone (p)"; color: #757575; } #tasksToolbox::after { content: "Up (k), Down (j), Select (i), Undo (z), Multi-edit (m)"; color: #757575; display: block; margin: 5px 0 -1.5em 20px; } }
これを書くにあたっては Firebug が大活躍でした。 DOM Inspector よりずっど使いやすい。 ほとんど疑似要素になっちゃいましたけど、 Greasemonkey でやるべきだったかな。
2007-01-13 11:55 更新
上に表示される名前が長い名前の場合にロゴの後ろに隠れてしまっていたのを修正しました。
2007-01-14 19:18 更新
変更時に出てくる黄色いボックスの中の「とりけす」にも表示するようにしました。
私のFirefox2
TB企画*あなたのFirefox見せてほしいな :: Love & Design ::に参加してみようかと思います。
バージョンは2.0、テーマはデフォルト。これと言ったホームページも無いのでホームは about:blank にしています。ロケーションバーで Smart Keyword を使って検索するので検索バーは非表示。あとはメニュー(Iconic Main Menu使用)とブックマーク(レット)だけで、出来るだけ小さくまとめています。
拡張機能は Talkback を除いて19個でした。
- All-inOne Gestures
- 進む/戻る/閉じる くらいしか使ってませんがやっぱり外せません。
- ColorZilla
- カラーピッカー。実はあんまり使ってなかったり。
- DOM Inspector
- 主にFirefoxのUIを調べる時に使ってます。
- Download Statusbar
- いちいちウィンドウが出てくると邪魔なので。
- Favicon Picker 2
- これで bookmarklet に favicon を付けてます。
- FireBug
- JavaScriptコンソールにDOMインスペクタにデバッガにと便利すぎ。
- Google NoteBook
- ちょっとしたメモ用。
- Greasemonkey
- 公開されているものを自分でいじって使うことが多いです。
- Html Validator
- Webサイトの構文チェックに。
- IE Tab
- IEでの表示チェックとか、IEでしか見れないサイトはこれで。
- Long Titles
- title属性の中身をマウスオーバーで全部表示するように。脚注とかのリンクを見るのに便利かと。
- MeasureIt
- いろいろサイズを測る。たまに使う程度。
- Menu Editor
- いらないメニューは消すに限ります。
- Organize Status Bar
- ステータスバーのアイコンの順序を入れ替え。
- Stylish
- userContent.css でも良いけど、その場でプレビューできるのが便利。
- Text Link
- URLテキストをダブルクリックで移動できるように。必須。
- ViewSourceWith
- フォームやページの CSS/JavaScript ファイルを任意のエディターで開く。私は xyzzy で開くようにしています。
- Web Developer
- 便利ツールいろいろ。
- 翻訳パネル
- 英語が苦手な私にとっては必需品。
Tab Mix Plus を入れようかどうか迷ったのですけど、Firefox2 でタブ機能も強化されたので思いきって外してみました。ブックマークをタブで開く設定にしていたのでちょっと戸惑いましたが2日で慣れました^^
あと、Firefox の好きなところは、シンプルで拡張性が高いところでしょうか。これ1つで何でも出来るというものよりは、シンプルなものに自分の必要なものを付け足していく方が、私は好きみたいです。
文字列操作の比較表
文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++ - bkブログ
便利だし面白いです。 C++ で空白ところをちょっと考えてみました。
Ruby | C++ |
---|---|
s.upcese! |
transform(s.begin(), s.end(), s.begin(), (int (*)(int))toupper) |
s.downcese! |
transform(s.begin(), s.end(), s.begin(), (int (*)(int))tolower) |
s.lstrip |
s.substr(s.find_first_not_of(" \t\r\n\f\v")) |
s.rstrip |
s.substr(0, s.find_last_not_of(" \t\r\n\f\v")+1) |
なんかどれもイマイチ。
Boost を使っていいのなら string_algo とか regex, format, toknizer あたりで大抵のことは出来ますね。あと BOOST_FOREACH はすごく便利なんじゃないかと(最近あまりC++使って無いのでなんとも言えませんが)。
ところでコメント機能が無いみたいなので、気になったことを以下に。
- boost::lexical_cast って16進とか8進表示の指定って出来ませんよね?
s.substr(i, j ? i + 1)
とs.substr(i, j ? i)
はs.substr(i, j - i + 1)
とs.substr(i, j - i)
ですね。 文字化け?s.lstrip
が2つありますけど2つ目はs.lstrip!
かと。
すでに修正されてます。
livedoor Reader でレートを一括変更する
(2007-07-07 追記) Fastladderに対応しました(include追加しただけですが)。移行時のレート付けにどうぞ。
LDR で複数のフィードのレートをまとめて設定したかったのですけど、そういう機能が見当たらないので Greasemonkey で vi コマンドを拡張してみました。 すでにどこかにありそうですが。
上のユーザースクリプトをインストールした後、「フォルダ、アイテムの編集」画面でフィードをいくつか選択して : 数字 Enter とかやると選択したフィードのレートが変わるはずです。 編集画面以外では通常通り、その時読んでいるフィードのレートが変わります。
あんまりテストとかしてないので関係ないフィードのレートが変わっちゃったりするかもしれませんが、そこは自己責任でおねがいします。
ソース
// ==UserScript== // @name LDR Manage Rate Commands // @namespace http://d.hatena.ne.jp/margin/ // @include http://reader.livedoor.com/reader/* // @include http://fastladder.com/reader/* // ==/UserScript== (function() {with(unsafeWindow) { '0,1,2,3,4,5'.split(',').forEach(function(v) { register_command(v, function() { var rate = v - 0; var rate_img = Rate.image_path_p + rate + '.gif'; if (hasClass('right_container', 'mode-manage')) { TRSelector.get_selected().forEach(function(sid) { set_rate(sid, rate); }); var table = $('manage_table').getElementsByTagName('table')[0]; Array.forEach(table.rows, function(row) { if (hasClass(row, 'selected')) { var img = row.cells[4].getElementsByTagName('img')[0]; img.src = rate_img; } }); } else if (State.now_reading) { var sid = State.now_reading; set_rate(sid, rate); $('rate_img').src = rate_img; } }); }); }})();
追記 (2006-10-24 13:24)
隠れているアイテムのレートが変更されなかったのを修正したつもりです。