8

\u2026切り捨てられた、または折り返された行を示す醜いピクセルの矢印を、シンプルで上品なテキスト (省略記号のような素敵な Unicode 文字でさえ) に置き換えたいと思います。これは可能ですか?

4

2 に答える 2

4

いいえそうではありません。フリンジの「ビットマップ」は実際にはビットマップであり、フリンジの上に重ねられた 0/1 ビットのベクトルです。任意の Unicode 文字をフリンジに直接レンダリングする方法はありません。

できることは、Unicode 文字を自分で 0/1 ビットマップにレンダリングすることです。適切な画像エディタ (Gimp、Photoshop、Pixelmator、Paint.net など) でこれを行うことができます。次に、このビットマップをフリンジ ビットマップ ベクトルに変換します。フリンジ ビットマップの形式については、フリンジ ビットマップのカスタマイズで説明されています。

最終的に、関数 を使用して、これらのビットマップ ベクトルを使用してleft-arrowright-arrow(切り捨てられた行の場合)、left-curly-arrow、およびright-curly-arrow(継続する行の場合) ビットマップを置き換えることができますdefine-fringe-bitmap

ただし、これは価値があるよりも面倒だと思います。フリンジの幅は 8 ピクセルなので、美しい Unicode 文字を 8x8 のビットマップに絞り込む必要があります。これは、サブピクセル レンダリング、エイリアシング、バイトコード レンダリングがないことを意味し、画面上の文字を美しく魅力的なものにするものは何もありません。あなたが交換した矢と同じくらい醜いでしょう。

于 2013-04-20T10:45:46.953 に答える
0

lunaryorn の答えは正しいですが、初心者の Emacs ユーザー (たとえば、私のようなプログラマー愛好家) にはおそらく手の届かないものです。

fringe-helper-convertNikolaj Schumacher が彼のライブラリ Fringe Helper ( https://github.com/nschum/fringe-helper.el ) に書いた関数は、私のような Emacs 愛好家が関数で使用されるベクトルを簡単に作成できるようにしますdefine-fringe-bitmap(これは、Emacs の C ソース コードで定義されています)。私はピルクロウを選びましたが、ユーザーはフィットするイメージを自由に作成できます。たとえば、大文字Xとピリオドを使用し.て、ユーザーは文字の形を作成できます。

;; AUTHOR:  Nikolaj Schumacher -- https://github.com/nschum/fringe-helper.el
(defun fringe-helper-convert (&rest strings)
"Convert STRINGS into a vector usable for `define-fringe-bitmap'.
Each string in STRINGS represents a line of the fringe bitmap.
Periods (.) are background-colored pixel; Xs are foreground-colored. The
fringe bitmap always is aligned to the right. If the fringe has half
width, only the left 4 pixels of an 8 pixel bitmap will be shown.
For example, the following code defines a diagonal line.
\(fringe-helper-convert
\"XX......\"
\"..XX....\"
\"....XX..\"
\"......XX\"\)"
  (unless (cdr strings)
  ;; only one string, probably with newlines
    (setq strings (split-string (car strings) "\n")))
  (apply 'vector
    (mapcar
      (lambda (str)
        (let ((num 0))
          (dolist (c (string-to-list str))
            (setq num (+ (* num 2) (if (eq c ?.) 0 1))))
          num))
      strings)))

frame-char-height次の例では、ビットマップ イメージがバッファ内のテキストと同じ高さになるように、 を 20 ピクセルと想定しています。let バインドされたスニペットは、行末 (スニペットが評価されるときにポイントがどこにある場合でも) の右フリンジにピルクロウ形状を作成します。この例では、右フリンジの幅が少なくとも 11 であると想定しています。たとえば、(add-to-list 'default-frame-alist '(right-fringe . 11)) 文字列に変換された Unicode シンボル(char-to-string ?\uE000)は、おそらく" ".

(define-fringe-bitmap 'pilcrow (fringe-helper-convert
  "......."
  "......."
  "......."
  "......."
  "......."
  ".XXXXXX"
  "XXXX.X."
  "XXXX.X."
  "XXXX.X."
  ".XXX.X."
  "...X.X."
  "...X.X."
  "...X.X."
  "...X.X."
  "...X.X."
  "...X.X."
  "......."
  "......."
  "......."
  "......."))

(let ((peol (point-at-eol)))
  (overlay-put (make-overlay peol peol) 'after-string
    (propertize (char-to-string ?\uE000) 'display
      '(right-fringe pilcrow font-lock-keyword-face))))
于 2015-03-22T17:05:16.827 に答える