2016年4月21日木曜日

GCC 6でbuildできる/できないリスト (2016-04-20現在)

概要


Debian experimentalに入っているGCC 6でbuild可能/失敗するものの一覧。勿論、自分がbuildしてみたものだけ。

成功


  • Linux kernel (4.6-rc4)
  • Emacs
  • FFmpeg
  • mpv
  • MPlayer
  • VLC
  • Mesa
  • xf86-video-intel
  • drm
  • DeaDBeeF
  • Stellarium
  • Zsh


失敗


  • Firefox
  • Glibc


どちらもwarningをerror扱いするoptionのせいでbuild stop。

2016年4月20日水曜日

cmigemoで複数の辞書を使う

概要


C/Migemoは複数の辞書を扱える便利な機能がある。但し、Emacsからmigemo.elを通して使う時には少々fileに細工する必要がある。

C/MigemoとRuby/Migemoの違い


man cmigemoすると明らかな通り、cmigemoはmain dictionaryに加えて、最大8つのsub dictionariesを指定できる。こんな感じ:

cmigemo -s <SUB_DICTIONARY_1> -s <SUB_DICTIONARY_2> ... -s <SUB_DICTIONARY_8> -d <MAIN_DICTIONARY>

Sub dictionariesの何が便利なのかと言えば:

  • mainの辞書を弄るほどでもない内部的なentryを好き放題追加できる
  • mainの辞書とは別にrevision controlしたり配布したりできる

例えば、cmigemoに付属のmigemo-dictをmainとして、それを補完する2つのsub dictionariesを指定すると:

cmigemo -q --emacs -s /home/user/.emacs.d/migemo/migemo-dict.user -s /home/user/.emacs.d/migemo/migemo-dict.sub -d /home/user/.emacs.d/migemo/migemo-dict

この例ではsub dictionariesとしてmigemo-dict.subとmigemo-dict.userの2つを指定している。

Emacsから複数辞書を活用する


複数辞書を指定する場合、Emacsでmigemoを使うためのmigemo.elには細工が必要。

migemo.elは、cmigemoを呼び出すcommand lineを組み立てているのだが、そこでcmigemoに与えているoptionが実はRuby/Migemoのもので、そのままではsub dictionariesを指定できない。2016年現在実際に利用されているのはC/Migemoだけだと思うんだが……。

具体的にはmigemo-initの内部でuser-dictionaryを指定する部分の"-u"及びregex-dictionaryを指定する部分の"-r"をそれぞれ"-s"に設定し、migemo-user-dictionaryとmigemo-regex-dictionaryをそれぞれsub dictionariesのabsolute pathに変更すれば良い。

3つ以上のsub dictionariesを使いたい場合は、非常にダサい実装だが、migemo-sub-dictionary-1〜8を定義し:

(when (and migemo-sub-dictionary-1
           (file-exists-p migemo-sub-dictionary-1))
  (list "-s" migemo-sub-dictionary-1))

を8回copy'n'paste (-1〜-8に変更しつつ)すれば動く (と思う)。

勿論、loopとかmapとかを使ってsmartに書きたい所。

2016年4月13日水曜日

Emacsのimenuをmarkdownで活用する

imenuとは

Emacsには、構造化されたtextの目次を表示しそこへジャンプするimenuという機能がある。

Textによって「目次」とすべき内容が異なるので、imenuにはtextに応じたindexingを行うfunctionを渡せるように作られている。

imenuはprogramming languageには勿論、HTMLやMarkdownのようなtextにも応用できる。

markdown-modeにおけるimenu

markdown-modeはindexを作製するfunctionを2種類提供してくれている:

  • markdown-imenu-create-flat-index
  • markdown-imenu-create-nested-index

この2つの違いはfunction nameそのままで、flatの方はtreeのleaf nodeのみを列挙するのに対し、nestedは言わばleaf nodeへのfull pathを列挙する。

Defaultではflatがimenu-create-index-functionにbindされているので、markdown-modeのhookを使ってnestedをbindすればそちらを利用できる。


実際の活用に際して

imenuはそのままでは使いにくいので、helm-imenuを使うと良いだろう。

この際、which-function (which-funcはobsolete)で現在位置を表示させるのも便利だ。


Indexの実例

# H1
## H2-1
### H3-1
### H3-2
## H2-2
### H3-3

のようなMarkdown textがあるとする。


flat-index

H1
H2-1
H3-1
H3-2
H2-2
H3-3


nested-index

H1 / .
H1 / H2-1 / .
H1 / H2-1 / H3-1
H1 / H2-1 / H3-2
H1 / H2-2 / .
H1 / H2-2 / H3-3

参考Link




個人的にemacsを使う理由

個人的にemacsを日本語文書の記述や編集に使っている。

大きな理由は:

* DDSKK → 日本語入力
* helm (特にhelm-filelist+) → 最近開いたfileをincrementalに絞り込み
* auto-save-buffers-enhanced → 自動save
* migemo → ローマ字で日本語検索
* helm-swoop → 検索語をlistして一覧 & jump

今の所emacs以外でこれらを実現できる環境はなさそう。

あと、fileを開いた時にbufferをview-modeで開くhookを仕込んでいるので、半ばViみたいな使い方になっている。

ちなみに、設定ファイルとかプログラムの記述とかには専らVimを使っている。