2014/09/27

[作業記録, Debian] tmux をビルドした

早速ダウンロード・ビルド

git clone git://git.code.sf.net/p/tmux/tmux-code tmux-tmux-code

./configure
-bash: ./configure: No such file or directory

あ、configure ない。 README 見よう。

...(抜粋)
    $ git clone git://git.code.sf.net/p/tmux/tmux-code tmux
    $ cd tmux
    $ sh autogen.sh
    $ ./configure && make

autogen が必要みたい。

sh autogen.sh
autogen.sh: 16: autogen.sh: aclocal: not found
aclocal failed

aclocal とな。 automake がいるのか。というか入れてなかったっけ?

sudo aptitude install automake
sh autogen.sh
./configure
checking for library containing event_init... !!!configure: error: "libevent not found"!!!

こんどは libevent だ。

sudo aptitude install libevent-dev
./configure --prefix=/home/mikoto/opt/tmux
make -j8
make install

うん、できたっぽい。作業記録なので動作確認は割愛。あと、ビルドのためのパッケージはほぼすべてインストール済みだったのでそれも省略。

2014/09/20

[Debian, Ruby]Debian(wheezy) に rbenv で ruby2.1.3 をインストール

これだけ。

# 必要パッケージ取得
sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev rbenv ruby-build

# rbenv 初期設定
rbenv init
echo eval "$(rbenv init -)" >> .bashrc

# 2.1.3 のパッケージ URL を指定したファイルを作成
vim 2.1.3
cat ./2.1.3
install_package "yaml-0.1.4" "http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz"
install_package "ruby-2.1.3" "http://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.3.tar.gz"

# 2.1.3 インストール
rbenv install ./2.1.3

# ruby コマンドで 2.1.3 が呼び出されるようにする。
rbenv global 2.1.3

2014/09/19

[Mikutter] UserConfig に連想配列を格納して、設定画面から変更できるようにしたい

UserConfig に連想配列を格納して、設定画面から変更できるようにしたかったので挑戦してみた。

実現方針は下記。

  • 設定画面の設定値を連想配列に紐付ける
  • 連想配列に変更があったら UserConfig を更新する

設定画面の設定値を連想配列に紐付ける

Settings の各関数にリスナを渡せるので、リスナ内で連想配列に出し入れするよう頑張ってもらう。

select は、 3.0.5 の時点ではリスナを渡せない。 3.0.6 くらいでフィックスされるのではないだろうか。

# -*- coding: utf-8 -*-
Plugin.create(:setting_listener) do
on_boot {
@config = {}
}
settings("setting_listener") {
settings("基本設定") {
multitext("複数行テキスト", listener(:setting_listener_multitext))
adjustment("特定範囲の数値入力", listener(:setting_listener_adjustment), 1, 600)
boolean("真偽値入力", listener(:setting_listener_boolean))
fileselect("ファイルを選択する", listener(:setting_listener_fileselect))
input("一行テキストボックス", listener(:setting_listener_input))
inputpass("一行テキストボックス(非表示)", listener(:setting_listener_inputpass))
multi("複数テキストボックス", listener(:setting_listener_multi))
font("フォント", listener(:setting_listener_font))
color("カラー", listener(:setting_listener_color))
fontcolor("フォントカラー", listener(:setting_listener_fontcolor_font), listener(:setting_listener_fontcolor_color))
## 落ちる
#select("アイコンの色", listener(:setting_listener_select), {
# "1" => "1",
# "2" => "2",
# "3" => "3",
# "4" => "4",
# "5" => "5"})
multiselect("要素を複数個選択させる", listener(:setting_listener_multiselect), {
"1" => "1",
"2" => "2",
"3" => "3",
"4" => "4",
"5" => "5"})
}
}
# リスナ作成
def listener(key)
Plugin::Settings::Listener.new(
:set => lambda { |new|
@config[key] = new
},
:get => lambda {
@config[key]
}
)
end
end

連想配列に変更があったら UserConfig を更新する

UserConfig[key] で取得できる値はコピーなので、 格納した連想配列に変更があった場合には連想配列自体を入れ替える。

上述のリスナの set 処理の最後に、連想配列をごっそり入れ替える処理を入れる感じ。

コードと、その結果の設定は下記の通り。

UserConfig::setting_listener:
:setting_listener_multitext: aaa
:setting_listener_adjustment: 5
:setting_listener_fileselect: "PATH/TO/SELECTED/FILE"
:setting_listener_input: eee
:setting_listener_inputpass: ccc
:setting_listener_multi:
- aaa
- bvbb
- ccc
:setting_listener_multiselect:
- '2'
- '3'
- '4'
view raw setting.yml hosted with ❤ by GitHub
# -*- coding: utf-8 -*-
Plugin.create(:setting_listener) do
on_boot {
UserConfig[:setting_listener] ||= {}
}
settings("setting_listener") {
settings("基本設定") {
multitext("複数行テキスト", listener(:setting_listener_multitext))
adjustment("特定範囲の数値入力", listener(:setting_listener_adjustment), 1, 600)
boolean("真偽値入力", listener(:setting_listener_boolean))
fileselect("ファイルを選択する", listener(:setting_listener_fileselect))
input("一行テキストボックス", listener(:setting_listener_input))
inputpass("一行テキストボックス(非表示)", listener(:setting_listener_inputpass))
multi("複数テキストボックス", listener(:setting_listener_multi))
font("フォント", listener(:setting_listener_font))
color("カラー", listener(:setting_listener_color))
fontcolor("フォントカラー", listener(:setting_listener_fontcolor_font), listener(:setting_listener_fontcolor_color))
## 落ちる
#select("アイコンの色", listener(:setting_listener_select), {
# "1" => "1",
# "2" => "2",
# "3" => "3",
# "4" => "4",
# "5" => "5"})
multiselect("要素を複数個選択させる", listener(:setting_listener_multiselect), {
"1" => "1",
"2" => "2",
"3" => "3",
"4" => "4",
"5" => "5"})
}
}
# リスナ作成
def listener(key)
Plugin::Settings::Listener.new(
:set => lambda { |new|
config = UserConfig[:setting_listener].melt
config[key] = new
UserConfig[:setting_listener] = config
},
:get => lambda {
UserConfig[:setting_listener][key]
}
)
end
end

設定項目がゴチャッとしてきたらそれなりにわかりよくなるのではないでしょうか。

書きながら思ったけど、何かやるたびに連想配列全体のコピーが走るんだな、これ。 性能が気になる場合は、更新・取得にさらなる工夫が必要ですね。

参考文献