[xyzzy:05279] Re: テキストの一部を色付きにするには
- Subject: [xyzzy:05279] Re: テキストの一部を色付きにするには
- From: "Y.Nogami" <nogamiy@xxxxxxxxxxxxxxxxxxx>
- X-mailer: AL-Mail32 Version 1.11
山本さん、山元さん、みなさん、こんにちは。
Y.Nogami です。
>テキスト文章を書いていて、ある言葉に色をつけたいときには
>どうすればよいのでしょうか?
.............................
>おそらく、色をつけたいとおもう文字列は一度くらいしか出てこないです。
私もそういう形で テキストの一部に色を付けて表示したいと思って、
まさに、あれこれ悩んでいるところでした。
いろいろな文章を書くときに、まだ推敲が足りない部分や
気になってるところに一時的に色をつけておけるといいな、
と思ってたんです。
>へなちょこなのを作ってみました。
># Word みたいかどうか知りませんが。:)
>~/.xyzzy ファイルに書いて立ち上げ直して下さい。
>使い方はShiftを押しながらマウス右とか。
set-text-color という関数(?)を見つけたので、
一昨日 買ってきた Emacs-Lisp の本(Common-Lisp の本はなかった)と
にらめっこをしながら、下のようなコードを書いてみたのですが...
;;カーソル位置から任意の文字数分に色を付ける
;;色を付けたい文字数、文字の色番号、背景の色番号の順に指定
(defun marker-pen (length color bgcolor)
(interactive "nlength: \nncolor: \nnbgcolor: ")
(set-text-color (point) (+ (point) length) color bgcolor))
山本さんのほうが 断然、素晴らしいです。
さっそく、使わせていただきたいと思います。
それで実は、私が困っていたのは、色を付けた後のことなのです。
一時的に色を付けても、次にファイルを開いたときにその状態が残せないと
あまり意味がないと思い、初心者なりに つなたい策を立てました。
(defun color-list (filename)
(interactive "FOutput file name: ")
(let (colorlist attrib)
(setq colorlist (list-text-attributes))
(with-output-to-temp-buffer ("*color*")
(while colorlist
(setq attrib (car colorlist))
(setq attrib (cons 'set-text-attribute attrib))
(format t "~S~%" attrib)
(setq colorlist (cdr colorlist)))))
(set-buffer-file-name filename)
(set-buffer-modified-p t)
(save-buffer)
(kill-buffer "*color*"))
これで、foo.txt などの色の付いた状態を
任意のファイル(foo.col など)に保存することができるので、
次にファイルを開いたときに、M-x load-file で
foo.col を指定すると、色を再現することができると思います。
もっともっとエレガントな方法があるんでしょうけれど...
Lisp のことは まだ全然さっぱり わかっていないので、
いろいろ問題があるかもしれませんが、よろしければ お試しください。
----------------------------------------------
Y.Nogami : nogamiy@xxxxxxxxxxxxxxxxxxx