最近の更新

関連


その他いろいろ

多機能フィードリーダSynapse製作中

2月までは目が回るほど忙しい

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

PukiWikiをで外部のサイトへのリンクを踏むと、リファラが送信されてしまいます。これを防ぐパッチがありますが、内部・外部でWiki側のURLが複数存在する場合に対応するコードを追加し、外部へのリンクのみ緩衝用のページ(googleやhatena, ime.nu等)を介するパッチを書きました。

diff -ur a/lib/make_link.php b/lib/make_link.php
--- a/lib/make_link.php	2006-10-22 05:40:25.000000000 +0900
+++ b/lib/make_link.php	2008-11-22 16:07:46.000000000 +0900
@@ -385,7 +385,20 @@
 		} else {
 			$rel = ' rel="nofollow"';
 		}
-		return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>';
+    //! ----
+    //! jump via redirector for external pages
+    global $do_redirect_externals, $redirect_url, $script_urls;
+    if ($do_redirect_externals) {
+      $ru = $redirect_url;
+      foreach ($script_urls as $s)
+        if (strncasecmp($this->name, $s, strlen($s)) == 0) {
+          $ru = '';
+          break;
+        }
+    } else
+      $ru = '';
+    //! ----
+		return '<a href="' . $ru . $this->name . '"' . $rel . '>' . $this->alias . '</a>';
 	}
 }

diff -ur a/pukiwiki.ini.php b/pukiwiki.ini.php
--- a/pukiwiki.ini.php	2006-10-22 05:40:24.000000000 +0900
+++ b/pukiwiki.ini.php	2008-11-22 11:28:52.000000000 +0900
@@ -116,6 +116,16 @@
 // Specify PukiWiki URL (default: auto)
 //$script = 'http://example.com/pukiwiki/';

+// Redirect URLs
+$do_redirect_externals = true;
+$redirect_url = 'リダイレクト用のURL';
+$script_urls = array(
+    'http://192.168.1.100/',
+    'http://example.com/wiki/',
+    './',
+    '/',
+    );
+
 // Shorten $script: Cut its file name (default: not cut)
 //$script_directory_index = 'index.php';

PukiWiki 1.4.7_nofb_utf8対象です。

リダイレクトしてくれるのは

  • http://a.hatena.ne.jp/go?
  • http://ime.nu/
  • http://www.google.com/url?sa=D&q=

など。公に提供しているものではないと思うので、真面目にやるなら自分で用意した方が良いでしょう。

PukiWikiでは[[タイトル:http://link.example.com/a/b/c]]のようにしてリンクを張ることが出来ますが、同じホスト内のWiki以外の箇所にリンク先したい場合があります。

特にエイリアスやヴァーチャルホストなどで、ホスト部分が変動する場合には通常の方法では対応できません。そこで同ホストの相対・絶対URLにリンクを張るパッチを書いてみました。

下記のパッチをPukiWiki-1.4.7_notb_utf8に適用することで、

  • [[タイトル:./d/e/f]]のようにしてhttp://link.example.com/wiki/d/e/fにリンク (相対URL。PukiWikiがhttp://link.example.com/wiki/にある場合)
  • [[タイトル:/d/e/f]]のようにしてhttp://link.example.com/d/e/fにリンク (絶対URL)

と、相対・絶対URLにリンクを張ることが出来るようになります。

[~/pukiwiki-1.4.7_notb_utf8]$ patch -p1 < thispatch

diff -ur a/lib/make_link.php b/lib/make_link.php
--- a/lib/make_link.php	2006-10-22 05:40:25.000000000 +0900
+++ b/lib/make_link.php	2008-11-22 11:30:12.000000000 +0900
@@ -360,7 +360,7 @@
  (?:>|:)
 )?
 (                 # (3) url
- (?:(?:https?|ftp|news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+
+ (?:(?:https?|ftp|news):\/\/|mailto:|\.\/|(?<!\w)\/)[\w\/\@\$()!?&%#:;.,~'=*+-]+
 )
 (?($s1)\]\])      # close bracket
 EOD;



20081122-2307 絶対URLの適用範囲が広すぎたので修正

タイトル通りのAutoHotKeyスクリプト。
カーソル移動、Home/End、Page Up/Down、Delだけ。ほかは自分で使わないので…

; Realforce86U で HHKBのFn風キー定義
; AppとWin(をAppにマップしたもの)を左右Fnとして使用
; Winは無いと困るので、新たにRCtrlをRWinにマップします。

#UseHook
; App(Winと入れ替わっている前提) で擬似Fn修飾
AppsKey & [::Send, {blind}{Up}
AppsKey & `;::Send, {blind}{Left}
AppsKey & '::Send, {blind}{Right}
AppsKey & /::Send, {blind}{Down}

AppsKey & k::Send, {blind}{Home}
AppsKey & ,::Send, {blind}{End}

AppsKey & l::Send, {blind}{PgUp}
AppsKey & .::Send, {blind}{PgDn}

AppsKey & BS::Send, {blind}{Del}

; スキャンコードリマップ
; 参考: http://uguisu.skr.jp/Windows/winCaps.html
; HKLMSYSTEMCurrentControlSetControlKeyboard LayoutScancode Map
; 00 00 00 00 00 00 00 00
; 04 00 00 00
; 1D 00 3A 00 ; Caps -> LCtrl
; 5C E0 1D E0 ; RCtrl -> RWin
; 5D E0 5B E0 ; LWin -> App
; 00 00 00 00

クリップボードを監視し、コピーされた語句で検索・バルーン表示するClipDic v1.00をBSD Licenseのもと公開しました。

標準でGoogle検索、Wikipedia検索が含まれていますが、簡単な.NETアセンブリを書くことでユーザが検索モジュールを追加することが出来ます。(辞書を引くモジュールなどを作ると便利)

.NET Framework 3.5以上が必要です。

2008 10 13

Synapse 0.0.17α

一年と数ヶ月ぶりにフィードリーダSynapse 0.0.17αをリリースしました。

  • フィード巡回時の重さを軽減
  • idがintだったためしばらく使うとオーバーフローする問題を解消(ulongに変更)
  • 「ブラウザで開く」(O)と対にして使うグローバルホットキー「Synapseをアクティブ化する」(Ctrl+Alt+O)
  • 未読件数が時々狂うのは未だ直ってない

これだけ時間を空けると自分の書いたソースでも訳が分からない。一度リファクタリングしないとこのまま開発するのは難しそう。

あふ的操作感+Python拡張可能な2画面ファイラ、内骨格
config.pyを弄ることでキー割り当てなどのきめ細かい設定が可能ですが、ファイラというアプリの特性上、ローカルな環境に応じた設定(ジャンプ先リストなど)が多くなります。

複数の環境で内骨格を使う場合、共通部分とローカルな部分に分けられたら便利だと思い、extentionsに置いたlocal_config.pyをconfig.pyの後に読み込むデコレータを書いてみました。

config.pyのdef configure前に以下のコードを書き、


# ローカル設定を読み込むデコレータ
def localize(f):
    def localized_configure(window):
        f(window)
        try:
            import local_config
            reload(local_config)
            eval("local_config.%s(window)" % f.__name__)
        except ImportError:
            print "no local configure file."
    return localized_configure

configure(_*)にデコレータを適用します。


# 設定処理
@localize ←これ
def configure(window):
       (略)

extentions/local_configure.pyに普通のconfig.pyと同様にconfigure(_*)を書けば、
config.pyに書かれたconfigure(_*)が呼び出された後にlocal_configure.py上の対応する関数が呼ばれます。

もしかしたらもっと上手い方法があるかもしれませんが、一応これでも不便無く使えています。


vim: Dvorak下でもノーマルモードはQWERTYを保つ
の改良です。

langmapを使用し、Dvorak配列使用時(拙作のdvorak.ahkなど)、ノーマルモードなどではQWERTYのように振る舞うスクリプトです。

すなわち、Dvorak配列のcキーを押すと、(QWERTYならこれはiの位置にあるので)挿入モードに移行する、といった挙動を示します。
挿入モードの中では普通にDvorakで入力できます。

dvorak.ahkと併用すると、このdvorak_langmap.vimで得られる効果とは別に、Ctrl修飾はQWERTYに変換される(
例えばDvorakのCtrl-g (QWERTYのCtrl-u)で半ページUpの動作になる)ので、
Ctrl-u/dや入力モード中でのCtrl-r、Ctrl-aなどもQWERTYの気分で使えます。
まあこの辺はそもそもキーの配置よりも、頭文字の意味で決められている感じがするので、わざわざQWERTYに戻す意味は薄いかも知れませんが。

尚、なぜかautocomplpop.vimと併用すると挿入モードで上手く動かないようです。


" dvorak_langmap.vim

" 1
set langmap=[-,]=,[_,]+,\\+,`\\|

" 2
set langmap+='q,\,w,.e,pr,yt,fy,gu,ci,ro,lp,/[,=]
set langmap+=\"Q,<W,>E,PR,YT,FY,GU,CI,RO,LP,?{,+}

" 3
set langmap+=aa,os,ed,uf,ig,dh,hj,tk,nl,s\\;,-'
set langmap+=AA,OS,ED,UF,IG,DH,HJ,TK,NL,S:,_\\"

" 4
set langmap+=\\;z,qx,jc,kv,xb,bn,mm,w\,,v.,z/
set langmap+=:Z,QX,JC,KV,XB,BN,MM,W<,V>,Z?

コメントでlangmapを教えてくださったkanaさま、ありがとうございます。

foobar2000のプレイリストサイドバーではD&Dによるプレイリストの並べ替えが出来ないようなので、キー操作で入れ替えられるようにしてみました。

Shift+上下で選択中のプレイリストを上下します。
最上/最下のプレイリスト選択時はコンテキストメニューのアクセスキーが変わるので動きませんが。


fb2k_playlistlist_move(key) {
 ControlGetFocus,p_ctrlid,A
 ControlGetText,p_ctrltext,%p_ctrlid%,A
 if (p_ctrltext="Playlist switcher") {
  Send,{AppsKey}%key%{Esc}
 }
}
#IfWinActive ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
; プレイリストリスト Shift+上下で移動
+Up::fb2k_playlistlist_move("m")
+Down::fb2k_playlistlist_move("d")
#IfWinActive

FirefoxでファイルをDLしようとするときに表示される、「***.** を開く」ダイアログ。
右手マウスで使っていると、一々Enterまで手を伸ばすのが面倒です。

ということでSpaceキーでOKを押せるようにするAutoHotKeyスクリプト。

; ファイルを保存ダイアログでSpace=>Enter
#IfWinActive ahk_class MozillaDialogClass
Space::
WinGetTitle,win_title,A
if (RegExMatch(win_title, ".* を開く$")) {
 Send,{Return}
} else {
 Send,{Space}
}
return
#IfWinActive

普通のUS配列かJIS配列のキーボードを使い、左手だけで入力を可能にするAutoHotkeyスクリプト、RibbitPad v1.00を公開しました。

RibbitPad
コンパイル済みexeとahkが入手可能です。

スペースバーと右Altキー(または変換キー)を2種の修飾キーとして用います。
配列図は以下の通り。

配列

次のページ »