symon 20170224.33(in MELPA)
tiny graphical system monitor

概要

<2015-02-10 Tue>更新
1日のレビュー当初から大幅に進化し、
グラフィカル化した上、表示内容をカスタマイズできるようになりました!!

symon.el はEmacsで動く グラフィカル システムモニターです。

GNU/LinuxとWindowsとCygwinに対応しています。

現時点ではMac未対応ですが、
コードを読めば対応できるようになっています。

一定時間Emacsを操作しないと、図のように
メモリ使用量CPU使用率バッテリ残量
*受信・送信パケット量*(NEW) を表示します。

デフォルトでは2秒間(symon-delay)操作しない場合に
3秒間隔(symon-refresh-rate)で表示します。

グラフの大きさについては、以下の変数を設定し、
「実行方法」にあるように別のEmacsで表示テストをしてください。

  • symon-sparkline-height
  • symon-sparkline-width
  • symon-sparkline-ascent
  • symon-sparkline-thickness

そしてお気に入りの設定を見付け次第、init.elに加えましょう。

20150201084451.png
Fig1: 古いスクリーンショット

20150210064924.png
Fig2: 新しいスクリーンショット

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてsymonを使う方は
以下のコマンドを実行します。

M-x package-install symon

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name symon

設定 150210061315.symon.el(以下のコードと同一)

(require 'symon)
;;; 表示する情報
(setq symon-monitors
      ;; 現在時刻も追加!
      (cons 'symon-current-time-monitor
            (cond ((memq system-type '(gnu/linux cygwin))
                   '(symon-linux-memory-monitor
                     symon-linux-cpu-monitor
                     symon-linux-network-rx-monitor
                     symon-linux-network-tx-monitor))
                  ((memq system-type '(windows-nt))
                   '(symon-windows-memory-monitor
                     symon-windows-cpu-monitor
                     symon-windows-network-rx-monitor
                     symon-windows-network-tx-monitor)))))

;;; グラフの高さ(pixel)
(setq symon-sparkline-height 20)
;;; グラフの長さ(pixel)
(setq symon-sparkline-width 80)
;;; グラフの位置
(setq symon-sparkline-ascent 100)
;;; グラフの太さ
(setq symon-sparkline-thickness 2)
;; (symon-display)
(symon-mode 1)

実行方法

$ wget http://rubikitch.com/f/150210061315.symon.el
$ emacs -Q -f package-initialize -l 150210061315.symon.el

他の情報も表示したい

<2015-02-10 Tue>全面的に書き換え

システムモニターといえば、他の情報も表示したくなるかもしれません。

表示内容は symon-monitors 変数で設定します。

内容を定義するには define-symon-monitor マクロを使います。

キーワードがいろいろ使えます。

index
見出し
unit
単位
sparkline
グラフの表示
fetch
値(デフォルトで百分率)
setup
初期化処理(symon-mode有効時に実行)
cleanup
後片付け処理(symon-mode無効時に実行)
annotation
追加情報文字列
lower-bound
fetchの最小値(デフォルト0)
upper-bound
fetchの最大値(デフォルト100)

GNU/Linuxでのバッテリ残量は以下のように定義されています。

(define-symon-monitor symon-linux-battery-monitor
  :index "BAT:" :unit "%" :sparkline t
  :fetch (when battery-status-function
           (read (cdr (assoc ?p (funcall battery-status-function))))))

一方、グラフを使わない情報についてはdisplayキーワードを使います。

現在時刻を表示するモニタは以下のように定義されています。

(define-symon-monitor symon-current-time-monitor
  :display (format-time-string "%H:%M"))

このようにdisplayに書かれた内容を評価して表示します。

よって、Emacsの状態をモニタするのは、上の例をパクればいいだけです。

モードラインじゃ狭すぎて表示しきれない場合に対応できます。

mode-line-format と同じフォーマットの変数
symon-additional-info-format を用意し、設定すれば、
第二のモードラインのように使えます。

(defvar symon-additional-info-format nil)
(define-symon-monitor symon-additional-info-monitor
  :display (format-mode-line symon-additional-info-format))
(push 'symon-additional-info-monitor symon-monitors)
(setq symon-additional-info-format '("" (auto-fill-function "Fill")))

他のシステムに対応させるには

<2015-02-10 Tue>全面的に書き換え

Macにも対応させるには、

  • symon-darwin-memory-monitor
  • symon-darwin-cpu-monitor
  • symon-darwin-network-rx-monitor
  • symon-darwin-network-tx-monitor

関数を定義し、
symon-monitors 変数に

((memq system-type '(darwin))
 '(symon-darwin-memory-monitor
   symon-darwin-cpu-monitor
   symon-darwin-network-rx-monitor
   symon-darwin-network-tx-monitor))

の項目を書き加えます。


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。