2016年11月30日水曜日

Polyvinyl plays Polyvinylが面白い

Polyvinyl recordsが創業20周年を記念して,Polyvinyl records所属のアーティストがPolyvinyl records所属アーティストの楽曲をカバーするアルバム「Polyvinyl plays Polyvinyl」が発売されています.購入はアナログ盤かmp3しかないみたいです.mp3を購入しましたが,CDが欲しいな.

soundcloudのページで全曲試聴が可能です.
特にGenerationals (feat. Sarah Quintana)がカバーしているIn Volcano, I'm Still Excited!!の楽曲"In Green"が原曲の原型を留めていないにも関わらず,全く新しい名曲に仕上がっており,衝撃的です.以下に貼り付けておきます.



原曲はこちらです.

同じ曲と認識できる人いるのでしょうか.

他にもAlohaがカバーしているBeach Slangの"Too Late To Die Young"も良いです.


原曲はこちら


さらに20周年企画として,こちらのサイトからPolyvinyl records 20th Anniversary Samplerが無料でダウンロードできるようになっていました.44曲入りです.

2016年11月29日火曜日

Skim.appの自動更新の設定

Macの軽量pdfビューアであるSkimは,MacでLaTeXを使っている人には必須のアプリだと思います.pdfファイルを更新した際に自動で再読込をする機能がついているのですが,デフォルトの設定だと,ファイルを開く毎に,自動更新を許可するかどうかを求める表示がでてくるので面倒です.

この自動更新の確認の表示を出さないようにする方法を調べてみました.
TeX StackExchangeのAuto-refresh and mac osに従って,ターミナルから
defaults write -app Skim SKAutoReloadFileUpdate -boolean true
と打っておけば,自動更新の確認がなくなりました.

2016年11月23日水曜日

Macos sierraで「ろ」のキーにbackslashとunderscoreを割り当てる

もともとLinuxやWindows機を使っていたこともあり,キーボードの「ろ」のキーを打鍵したときには,通常はbackslash "\"を,shiftキーと同時に押したときにはunderscore "_"が表示されて欲しい人間です.

しかしMacのキーボードでは,「ろ」のキーにはunderscoreが割り当てられており,shiftキーを押しても挙動が変わりません.El CapitanまではKarabinerを利用してunderscoreをbackslashに割り当てていました.しかしKarabinerはまだSierraに対応できていないので,このキーのリマップを実現できる手段を探していました.

⌘英かなというアプリを使えば,これが実現できます.

設定は次のようにしました.

ここでは"shift+_"をunderscore "_"に,underscore "_"をYen "¥"に割り当てています.このままではSierraの初期設定のままだと「ろ」のキーを押すと円記号が入力されますが,次のように「システム環境設定」→「入力ソース」の項目で,"¥"キーで入力する文字のところでbackslashを選択しておくと,「ろ」のキーでbackslashが入力されるようになり,"option+Yen"キーで"¥"が入力されるようになります.

これで快適に日本語入力できるようになりました.

2016年11月11日金曜日

webホスティングサービスをFirebaseに移行

ブログに載せているLaTeXなどのコードの色付けにhighlight.jsを使っています。
CDNにホストされている標準的な言語の中にTeXが含まれていないので、GoogleDriveのホスティングサービスを利用して自前で用意していました。

Google Driveのホスティングサービスが終わったので、webホスティングサービスをFirebaseに移行しました。

移行してからしばらく経つので詳細を忘れてしまったのですが、以下のサイトを参考にしました。
ぼちぼち思い出しながら追記していきたいと思います。


2016年10月31日月曜日

amsthm.styのproof環境を日本語で使うときの調整

amsthm.styのproof環境を日本語で使おうとすると、proof. のように定理環境の初めの部分にドットが打たれてしまいます。\proofnameを日本語で書き換えてもこのドットが消えないのと、イタリック体が残ってしまうので、amsthm.styのproof環境を定義してある部分をコピーして次のように改変しました。

\makeatletter
\renewenvironment{proof}[1][\proofname]{\par
  \pushQED{\qed}%
  \normalfont \topsep6\p@\@plus6\p@\relax
  \trivlist
  \item[\hskip\labelsep
%        \itshape
         \bfseries
%    #1\@addpunct{.}]\ignorespaces
    {#1}]\ignorespaces
}{%
  \popQED\endtrivlist\@endpefalse
}
\makeatother

\renewcommand{\proofname}{{[証明]}}
上記ではドットを消すことと、書体をbfseriesにすること、そしてオプションの引数部分を{#1}のように括弧でくくることで、proof環境のオプション部分に{[定理hogeの証明]}のようにオプション引数の括弧である[ ]を使っても、括弧{ }で囲んでおけば正しく出力されるようになりました。

2016年9月20日火曜日

yatexで数式イメージ補完を使って数式書体を変更したい

普段はLaTeX文書を作成するのにemacs+YaTeXを使用しています。
YaTeXでは数式環境中でセミコロン; を押下すると数式イメージ補完入力可能になり、その後aを押せば\alphaが、6を押せば\partialが補完されます。

セミコロンの後にmrを押せば、\mathrm{}が補完され、括弧の間にカーソルが移ります。同様にmsで\mathsf{}, miで\mathit{}なども補完されるのですが、自分が普段良く使う\mathbbや\mathscrはデフォルトで定義されていないようです。

これら数式の書体変更の命令はセクション型(\section{})のコマンドなので、ユーザー定義のセクション型補完の変数として用意されているuser-section-tableに登録すると、セクション型補完のコマンド[prefix]-sで入力した際には括弧まで補完してくれます。

\mathbbや\mathscrも数式イメージ補完を行いたいと思ったので、ユーザ定義の数式記号の変数YaTeX-math-sign-alist-privateにも登録してみたのですが、数式イメージ補完入力からこれらのコマンドを入力すると、括弧が補完されません。

yatex.elで定義されている変数section-tableにこれらのコマンドを登録しておけば、数式イメージ補完入力でも括弧が入力されることを確認したのですが、これらの挙動の違いがイマイチ把握出来ていません。yatex.elを直接変更するとなるとYaTeXのアップデート毎にyatex.elを修正する必要があるので、根本的な解決方法が知りたいのですが、どうすればよいのでしょう?


追記:2016/12/18
yatexの更新の度にyatex.elを書き換えるのは面倒なので,とりあえずinit.elに次のように記述しました.
(setq yatex-mode-load-hook
      '(lambda()
  (setq section-table
        (append section-table '(("mathscr") ("mathbb") ("mathfrak"))))
  ))
user-section-tableに追加せずに,直接section-tableにmasthscrなどを追加しています.user-section-tableへの追加で済む方法はないのかな?

2016年8月19日金曜日

tikz+gnuplotでグラフを描画

tikz内でgnuplotを呼び出してグラフを描画することを試してみました.
今回勉強になったのは,どちらかと言えばループを使ってグラフの目盛りを書くときの記述方法です.

今回作成したのは,次の$\tan x$のグラフです.
ソースコードは次の通りです.mathライブラリが必要です.

\begin{tikzpicture}[xscale=0.5,yscale=0.35]
\begin{scope}
 \clip (-2.5*pi-0.5,-12) rectangle (2.5*pi+0.5,12);
 \foreach \n/\ntext in 
 {-4/-2,-2/-,2/,4/2,-5/-\frac{5}{2},-3/-\frac{3}{2},-1/-\frac{1}{2},1/\frac{1}{2},3/\frac{3}{2},5/\frac{5}{2}}{
 \tikzmath{
 real \x1,\x2;
 \x1=0.5*\n*pi;
 \x2=(0.5*\n+1)*pi;
 };
 \draw[gray!40] (\x1,12)--(\x1,-12);
 \pgfmathparse{mod(\n,2)==0?1:0}
 \ifnum\pgfmathresult > 0
   \node[fill=white,above left] at (\x1,0){$\ntext\pi$};
 \else
  \node[fill=white,below] at (\x1,0){$\ntext\pi$};
 \ifnum\n < 5
  \draw[thick] plot[id=tangent\n,prefix=figures/tikz/plots/,raw gnuplot] 
  function{set samples 50;plot [\x1+0.08:\x2-0.08] tan(x)} ;
 \fi
 \fi
 }
 \draw[gray!40] (2.5*pi,12)--(2.5*pi,-12);
 \node[below right] at (0,0){$0$};
 
\foreach \n in {-10, -5, 5, 10}{
 \draw (-0.1,\n)--(0.1,\n);
 \node[left] at (0,\n){$\n$};
}
\end{scope}
 \draw[->] (-2.5*pi-0.2,0)--(2.5*pi+0.5,0) node[right] {$x$};
 \draw[->] (0,-12)--(0,12) node[left] {$y$};
\end{tikzpicture}

2016年7月21日木曜日

Aloha Little Windows Cuts Light Through

Home Acres (2010)以来6年ぶりとなるAlohaの新作Little Windows Cuts Light Throughがリリースされています。傑作です。Alohaといえばヴィブラフォンが特徴的な印象がありましたが、今作ではあまり聴かれないようです。

フル・アルバムがYouTubeで試聴可能です。


前半の曲は全て気に入っているのですが、特に3曲めのOcean Streetと5曲めのFright Riskが良いです。





しかし再生回数が少ないです。Alohaの楽曲は個人的に何年たっても不思議と聞き飽きることがなく、延々と聴いていられるスルメ作ばかりでおすすめです。難点は露出が非常に少なく、ミュージック・ビデオも変なやつが2曲のみ、また検索しても(バンド名のせいで検索がかけにくくて困る)ライブの映像などが見当たらないのが残念です。今回のアルバム発表に伴ったツアーも公演数が少ないみたいだし。発売から2ヶ月ほど経ちましたが、未だにこればかり聴いています。

2016年6月6日月曜日

tcolorboxを使った定理環境

定理環境をmdframedからtcolorboxへ乗り換えでは,ソースを変更せずに済むように、タイトルが省略可能である定理環境をtcolorboxを使って作りました。しかしあちらの記述では臨時的にtcolorboxのオプションを追加したい場合などに対応できないので、今回はtcolorboxのxparseライブラリを使って,臨時のオプションも省略可能な引数として記述できるように定理環境を書き改めました。

今回の拡張で、例えばtcolorboxのsidebysideオプションを使い、次のように文章の横に図を配置することなどが可能になりました。タイトルは[]で囲み、追加のオプションは、ダブルクォート""で囲むように設定しています。
ソースは以下のとおりです。

\documentclass[dvipdfmx]{jsarticle}

\usepackage{lipsum}%ダミーの文章を入れる
\usepackage{capt-of}

\usepackage{tcolorbox}
\usepackage{varwidth} 
\usepackage{amsmath}
\tcbuselibrary{breakable}
\tcbuselibrary{skins}
\tcbuselibrary{xparse}%内部でxparse.styを読み込むのでNewDocumentCommandなどが使える
\definecolor{frameinnercolor}{RGB}{49,44,44}


\newcounter{theorem}
\numberwithin{theorem}{section}% numberwithinはamsmathで定義
\NewTColorBox{theobox}{o m +o}{%oは省略可能な引数、mは必須の引数、+は複数行に亘っても良いことを表す。
%#1=タイトル(省略可), #2=定理環境名, #3=tcolorboxの追加オプション
enhanced,frame empty,interior empty,
coltitle=white,fonttitle=\bfseries,colbacktitle=frameinnercolor,
extras broken={frame empty,interior empty},
borderline={0.5mm}{0mm}{frameinnercolor},
sharp corners=downhill,
breakable=true,
top=4mm,
before skip=3.5mm,
attach boxed title to top left={yshift=-3mm,xshift=5mm},
boxed title style={boxrule=0pt,sharp corners=all},varwidth boxed title,
IfNoValueTF={#1}{title=#2~\thetheorem.}{title=#2~\thetheorem:~#1},
IfNoValueTF={#3}{}{#3}%3つめの引数を省略すると-NoValue-を返すのでその対策
}

\NewDocumentEnvironment{theorem}{o m +o}{%NewDocumentEnvironmentはxparse.styで定義
\refstepcounter{theorem}\begin{theobox}[#1]{#2}[#3]}{\end{theobox}}

\NewDocumentEnvironment{theo}{o +d""}{%dは""で区切られた部分を省略可能な引数として扱うことを表す。
\begin{theorem}[#1]{定理}[#2]
}{\end{theorem}}

\NewDocumentEnvironment{law}{o +d""}{%
\begin{theorem}[#1]{法則}[#2]
}{\end{theorem}}


\begin{document}

\section{セクション名}

\begin{theo}[Title]
 \lipsum[1]
\end{theo}

\begin{law}[クーロンの法則]"sidebyside,%横に並べる
sidebyside align=top seam,
sidebyside gap=5mm,
righthand width=4.4cm,
lower separated=false,%lower partとの区切りを入れない
halign lower=flush right,
"%
シャルル・ド・クーロンは1785年,
帯電した小さな球の間に働く力をねじり秤で測定して,
荷電粒子間に働く力がそれぞれの電荷の積に比例し,
距離の2乗に反比例する(逆2乗則に従う)ことを発表した(下式).
\begin{equation*}
 F=k\frac{q_1 q_2}{r^2} \quad 
\left(
\begin{array}{ll}
  q_1, q_2\text{は荷電粒子の電荷量}\\[3pt]
 r\text{は粒子間の距離}
\end{array}
\right)
\end{equation*}

この法則は現在,
$r$のべきを2の代わりに$2+\delta$とすること($r^{2+\delta}$)で逆2乗則からのずれを
表すことにしたとき,$\delta <10^{-15}$の精度で正しいことが知られている.
また$r$の値としては,少なくとも原子核の大きさのレベル($10^{-16}\,\mathrm{m}$)から
地球--木星間の距離($10^8\,\mathrm{m}$)まで正しいことが確かめられている.

\tcblower
 \includegraphics[scale=0.12]{torsionbalance.pdf}
\captionof{figure}{クーロンのねじり秤}
\end{law}

\end{document}

2016年4月22日金曜日

2016年4月17日日曜日

定理環境をmdframedからtcolorboxへ乗り換え

追記:2016/05/02 以前に掲載していた定理環境のマクロでは、カウンターが変化しないような記述をしてしまっていたので、全面的に書き換えました。
追記:2016/06/06 tcolorboxのオプションを追加できるように書き直しをしました(tcolorboxを使った定理環境)。

LaTeXの話です。
これまで定理環境の修飾にmdframed.styを利用してきました。
しかし上の投稿で用いた記述をしていると、定理環境がページの下部にきたとき、まれに以下のように環境が新しいページに送られてしまい変なところで改ページが起こります。
TeX-LaTeX Stack Exchangeでも同様の不具合が報告されていて、mdframed.styの作者が回答して解決しているようなのですが、私の場合は上手く行きませんでした。タイトル部分の位置の計算に問題があるようです。

そういう訳で、mdframed.styよりも高い表現力を持つtcolorbox.styには興味を持っていました。今回は、mdframed.styで記述していた部分を、ソースの変更無しにtcolorboxで置き換えてみたので、その紹介をします。

tcolorbox.styで置き換えた結果は次のようになりました。

見た目はほとんど変わっていません。中のboxは別のtcolorbox環境です。
この定理環境のソースコードは次のようになります。

\usepackage{tcolorbox}
\usepackage{varwidth} 
\tcbuselibrary{breakable}
\tcbuselibrary{skins}

\definecolor{frameinnercolor}{RGB}{49,44,44}

\newcounter{theorem}
\numberwithin{theorem}{section}% numberwithinはamsmath.styで定義されている
\newenvironment{theorem}[2][]{%
%#1 = タイトル, #2 = 定理環境名
\refstepcounter{theorem}%
\newtcolorbox{theobox}[1][]{%
enhanced,frame empty,interior empty,
coltitle=white,fonttitle=\bfseries,colbacktitle=frameinnercolor,
extras broken={frame empty,interior empty},
borderline={0.5mm}{0mm}{frameinnercolor},
sharp corners=downhill,
breakable=true,
top=4mm,
before skip=3.5mm,
attach boxed title to top left={yshift=-3mm,xshift=3mm},
boxed title style={boxrule=0pt,sharp corners=all},varwidth boxed title,
title=##1,
}
\ifstrempty{#1}{% ifstremptyはetoolbox.styで定義.etoolbox.styはtcolorboxが読み込むので宣言不要
\begin{theobox}[#2~\thetheorem.]}
{\begin{theobox}[#2~\thetheorem:~{#1}]}
}{\end{theobox}}


\newenvironment{theo}[1][]%
{\begin{theorem}[#1]{定理}%
}{\end{theorem}}


\newenvironment{prop}[1][]%
{\begin{theorem}[#1]{命題}%
}{\end{theorem}}

\newenvironment{lem}[1][]%
{\begin{theorem}[#1]{補題}%
}{\end{theorem}}

多くのスタイルファイルで定義されている定理環境では、タイトルは省略可能な引数になっているのですが、tcoloboxのtheorems  libraryで作る定理環境は、タイトルやラベルが省略できない仕様になっており、省略したい場合は空の括弧を書いて置かなければならないようです。私が作っているノートでは、タイトルを省略可能なタイプの定理環境で記述しているため、theorems libraryを使わないで定理環境を作ってみました。

ここではtheoremという2つの引数を持つ環境を最初に定義しています.
第1の引数には省略可能なタイトル,第2の引数には定理環境名をそれぞれ入れるようにしています.その後でこのtheoremという環境を使ってtheoという環境を定義しています.これはtheorem環境の第2の引数に「定理」や「命題」などを入れることで新しい定理型環境を簡単に作れるようにしました.但しカウンターは全て共通しているので,通し番号をつける使い方しかできません.

breakableライブラリを使って複数ページにわたる枠囲みが表示できるようにしています。枠がページをまたぐときに、枠内の設定がデフォルトに戻ってしまうらしく、それを防ぐためにextras brokenオプションでページをまたいだ枠内の設定を行う必要がありました。

これで今までのノートのソースを変更することなくtcolorboxへの移行ができました。変な改ページも無くなったので現時点では満足しています。tcolorboxはマニュアルを見るとかなり色々なことが出来そうなので、もっと見栄えの良いノートを作りたくなってきました。


また、tcolorboxのカウンター機能を使えばもっとスマートになると思い、newtcolorboxの定義のオプションにauto counterを入れて次のような定理環境を作ってみました。
しかし私のノートでは、カウンターの番号が幾つかずれてしまい上手く機能しませんでした。原因は何なのだろう。
\usepackage{tcolorbox}
\usepackage{varwidth} 
\tcbuselibrary{breakable}
\tcbuselibrary{skins}

\definecolor{frameinnercolor}{RGB}{49,44,44}

\newtcolorbox[auto counter,number within=section]{theobox}[1][]{%
enhanced,frame empty,interior empty,
coltitle=white,fonttitle=\bfseries,colbacktitle=frameinnercolor,
extras broken={frame empty,interior empty},
borderline={0.5mm}{0mm}{frameinnercolor},
sharp corners=downhill,
breakable=true,
top=4mm,
before skip=3.5mm,
attach boxed title to top left={yshift=-3mm,xshift=3mm},
boxed title style={boxrule=0pt,sharp corners=all},varwidth boxed title,
title=#1,
}

\newenvironment{theorem}[2][]{%
%#1 = タイトル, #2 = 定理環境名
\ifstrempty{#1}{% ifstremptyはetoolbox.styで定義.etoolbox.styはtcolorboxが読み込むので宣言不要
\begin{theobox}[#2~\thetcbcounter.]}
{\begin{theobox}[#2~\thetcbcounter:~{#1}]}
}{\end{theobox}}

2016年2月19日金曜日

mac osx el capitanで、google日本語入力と通信するmozc_emacs_helperをビルドする

追記:2016/11/22 現時点でgoogleのgitにあるmozcのソースファイルでは、下記のパッチを当てている
src/data_manager/packed/packed_data_manager.gyp
などのファイルが無くなっているため、パッチを当てようとすると失敗します。mozcのrelease historyからバージョン 2.17.2404.10を選んでビルドしてみると成功しました。もっと新しいバージョンでも大丈夫かもしれません。






久しぶりにmac上でのmozc_emacs_helperの話題を検索してみたら、@koshian's Tech Logさんのblogでタイムリーにビルドに成功したとの記事が書かれているのを見つけました。

数年前から、mac上でmozcとmozc_emacs_helperをビルドして使用することができるのは知っていましたが、mozcの設定ツールなどguiで操作するものはqtを利用しており、qtありでビルドに成功した記事が見つからず、設定の変更や辞書登録が使えないのでこれまで使用を見送っていました。

mozc_emacs_helperとGoogle日本語入力の間で通信を行えるようになったことで、設定の変更や辞書登録などがGoogle日本語入力から可能になり、利便性が格段に向上しました。

Google日本語入力と通信する mozc_emacs_helper を Mac OS X でビルドする

(@koshian's Tech Log)

hiroohongo's memoさんの記事「mozc_emacs_helper の Windows上のコンパイル」にdepot_toolsを使ってうまく行かなかったとの情報があったので、mac portsからpython2.7とninjaをインストールしました。

ビルドの過程は上記のブログに詳しいので詳細は省きますが、ブログの手順通りでビルドに成功しました。ありがとうございます。


Google日本語入力で辞書登録した単語も候補に挙がるそうなので便利です。El CapitanにしてからMacの日本語入力の挙動が重くなってしまい、毎日のようにプロセスを再起動しなければならなくなっていたので、これを機にGoogle日本語入力に移行しようと思います。


追記:hiroohongo's memoさんのブログを参考にninjaとpyshon2.7は自前で導入しwindow10上でもmozc_emacs_helperをビルドしてみました。コンパイルはエラーなく終了するものの、動作確認をすると以前に試したものと同じように日本語への切り替えができていない旨の結果が得られました。何故なんだろう。

2016年1月20日水曜日

helm-swoopを使ってemacsバッファ全体を一括検索

helm-swoopというemacs-lispを導入すれば、開いているバッファ全体から検索がかけられるという情報を見たので、試してみました。

emacsでLaTeXファイルを編集する際に、文書を幾つかのファイルに分割してmainファイルにincludeしているのですが、演習問題として扱っていたものを本文中の命題に格上げしたりするときに、labelを変更するとrefで引用した部分を一つ一つ探して修正していかなければならず、かなり面倒でした。これが一括して行えるようになりました。

YaTeXを使ってTeXファイルを編集しているときには、[prefix] dでmainファイルがincludeしているファイルを全て開くことができます。このようにmainファイルがincludeしているファイルを全て開いておいて、検索したい文字列を選択してM-iでファイル中の文字列の検索結果が表示され、さらにM-iを押せば開いているバッファ全体からの検索結果が表示されます。


検索結果の表示画面でC-c C-eを押せば編集画面に移行し、検索した文字列を含む行を一度に編集することができます。C-c C-eを押す前に編集したい行でC-spaceを押せば、行が選択されハイライト表示になり、C-c C-eで選択した部分だけを編集できます。また語句をスペースを空けて複数記述していくと、それらの語句を全て含む行が検索でき、語句の前に!をつけるとその語句を含まない行が表示されます。検索語を含む行の前後で表示させたい行数は設定で変更できるようです。これで参照部分の変更が非常に楽になりました。

YaTeX自身の機能としても、labelもしくはrefの部分にカーソルを置いた状態で[prefix] gを打鍵すれば、対応する部分へジャンブすることができます。labelからrefへのジャンプは、最初に参照した部分にしか飛ばないみたいです(使い方がわかっていないだけかも)。またLaTeXのパッケージでcleveref.styというものもあり、こちらは参照元の環境が定理から命題に変更されれば、参照している部分も自動で定理hogehogeを命題hogehogeに変更してくれ便利なのですが、mathtools.styのshowonlyrefオプションとの相性が悪く使えていません。しかしhelm-swoopの導入で気にならなくなりました。



参考にしたのは以下の記事です。

  1. helm を使うための設定
  2. Helm をストレスなく使うための個人的な設定
  3. Helm をストレスなく使うための個人的な設定 (2)
  4. Helm v1.8.0 をストレスなく使うための個人的な設定
  5. helm-swoopでEmacsを位置同期検索
  6. emacs helm-swoop.el : 【これはすごい】バッファ全体をMigemo絞り込み検索して走り回れ!

helmやhelm-swoopの導入方法についてはpackage.elを使って導入したので省略します。
設定ファイルは上記リスト1の設定をほぼそのまま使わせていただきました。
helm初心者としては、tabキーで補完が効かないのがかなり気持ち悪いので、
helm-completing-read-handlers-alistにfind-fileなどを登録してtabで補完ができるようにしました。
設定は以下の通りです。

;;helmの設定
;; 候補を作って描写するまでのタイムラグを設定する(デフォルトは 0.01)
(setq helm-idle-delay 0.2)

(require 'helm-config)
(require 'helm-descbinds)

(helm-mode 1)
;(helm-migemo-mode 1)



;;; 処理を変更したいコマンドをリストに登録していく
(add-to-list 'helm-completing-read-handlers-alist '(find-file . nil))
(add-to-list 'helm-completing-read-handlers-alist '(execute-extended-command . nil))
(add-to-list 'helm-completing-read-handlers-alist '(YaTeX-visit-main . nil))
(add-to-list 'helm-completing-read-handlers-alist '(YaTeX-display-hierarchy . nil))


;; 文字列を入力してから検索するまでのタイムラグを設定する(デフォルトは 0.01)
(setq helm-input-idle-delay 0.2)

;; helm-source-locate でワードの and 検索ができるようにする
;; ・locate を使えない場合は、「locate ''」の部分を「cat /tmp/all.filelist」に置き換えてください。
;;  そして、find 等を使って /tmp/all.filelist(ファイル名が並んだファイル)を作成してください。
;;  locate.db を作成した場合でも、「locate '' > /tmp/all.filelist」として /tmp/all.filelist を
;;  作成し、そのファイルを検索した方がファイルキャッシュが効くので高速なようです。お試しください。
;; ・検索の高速化のために、検索件数を helm-candidate-number-limit までに headコマンドで絞っています。
;;  helm-source-locate情報源 の candidate-number-limit設定値 を設定する方法もあります。
;;  (後半の helm-before-initialize-hook の箇所でコメント化している部分となります。)
;; ・helm の検索パターン入力ルールに従い、2つのスペースの並びを一つのスペースとして認識して検索
;;  します。また、「!検索パターン」(マッチしない)を指定可能です。
(setq helm-locate-command
      ;; (concat "locate_case=$(echo '%s' | sed 's/-//'); cat /tmp/all.filelist |"
      (concat "locate_case=$(echo '%s' | sed 's/-//'); locate '' |"
              "perl -ne \"$(echo '%s' |"
                           "sed -r -e 's/[\\\\ ] /__SpAcE__/g' "
                                  "-e 's/^ +//' "
                                  "-e 's/ +$//' "
                                  "-e 's_/_\\\\&_g' "
                                  "-e 's_ +_/'$locate_case' \\&\\& m/_g' "
                                  "-e 's_.*_$| = 1; print if (m/&/'$locate_case')_' "
                                  "-e 's_m/!_!m/_g' "
                                  "-e 's/__SpAcE__/ /g')\" 2> /dev/null |"
              "head -n " (number-to-string helm-candidate-number-limit)))

;; tramp で remote-directory を開いているときに、helm-for-files を起動すると反応が悪い
;; 原因は helm-source-files-in-current-dir だったので、この情報源の指定を削除する
;; また、一部表示順を変更する
(setq helm-for-files-preferred-list
      '(helm-source-buffers-list
        helm-source-bookmarks
        helm-source-recentf
        helm-source-file-cache
        ;; helm-source-files-in-current-dir
        helm-source-locate))

;; 表示する最大候補数を指定する(デフォルトで 50)
;; (setq helm-candidate-number-limit 100)

;; 候補表示画面で改行しないようにする
;; (setq helm-truncate-lines t)

;; helm-source-buffers-list を詳細に表示しない
(setq helm-buffer-details-flag nil)

;; helm-source-buffers-list でバッファ名を表示する幅を調整する
(setq helm-buffer-max-length 50)

;; helm-follow-mode (C-c C-f で ON/OFF)の前回の状態を維持する
(setq helm-follow-mode-persistent t)

;; ミニバッファで C-k 入力時にカーソル以降を削除する(C-u C-k でも同様の動きをする)
(setq helm-delete-minibuffer-contents-from-point t)

;; http://fukuyama.co/nonexpansion
;; 自動補完を無効にする
(setq helm-ff-auto-update-initial-value nil)

;; C-h でバックスペースと同じように文字を削除できるようにする
;; (define-key helm-read-file-map (kbd "C-h") 'delete-backward-char)

;; TAB で補完する
;; For find-file etc.
(define-key helm-read-file-map (kbd "TAB") 'helm-execute-persistent-action)
;; For helm-find-files etc.
(define-key helm-find-files-map (kbd "TAB") 'helm-execute-persistent-action)





;; C-o は IME変換用として使っているので、helm-next-source を C-l に変更する
;(define-key helm-map (kbd "C-o") nil)
;(define-key helm-map (kbd "C-l") 'helm-next-source)

;; http://d.hatena.ne.jp/sugyan/20120104/1325604433
;; プレフィックスキーを C-; に設定する
(custom-set-variables '(helm-command-prefix-key "C-;"))

;; キーバインドを設定する。コマンド起動後は、以下のキーが利用可能となる
;;  ・M-n     :カーソル位置の単語を検索パターンに追加
;;  ・C-z     :チラ見
;;  ・C-c C-f :helm-follow-mode の ON/OFF
(global-set-key (kbd "C-x C-b") 'helm-for-files)
(global-set-key (kbd "C-x C-;") 'helm-for-files)
(define-key helm-command-map (kbd "C-;") 'helm-resume)
(define-key helm-command-map (kbd "y")   'helm-show-kill-ring)
(define-key helm-command-map (kbd "o")   'helm-occur)
(define-key helm-command-map (kbd "C-s") 'helm-occur-from-isearch)
(define-key helm-command-map (kbd "g")   'helm-do-grep) ; C-u 付で起動すると、recursive となる

;; helm-occurコマンドの起動時に helm--maybe-use-default-as-input(helmコマンドに :input パラメータが
;; 指定されていなければ、:default の値を使って表示を更新する)を設定する
(advice-add 'helm-occur
            :around (lambda (orig-fun &rest args)
                      (let ((helm--maybe-use-default-as-input t))
                        (apply orig-fun args))))

;; 情報源 helm-source-occur と helm-source-grep について、利用開始時点から helm-follow-mode を ON にする
;; 情報源 helm-source-locate と helm-source-grep について、検索必要最低文字数を 2 とする。
(add-hook 'helm-before-initialize-hook
          (lambda ()
            (when helm-source-locate
              ;; (setcdr (assq 'candidate-number-limit helm-source-locate) helm-candidate-number-limit)
              (setcdr (assq 'requires-pattern helm-source-locate) 2))
            (when helm-source-occur
              (helm-attrset 'follow 1 helm-source-occur))
            (when helm-source-grep
              (helm-attrset 'follow 1 helm-source-grep)
              ;; (setcdr (assq 'candidate-number-limit helm-source-grep) helm-candidate-number-limit)
              (setcdr (assq 'requires-pattern helm-source-grep) 2))))



;;;helm-swoopの設定
;; helm from https://github.com/emacs-helm/helm
;; helm-swoopを使うためにはhelmが必要です
(require 'helm)

;; helm-swoopフォルダを任意の位置に置きます
;(add-to-list 'load-path "~/.emacs.d/elisp/helm-swoop")
(require 'helm-swoop)

;; キーバインドはお好みで
(global-set-key (kbd "M-i") 'helm-swoop)
(global-set-key (kbd "M-I") 'helm-swoop-back-to-last-point)
(global-set-key (kbd "C-c M-i") 'helm-multi-swoop)
(global-set-key (kbd "C-x M-i") 'helm-multi-swoop-all)

;; isearch実行中にhelm-swoopに移行
(define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
;; helm-swoop実行中にhelm-multi-swoop-allに移行
(define-key helm-swoop-map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)

;; Save buffer when helm-multi-swoop-edit complete
(setq helm-multi-swoop-edit-save t)

;; 値がtの場合はウィンドウ内に分割、nilなら別のウィンドウを使用
(setq helm-swoop-split-with-multiple-windows nil)

;; ウィンドウ分割方向 'split-window-vertically or 'split-window-horizontally
(setq helm-swoop-split-direction 'split-window-vertically)

;; nilなら一覧のテキストカラーを失う代わりに、起動スピードをほんの少し上げる
(setq helm-swoop-speed-or-color t)