From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Adam Porter Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] tab-line-alternate-colors Date: Wed, 16 Dec 2020 04:26:02 -0600 Message-ID: <87zh2evyh1.fsf@alphapapa.net> References: <87360autpy.fsf@alphapapa.net> <87mtyiqfzv.fsf@mail.linkov.net> <87tusqt3yr.fsf@alphapapa.net> <87wnxl760u.fsf@mail.linkov.net> <87h7opt3a4.fsf@alphapapa.net> <87blewpwf5.fsf@mail.linkov.net> <878sa0u2hn.fsf@alphapapa.net> <87360847c8.fsf@mail.linkov.net> <878s9yxwjc.fsf@alphapapa.net> <87a6ueruko.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10577"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Dec 16 11:28:20 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kpU2e-0002ec-LT for ged-emacs-devel@m.gmane-mx.org; Wed, 16 Dec 2020 11:28:20 +0100 Original-Received: from localhost ([::1]:53768 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kpU2d-00052y-I6 for ged-emacs-devel@m.gmane-mx.org; Wed, 16 Dec 2020 05:28:19 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46740) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kpU0y-0003Ko-KU for emacs-devel@gnu.org; Wed, 16 Dec 2020 05:26:36 -0500 Original-Received: from ciao.gmane.io ([116.202.254.214]:59606) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kpU0w-0006wW-Pt for emacs-devel@gnu.org; Wed, 16 Dec 2020 05:26:36 -0500 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1kpU0r-0000Xa-3g for emacs-devel@gnu.org; Wed, 16 Dec 2020 11:26:29 +0100 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:260980 Archived-At: --=-=-= Content-Type: text/plain Juri Linkov writes: > Thanks, everything looks right. The only thing I'm unsure about is > the default value. I don't know how important is to highlight the > distinction between file and non-file buffers. But it's a matter of > taste, so I can't argue against or for a specific default value. I don't know how important it is, either. :) But I think it's very helpful for distinguishing buffers, especially in the smaller text of the tab-line. It seems to me that it does no harm, and it seems more useful than not, so it seems that it might as well be the default. > Ideally, the default value should reflect preferences of the most > users, but even the conducted surveys don't help, as the discussion > about the toolbar indicates. I don't think we should use design-by-committee for every option, even if we could. To a certain extent, users won't know what they want until they try it (cf. Ford's famous saying about asking his customers what they wanted). I think we should set the most useful defaults, and users can customize to their taste. That's my opinion, anyway. I'll adjust the patch according to whatever you or Eli think is best. Let me know. By the way, the attached patch tidies up a couple of things, including removing a FIXME that seems to be not a bug after all. Thanks for your help. --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-tab-line-New-faces-and-functions.patch Content-Description: patch >From df2b42fa06651d93267954aa9af6fb3cff90fb0f Mon Sep 17 00:00:00 2001 From: Adam Porter Date: Sun, 13 Dec 2020 05:54:28 +0000 Subject: [PATCH] tab-line: New faces and functions * lisp/tab-line.el: (tab-line-tab-face-function): New option. (tab-line-tab-face-functions): New option. (tab-line-tab-inactive-alternate): New face. (tab-line-tab-special): New face. (tab-line-tab-face-inactive-alternating): New function. (tab-line-tab-face-special): New function. (tab-line-format-template): Use new function. Thanks to Juri Linkov and Eli Zaretskii for their guidance. --- lisp/tab-line.el | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/lisp/tab-line.el b/lisp/tab-line.el index 46bf89f..c944471 100644 --- a/lisp/tab-line.el +++ b/lisp/tab-line.el @@ -27,6 +27,7 @@ ;;; Code: +(require 'cl-lib) (require 'seq) ; tab-line.el is not pre-loaded so it's safe to use it here @@ -35,6 +36,18 @@ tab-line :group 'convenience :version "27.1") +(defcustom tab-line-tab-face-functions '(tab-line-tab-face-special) + "Functions called to modify tab faces. +Each function is called with five arguments: the tab, a list of +all tabs, the face returned by the previously called modifier, +whether the tab is a buffer, and whether the tab is selected." + :type '(repeat + (choice (function-item tab-line-tab-face-special) + (function-item tab-line-tab-face-inactive-alternating) + (function :tag "Custom function"))) + :group 'tab-line + :version "28.1") + (defgroup tab-line-faces '((tab-line custom-face)) ; tab-line is defined in faces.el "Faces used in the tab line." :group 'tab-line @@ -63,6 +76,25 @@ tab-line-tab-inactive :version "27.1" :group 'tab-line-faces) +(defface tab-line-tab-inactive-alternate + `((t (:inherit tab-line-tab-inactive :background "grey65"))) + "Alternate face for inactive tab-line tabs. +Applied to alternating tabs when option +`tab-line-tab-face-functions' includes function +`tab-line-tab-face-inactive-alternating'." + :version "28.1" + :group 'tab-line-faces) + +(defface tab-line-tab-special + '((default (:weight bold)) + (((supports :slant italic)) + (:slant italic :weight normal))) + "Face for special (i.e. non-file-backed) tabs. +Applied when option `tab-line-tab-face-functions' includes +function `tab-line-tab-face-special'." + :version "28.1" + :group 'tab-line-faces) + (defface tab-line-tab-current '((default :inherit tab-line-tab) @@ -412,7 +444,14 @@ tab-line-format-template (cdr (assq 'selected tab)))) (name (if buffer-p (funcall tab-line-tab-name-function tab tabs) - (cdr (assq 'name tab))))) + (cdr (assq 'name tab)))) + (face (if selected-p + (if (eq (selected-window) (old-selected-window)) + 'tab-line-tab-current + 'tab-line-tab) + 'tab-line-tab-inactive))) + (dolist (fn tab-line-tab-face-functions) + (setf face (funcall fn tab tabs face buffer-p selected-p))) (concat separator (apply 'propertize @@ -425,11 +464,7 @@ tab-line-format-template `( tab ,tab ,@(if selected-p '(selected t)) - face ,(if selected-p - (if (eq (selected-window) (old-selected-window)) - 'tab-line-tab-current - 'tab-line-tab) - 'tab-line-tab-inactive) + face ,face mouse-face tab-line-highlight))))) tabs)) (hscroll-data (tab-line-auto-hscroll strings hscroll))) @@ -453,6 +488,24 @@ tab-line-format-template tab-line-new-button) (list tab-line-new-button))))) +(defun tab-line-tab-face-inactive-alternating (tab tabs face _buffer-p selected-p) + "Return FACE for TAB in TABS with alternation. +When TAB is an inactive buffer and is even-numbered, make FACE +inherit from `tab-line-tab-inactive-alternate'. For use in +`tab-line-tab-face-functions'." + (when (and (not selected-p) (cl-evenp (cl-position tab tabs))) + (setf face `(:inherit (tab-line-tab-inactive-alternate ,face)))) + face) + +(defun tab-line-tab-face-special (tab _tabs face buffer-p _selected-p) + "Return FACE for TAB according to whether it's special. +When TAB is a non-file-backed buffer, make FACE inherit from +`tab-line-tab-special'. For use in +`tab-line-tab-face-functions'." + (when (and buffer-p (not (buffer-file-name tab))) + (setf face `(:inherit (tab-line-tab-special ,face)))) + face) + (defvar tab-line-auto-hscroll) (defun tab-line-format () -- 2.7.4 --=-=-=--