[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:05279] Re: テキストの一部を色付きにするには



山本さん、山元さん、みなさん、こんにちは。

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

Index Home