[greasemonkey]リンク先のイメージファイルをlightbox風に表示するgreasemonkey

自分用に作ったgreasemonkeyを公開してみた。後悔している。
http://userscripts.org/scripts/show/37265

結構適当に作ってます。ダメ出し歓迎なので、よろしくお願いします。

簡単な説明

インストール後、いつものように画像リンクを踏むとlightbox風のビューアが表示されます。
ビューアはクリックすることで閉じます。


拡張子で画像リンクかどうか判別しているのですが、リンク先が画像でない場合には上手く動作しない上に、リンク先へ移動も出来ない仕様となっております。ご了承ください。

(そのうち直します。すみません…)

追記

http://userscripts.org/scripts/show/35377
これで欲しい機能は揃っている模様。全然しらなかった…。

vim のkeymapでCtrl-Spaceが設定できなかったので調べてみた。

行き着いた先はここ。
Avoid the escape key | Vim Tips Wiki | FANDOM powered by Wikia

どうやらと指定せずにでいけるらしい。

imap  

出来ました!
前に軽く調べたときに分からなかくて、ずっと放置していたんですよね。

今度Shift-Spaceの設定方法も確認しておかねば…。

[linux]zshrcファイルを分割して整理する

以下を.zshrcファイルに追加して、$home/.zshディレクトリに、*.zsh なファイル名でスクリプトを配置する。

ZSHHOME="${HOME}/.zsh"

if [ -d $ZSHHOME -a -r $ZSHHOME -a \
     -x $ZSHHOME ]; then
    for i in $ZSHHOME/*; do
        [[ ${i##*/} = *.zsh ]] &&
            [ \( -f $i -o -h $i \) -a -r $i ] && . $i
    done
fi


乱雑になりがちな.zshrcファイルを機能ごとに分割して整理したくなったので、方法を探してやってみました。
今はまだ整理が終わってないので、ファイル数が少ないですが、今後増えていくでしょう。

ls ~/.zsh
prompt.zsh
screen-status.zsh
screen-complete.zsh

FirefoxのファイルメニューにRestartを追加するuserChrome.js

http://amb.vis.ne.jp/mozilla/?p=50スクリプトは、
終了確認ダイアログを表示しない。
sessionstoreがcurrentWindowのみしか機能しない。

そこでmulti-windowでもsessionstoreが正常に機能するように改良してみました。

改良後スクリプト

/**
 * A user script for userChrome.js extension.
 * @name    Restart Firefox
 * @description    Add 'Restart' command to 'File' menu in Firefox menubar.
 * @compatibility    Firefox 1.5 - 3.0
 * @author    Gomita
 * @version    2007.02.14
 * @permalink    http://amb.vis.ne.jp/mozilla/?p=50
 */

// 2007.02.14 modified by http://d.hatena.ne.jp/dgdg/20070214/1171472940
//   - add "R" accesskey
//   - supporting multi-window

(function()
{
    // create 'Restart' menuitem
    var menuitem = document.createElement("menuitem");
    menuitem.setAttribute("label", "Restart");
    menuitem.setAttribute("accesskey", "R");
    
/* original
    menuitem.addEventListener("command", function()
    {
        const APP_START = Components.classes['@mozilla.org/toolkit/app-startup;1'].getService(Components.interfaces.nsIAppStartup);
        APP_START.quit(APP_START.eRestart | APP_START.eAttemptQuit);
    }, false);
*/
    menuitem.addEventListener("command", restartApp, false);

    // insert 'Restart' menuitem before 'File' > 'Exit'
    document.getElementById("menu_FilePopup").insertBefore(menuitem, document.getElementById("menu_FileQuitItem"));



//restartApp find here:
//  - chrome://mozapps/content/extensions/extensions.js
//  - %FirefoxApplicationDir%/chrome/toolkit.jar/content/mozapps/extensions/extensions.js
function restartApp() {
  const nsIAppStartup = Components.interfaces.nsIAppStartup;

  // Notify all windows that an application quit has been requested.
  var os = Components.classes["@mozilla.org/observer-service;1"]
                     .getService(Components.interfaces.nsIObserverService);
  var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
                             .createInstance(Components.interfaces.nsISupportsPRBool);
  os.notifyObservers(cancelQuit, "quit-application-requested", null);

  // Something aborted the quit process. 
  if (cancelQuit.data)
    return;

  // Notify all windows that an application quit has been granted.
  os.notifyObservers(null, "quit-application-granted", null);

  // Enumerate all windows and call shutdown handlers
  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
  var windows = wm.getEnumerator(null);
  while (windows.hasMoreElements()) {
    var win = windows.getNext();
    if (("tryToClose" in win) && !win.tryToClose())
      return;
  }
  Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup)
            .quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);
}

})();

説明など

改良後のスクリプトにはrestartApp()が定義されています。
この関数はFirefoxにAdd-onをインストールした時に表示されるリスタートボタンに使われていたものです。
chromeURL(chrome://mozapps/content/extensions/extensions.js)をFirefoxで開くとrestartApp()が定義されているjsファイルをダウンロードすることが出来ます。

この関数を探すのに、DOM Inspectorを使用しました。



FirefoxのtoolメニューからAdd-onsを起動します。
同じくtoolメニューからDOM Inspectorを起動します。
DOM InspectorのFileメニュー > Inspect a Window でAdd-onsを指定します。
Ctrl + F で restart と検索します。

restartApp() なるものを見つけることが出来ると思います。
続いて DOM Inspectorのロケーションバーをみると

chrome://mozapps/content/extensions/extensions.xul

となっているはずです。
このchromeURLの実体がどこにあるかというと、

Firefoxのインストールディレクトリ/chrome/toolkit.jar

に含まれています。
chromeURLは同ディレクトリにあるtoolkit.manifestによって定義されています。
toolkit.jarを解凍してXULファイル

mozapps/extensions/extensions.xul

をエディタで見てみると以下のような部分を見つけることが出来ると思います。

  <script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/>
  <script type="application/x-javascript" src="chrome://global/content/contentAreaUtils.js"/>
  <script type="application/x-javascript" src="chrome://mozapps/content/extensions/extensions.js"/>
  <script type="application/x-javascript" src="chrome://global/content/nsDragAndDrop.js"/>
  <script type="application/x-javascript" src="chrome://global/content/nsTransferable.js"/>

この中で、同じディレクトリにある

chrome://mozapps/content/extensions/extensions.js

を見てみます。
探していたrestartApp()を発見できました。

後はこれをuserChrome.jsに組み込むだけです。

「初めてのPerl 第3版」でPerlを始めました。

初めてのPerl

初めてのPerl

すごく良い本ですね。
Perlは初めてですが、まず読んでみています。(現在9章まで完了)
自分が知りたかった部分が程よく出てくるので、特につまずくポイントもなくてGood!
これは読むのが楽しい。いつの間にかPerl脳になってきている自分がいます。

「プログラミングの経験があって、Perlには興味があるけど何から始めたら良いか分からない」という自分にぴったりの本だと思いました。

だんだんPerlの雰囲気というか考え方が分かってきたので、何か書けそうな気がします。

coLinux(Debian)にsshfsをインストールしてリモートサーバのファイルを直接編集する(インストールメモ)


shfsが超便利! - 2nd lifeより
shfsでSSHでログインできるサーバのディレクトリをマウントしてsambaで共有してごにょごにょ、とできるらしいです。
とても便利そう…ということで試しにインストールしてみます。

apt-cache search で検索するとsshfsという同じ(?)ものがあったのでこちらをインストールしてみます。
sshfsはfuseというパッケージを利用しているのですが、自分でコンパイルしてあげないといけないようです。


今回の環境は


インストールメモ

# まずはkernelを更新
apt-get update
apt-get dist-upgrade

# 必要なパッケージをインストール
apt-get install kernel-package
apt-get install module-init-tools
apt-get install wget
apt-get install fuse-source
apt-get install sshfs
apt-get install ssh
apt-get install module-assistant
apt-get install gcc-3.4

# gcc
ln -sf /usr/bin/gcc-3.4 /usr/bin/gcc

# fuse-sourceがここにインストールされているはず
cd /usr/src

# 現在入っているバージョンのkernel-source
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.11.tar.gz
wget http://nchc.dl.sourceforge.net/sourceforge/colinux/coLinux-0.6.4-src.tar.gz
tar zxf linux-2.6.11.tar.gz
tar zxf coLinux-0.6.4-src.tar.gz
tar jxf f*.bz2
ln -s linux-2.6.11 linux

cd linux
patch -p1 < ../coLinux-0.6.4/patch/linux
cp ../coLinux-0.6.4/conf/linux-config .config

make-kpkg --append-to-version '-co-0.6.4' modules_image
cd ..
dpkg -i *.deb

# fuseグループ(デフォルト)にsshfsを使うユーザを追加する
vi /etc/group

これでsshfsを使うことが出来るようになります。
例:

sshfs sshusr@remotehost:/home/htdoc /mnt


マウントしたディレクトリはsshfsコマンドを実行したユーザしか見れないのですが、設定があるようです。(from:http://datafarm.apgrid.org/document/html/ja/user/samba-gfarmfs.html)

Samba を経由して FUSE を使ったマウントポイントにアクセスするには, FUSE のセキュリティに関する設定が必要になります.
FUSE 2.2.1 以前では,以下の /etc/fuse.conf の設定は必要ありません.(補足もご覧ください.)
/etc/fuse.conf を作成し,以下のように編集します. FUSE のインストール直後は,このファイルがありません.

/etc/fuse.conf user_allow_other

後はsambaをインストールして設定するだけでWindowsでsshfsでマウントしたディレクトリを見ることが出来ると思います。


ssh-agentなどを利用するとsshでのログインを簡単にすることが出来るようになるそうなのですが、まだ試していません。