;; if the rest of the region should have a face, put it there
(funcall ansi-color-apply-face-function
start-marker end-marker (ansi-color--find-face codes))
- (setq ansi-color-context-region (if codes (list codes)))))))
+ (setq ansi-color-context-region (if codes (list codes)))))
+ ;; Clean up our temporary markers.
+ (unless (eq start-marker (cadr ansi-color-context-region))
+ (set-marker start-marker nil))
+ (set-marker end-marker nil)))
(defun ansi-color-apply-overlay-face (beg end face)
"Make an overlay from BEG to END, and apply face FACE.
(ansi-color-make-extent beg end)
face)))
+(defun ansi-color-apply-text-property-face (beg end face)
+ "Set the `font-lock-face' property to FACE in region BEG..END.
+If FACE is nil, do nothing."
+ (when face
+ (put-text-property beg end 'font-lock-face face)))
+
;; This function helps you look for overlapping overlays. This is
;; useful in comint-buffers. Overlapping overlays should not happen!
;; A possible cause for bugs are the markers. If you create an overlay
'eshell-handle-control-codes)
(autoload 'ansi-color-apply-on-region "ansi-color")
+(defvar ansi-color-apply-face-function)
(defun eshell-handle-ansi-color ()
"Handle ANSI color codes."
- (ansi-color-apply-on-region eshell-last-output-start
- eshell-last-output-end))
+ (let ((ansi-color-apply-face-function #'ansi-color-apply-text-property-face))
+ (ansi-color-apply-on-region eshell-last-output-start
+ eshell-last-output-end)))
(custom-add-option 'eshell-output-filter-functions
'eshell-handle-ansi-color)
(interactive)
(goto-char (point-min))
;; Fontify ANSI escapes.
- (let ((ansi-color-apply-face-function
- (lambda (beg end face)
- (when face
- (put-text-property beg end 'face face))))
+ (let ((ansi-color-apply-face-function #'ansi-color-apply-text-property-face)
(ansi-color-map Man-ansi-color-map))
(ansi-color-apply-on-region (point-min) (point-max)))
;; Other highlighting.
(goto-char (point-min))
(while (and (search-forward "__\b\b" nil t) (not (eobp)))
(backward-delete-char 4)
- (put-text-property (point) (1+ (point)) 'face 'Man-underline))
+ (put-text-property (point) (1+ (point))
+ 'font-lock-face 'Man-underline))
(goto-char (point-min))
(while (search-forward "\b\b__" nil t)
(backward-delete-char 4)
- (put-text-property (1- (point)) (point) 'face 'Man-underline))))
+ (put-text-property (1- (point)) (point)
+ 'font-lock-face 'Man-underline))))
(goto-char (point-min))
(while (and (search-forward "_\b" nil t) (not (eobp)))
(backward-delete-char 2)
- (put-text-property (point) (1+ (point)) 'face 'Man-underline))
+ (put-text-property (point) (1+ (point)) 'font-lock-face 'Man-underline))
(goto-char (point-min))
(while (search-forward "\b_" nil t)
(backward-delete-char 2)
- (put-text-property (1- (point)) (point) 'face 'Man-underline))
+ (put-text-property (1- (point)) (point) 'font-lock-face 'Man-underline))
(goto-char (point-min))
(while (re-search-forward "\\(.\\)\\(\b+\\1\\)+" nil t)
(replace-match "\\1")
- (put-text-property (1- (point)) (point) 'face 'Man-overstrike))
+ (put-text-property (1- (point)) (point) 'font-lock-face 'Man-overstrike))
(goto-char (point-min))
(while (re-search-forward "o\b\\+\\|\\+\bo" nil t)
(replace-match "o")
- (put-text-property (1- (point)) (point) 'face 'bold))
+ (put-text-property (1- (point)) (point) 'font-lock-face 'bold))
(goto-char (point-min))
(while (re-search-forward "[-|]\\(\b[-|]\\)+" nil t)
(replace-match "+")
- (put-text-property (1- (point)) (point) 'face 'bold))
+ (put-text-property (1- (point)) (point) 'font-lock-face 'bold))
;; When the header is longer than the manpage name, groff tries to
;; condense it to a shorter line interspersed with ^H. Remove ^H with
;; their preceding chars (but don't put Man-overstrike). (Bug#5566)
(while (re-search-forward Man-heading-regexp nil t)
(put-text-property (match-beginning 0)
(match-end 0)
- 'face 'Man-overstrike))))
+ 'font-lock-face 'Man-overstrike))))
(defun Man-highlight-references (&optional xref-man-type)
"Highlight the references on mouse-over.