平衡点


2014/08/22

_ less の syntax highlight に pygments を使う

今迄は GNU Source-highlight を使っていたのだけれども, 試しに Pygments を使ってみたら 予想以上に良い感じだったので, のりかえてみた.

やった事は単純で pygmentize-lessfilter

# source: sh
  #!/bin/sh
  if [ "$?" -eq "0" ]; then
    pygmentize -g -O "style=native,encoding=$(nkf -g $1)" $1 | nkf -w
  else
    exit 1
  fi

なんて作成しておいて, ~/.zshrc

# source: sh
  LESSCHARSET=utf8
  LESS='-R'
  if ( whence pygmentize >/dev/null ) && ( whence nkf > /dev/null ) ; then
      LESSOPEN="| pygmentize-lessfilter %s"
  fi

としただけ.

最初は LESSOPENnkf -w 通して pygmentize に直接渡そうと考えてみたのだけれど, ファイル名が無いと syntax highlight する言語の判定に失敗することがあって, 結局別スクリプトにしてみた.

結構綺麗で良いと思う. 出力結果をカスタマイズしたいなら, 適当に style を書いたら良いかと.

似た様な話→ man をカラフルに


2014/08/23

_ tmux の設定(1/n)

始めに

今更ですが GNU Screen から tmux へ移行しました.

移行できなかった最大の理由は, 古いサーバでのエンコーディング. 未だに UTF-8 じゃないサーバで作業する必要があったりして, screen では window ごとに

# encoding の切りかえ
bind 'U' eval "encoding utf8" "stuff 'export LANG=ja_JP.UTF-8\012'"
bind 'u' eval "encoding utf8" "stuff 'export LANG=ja_JP.UTF-8\012'"
bind 'E' eval "encoding euc" "stuff 'export LANG=ja_JP.eucJP\012'"
bind 'e' eval "encoding euc" "stuff 'export LANG=ja_JP.eucJP\012'"
# term の切り替え
bind 'X' eval "term xterm-256color" "stuff 'export TERM=xterm\012'"
bind 'S' eval "term screen-256color-bce" "stuff 'export TERM=screen-256color-bce\012'"

なんて事をしていました.

もはやそういうサーバも少なくなったので(まだあるんですが), 弄れる所は全部 tmux にしてしまおうかな, という気持で気軽に乗り換えてみたらだいぶハマったので, 書いておきます.

ambiguous width characters

UTF-8 環境でターミナル上で日本語を表示する際に嵌るのは ambiguous width characters ですよね? 実際, tmux を設定してみたら emacs on tmux の SKK が酷い事になりました

というわけで, じたばたしてみたり

tumx は UTF-8の文字列の文字幅について独自のテーブルを持っています. なので対応としては

もしくは fumiyas/wcwidth-cjk で 2 文字幅にする

とします.

システムの locale を弄るのはちょっと抵抗があるので, fumiyas/wcwidth-cjk をありがたく使わせて頂くことにしました.

tmux の修正

tmux の修正は PKGBUILD/tmux at master - silenvx/PKGBUILD にあるパッチを使わせて頂きました.

  • Debian のソースパッケージを持ってきて
  • quilt impot で patch を取り込んで
  • dch -ndebian/changelog 修正して
  • debuild -rfakeroot -uc -us -tc

できたパッケージを修正しておしまい, です.

wcwidth-cjk

fumiyas/wcwidth-cjk 参照のこと. 私は /usr/local/stow 以下に install して管理してます.

  • git clone https://github.com/fumiyas/wcwidth-cjk && cd wcwith-cjk
  • make && make install prefix=/usr/local/stow/wcwidth-cjk
  • cd /usr/local/stow && stow wcwidth-cjk

でおしまいです. あとは tmuxwcwidth-cjk 経由で起動すれば良いです.

aptitudealsamixer の罫線が気になるでしょうから, tmux の設定ファイルには

set-environment -g NCURSES_NO_UTF8_ACS 0

を追記しておくと良いでしょう

sticky weechat

Screen の時の様に 常に画面の下に weechat を表示させておきたいのですが, tmux には sticky pane みたいな概念がありません.

を参考に, 適当な shell script をでっちあげてみました.

# source: sh
 #! /bin/sh
 tmp=$HOME/.tmux/weechat.tmp
 current_weechat_window=`tmux lsp -a -F "#I: #T" | grep weechat | cut -d":" -f 1`
 current_weechat_pane=`tmux lsp -a -F "#P: #T" | grep weechat | cut -d":" -f 1`
 current_active_window=`tmux lsw | grep active | cut -d":" -f 1`
 current_active_pane=`tmux lsp | grep active | cut -d":" -f 1`

 if [ ${current_weechat_window} -ne ${current_active_window} ] ; then
     tmux join-pane -l 12 -s :${current_weechat_window}.${current_weechat_pane} -t :${current_active_window}
     tmux select-pane -t 0
 else
     if [ -e $tmp ] ; then
         tmux resize-pane -t ${current_weechat_pane} -Z
         rm -f $tmp
     else
         tmux resize-pane -t ${current_weechat_pane} -Z
         tmux select-pane -t 0
         touch $tmp
     fi
 fi

これを適当なキーにバインドしておくと,

  • 今いる window に weechat の pane を持ってくる
  • 同じキーで, 全画面と下部はりつきを toggle する

なんて事ができるようになります. 私は - にバインドして, weechat の表示をトグルしてます.

そんなこんなで

まだ慣れてないので, 今後もジタバタすると思いますが, weechat の表示が全然崩れないので, だいぶ満足度が上がりました.

次は tmuxinator/tmuxinator あたりの設定ですかね...

参考文献


連絡先など
"
最近の日記
  • 2026/02/21
    • 1. act を podman で動かす
  • 2026/02/19
    • 1. WinApps を docker 上の Windows から libvirt に変えた
  • 2026/02/18
    • 1. AUCTeX と latexmk の連携(2026年版)
  • 2026/02/16
    • 1. corfu の設定を見直す (2026年版)
  • 2026/02/14
    • 1. Windows11, macOS, Linux (Wayland) での clipboard 共有
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|04|05|06|10|12|
2025|02|03|04|05|06|08|09|10|12|
2026|01|02|
Back to Top ▲