Emacs-BGEX patch (background pixmap/color extension)

Emacs-BGEX patch とは?

X 用 (X なら Cygwin でも MacOSX でも動きます!) FSF Emacs の背景拡張非公式パッチです。

Emacs-BGEX patch を適用すると背景に画像や色 (色は環境によって (xorg の intelドライバで?) buggy です) を指定できるようになります。

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

かれこれ 10 年以上メンテナンスしています。

emacs bgex thumbnail3 emacs bgex thumbnail4

presentation_bgex_20080308_0_2.mp4 demo movie (15.6Mbytes)

Emacs version patch (sha1sum) 備考
Git git clone git://github.com/wachikun/emacs_bgex
Emacs-24.4 patch-bgex_20140112_0-bzr-emacs-trunk.tar.bz2 (sha1sum:28d1f4f39b788fe2ceed4de3cb6091ac9d504964)
Emacs-24 bzr trunk patch-bgex_20140728_0-bzr-emacs-trunk.tar.xz (sha1sum:4171ca8d758b2908b0371c29ef83534b45491cc4) ほぼ毎日ビルドして動作確認しています。(2014年10月21日(火))
Emacs-24.3 patch-bgex_20121216_0-bzr-emacs-trunk.tar.bz2 (sha1sum:b90e885bc3fc58ca4013f3cb4623c3ad4ad29935)
Emacs-24.2 patch-bgex_20120916_0-emacs-24.2.tar.bz2 (sha1sum:6296b85efa5e8b1c1474ea245fd42dda1610eab6)
Emacs-24.1 patch-bgex_20111215_0-bzr-emacs-trunk.tar.bz2 (sha1sum:4de173c3d2da7a081c4c318bf0732a09d0839b8d)
Emacs-23.3a patch-bgex_20110822_0-emacs-23.3a.tar.bz2 (sha1sum:778b581beff1856db7b5a81a29f7eba9faba2adc)
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 にも適用できます。

仕様メモ

何かありましたら twitter @wachikunwac@umiushi.org へのメイルなどお気軽にどうぞ。

 

News

2014年7月28日(月)
20140728_0
最新のコードに対応しました。
2014年6月23日(月)
20140623_0
最新のコードに対応しました。
2014年6月19日(木)
20140619_0
最新のコードに対応しました。
2014年1月12日(日)
20140112_0
最新のコードに対応しました。
2013年12月15日(日)
20131215_0
最新のコードに対応しました。
2013年12月2日(月)
20131202_0
最新のコードに対応しました。
2013年12月1日(日)
20131201_0
最新のコードに対応しました。
2013年11月30日(土)
20131130_0
最新のコードに対応しました。
2013年9月21日(土)
20130921_0
最新のコードに対応しました。
2013年9月19日(木)
20130919_0
revision 113760 以降、特定の条件で文字が消えることがあった不具合を修正。
2013年9月18日(水)
20130918_0
最新のコードに対応しました。

News ログ

 

install

インストールは非常に簡単です。次のような手順で導入します。

  1. Emacs の source を展開
  2. Emacs-BGEX patch を当てる
  3. bgex.el の install
  4. .emacs などの Emacs-BGEX 対応のための修正

example

まず BGEX archive と Emacs source を展開し、 patch を当てて build します。

$ cd /tmp
$ wget http://umiushi.org/~wac/bgex/patch-bgex_20110822_0-emacs-23.3a.tar.bz2
$ tar xf patch-bgex_20110822_0-emacs-23.3a.tar.bz2

$ wget http://ftp.gnu.org/pub/gnu/emacs/emacs-23.3a.tar.gz
$ tar xf emacs-23.3a.tar.bz2
$ cd emacs-23.3/src
$ patch < /tmp/patch-bgex_20110822_0-emacs-23.3a/patch-bgex_20110822_0-emacs-23.3a
$ cd ..
$ ./configure --prefix=YOUR-INSTALL-PATH && make -j2

bzr 版ならば、

$ cd /tmp
$ wget http://umiushi.org/~wac/bgex/patch-bgex_20110611_0-bzr-emacs-trunk.tar.bz2
$ tar xf patch-bgex_20110611_0-bzr-emacs-trunk.tar.bz2

$ cd YOUR-EMACS-PATH
$ bzr pull
$ cd src
$ patch < /tmp/patch-bgex_20110611_0-bzr-emacs-trunk/patch-bgex_20110611_0-bzr-emacs-trunk
$ cd ..
$ ./configure --prefix=YOUR-INSTALL-PATH && make -j2

bzr の場合タイミングによって patch が当たらないことが稀にありますが、ここ数年の実績では遅くとも 3 日以内に patch を更新できています。

bgex.el を load-path の通ったディレクトリにコピーします。

$ cp -av bgex.el YOUR-ELISP-PATH

まずテストのため background color を変更してみます。 .emacs を以下のように修正してください。

;; Emacs-BGEX patch
(add-to-list 'load-path "YOUR-ELISP-PATH")
(require 'bgex)
;; color
(when (boundp 'bgex-exist-p)
  (bgex-set-color-default "darkgreen" t)
  (bgex-set-color "*scratch*" 'bgex-identifier-type-buffer-name "skyblue"))

emacs 先ほどビルドしたものを起動しましょう。ビルドしてからカレントディレクトリを変更していなければ src/emacs で起動します。

.emacs を修正せずに src/emacs -Q で起動して、上のコードを *scratch* にコピーした方が問題が少ないかもしれません。

上の設定で Emacs を起動して background color が変わっていれば install は成功しています。次に image を指定するため、以下のように修正してみましょう。

指定する image は Emacs 側で対応している必要があります。 xpm/jpeg/png/gif あたりが使用できます。

;; color
;; (when (boundp 'bgex-exist-p)
;;   (bgex-set-color-default "darkgreen" t)
;;   (bgex-set-color "*scratch*" 'bgex-identifier-type-buffer-name "skyblue"))
;; image
(when (boundp 'bgex-exist-p)
  (bgex-set-image-default "YOUR-IMAGE-FILE-A")
  (bgex-set-image "*scratch*" 'bgex-identifier-type-buffer-name "YOUR-IMAGE-FILE-B" t))

あとは以下の .emacs 設定例で色々と調整してみてください。

 

.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 "~/.emacs.d/images/background.xpm"))

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

static

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

(when (boundp 'bgex-exist-p)
  (bgex-set-image-default "~/.emacs.d/images/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 "~/.emacs.d/images/.emacs22_back.xpm" t)
  (bgex-set-image "svn-status" 'bgex-identifier-type-major-mode "~/.emacs.d/images/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 "~/.emacs.d/images/w-surface04.jpg" t)
  (bgex-set-image "Buffer Menu" 'bgex-identifier-type-major-mode "~/.emacs.d/images/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 "~/.emacs.d/images/w-ca05.jpg" t)
  (bgex-set-image "*scratch*" 'bgex-identifier-type-buffer-name "~/.emacs.d/images/w-sptit18.png" t))

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

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

その他にも例えば、

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

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

 

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)
XQuarts@MacMacOSX(x86)
X.org@LinuxLinux(x86)最近はテストしていません。
XFree86@LinuxLinux(x86)最近はテストしていません。
XFree86@LinuxSolaris9(UltraSPARC)最近はテストしていません。
XFree86@CygwinLinux(x86)最近はテストしていません。
ASTEC-X@WindowsXPLinux(x86)最近はテストしていません。
 

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)
2009 年 6 月
不具合修正、コンフリクト対策。(20090605_0, 20090624_0)
2009 年 10 月
不具合修正。(20091021_0)
2009 年 11 月
コンフリクト対策。(20091117_0, 20091123_0, 20091123_1)
2010 年 1 月
コンフリクト対策。(20100106_0)
2010 年 7 月
不具合修正、コンフリクト対策。(20100703_0, 20100705_3, 20100706_0, 20100708_0, 20100720_0, 20100720_1)
2011 年 1 月
struct emacs_globals 対策、コンフリクト対策。(20110119_0, 20110123_0)
2011 年 2 月
struct emacs_globals 対策、ハングアップ対策パッチの削除、最新のコードに対応。(20110210_0, 20110213_0, 20110215_0, 20110217_0)
2011 年 3 月
コンフリクト対策。(20110312_0)
2011 年 4 月
コンフリクト対策。(20110415_0, 20110417_0)
2011 年 6 月
コンフリクト対策。(20110611_0)
2011 年 8 月
23.3a に対応。(20110822_0)
2011 年 12 月
コンフリクト対策。(20111215_0)
2012 年 5 月
コンフリクト対策。(20120526_0)
2012 年 6 月
コンフリクト対策。(20120629_0)
2012 年 8 月
コンフリクト対策。(20120803_0, 20120806_0, 20120812_0, 20120820_0)
2012 年 9 月
コンフリクト対策、不具合修正。(20120906_0, 20120906_1, 20120916_0, 20120924_0, 20120926_0)
2012 年 12 月
コンフリクト対策。(20121216_0)
2013 年 3 月
コンフリクト対策。(20130327_0, 20130329_0)
2013 年 8 月
新 redisplay interface に対応、コンフリクト対策。(20130810_0, 20130829_0, 20130830_0)
2013 年 9 月
コンフリクト対策、不具合修正。(20130912_0, 20130916_0, 20130918_0, 20130919_0, 20130921_0)
2013 年 11 月
コンフリクト対策。(20131130_0)
2013 年 12 月
コンフリクト対策。(20131201_0, 20131202_0, 20131215_0)
2014 年 1 月
コンフリクト対策。(20140112_0)
2014 年 6 月
コンフリクト対策。(20140619_0, 20140623_0)
2014 年 7 月
コンフリクト対策。(20140728_0)

戻る