特定のブロックの背景色を変更しますか?


7

関数から最後まで、異なる背景色から始めたい。

このような:

ここに画像の説明を入力してください

関数や関数名などの一部の面から背景色を定義できることは承知していますfoobar。ただし、単語functionとの背景色にのみ影響しますfoobar。関数が開始する行全体の背景色を変更して終了したいと思います。

なぜですか?これにより、関数に属するパーツを簡単に識別できるようになります。

Emacsでこれを管理する実用的な方法があるのか​​、そのようなことを達成するためのLispパッケージがあるのでしょうか。


私の意見では、特定の領域を強調表示するのと同じように、顔とのオーバーレイが最も簡単です。色と優先度を選択できます。例として、関数isearch-highlightisearch-dehighlight
法学者、2015年

回答:


4
  1. ライブラリハイライトを使用して、オーバーレイまたはテキストプロパティ、特にpropertyを使用して領域を強調表示できますface。背景を強調表示するには、属性を使用して、顔使用backgroundではなくをforeground

    テキストプロパティを使用する場合face、一部のテキストからプロパティをコピーして、他のテキストに貼り付けることもできます。したがって、定義が変更されて大きくなった場合は、強調表示された部分の一部をコピーして、強調表示さfaceれていない部分にそのプロパティを貼り付けることができます。

    また、ライブラリで定義された関数を使用して、defunの強調表示を自動的に(たとえば、バッファ変更フックとして、または定期的にタイマーで)拡張して、変更を収容することもできます。

    オーバーレイを使用する場合は、ハイライト消去コマンド(などhlt-eraser)を使用して、ハイライトした最後の面のみを削除できます。強調表示を削除するテキストの上にマウスをドラッグします。

  2. 通常のフォントロックを使用できます。font-lock-keywords定義の開始と終了を認識する関数を使用するパターンを追加します。Elispマニュアルのノードキーワードのカスタマイズ、および親ノードのフォントロックモードとその他の子を参照してください。


コメント後の更新

おそらく、領域ではなく領域に触れた行を強調表示し、強調表示をテキストの終わりを超えて拡張する(空白文字を含む)ことについて質問していると思います。それですか?もしそうなら、これを試してください:

(defun hlt-highlight-lines (start end face msgp)
  "Highlight full lines in region, window-wide."
  (interactive (list (save-excursion (goto-char (region-beginning))
                                     (line-beginning-position))
                     (save-excursion (goto-char (region-end))
                                     (line-beginning-position 2))
                     nil
                     t))
  (hlt-highlight-region start end face msgp))

ドリュー、返信ありがとうございます。これらのアプリケーションを試したかったので、あなたの答えに返信するのに少し時間がかかりました。しかし、highlight私にとってライブラリはうまくいきませんでした。テキストが置かれている背景のみを適用します。テキストが終了すると、背景色で停止します。なにか提案を?
ReneFroger

1.多分あなたはテキストの終わりを越えて(空白文字を過ぎて含めて)ハイライトを拡張することについて尋ねていると思います。それですか?その場合は、上記で追加したコマンドを試してください。2.フォントロックの回答も試しましたか?それもうまくいくはずです。
2015

いずれにしても、その簡単なコマンドをに追加しましたhighlight.el。それがあなたを助けるなら、良いです。
2015

これは、強調したい最後の行の後に改行がある限り機能することに注意してください。
zck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.