平衡点
2014/10/02
_ 生存報告
...生きてます. 以下、メモ
tDiary の Debian パッケージ
toy/image_size から sdsykes/fastimage に依存するようになっていたのだけれど, ruby-fastimage 自体は RFS 状態. 現時点で NEW にすら入っていないのはもうておくれでは?
mhc
リポジトリ: yoshinari-nomura/mhc
予定関連はメールで受けとる事が多いので、Wanderlust から即import → Google Calendar に反映とできて素晴しい.
今のところ, mhc 用に一個カレンダー用意して, そっちに同期中.
何故かと言えば?
M-x mhc-goto-this-month でのエラー
# source: scheme
Debugger entered--Lisp error: (invalid-function mhc-date-mm-first)
mhc-date-mm-first(16345)
mhc-calendar-insert-rectangle-at(16345 75 3 ((16314 . [2014 9 1 1 nil nil]) (16315 . [2014 9 2 2$
mhc-scan-month(16345 mhc-mua #[(schedule) "\300\207" [t] 1] nil)
mhc-goto-month(16345 nil)
mhc-goto-this-month(nil)
call-interactively(mhc-goto-this-month record nil)
command-execute(mhc-goto-this-month record)
execute-extended-command(nil "mhc-goto-this-month")
call-interactively(execute-extended-command nil nil)
...はて?
import from google calendar
Google Calendar 側の予定を mhc に新規に import することはまだできない, とのことで. よーし, やってみるぞー...と思ったら ICS 面倒臭すぎて, quickhack じゃ無理そう(特に繰り返し部分).
Fortran での abort とか STOP とか.
良く知られている通り, abort は GNU 拡張.
- C の ABORT(3) を call するの?
- STOP で良い気がしてきた.
某査読
えっと, 締切いつ?
drupal8
そろそろ出るのかな?
Drupal 8 Will Have Something for Everyone to Love | Drupal.org
2014/10/07
_ マルチバイト文字列の幅を 2 としてカウントする
ログインシェルは zsh ですが, あまりカスタマイズしていない佐々木ですこんばんは. 業務で Windows で作成されたらしき日本語の暗号化 zip ファイルを受け取ってじたばたすることが, 最近になって(ようやく?)無視できないくらい増えてきて嫌気がさしています. 外部にファイルを添付して送信する場合に暗号化した zip ファイルにして送信するって文化は誰が勧めたんでしょうね. 心底無駄なんでやめて欲しいです.
本題
zsh の RPROMT で今いるディレクトリを表示させています. 右端に表示させたいので
# source: sh
# 変数の文字列計算用関数
function count_prompt_chars (){
print -n -P -- "$1" | sed -e $'s/\e\[[0-9;]*m//g' | wc -m | sed -e 's/ //g'
}
# precmd のプロンプト更新用関数
function update_prompt (){
## プロンプト: 1段目左
local ps_user="%(!,%B%F{magenta}%n%b,%n)"
local ps_host="%m"
[[ -n ${SSH_CONNECTION} ]] && ps_host="%F{yellow}%m%f"
local prompt_1st_left="[$ps_user@$ps_host$chroot_info]"
## プロンプト: 1段目右
local prompt_1st_right="[%F{white}%(5~,%-2~/.../%1~,%~)%f]"
## 1段目行の残り文字列の計算
local left_length=$(count_prompt_chars $prompt_1st_left)
local right_length=$(count_prompt_chars $prompt_1st_right)
local bar_rest_length=$[ COLUMNS - left_length - right_length -1 ]
## 1段目に水平線を引く
local prompt_1st_hr=${(l:${bar_rest_length}::-:)}
## PROMPT の設定
# @see Zshをかわいくする.zshrcの設定
# URL: http://qiita.com/kubosho_/items/c200680c26e509a4f41c
# 横幅等を調整.
local ps_status="[%j]%(?.%B%F{green}.%B%F{blue})%(?!(*'-')%b!(*;-;%)%b)%f "
local ps_mark="%(!,%B%F{magenta}#%f%b,%%)"
PROMPT="$prompt_1st_left$prompt_1st_hr$prompt_1st_right-"$'\n'"$ps_status$ps_mark "
PROMPT2='|%j]> '
SPROMPT="[%j]%B%F{red}%{$suggest%}(*'~'%)?<%b %U%r%u is correct? [n,y,a,e]:%f "
# 右プロンプト
RPROMPT="$ps_vcs_info"
}
precmd_functions+=update_prompt
なんて.

ですが, zip を展開して日本語のディレクトリなんかができてしまうと...

原因は wc -c なのですが, これを例えば wc -m なんてすると, 文字数のカウントは正しくなりますが, 表示自体はズレます. なので, ASCII では 1, それ以外では 2 を返すようにしたくなりました.
sed なんかでじたばたしていた訳ですが...
wc -m で文字数カウントできるのはありがたいが、マルチバイトの時には2、それ以外は1を返すようにできないだろうか…
— Youhei SASAKI (@uwabami) 2014, 10月 7
@uwabami sedは拡張正規表現ではないので ? はエスケープ不要だった。
sed 's/?/./g' input.txt |iconv -f UTF-8 -t US-ASCII//TRANSLIT |sed 's/?/../g' |wc -m
— シェルまおう(電子書籍セール沼出身) (@satoh_fumiyasu) 2014, 10月 7
@uwabami sed 's/[^\x01-\x7e]/../g' input.txt |wc -m で充分そうな気もしました。ご参考まで。
— シェルまおう(電子書籍セール沼出身) (@satoh_fumiyasu) 2014, 10月 7
なるほど. 勉強になります.
というわけで
# source: sh
function count_prompt_chars (){
# @see https://twitter.com/satoh_fumiyasu/status/519386124020482049
print -n -P -- "$1" | sed -e $'s/\e\[[0-9;]*m//g' | sed -e 's/[^\x01-\x7e]/aa/g' | wc -m | sed -e 's/ //g'
}
としてみました. これで幸せ.

という現実逃避ネタでした.
(追記) 早速ツッコミ頂きました.
@uwabami おつです。好みの問題ですが、sed は
sed -e $'s/\e\[[0-9;]*m//g' -e 's/[^\x01-\x7e]/aa/g'
のように一回でよさげ。
— シェルまおう(電子書籍セール沼出身) (@satoh_fumiyasu) 2014, 10月 7
おっしゃる通りです..._| ̄|○
2014/10/24
_ ibus-skk を使い始めた.
先日,
というメールが来ていたので ibus-skk を試し始めた.
以前は「モードを切り替えても gnome3 の表示が変わらない」という, 個人的には割と面倒な機能不足があったのだけれど, ibus-skk(>= 1.4.2) からはきちんと表示が変わるようになっていて, とっても満足している.
現状 bugreport もそんなに出てないし, 特に問題無い気がしているのだけれど, これがこのまま jessie に入るのであればとっても幸せだと思ったりする.
以下, ibus について他に気がついたこと.
ibus-skk の gnome3 topbar での表示
Gnome-Shell のデフォルトのテーマでは
# source: css
/* default text style */
stage {
font-family: cantarell, sans-serif;
font-size: 11pt;
color: white;
}
となっている. そのため SKK の表示「あ」「_A」で表示幅が異なるため, 変換エンジンを切り替える度にtopbar に表示させている icon がピョコピョコ動いてしまい, 煩わしい.
とりあえず ~/.themes/Adwaita-Custom/gnome-shell/gnome-shell.css" に
# source: css
@import url("/usr/share/gnome-shell/theme/gnome-shell.css");
stage {
font-family: "VL Gothic" !important ;
}
なんて書いておいて, gnome-tweak-tool で Gnome-Shell のテーマを Adwaita-Custom (上記 ~/.themes 以下に作ったディレクトリ名に揃える) としておいた. 実際には日英の幅がしっかりした等幅フォントならなんでも良いと思う.
ibus engine <hogehoge> と gnome3 topbar の不一致
ibus-skk 固有の話じゃないけれど.
ibus は 1.5 以降で
ibus list-engine # 使用可能なキー配列(変換エンジン)のリスト ibus engine xkb:jp:jpn # 日本語キーボードへ変更 ibus engine skk # ibus-skk へ変更
なんて, CUI でキー配列(変換エンジン)を切り替えられるようになっているらしい. しかしながら, 上記コマンドラインでのキー配列(変換エンジン)の切り替えは Gnome3 の topbar に表示されるキーボードレイアウトの切り替えとは別個のモンらしく, コマンドラインでキー配列を切り替えても, topbar での表示が変わらない.
何が困るか, というと
- Vimperatorのコマンドラインで自動的にIMEをオフにする - 貳佰伍拾陸夜日記
- iBus1.5でも快適にIMEをON・OFFする 〜VimやVimperatorを念頭に〜 | PCと遊ぶ日々の記録
みたいな事をしたくても(できるけれど), Gnome3 の topbar との表示が解離してしまって, 麗しくない.
うーん.
とりあえず
# source: sh
#!/bin/sh
STAMP=/tmp/$USERNAME-ibus-toggle
[ -x /usr/bin/xte ] || exit 0
if [ -e $STAMP ] ; then
xte "keydown Super_L" "keydown space" "keyup space" "keyup Super_L"
rm -f $STAMP
else
xte "keydown Super_L" "keydown space" "keyup space" "keyup Super_L"
touch $STAMP
fi
なんて sh script 作って上記スクリプトの実行を Henkan に割り当てておく(uim の時と同じ) 「Super +Space」での ibus の切り替えは使わないようにしてみた.
ad hoc で嫌になる. なんか良い方法無いの?
2014/10/25
_ libskk で sticky-shift 的な…
昨日(ibus-skk を使い始めた.)の続き.
uim-skk に存在して, ibus-skk に無い機能として, 個人的に無いと途方に暮れる機能は sticky-shift なのですが.
なんとかならんかなぁ, とじたばたすることしばし.
libskk の keymap は /usr/share/libskk/rules/ 以下にあって, ibus-skk においても, このルールファイルを参照して入力方式を切り替えている.
というわけで
~/.config/libskk/rules/StickyShift/metadata.json
# source: json
{
"name": "StickyShift",
"description": "Typing rule, support sticky key"
}
~/.config/libskk/rules/StickyShift/keymap/hiragana.json
# source: json
{
"include": [
"default/hiragana"
],
"define": {
"keymap": {
";": "start-preedit-kana"
}
}
}
としてみた. この後 ibus-skk の設定画面で「タイピング方式」から StickyShift を選択することで, なんちゃって sticky-shift が可能になった.
「なんちゃって」の意味は, 本来の sticky-shift の機能では ";;"(セミコロンを二回入力)で ";" が入力できる筈なのだが, どうもうまくいかない.
とはいえ, 長文は Emacs で書くので ddskk を使うだろうから当面は困らないし, とりあえず良しとすることに.
参考: