From: Julien Danjou <julien@danjou.info>
To: Chong Yidong <cyd@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Inclusion of naquadah-theme
Date: Tue, 26 Jun 2012 12:48:16 +0200 [thread overview]
Message-ID: <87k3yujqmn.fsf@zelenka.enovance.com> (raw)
In-Reply-To: 87bok7zekq.fsf@gnu.org
[-- Attachment #1.1: Type: text/plain, Size: 628 bytes --]
On Mon, Jun 25 2012, Chong Yidong wrote:
> Please have a better description in the first line than "A color theme",
> since this serves as the accompanying text in the M-x customize-themes
> buffer. Likewise the docstring to deftheme, which is shown with the
> describe-theme command.
Sure, I fixed this two. But it's kinda hard to describe a theme
actually. :)
> Do not set ansi-term-color-vector directly with setq. If you find the
> need to customize it, please fix it right: submit a patch to term.el
> that converts this to a defcustom, then use custom-theme-set-variables.
What do you think of the following patch?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-term-use-faces-for-color-handling.patch --]
[-- Type: text/x-diff, Size: 8319 bytes --]
From 15acb6ecb90cca322109344521379d843ce53c15 Mon Sep 17 00:00:00 2001
From: Julien Danjou <julien@danjou.info>
Date: Tue, 26 Jun 2012 12:39:41 +0200
Subject: [PATCH] term: use faces for color handling
Signed-off-by: Julien Danjou <julien@danjou.info>
---
lisp/ChangeLog | 5 +++
lisp/term.el | 135 +++++++++++++++++++++++++++++++-------------------------
2 files changed, 81 insertions(+), 59 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 69fee94..9680fb3 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2012-06-26 Julien Danjou <julien@danjou.info>
+
+ * term.el (term-handle-colors-array): Use a set of new faces to
+ color the terminal. Also uses :inverse-video property.
+
2012-06-26 Martin Rudalics <rudalics@gmx.at>
* calendar/calendar.el (calendar-exit): Don't try to delete or
diff --git a/lisp/term.el b/lisp/term.el
index 7461d74..d11fd57 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -108,11 +108,6 @@
;;
;; Blink, is not supported. Currently it's mapped as bold.
;;
-;; Important caveat:
-;; -----------------
-;; if you want custom colors in term.el redefine term-default-fg-color
-;; and term-default-bg-color BEFORE loading it.
-;;
;; ----------------------------------------
;;
;; If you'd like to check out my complete configuration, you can download
@@ -459,7 +454,7 @@ state 4: term-terminal-parameter contains pending output.")
"A queue of strings whose echo we want suppressed.")
(defvar term-terminal-parameter)
(defvar term-terminal-previous-parameter)
-(defvar term-current-face 'default)
+(defvar term-current-face 'term-face)
(defvar term-scroll-start 0 "Top-most line (inclusive) of scrolling region.")
(defvar term-scroll-end) ; Number of line (zero-based) after scrolling region.
(defvar term-pager-count nil
@@ -796,27 +791,71 @@ Buffer local variable.")
(defvar term-terminal-previous-parameter-4 -1)
;;; faces -mm
+(defvar ansi-term-color-vector
+ [term-face
+ term-color-black
+ term-color-red
+ term-color-green
+ term-color-yellow
+ term-color-blue
+ term-color-magenta
+ term-color-cyan
+ term-color-white])
+
+(defface term-face
+ '((t :inherit default))
+ "Default face to use in term."
+ :group 'term)
-(defcustom term-default-fg-color
- ;; FIXME: This depends on the current frame, so depending on when
- ;; it's loaded, the result may be different.
- (face-foreground term-current-face)
- "Default color for foreground in `term'."
- :group 'term
- :type 'string)
+(defface term-bold
+ '((t :bold t))
+ "Default face to use for bold text."
+ :group 'term)
-(defcustom term-default-bg-color
- ;; FIXME: This depends on the current frame, so depending on when
- ;; it's loaded, the result may be different.
- (face-background term-current-face)
- "Default color for background in `term'."
- :group 'term
- :type 'string)
+(defface term-underline
+ '((t :underline t))
+ "Default face to use for underlined text."
+ :group 'term)
-;; Use the same colors that xterm uses, see `xterm-standard-colors'.
-(defvar ansi-term-color-vector
- [unspecified "black" "red3" "green3" "yellow3" "blue2"
- "magenta3" "cyan3" "white"])
+(defface term-color-black
+ '((t :foreground "black" :background "black"))
+ "Face used to render black color code."
+ :group 'term)
+
+(defface term-color-red
+ '((t :foreground "red3" :background "red3"))
+ "Face used to render red color code."
+ :group 'term)
+
+(defface term-color-green
+ '((t :foreground "green3" :background "green3"))
+ "Face used to render green color code."
+ :group 'term)
+
+(defface term-color-yellow
+ '((t :foreground "yellow3" :background "yellow3"))
+ "Face used to render yellow color code."
+ :group 'term)
+
+(defface term-color-blue
+ '((t :foreground "blue2" :background "blue2"))
+ "Face used to render blue color code."
+ :group 'term)
+
+(defface term-color-magenta
+ '((t :foreground "magenta3" :background "magenta3"))
+ "Face used to render magenta color code."
+ :group 'term)
+
+(defface term-color-cyan
+ '((t :foreground "cyan3" :background "cyan3"))
+ "Face used to render cyan color code."
+ :group 'term)
+
+(defface term-color-white
+ '((t :foreground "white" :background "white"))
+ "Face used to render white color code."
+ :group 'term)
;; Inspiration came from comint.el -mm
(defcustom term-buffer-maximum-size 2048
@@ -951,11 +990,7 @@ is buffer-local."
dt))
(defun term-ansi-reset ()
- (setq term-current-face (nconc
- (if term-default-bg-color
- (list :background term-default-bg-color))
- (if term-default-fg-color
- (list :foreground term-default-fg-color))))
+ (setq term-current-face 'term-face)
(setq term-ansi-current-underline nil)
(setq term-ansi-current-bold nil)
(setq term-ansi-current-reverse nil)
@@ -3088,10 +3123,6 @@ See `term-prompt-regexp'."
;; New function to deal with ansi colorized output, as you can see you can
;; have any bold/underline/fg/bg/reverse combination. -mm
-(defvar term-bold-attribute '(:weight bold)
- "Attribute to use for the bold terminal attribute.
-Set it to nil to disable bold.")
-
(defun term-handle-colors-array (parameter)
(cond
@@ -3153,46 +3184,32 @@ Set it to nil to disable bold.")
;; term-ansi-current-color
;; term-ansi-current-bg-color)
-
(unless term-ansi-face-already-done
(if term-ansi-current-invisible
(let ((color
(if term-ansi-current-reverse
- (if (= term-ansi-current-color 0)
- term-default-fg-color
- (elt ansi-term-color-vector term-ansi-current-color))
- (if (= term-ansi-current-bg-color 0)
- term-default-bg-color
- (elt ansi-term-color-vector term-ansi-current-bg-color)))))
+ (face-foreground
+ (elt ansi-term-color-vector term-ansi-current-color))
+ (face-background
+ (elt ansi-term-color-vector term-ansi-current-bg-color)))))
(setq term-current-face
(list :background color
:foreground color))
) ;; No need to bother with anything else if it's invisible.
-
(setq term-current-face
- (if term-ansi-current-reverse
- (if (= term-ansi-current-color 0)
- (list :background term-default-fg-color
- :foreground term-default-bg-color)
- (list :background
- (elt ansi-term-color-vector term-ansi-current-color)
- :foreground
- (elt ansi-term-color-vector term-ansi-current-bg-color)))
-
- (if (= term-ansi-current-color 0)
- (list :foreground term-default-fg-color
- :background term-default-bg-color)
- (list :foreground
- (elt ansi-term-color-vector term-ansi-current-color)
- :background
- (elt ansi-term-color-vector term-ansi-current-bg-color)))))
+ (list :foreground
+ (face-foreground (elt ansi-term-color-vector term-ansi-current-color))
+ :background
+ (face-background (elt ansi-term-color-vector term-ansi-current-bg-color))
+ :inverse-video term-ansi-current-reverse))
(when term-ansi-current-bold
(setq term-current-face
- (append term-bold-attribute term-current-face)))
+ (list* term-current-face :inherit 'term-bold)))
+
(when term-ansi-current-underline
(setq term-current-face
- (list* :underline t term-current-face)))))
+ (list* term-current-face :inherit 'term-underline)))))
;; (message "Debug %S" term-current-face)
;; FIXME: shouldn't we set term-ansi-face-already-done to t here? --Stef
--
1.7.10
[-- Attachment #1.3: Type: text/plain, Size: 1150 bytes --]
> Having defuns in a theme file is obnoxious. Could you explain what
> these functions are needed for? If there is missing functionality, we
> should incorporate that directly into Emacs; they should not be
> naquadah-specific.
It's a system we built to define faces with symbols and then expand into
a real color value, depending on the terminal capability. This allows to
define a face once with generic color and expand it:
(naquadah-simple-face-to-multiple
'(default (:background background :foreground aluminium-1))))
=> (default
((((class color)
(min-colors 65535))
(:background "#252A2B" :foreground "#eeeeec"))
(((class color)
(min-colors 256))
(:background "color-234" :foreground "color-255"))
(((class color)
(min-colors 88))
(:background "color-80" :foreground "color-87"))
(t
(:background "black" :foreground "white"))))
This way we just have to define the color "aluminium-1" to be a
different color depending on the numbre of color available, and then
define the font. The rest is expanded by this function.
--
Julien
[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]
next prev parent reply other threads:[~2012-06-26 10:48 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-25 10:13 Inclusion of naquadah-theme Julien Danjou
2012-06-25 13:49 ` Chong Yidong
2012-06-26 10:48 ` Julien Danjou [this message]
2012-06-28 7:36 ` Chong Yidong
2012-06-28 10:42 ` Julien Danjou
2012-06-30 2:15 ` Chong Yidong
2012-07-02 21:02 ` Julien Danjou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k3yujqmn.fsf@zelenka.enovance.com \
--to=julien@danjou.info \
--cc=cyd@gnu.org \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.