github で新しいリポジトリを作る

github のトップの "New Repository" のボタンで新しいリポジトリを作ることが
できる.新しいリポジトリを作ると以下のようなガイドが出るので,

Global setup:
$ git config --global user.name "Your Name"
$ git config --global user.email kbkbkbkb1@gmail.com

Next steps:
$ mkdir .emacs.d
$ cd .emacs.d
$ git init
$ touch README
$ git add README
$ git commit -m 'first commit'
$ git remote add origin git@github.com:kbkbkbkb1/.emacs.d.git
$ git push -u origin master

Existing Git Repo?
$ cd existing_git_repo
$ git remote add origin git@github.com:kbkbkbkb1/.emacs.d.git
$ git push -u origin master

このとおりにするとよい.github を使わずに,自分でリモートリポジトリを作るには,
gitのリポジトリ作成メモ « taichino.com あたりを参考にして作ればいいのかな.
今度どこかにつくってみよう.

simple-hatena-mode から投稿ができるようになった.

Ubuntu だと問題なくはてダラを使って投稿することができた.Windows だと,どうもパスが上手く通ってないようで,hw.pl が見つかってない模様.修正方法はあとで考える.

org-mode からの export

もできた.あとは自分好みに改造するだけ.

[Emacs][PukiWiki] pukiwiki-mode.el で日本語ページを編集する

私は備忘録のために,いろいろな知識を Pukiwiki に書きためている.はてなに似た(はてなPukiwiki に似てる?)簡単な記法で構造的な文書を書くことができ,誰でも編集することができるので知識の集約などによく使われている.Web から編集するのが市場のオーソドックスな編集方法であるが,いささか使いにくいため私は Emacspukiwiki-mode.el を用いて編集をしている.

pukiwiki-mode.el

やはり文章を編集する際には Emacs を使いたいものです.pukiwiki-mode.el を使えば Emacs から Pukiwiki を編集することができます.Web からの編集とは段違いの速度で編集できます.動作に必要な環境は,

  1. http.el
  2. diff (ページの衝突の際に使っている)

です.導入や使い方はリンクの方に乗っているからいいのですが,pukiwiki-mode を使う上で1つ大問題がありました.それは,日本語を含むページの編集ができないことです.日本語のページを編集しようとするとページ名が文字化けしてしまい,そのページにたどり着くことができません.これではなかなか使いづらいので解決法を探ってみました.

http-url-unhexify-string を修正する

ここのコメントでも言及されていたのですが,日本語が文字化けしている原因は http-url-unhexify-string(pukiwiki-mode.el 3180行目あたり)がうまくマルチバイト文字の処理が出来ていないことのようです.実を言うと Emacs での文字処理やエンコードのことはあまり調べてないので,詳細にはここの処理が分かっているわけではないですが,エンコードの際にマルチバイト文字を一文字ずつ format で文字にしているので,マルチバイトとしてデコードすることができなくなり文字化けしているように見えました.

http-url-unhexify-string は関数の最後で,decode-coding-string でデコードされ日本語ページのページ名が返ってくる設計になっているようですので,この decode-coding-string になんとかデコードできる形の引数を渡してやればいいことになります.で,数時間かけて自分の手でなんやかやいじくりまわしていたのですが,まったく思い通りに処理することができず困っていたところ,そんな事せずともすでにそういう事をしてくれる関数を実装しているものがありました.url-util.el(標準で入ってます) に url-unhex-string という関数があり,これがまさにやりたいことをしてくれる関数でした.結局それを使って1行追加するだけで終わってしまいました.

(defun http-url-unhexify-string (str coding)
  "Unescape characters in a string."
  (save-match-data
    (let ((result (string-as-unibyte str)) (pos -1))
      (while (setq pos (string-match "+" result (1+ pos)))
        (setq result (replace-match " " nil nil result)))
      (setq pos -1)
      (while (setq pos
                   (string-match
                    "%\\([0-9a-fA-F][0-9a-fA-F]\\)" result (1+ pos)))
        (setq result
              (replace-match
               (format "%c"
                       (eval (read (concat "?\\x"
                                           (match-string 1 result)))))
               t t result)))
      (setq result (url-unhex-string str)) ; この行を追加する
      (decode-coding-string result coding))))

これだけで,無事 pukiwiki-mode で日本語ページを編集できるようになりました.これでますます充実した Pukiwiki 生活が送れそうです.

キーボード配置を変更する。変態的に。2

前回の記事では Windows 上でどのようにキーボードの配置をカスタマイズしているかを紹介しました。さて、今度は Ubuntu 上で同じキーボードカスタマイズする方法を紹介します。
Windows ではキーボード配置を変更するのに、のどかというアプリケーションを使いましたが、Ubuntu では窓使いの憂鬱Linux に移植した mayu を使用することにします。

mayu

窓使いの憂鬱はもともと、UNIX 系から Windows に転職した際に、UNIX 系の操作体系を再現するためのアプリケーションだったはずなのに、今度は Linux 系への逆移植がされて mayu というアプリケーションが開発されるという面白い状態になっています。設定の仕方などは窓使いの憂鬱、のどかとかわらないのがいいですね。
mayu の導入などは他サイトにもあるので、詳しくは書きません。ここここを参考にどうぞ。
詳しい説明は前回やってしまったので、さっさと私の mayu の設定ファイル (.mayu) の内容を示します。

### .mayu_ubuntu
include "109.mayu" # 109 キーボード設定 

keymap Global
## 左コントロールとCapsLockの入れ替え
## CapsLock を Ctrl にして、CapsLock の存在を消し去ることにした
mod Control += Eisuu
key *Eisuu = *LeftControl
#mod Control -= LeftControl
#key LeftControl = Eisuu

## 無変換をAltにする
mod Alt += !!Muhenkan
#key *Muhenkan = *RightAlt
## 単独で押したら ESC にする(one shot modifier)
key ~R-*M-Muhenkan = Escape
key R-*M-Muhenkan = &Ignore

## 変換をCrtlにする。
mod Ctrl += !!Henkan
#key *Henkan = *RightControl
## 単独で押したら ENTER にする(one shot modifier)
key ~R-*C-Henkan = Enter
key R-*C-Henkan = &Ignore

#スペースをshiftとして使用(SandS)
mod Shift += !!!Space
def option delay-of !!! = 2

keymap  KeymapDefault = &Default

以上の設定で、前回説明した caps Lock を ctrl にすることと、shift, ctrl, alt (SandS, one shot modifier) を親指で押せる位置に変更する設定ができます。記述は殆ど変わりません。キーの名前が日本語からアルファベットになっているくらいです。

super, hyper の設定

Windows の時と同様に super キーや、hyper キーは mayu では設定できません。そこで、Linux でキーボード配置を変更するプログラムとして定番な xmodmap を使います。xmodmap は割と mayu に似た記法でキーボード配置を変更します(というか窓使いの憂鬱のほうが参考にしたのでしょうね)。
では、カタカナひらがなキーを super キーにします。xmodmap の設定ファイル .Xmodmap(多分ファイル名はなんでもいいはずですが)に以下の設定を書きます。

!! カタカナひらがなをHyper keyにする
keysym Hiragana_Katakana = Hyper_L
remove mod4 = Hyper_L
add mod3 = Hyper_L

実際にカタカナひらがなキーに hyper を割り当てているのは2行目だけで、他の行はあんまり重要ではありません。この設定ファイルを

$ xmodmap .Xmodmap

で設定ファイルを読み込むと、設定が有効になります。xmodmap コマンドを単独で使うと現在どのキーに修飾キーが割り当てられているかわかります。

$ xmodmap
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Eisu_toggle (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Hyper_L (0x65),  Hyper_L (0xcf)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

mod3 に hyper が、mod4 に super が割り当てられているのがわかると思います。Ubuntu ではもともと windows キーに super が割り当てられていたので、xmodmapで設定するまでもありませんでした。この辺は、ディストリビューションやバージョンによって変わってくるかもしれません。

おわりに

これで、WindowsUbuntu でほぼ同じキー配置を使うことができます(厳密に言えばキーボードの入力がどこでトラップされるのかによって細かい動きが変わってくるようですが)。これで Emacs の職業病、左手の小指痛を全く感じずに快適に使うことができます!

キーボード配置を変更する。変態的に。1

実質的な初エントリー。何を書こうかと考えていましたが、ここ数年をかけてカスタマイズを続けていたキーボード配置の変態的カスタマイズをまとめのために紹介しようと思います。使っているキーボードは日本ではごく一般的な109日本語キーボードです。

そもそもカスタマイズを始めたきっかけ

3年ぐらい前タイピングのスピードをあげるのにはまったことがありました*1。最初はローマ字入力を練習していたのですがそれが上達してくると、次はアルファベット、記号入力の練習を始めました。アルファベット、記号入力になるとローマ字入力では使わなかった Shift キーを押さなければならなくなります。
このとき、左 Shift キーを左手小指で押していたので、AやZとかの押しにくさといったらなかった。しかもホームポジションから離れて本来とは違う指で a や z を打鍵しなければいかなくなります。周りには左 Shift キーと右 Shift キーを使い分けている人もいましたが、そんなメンドクセー事はしたくねー、と思いました。ここで初めてキーボード配置を変えたいと思ったわけです。

sticky shift, SandS, one shot modifier

んで、そんなことは昔の人達も考えているわけで特殊な Shift キーの入力の仕方は幾つか考えられていました。
その1つが sticky Shift。これは Shift キーを押しながら他のキーを打鍵するのではなく Shift キーを1回打鍵した直後の文字が大文字になるという入力の仕方です(Shift を押し続ける必要がないということですね)。
そしてもう1つが SandS です。これはスペースキーを押しながら他のキーを打鍵するとスペースキーが Shift キーとして働くという入力の仕方です。スペースキーを単独で打鍵すればスペースが入力されます。これは普段遊ばせている親指で Shift キーを押せるようになるので、全くホームポジションから離れずに大文字、記号を入力することができます!初めて使ったときはヨダレが出ました。
この SandS は one shot modifier の一種と言えます。one shot modifier は対象キーをおしながら他のキーを打鍵すると修飾キー*2として働き、対象キーを単独で打鍵するとそのまま入力される方式です。SandS の場合は対象キーがスペースで、修飾キーが Shift ということですね。これまたあとで出ます。
sticky shift だと1つの大文字しか入力することができません。英語を書いてる時や、SKK で入力するときは便利なんでしょうが、私はプログラムも書くことがあり、大文字、記号が連続することも多々あるので、SandS を使うことにしました。

窓使いの憂鬱

実際に SandS を実現しようとすると、何かしらのプログラムでキー配置をいじることになります。キー配置を変更できるプログラムとしては窓使いの憂鬱がものすごく有名です。他にも、猫まねきや AutoHotKey とかあるらしいのですが使ったことないので知りません。使っている人がいたら使い勝手を教えてください。
窓使いの憂鬱

いかんともしがたい理由により UN*X Wizard が窓使いにジョブチェンジする時、その操作体系の違いにより憂鬱な日々を送らざるを得ないことは想像に難くありません。「窓使いの憂鬱」は、その憂鬱を少しだけ和らげることができるアイテムです。

というような目的で作られており、かなーり柔軟にキーボード配置の変更ができます。詳細はマニュアルに譲りますが、SandS を使うだけなら設定ファイルに

mod Shift += !!Space

or

mod Shift += !!!Space

と書くだけです。
前者の場合,スペースを押し続けても、スペースは入力されません。これだと,連続してスペースを入力したいとき不便なので,後者の場合はスペースを押し続けてしばらく経つとスペースが(連続で)入力されます。スペースを押してからどのキーを打鍵しようかな?と考えているとスペースが入力されてしまいます.
そんなこんなで SandS を手に入れた私は超快適な Shift 生活を送ることができました。

Ctrl キーのカスタマイズ

タイピングにはまっていたのとほぼ同じ頃、私は Emacs というエディタを使い始めました。一般的な Windows ユーザは Shift やせいぜい Ctrl ぐらいしか修飾キーを使わないと思いますが、このEmacs というエディタ、Ctrl や Alt 果てには Super や Hyper といった修飾キーを多用しまくります。特に Ctrl キーの使う頻度は半端じゃありません。というか使わないとまともに操作できません。
なので、Emacs 界隈ではキーボードの左下に追いやられている左 Ctrl を Caps Lock と交換して、a キーの横に Ctrl を持ってくることがよくやられます。はじめからそう配置されているキーボードがあるくらいですから、やっている人はかなり多いのでしょう。これを窓使いの憂鬱で実現するには、設定ファイルに

## 左コントロールとCapsLockの入れ替え
## CapsLock を Ctrl にして、CapsLock の存在を消し去ることにした
mod Control += 英数
key *英数 = *LeftControl
#mod Control -= LeftControl
#key LeftControl = 英数

と書きます*3
下2行がコメントアウトしてありますが、これは私の場合は Ctrl と Caps Lock の交換ではなく Caps Lock を Ctrl に変更して Caps Lock というキーには消え去ってもらうことにしています。いままで一度も意図的に Caps Lock を使ったことはありませんし、他人に Ctrl どこにあるの?と聞かれる心配もないので、これでいいかと思っています。下2行のコメントアウトを外せば単純な交換になります。このカスタマイズによってだいぶ Emacs が使いやすくなります。

さらにカスタマイズ。親指を遊ばせてはならない

以上で SandS と Ctrl の位置変更はできて、なかなか使い勝手も向上したわけですが、まだ満足しません。まず、Crtl が a キーの横になったのはいいのですが、これは結局左手小指で押さなければならず、左 Shift キーと同じ問題がでてきます(Ctrl+a をどうやって押すか?)。また、Emacs でなかなか使用頻度の高い Alt の押しにくさも問題です(最も使うであろう Alt+x は親指がつりそうになります)。
じゃあどうするかというと、ここまで読んでくれたなら予想できてしまうかもしれませんが、Ctrl も Alt も親指で押せる位置に変更します。当然親指の位置的にスペースキーに近いキーになります。そして、スペースの両隣といえば変換キーと無変換キー。みなさん、この2つのキー使ったことありますか?私はありません。なんでこんな位置に鎮座しているのか全く理解できませんが、この位置にあるなら有効活用してしまおうということです。
ちなみにこの頃から使う OS が Windows 7 になり、窓使いの憂鬱が開発終了で使えなくなってしまいました。Windows 7 における窓使いの憂鬱の後継としてのどかというプログラムがあります。有料にはなってしまいましたが2000円程度ですし、それだけの価値は絶対あります、とおすすめしておきます。以下ではのどかの設定を説明します。使い勝手はほぼ窓使いの憂鬱とは変わりませんから、以下の設定も窓使いの憂鬱でそのまま使えるかもしれません(確認はしていない)。
というわけでのどかで変換キーに Ctrl、無変換キーに Alt を割り当てるには、のどかの設定ファイルに

## 無変換をAltにする
mod Alt += !!無変換
key *無変換 = *RightAlt
## 変換をCrtlにする
mod Ctrl += !!変換
key *変換 = *RightControl

と書くだけです。実に簡単です。ただし、もともとIME で変換キーや無変換キーに何かしらの動作が割り当てられていることがあります。それを無効にしないと所望の動きはしないと思います。
このカスタマイズをすることにより Emacs の操作性は当社比2倍になります。実際、これによって Alt を使うキーバインドが使いやすくなり、ますます Emacs が便利になった気がします*4。親指を使うのは最初はなかなか難しいですが、慣れればそうでもありません。動きとしては圧倒的に人差し指から小指までのほうが激しいのですから。

さらにさらに(変態的に)カスタマイズ。修飾キーだけなんてもったいない

実は上の Ctrl や Alt を親指で押すのは、Emacs 界隈ではたまに聞く話で、私以外にも設定している人はいると思います。しかし、私はこれをさらに変態的にカスタマイズします。せっかく親指で修飾キーを押せるようになったのだから,その修飾キーを one shot modifier にしてしまうのです.つまり,変換キーや無変換キーを単独で打鍵した場合,何か別のキーを入力するように設定します.
どのキーを入力するかはいろいろ考えられます.私も試行錯誤中ですが,今のところ変換キーを Enter,無変換キーを Esc にしています.この2つのキーは意外とホームポジションから遠いのです.Emacs 使いなら Enter は C-m にしろ、と言われるかもしれませんが,C-m は1ストロークとはいえ2つのキーを押すことになるので、やはり1つのキー単独の押しやすさにはかないませんし、のどかで設定すればどのようなアプリケーション上でも使えるので便利です。Esc は Emacs ではそんなに使用頻度は高くありませんが、あると便利なときもあります。vi 派の人ならものすごく便利に使えるんじゃないでしょうか?
これを実現するのどかの設定は

## 変換をCrtlにする
mod Ctrl += !!変換
#key *変換 = *RightControl
## 単独で押したら Enter にする(one shot modifier)
key ~R-*C-変換 = Enter
key R-*C-変換 = &Ignore

## 無変換をAltにする
mod Alt += !!無変換
#key *無変換 = *RightAlt
## 単独で押したら Esc にする(one shot modifier)
key ~R-*M-無変換 = Escape
key R-*M-無変換 = &Ignore

## Emacs でうまく動いてくれないの対策
## IME の状態を無視するために必要?
key *IC-*I- =

となります。この設定で、変換キーと無変換キーを one shot modifier にすることができます。単独で押すキーを設定しているのが5, 12行目です。それだけだと、Ctrl+何かのキー を押そうとして変換キーを押したけど、やっぱやめた、と思って変換キーを離すと Enter が入力されてしまいます。&Ignore がある行でそれを防止しています。
最後の1行は Emacs でうまく動いてくれないのを防止するための設定です。詳しくはここを見てみてください。この質問をしたのは私です。
ここまで変態的なキー配置にしている人はあまりいないんじゃないでしょうか。使ってみると Enter の押しやすさにはかなりびっくりします。

私は病気です。わかってます。でも hyper と super が必要なんです。

ここからは Emacs 限定です。先程も少し言ったように、Emacs では ctrl や alt の他にも hyper や super という修飾キーが使えます。聞きなれない修飾キーですが、昔のキーボードにはあったらしいのです。Emacs では ctrl や alt を使ったキーバインドは多いので、なかなか自由にキーバインドを変更できませんが、hyper や super を使ったキーバインドは自分の好きに割り当てることができます。私の場合、実際にはそんなに多く割り当てていませんが、将来キーバインドが増えることを考慮して hyper, super を用意しています。
しかし、のどかでは hyper, super という修飾キーを直接何かのキーに割り当てることはできません。もし出来る方法をご存じの方がいましたら、教えてくれるとうれしいです。
じゃあどうするかというと、Windwos 上の Emacs であれば、Emacs の設定により windows キーと app キーを hyper, super にすることができます。しかし、大概のキーボードでは、app キーは押しにくいところにあるものです。なので、のどかで位置の変更をしておきます。当然親指で押せるところです。ここでは、変換の1つ右隣、これまた使ったことのないカタカナひらがなキーを app キーとして使います。のどかの設定で

## ひらがなキーを Applications キーにする
## Emacs で hyper としてつかうため
key *ひらがな = *Applications

と書くだけです。実質1行です。あとは、Emacs の方で設定するだけです。Emacs の設定ファイル(init.el)に

(setq w32-apps-modifier 'hyper      ; apps キーを hyper キーにする
      w32-lwindow-modifier 'super)  ; 左Windows キーを super キーにする

と書けば OK。これで自由に hyper と super が使えます。ただし、もともと OS で設定されている windows+d や windos+e を Emacs で使うのは難しいと思います。他のキーバインドにしときましょう。
さらに、windows キーももっと親指で押しやすい位置に変更することも考えました。本来左 alt のある場所に割り当てるとか。しかし、そうすると普通だと使うであろう左 alt が潰れてしまいます。他の人がこのキーボード配置で使ったときに混乱してしまう可能性があります。というわけで、今はその設定は見送っています。
実は今までの設定は、普段殆ど使わないキーに対して新しいキーを割り当てていただけなので、他の人が使ったとしてもほとんど違和感を感じないはずです。それは逆に言うと自分が他の普通のキーボードを使うときもキーの押し間違えをすることも少なくなると思います(効率は当然落ちますが)。つまり、このキーボード配置への依存度を下げることができるのです(今更の感は多分にありますが)!

まとめ

以上つらつらと書きましたが、現在のキー配置をまとめて図で表すとこのようになっています。

とにかく、親指修飾キーは超おすすめですので一度やってみてください!みんな親指を遊ばせすぎです。ctrl や alt は標準でこの位置にしてもいいくらいだと思うんですけどね。
この記事は Windows 上での話です。Ubuntu でも同じようなキーボード配置にしているのですが、記事が長くなりすぎたのでその解説は次回ということで。長文失礼しました。

おまけ

使っているキーボードはスペースバーの長さが普通のキー2つ分くらいです。4つ分くらいの長いスペースバーだと変換キーや無変換キーが押しにくく、親指修飾キーの威力が半減します。ぜひ短いスペースバーのキーボードでどうぞ。私はスペースバーの長さで買うノートパソコンを決めたぐらいです。

*1:タイプウェルを練習しまくった

*2:Shift とか Ctrl とか Alt とか

*3:#から改行まではコメントです

*4:以前は M-% なんて両手で押してましたが、今は左手の親指と人差指だけでおせます