Emacs-BGEX patch (background pixmap/color extension)

Emacs-BGEX patch とは?

X 用 FSF Emacs の背景拡張非公式パッチです。

Emacs-BGEX patch を適用すると背景に画像や色を指定できるようになります。

フレーム単位ではなく、バッファごとに異なる背景を指定することもできます。

emacs bgex thumbnail3 emacs bgex thumbnail4

presentation_bgex_20080308_0_2.mp4 demo movie (15.6Mbytes)

本当に無理矢理なので、たまに背景の描画更新に失敗するなどの問題もあったりなかったりします。(完全にするには下から書き直さんとダメっぽ。 XEmacs の背景相当なら問題ないけど。。。)

Emacs version patch (sha1sum) 備考
Emacs-23 CVS HEAD (font backend) patch-bgex_20080919_0-emacs-cvshead.tar.bz2 (sha1sum:5bcb3cddc29a4a22ecf0d4f486fa1c4dcecc02aa) 2008年11月1日(土) に動作確認。
Emacs-22.3 patch-bgex_20060712_0-emacs-cvshead.tar.bz2 (sha1sum:be98ddae75428933d7c96f4c00e319099b6f950f)
Emacs-21.4 patch-bgex_20050921_0-emacs-21.4.tar.bz2 (sha1sum:f91e5354bc8ad785a885e0c61a3f9b33f7f4ea6e) 21.3 にも適用できます。

仕様メモ

Emacs-21.4 と CVS HEAD に対応しています。

設定や概念などややこしいこともありますので、何かありましたら mail address へのメイルや 電言板 までお気軽にどうぞ。

背景が指定できて何が嬉しいの? 無駄じゃない?

バッファごとに背景が指定できると、バッファの意味や属性を modeline だけではなく背景色や画像で表現することができます。

その他にも例えば、

などといった応用が考えられます。

っていうか楽しいじゃん。

 

News

2008年9月19日(金)
20080919_0
最新のコードに対応しました。
2008年8月22日(金)
20080822_0
特殊な再描画時、まれに Emacs が落ちることがある不具合を修正しました。
2008年5月15日(木)
20080515_0
最新のコードに対応しました。
2008年3月9日(日)
20080309_0
特殊な再描画時、まれに Emacs が落ちることがある不具合を修正しました。
2008年3月5日(水)
20080305_0

変更点は以下のとおりです。

  • font backend に対応
  • 一部の描画アルゴリズムを改良

この版から「--enable-font-backend 対応パッチ」は必要ありません。

描画アルゴリズムの改良により、色付きの領域を背景色の影響を受けた色をもつ画像で表現するモードで大きな背景画像の描画が高速になりました。以下のような設定で list-colors-display を実行しても実用的な速度になります。

(bgex-set-image-default "~/background_1600x1200.jpg" t)

News ログ

 

Screenshot

画像をクリックすると大きな画像を表示します。

emacs bgex thumbnail0 emacs bgex thumbnail1 emacs bgex thumbnail2 emacs bgex thumbnail3 emacs bgex thumbnail4

 

動作環境

Emacs-BGEX patch は以下の環境で動作確認しています。

X サーバ名OS備考
X.org@LinuxLinux(amd64)
X11@MacMacOSX(x86)
X.org@LinuxLinux(x86)
XFree86@LinuxLinux(x86)最近はテストしていません。
XFree86@LinuxSolaris9(UltraSPARC)最近はテストしていません。
XFree86@CygwinLinux(x86)最近はテストしていません。
ASTEC-X@WindowsXPLinux(x86)最近はテストしていません。

作者は以下 5 台の機械で毎日使用しています。 Emacs は CVS HEAD です。

マシン名OSX サーバCPU表示先Emacs-BGEX patch バージョン
lifeforcegentoo linuxX.orgAthlon64 X2 3800+localhost(GeForce 7800GT)20080919_0
salamandergentoo linuxX.orgAthlon64 3200+localhost(GeForce 6150)20080919_0
falsionMacOSXX11Core Duolocalhost(GMA950)20080919_0
skykidgentoo linux-Athlon X2 4850eX@(lifeforce on B-flets(100M), salamander or falsion)20080919_0
aleste2gentoo linux-C3-1000MHzX@(lifeforce on B-flets(100M), salamander or falsion)20080919_0
 

導入手順

次のような手順で導入します。

  1. Emacs のソースを展開
  2. Emacs-BGEX patch を当てる
  3. bgex.el のインストール
  4. .emacs などの Emacs-BGEX 対応のための修正

パッチの当て方

Emacs のディレクトリ src/ に移動しパッチを当てます。 CVS 版ならば

$ cd emacs/src
$ patch < patch-bgex_20060712_0-emacs-cvshead

のように入力します。

Emacs-21.4 も同様に

$ cd emacs-21.4/src
$ patch < patch-bgex_20050921_0-emacs-21.4

と入力します。

 

.emacs 設定例

準備

load-path に含まれる場所へ bgex.el を置き、 .emacs に

;; Emacs-BGEX patch
(require 'bgex)

のように書いておきます。

フレームに背景画像を付ける

XEmacs の背景画像機能と似ています。 (boundp 'bgex-exist-p) で、 Emacs-BGEX patch が組み込まれているかどうかを調べることができます。

(when (boundp 'bgex-exist-p)
  (bgex-set-image-default "~/.Emacs22/background.xpm"))

このとき以下のような表示になります。

static

フレームに背景画像を付ける(色付き領域を背景に影響させる)

(when (boundp 'bgex-exist-p)
  (bgex-set-image-default "~/.Emacs22/background.xpm" t))

このとき以下のような表示になります。このモードは CPU とネットワークリソースを大量に消費します。色の計算式は SRC * DST / factor です 。

dynamic

html-mode の(major-mode に対して)背景色を指定する(色付き領域を背景に影響させる)

(bgex-set-color "HTML" 'bgex-identifier-type-major-mode '(60000 40000 40000) t)

*scratch* の(バッファ名に対して)背景色を指定する

(bgex-set-color "*scratch*" 'bgex-identifier-type-buffer-name "skyblue")

*scratch* の(バッファ名に対して)背景画像を指定する

(bgex-set-image "*scratch*" 'bgex-identifier-type-buffer-name "~/tmp/bg.jpg")

Emacs-BGEX patch を破棄する

(bgex-destroy-all)

作者の PC (falsion (MacBook (Core Duo 1.83GHz))) での設定

(when (boundp 'bgex-exist-p)
  (bgex-set-image-default "~/.Emacs22/.emacs22_back.xpm" t)
  (bgex-set-image "svn-status" 'bgex-identifier-type-major-mode "~/.Emacs22/w-cork12.jpg" t)
  (bgex-set-color "*YaDEV*glmm2-COMPILE*" 'bgex-identifier-type-buffer-name '(60000 50000 40000) t)
  (bgex-set-image "YaDEV-INTERFACE" 'bgex-identifier-type-major-mode "~/.Emacs22/w-surface04.jpg" t)
  (bgex-set-image "Buffer Menu" 'bgex-identifier-type-major-mode "~/.Emacs22/w-ca01.jpg" t)
  (bgex-set-color "Dired by name" 'bgex-identifier-type-major-mode '(60000 40000 40000) t)
  (bgex-set-color "Dired by date" 'bgex-identifier-type-major-mode '(40000 60000 40000) t)
  (bgex-set-image "C" 'bgex-identifier-type-major-mode "~/.Emacs22/w-ca05.jpg" t)
  (bgex-set-image "*scratch*" 'bgex-identifier-type-buffer-name "~/.Emacs22/w-sptit18.png" t))
 

history

2002 年
壁紙パッチを作成。 XEmacs のようにフレームに対するもののみ。
2003 年 2 月
壁紙パッチを元に Emacs-BGEX patch を作成。
2004 年
CVS HEAD 版を更新するだけのメンテナンスモードに。
2005 年 5 月
バッファ背景の再描画処理を見直した beta 版を追加。
2005 年 8 月
beta 版を current に。 21.2 のサポート打ち切り。(20050828_0)
2005 年 9 月
若干の機能拡張のあとメンテナンスモードに。(20050910_0, 20050921_0, 20050928_0)
2006 年 7 月
コンフリクト対策。(20060712_0)
2007 年 7 月
コンフリクト対策。(20070730_0)
2008 年 2 月
font backend 対策。(20080205_0, 20080206_0, 20080208_0, 20080218_0, 20080225_0)
2008 年 3 月
font backend 対応と一部の描画アルゴリズムを改良、不具合修正。(20080305_0, 20080309_0)
2008 年 5 月
コンフリクト対策。(20080515_0)
2008 年 8 月
不具合修正。(20080822_0)
2008 年 9 月
コンフリクト対策。(20080919_0)

戻る