Showing posts with label Emacs. Show all posts
Showing posts with label Emacs. Show all posts

November 16, 2011

Rendering on Emacs stopped working on GNOME3

It happens after "suspending" from Emacs with C-z or evaluating (suspend-frame) or whatever.  though it still accepts inputs from the keyboard. and still works fine on KDE say. so the problem may be in GNOME perhaps.

If you are facing unfortunately, there are the way to be recovered from this situation; try C-x 5 2 to make an frame. you will get back the well-rendered window there and C-x 5 1 on new frame to get rid of the broken window. it saves you and your modified files.

To avoid this situation forever, I have decided to have an advice for suspend-frame in my .emacs as a workaround like this:

(defadvice suspend-frame (around my-suspend-frame () activate)
  (if (y-or-n-p "frame is gonna iconify ")
      ad-do-it))
Enjoy,

June 23, 2009

How to get flyspell-mode back to work

After upgrading to Fedora 11, flyspell-mode on emacs stopped working. it seems that this is a known bug. a workaround to get this back to work would be to install aspell again and write the following emacs lisp into your .emacs:

(setq inhibit-default-init t)
(setq ispell-program-name "aspell")

April 30, 2008

How to create fontset on Emacs

野首さんのこれに触発されて書いてみた。

Emacs上でfontsetを指定する場合二通りの方法がある。ひとつは.Xresourcesを使う方法。もうひとつはEmacs Lispで指定する方法。今回は後者を取り上げかつaliasも作ってみることにする。

Emacsにはfaceという概念があって、その中でボールドやイタリックなどの属性が管理されている。またそれぞれの場所で異なるfaceを使っているため、ツールバーのフォントを小さくしたいとか、modelineをboldにといった細かい指定などもこのfaceをいじることで可能である。これらのfaceの変更をするにはset-face-fontやset-face-background, set-face-foreground, set-face-underlineなどの特定の属性に特化した関数を呼ぶか、set-face-attributeで任意の属性を指定する。

set-default-fontでdefaultフォントを変更するのとset-face-fontでdefault faceのフォントを変更することの違いは、前者は現在選択されたframeにのみ反映されるということ。もちろんset-face-fontで特定のframeにのみ作用させることも可能だけど、通常はすべてのframeに適用される。frameを多用しない環境であれば、どちらでも問題ないけど、常に一定のフォントを使いたい場合はset-face-fontで変更した方が何かと不都合がなくていいと思う。

で、肝心なfontsetの作り方。これも何通りかの方法があってEmacs Lispっぽいやり方をするならnew-fontset、もうちょっと細かくXLFDを指定したいとかなら、create-fontset-from-fontset-specを使う。他にもcreate-fontset-from-ascii-fontとかcreate-fontset-from-x-resourceとかあるけど、こちらは使ったことないので分からん。

まあ詳細はHelpを見ていただくとして、各charsetごとに異なるフォント、異なるサイズを指定できるので、環境にあった見やすいフォントを選択することも可能。どんなcharsetが指定できるかについては、mule-diagを実行してSection 5およびSection 6を見れば分かるはず。

ということで以下サンプル。

(create-fontset-from-fontset-spec
"-default-gothic-medium-r-*--10-*-*-*-*-*-fontset-10,
ascii:-*-liberation mono-medium-r-*--10-*-*-*-*-*-iso8859-1,
katakana-jisx0201:-*-vl gothic-medium-r-*--10-*-*-*-*-*-jisx0201.1976-*,
japanese-jisx0208:-*-vl gothic-medium-r-*--10-*-*-*-*-*-jisx0208.1990-*,
...")

みたいな感じにして、ボールドとイタリックのfontsetも作っておく。あとは

(set-face-font 'default "-default-gothic-medium-r-*--10-*-*-*-*-*-fontset-10")
(set-face-font 'italic "-default-gothic-medium-i-*--10-*-*-*-*-*-fontset-10")
(set-face-font 'bold "-default-gothic-bold-r-*--10-*-*-*-*-*-fontset-10")
(set-face-font 'bold-italic "-default-gothic-bold-i-*--10-*-*-*-*-*-fontset-10")

としとけばいい。

January 8, 2008

mew-ical on Google Code

Google Codeに置いてみた。http://code.google.com/p/mew-ical/からどうぞ。

January 7, 2008

mew-ldap経由で名前の補完ができなくなった

mew-ldapを有効にしといて、draft modeでTABでアドレス補完の後、M-TABでFULL-NAME みたいな形式へ補完することができるが、最近動かなくなってたのを放置してたのをちょっと見てみた。
原因はM-TABがflyspellに食われてた、ことによるもので、flyspell側にすでに対策があった。

(setq flyspell-use-meta-tab nil)

で回避可能なようだ。

December 27, 2007

mew-ical.el

いくらかコードの整理と、送信者に対してメールで返信できるようにしてみた。

December 17, 2007

破壊的代入とcopy-sequence

何も知らずにこんなコードをEmacs Lisp上で書いた。便宜上サンプルコードとしてよりシンプルになってはいるけど。

(defun foo ()
(let ((bar '(a b c)))
(if (eq (car bar) 'a)
(prog2
(setcar bar 'e)
(foo)))
bar))

なんとなくbarには常に(a b c)が代入されて無限ループになりそうなもんだけど、最初の呼び出しも含めて実際にはfooは2回しか呼ばれない。これは'(a b c)が実行時に生成されるんではなくて、読み込み時に生成されるからなんだそうな。これを回避するにはlistやconsといった関数を呼び出せばいいようだ。ただこれらの書き換えが出来ない場合には、copy-sequenceやcopy-treeといった関数を使うことで手間を省くことが出来る。

勉強になった。

mew-ical.el

先日の続き。認証の有無を認識するようにして、必要ならパスワードの入力を求めるようにしてみた。それからMETHOD:REPLYな.icsファイルの場合には、リクエストに対する相手のステータスを表示するようにした。

ファイルは前回と同じ場所に置いた。

December 14, 2007

MewでiCalendar形式のファイルに対応させる

必要に迫られてMewでiCalendar形式のファイルが添付されてきた場合に、設定したカレンダーサーバに対して予定の登録および承認の可否をできるようにしてみた。現時点でできることは、

  • iCalendarの情報を(気持ち)分かりやすく表示する
  • 自分のカレンダーサーバへ登録する
  • ステータスの更新
  • Mewからカレンダーサーバへアクセスする
できないことは、

  • 承諾の可否を選択した後、要求者に対してメールで返信すること
  • 排他制御
  • カレンダーサーバに対する認証の有無の自動検出
  • ローカル時間で表示すること
  • その他多数
現状だととりあえず運用でいくらかカバーできるというレベル。動かすために必要なものは、

  • emacs
  • mew
  • browse-url
  • curl
  • iTIPをサポートしたカレンダーサーバ
ものはこちらからどうぞ。

July 26, 2007

diredでgを押さずにbufferを更新

若干誇張しすぎてる気もするけど、とりあえずgを押せと言われるシチュエーションに於いてgを押さずに勝手に更新してもらう方法。

(defadvice dired-noselect (after my-dired-noselect (dir-or-list &optional switches) activate)
(if (dired-directory-changed-p dir-or-list)
(with-current-buffer ad-return-value
(let ((pos (point))
(current-file (dired-get-filename)))
(revert-buffer)
(unless (dired-goto-file current-file)
(goto-char pos))
(message "Dired buffer `%s' has been updated." dir-or-list)))))

July 10, 2007

rieceからsshのトンネルを掘る

環境の都合上clientからIRC proxyまでの経路をsshでトンネルを掘っている。これを裏でshell scriptを使って接続していたんだけど、めんどいので、riece動かした時になんとかしてみようと思った。

というわけで以下結果。

(eval-after-load "riece"
'(progn
(defun irc-ssh-tunnel-negotiates-connection (process event)
(message "ssh tunnel established")
(set-process-filter process nil)
(setq irc-ssh-tunnel-negotiating nil))
(defun make-tunnel (irc-ssh-user irc-ssh-server)
(setq irc-ssh-tunnel-negotiating t)
(if (condition-case nil
(let* ((buf (generate-new-buffer " *irc-tunnel*"))
(process (open-network-stream
"irc-tunnel"
buf
"localhost"
16667)))
(delete-process process)
(kill-buffer buf)
nil)
(error t))
(progn
(setq process
(start-process "irc-ssh"
nil
"ssh"
(concat irc-ssh-user "@" irc-ssh-server) "-C"
"-L 16667:localhost:16667"))
(set-process-filter process 'irc-ssh-tunnel-negotiates-connection)
(while irc-ssh-tunnel-negotiating
(sit-for 0.1)))))
(add-hook 'riece-after-load-startup-hook
'(make-tunnel "user" "host"))))
16667でlistenしてるのがなければsshでport forwarding、繋がるまでラグがあるので、set-process-filterで何か飛んでくるのを待ってからhookから抜けるようにしてみた。

February 8, 2007

semanticのDBファイルを一ヶ所に集約させる

semanticと いうelispで書かれたparserがあるのだけれど、読み込んだソースコードを解析して、関数のプロトタイプとか構造体や型の定義なんかも出してくれ たりと便利なんだけど、解析結果のcacheとしてそのファイルのあったディレクトリの下にsemantic.cacheというファイルを作ってくれる。 ドットファイルではなく。もろ見えてるし、ソースコード管理下にあるファイルの場合浮いてしまうので精神衛生上あまりよろしくない。という理由で使うのを やめてたのだけど、よくよく見てみると実はこのファイル名を変えられるし、保存先も変えられた。ということで.emacsに

(setq semanticdb-default-save-directory "~/.semantic")
という一行を加えてみた。どのように区別されるのかというと、!path!to!top!of!working!directory!semantic.cacheみたいなファイルを作り、cacheがどれかを区別するようだ。

まあでも使ってみると、idle時にいろいろ裏でやっててCPU食いまくって使う気が失せるんだけどね。