2013-04-19 22 views
6

私は、切り詰められた行や折り返された行を示す醜いピクセルの矢印を、シンプルで上品なテキスト(おそらく\u2026省略記号のような素敵なユニコード文字)で置き換えたいと思っています。これは可能ですか?フリンジビットマップをEmacsのテキストに置き換えることは可能ですか?

+0

フリンジビットマップが設定されている 'fringe.el'を調べることができます。興味深い! –

答えて

2

いいえ、そうではありません。フリンジ "ビットマップ"は実際にビットマップで、フリンジの上にオーバーレイされた0/1ビットのベクトルです。フリンジに任意のユニコード文字を直接レンダリングする方法はありません。

できることは、ユニコード文字を自分で0/1ビットマップにレンダリングすることです。まともな画像エディタ(Gimp、Photoshop、Pixelmator、Paint.netなど)であれば、これを行うことができます。次に、このビットマップをフリンジビットマップベクトルに変換します。フリンジビットマップのフォーマットはCustomizing Fringe Bitmapsに記載されています。

結局、あなたは(切り捨てライン用)left-arrowright-arrowleft-curly-arrow、およびright-curly-arrow機能define-fringe-bitmapを使用してビットマップ、(継続的なラインのために)置き換えるために、これらのビットマップのベクトルを使用することができます。

しかし、これは価値があるよりも面倒です。フリンジの幅は8ピクセルなので、美しいユニコード文字を8×8ビットマップに絞り込む必要があります。これは、サブピクセルレンダリングも、エイリアシングも、バイトコードレンダリングも、スクリーン上の文字を素晴らしいものにするものがないことを意味します。あなたが置き換えた矢と同じくらい醜いでしょう。

+0

!それは多くの手間がかかりません、特にOPが省略記号を使用することを望んでいることが分かったと言われています。 2×2ピクセルのドットである8×8ビットマップで、3回繰り返され、1つの空白ピクセル(8ピクセル幅)で区切られます。私はデフォルトの矢印が醜い以上のものであることをOPに同意します。左矢印のビットマップを変更するか、独自のビットマップを追加するかはわかりますか? – TacticalCoder

+0

@TacticalCoderフリンジビットマップは、[私がFlycheckで行った](https://github.com/lunaryorn/flycheck/blob/09a814a4a153e6be0571b5c270d0b46d7fe866e9/flycheck.el#L1821)のように 'define-fringe-bitmap'を呼び出すだけで再定義することができます)。そして、私を信じて、フリンジビットマップ*は面倒です。そこに行って、それをしてください。そしてここには利益がありません。あなたは8×8白黒ビットマップ上で偉大な芸術を行うことはできません、そして、2×2楕円はデフォルトの矢印よりも賢くはありません。これらのビットマップは非常に限定されているため、これらの矢印は醜いです。 – lunaryorn

+0

フライチェックでやったことを見てみましょう。私はそれを試してみましょうので、あまりにも悪くない8×8ピクセルで "ピクセルアート"を見たことがあります。 ) – TacticalCoder

0

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

機能彼のライブラリフリンジヘルパーにニコライ・シューマッハが書いfringe-helper-convertからhttps://github.com/nschum/fringe-helper.elは - 私のようなEmacsの愛好家は、Cソースで定義されている機能define-fringe-bitmap(で使用されているベクトルを作成することが容易になりますEmacsのコード)。私はピクロウを選択しましたが、ユーザーは大文字の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))) 

次の例では、20個のピクセルのframe-char-heightを想定しています。レット・バウンド・スニペットは、ラインの最後の右裾にピルクロウ・シェイプを作成します(スニペットが評価された時点)。この例では、右フリンジの幅が少なくとも11であることが前提です。たとえば、(add-to-list 'default-frame-alist '(right-fringe . 11))文字列に変換されたユニコード記号-(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)))) 
関連する問題