2015年11月15日日曜日

helm-swoopでmigemoを有効にする

isearch中にC-;でhelm-swoopを起動する設定にしているが、こちらもいつの間にかmigemoで検索できなくなっていたので修正。

    (setq helm-migemo-mode 1)
を設定ファイル (~/.emacsとか~/.emacs.d/init.elあたり)に追記しておく。

続・emacs-gitのisearchでmigemoを利用可能にする

今日になって再びisearchでmigemoが使えなくなっていることに気付いた。

以下のcommitが怪しいと踏んだ:


commit 4d82aa3abdad1871b99f0a9e56fe54ec497bd290
Author: Artur Malabarba <bruce.connor.am@gmail.com>
Date:   Tue Nov 10 13:04:02 2015 +0000

    * lisp/isearch.el (search-default-regexp-mode): change default value
*scratch* bufferで:
(setq search-default-regexp-mode nil)
をevaluateしてからC-sでisearchしてみるとmigemoが使える状態に戻った。

2015年8月3日月曜日

Debian unstable (sid)やexperimentalと上手く付き合う方法

はじめに

数日前の更新で、libstdc++6がlibboost-date-time1.55.0とconflictして、それにdependしているlibreoffice-coreがuninstall対象になり、それにdependしているLibreOffice (LO)全体が連鎖的にuninstallされる……という状態に陥った。

Unstableやexperimentalで遊んでいる (desktop目的に常用している)人ならばしょっちゅう遭遇するであろう実に微笑ましい光景である。

丁度LibreOffice 5がexperimentalに入ったみたいなので試してみたいと思ったのだが、それ以前にLO4.xシリーズもこの不具合でuninstallされるのは頂けないので、workaroundでごまかしてみる。

Debian package systemに関する基礎知識

apt-getやaptitudeを用いたpackage管理の仕組みで知るべきことは多くない。

1. それぞれのpackageはdependency (依存関係)を書いたcontrol fileを含む
2. package systemはcontrol fileの内容を見てdependencyを知る

原因と対策

* libreoffice-coreがlibboost-date-time1.55.0にdependしている
* libboost-date-time1.55.0はlibstdc++6により"breaks"に指定されている

つまり、libstdc++6のbreaks指定を削除すればlibboost-date-time1.55.0がuninstallされず、従ってlibreoffice-coreがuninstallされることも、芋蔓式にLO全体がuninstallされることもない。

Debianのpakage managementの仕組み及び原因と対策を踏まえると、次の2つの方法が考えられる。

1. libstdc++6の"Breaks"指定を変更した新しいオレオレpackageを作ってinstall
2. libboost-date-time1.55.0のversionをごまかす (動作するか未確認)

今回は1.の方法を採用した。

workaroundの実態

1. /var/cache/apt/archives/以下からbinary packageを入手し/tmp/以下へcopy
2. dpkg-deb -x <PKG>で中身を展開する。こちらは今回これ以上手を付けない
3. dpkg-deb --controlでcontrol fileがDEBIAN/以下に展開される
4. DEBIAN/controlを適当なtext editorで編集する (今回の場合、Breaks:の行からlibboost-date-time1.55.0を削除し、packageのversionを1上げておく)
5. dpkg -b <DIR> <package.deb>でpackageを作成し、それをinstallする

Unstableやexperimentalとの付き合い方 (まとめ)

* 必要がなければ手を出さない
* そのうち解決されるので気長に待つ or bug reportを出して対策してもらう
* workaroundで一時的にごまかす、凌ぐ

最後に、aptitudeのように強力なdependency解決手段を提供してくれるtoolと仲良くなると幸せになるに違いない。


2015年7月13日月曜日

ASUS X200LAのtouch padを使いやすくする

ASUS X200LAのtouch pad (Focaltech製)の使いにくさには心底辟易していた。

具体的には物理的にクリックしづらいし (しかも音がうるさい)、スクロールできない点が特に気に入らなかった。

しかし、synclient (/usr/bin/synclient)というprogramを通して適切な設定をすると非常に使いやすくなる。

各種準備

Linux kernelの準備


Linux kernel 4.1にはdriverが含まれている:

> Device Drivers → Input Devices → Mice → Focaltech driver

synclientのinstall


xserver-xorg-input-synapticsというDebian packageに含まれている。

設定

以下の設定だけでも非常に使い勝手が向上するが、他にもホイールスクロール (iPodのあれ)のエミュレーションなどもできる。


2本指でタップ → 右クリック


% synclient TapButton2=3

3本指でタップ → 中クリック


% synclient TapButton3=2

2本指で縦方向にスライド → 画面スクロール


% synclient HorizTwoFingerScroll=1

設定の永続化


synclient commandによる設定は次回のX sessionには引き継がれない。よって、何かしらの方法でsessionの開始時に自動設定するよう仕掛ける必要がある。

たぶん一番かんたんなのは~/.xsessionに直接synclientのcommandを羅列する方法で、当方ではこれを採用している。

リンク

synclientの詳しい使い方はArch Linuxのwiki (https://wiki.archlinux.org/index.php/Touchpad_Synaptics)やmanを参照。


2015年7月2日木曜日

yaskkservで北極三號を使う

北極三號 (ほっきょくさんごう)は、SKK向けの旧仮名旧漢字辞書である。

これをDebianのyaskkservで使う。

主な流れ

  • npiii.l.eucをyaskkserv形式に変換する
  • /etc/default/yaskkservを変更
  • yaskkservをrestart

辞書の変換


まずはnpiii.l.euc (EUCの辞書)を、yaskkserv packageに付属するyaskkserv_make_dictionaryというcommandで専用形式に変換する。

% yaskkserv_make_dictionary npiii.l.euc npiii.yaskkserv

できた辞書 (npiii.yaskkserv)を適当なdirectoryにcopyする:

% sudo cp -i npiii.yaskkserv /usr/share/yaskkserv/

yaskkservの設定変更


Debian packageのyaskkservでは設定fileが/etc/default/yaskkservなのでこれを編集する。終わりの方にPKG_DICSという部分があるので、その一番最後にでも生成した辞書の名前 (今回の場合はnpiii)を追加:

PKG_DICS="\
SKK-JISYO.L \
...
中略
...
SKK-JISYO.JIS2 \
npiii
"

どうやらfile suffixの.yaskkservは書かなくて良い (寧ろ書くとだめっぽい)ので省略する。

yaskkservの再起動


% sudo /etc/init.d/yaskkserv restart

適当な語句を変換してみて、旧仮名旧漢字の候補が表示されるのを確認する。


2015年6月27日土曜日

emacs-gitのisearchでmigemoを利用可能にする

ふと気付いたらisearchでmigemoできなくなっていたので原因を探ってみた。どうやらisearchにcharacter-fold-search (char-fold)が追加されたのが原因らしい。以下のように対策してみた:

  (with-eval-after-load "isearch"
    (setq character-fold-search nil))

とりあえず動くようになったので、しばらくはこれで様子を見てみる。