>From 359a9c49a4e3031de64c51f2b0b6eff23a193c41 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Thu, 1 Mar 2012 12:13:55 +0800 Subject: [PATCH] Support fringe indicators in flymake --- lisp/progmodes/flymake.el | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 07393c69..432b318d 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -763,15 +763,39 @@ (defun flymake-overlay-p (ov) "Determine whether overlay OV was created by flymake." (and (overlayp ov) (overlay-get ov 'flymake-overlay))) -(defun flymake-make-overlay (beg end tooltip-text face mouse-face) +(defcustom flymake-error-bitmap 'question-mark + "Bitmap used in the fringe for indicating errors." + :group 'flymake + :type 'symbol) + +(defcustom flymake-warning-bitmap 'question-mark + "Bitmap used in the fringe for indicating warnings." + :group 'flymake + :type 'symbol) + +(defcustom flymake-fringe-indicator-position 'left-fringe + "The position to put flymake fringe indicator. +The value can be nil, left-fringe or right-fringe. +Fringe indicators are disabled if nil." + :group 'flymake + :type '(choice (const left-fringe) + (const right-fringe) + (const :tag "No fringe indicators" nil))) + +(defun flymake-make-overlay (beg end tooltip-text face bitmap mouse-face) "Allocate a flymake overlay in range BEG and END." (when (not (flymake-region-has-flymake-overlays beg end)) - (let ((ov (make-overlay beg end nil t t))) + (let ((ov (make-overlay beg end nil t t)) + (fringe (and flymake-fringe-indicator-position + (propertize "!" 'display + (list flymake-fringe-indicator-position + bitmap))))) (overlay-put ov 'face face) (overlay-put ov 'mouse-face mouse-face) (overlay-put ov 'help-echo tooltip-text) (overlay-put ov 'flymake-overlay t) (overlay-put ov 'priority 100) + (overlay-put ov 'before-string fringe) ;;+(flymake-log 3 "created overlay %s" ov) ov) (flymake-log 3 "created an overlay at (%d-%d)" beg end))) @@ -819,7 +843,8 @@ (defun flymake-highlight-line (line-no line-err-info-list) (beg line-beg) (end line-end) (tooltip-text (flymake-ler-text (nth 0 line-err-info-list))) - (face nil)) + (face nil) + (bitmap nil)) (goto-char line-beg) (while (looking-at "[ \t]") @@ -843,10 +868,12 @@ (defun flymake-highlight-line (line-no line-err-info-list) (setq end (point))) (if (> (flymake-get-line-err-count line-err-info-list "e") 0) - (setq face 'flymake-errline) - (setq face 'flymake-warnline)) + (setq face 'flymake-errline + bitmap flymake-error-bitmap) + (setq face 'flymake-warnline + bitmap flymake-warning-bitmap)) - (flymake-make-overlay beg end tooltip-text face nil))) + (flymake-make-overlay beg end tooltip-text face bitmap nil))) (defun flymake-parse-err-lines (err-info-list lines) "Parse err LINES, store info in ERR-INFO-LIST." -- 1.7.10