やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

ソースコードのハイライト表示(highlight, zenity, xdpyinfo)

 各種ソースコードをハイライト表示する。

方法

 ソースコードファイルからハイライト用HTMLファイルを作成してプレビューする。

ソースコード(言語:`bash`, ファイルパス:`code.sh`)
↓
HTML化(`highlight`)
↓
HTMLプレビュー(`zenity`)
項目
対象ソースコード言語 bash
対象ファイル名 source.sh
使用コマンド highlight, zenity, xdpyinfo grep, sed

 ターミナルで以下のコマンドを打つ。(source, htmlのパスは適時変更)

source=/home/pi/.config/ranger/scope.sh
html=/tmp/work/a.sh.html
highlight --inline-css --font "VL ゴシック" --font-size "18" --style pablo "${source}" > "${html}"; zenity --text-info --html --filename "${html}" --width $Width --height $Height

 画面を最大化して表示するなら以下。

source=/home/pi/.config/ranger/scope.sh
html=/tmp/work/a.sh.html
Width_Height=$(xdpyinfo | grep dimensions | sed -E 's/\s+dimensions:\s+([0-9]+)x([0-9]+).*/\1\t\2/g')
Width=$(echo "$Width_Height" | cut -f1)
Height=$(echo "$Width_Height" | cut -f2)
highlight --inline-css --font "VL ゴシック" --font-size "18" --style pablo "${source}" > "${html}"; zenity --text-info --html --filename "${html}" --width $Width --height $Height

手順

  1. インストール
  2. ソースコード作成
  3. プレビュー用コマンド実行

1. インストール

sudo apt install -y highlight

2. ソースコード作成

 適当に作ればいい。ハイライトに対応する言語は以下で見れる。

highlight --list-langs

3. プレビュー用コマンド実行

highlight --inline-css --style pablo /home/pi/.config/ranger/scope.sh > /tmp/work/a.sh.html; zenity --text-info --html --filename /tmp/work/a.sh.html

 cssはhtml内に入れないとzenityでは表示できなかった。よって--inline-cssフラグを付与した。

 csspabloを使う。--style引数で指定する。その値はhighlight --list-themesで一覧できる。

 zenityでfontを指定しても反映されなかった。これが有効なのは--htmlでないときのみ。--htmlのときフォントはcssで指定する必要がある。

highlight --inline-css --font "LV ゴシック 20" --style pablo /home/pi/.config/ranger/scope.sh > /tmp/work/a.sh.html; zenity --text-info --html --filename /tmp/work/a.sh.html

 highlightでフォント指定するとcssに反映される。

highlight --inline-css --font "VL ゴシック" --font-size "18" --style pablo /home/pi/.config/ranger/scope.sh > /tmp/work/a.sh.html; zenity --text-info --html --filename /tmp/work/a.sh.html

 zenityでウインドウのサイズを指定する。ディスプレイと同じサイズにしたい。ウインドウの最大化フラグは指定できないようなので--width, --heightで指定する。

 まずはディスプレイサイズの取得。

$ xdpyinfo | grep dimensions
  dimensions:    1920x1080 pixels (508x286 millimeters)

 widthとheightを個別に取得する。

Width_Height=$(xdpyinfo | grep dimensions | sed -E 's/\s+dimensions:\s+([0-9]+)x([0-9]+).*/\1\t\2/g')
Width=$(echo "$Width_Height" | cut -f1)
Height=$(echo "$Width_Height" | cut -f2)
echo $Width
echo $Height

 zenityにwidthとheightを渡す。

highlight --inline-css --font "VL ゴシック" --font-size "18" --style pablo /home/pi/.config/ranger/scope.sh > /tmp/work/a.sh.html; zenity --text-info --html --filename /tmp/work/a.sh.html --width $Width --height $Height

 Width=800, Height=600にしたのが以下。

f:id:ytyaru:20190317193732p:plain

前回

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 9.0 2018-11-13
  • bash 4.4.12