unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#21112: 25; Patch: show minibuffer messages with a face
@ 2015-07-22 12:46 Raffaele Ricciardi
  2015-07-22 13:42 ` Drew Adams
  2016-02-23  9:34 ` Lars Ingebrigtsen
  0 siblings, 2 replies; 20+ messages in thread
From: Raffaele Ricciardi @ 2015-07-22 12:46 UTC (permalink / raw)
  To: 21112

[-- Attachment #1: Type: text/plain, Size: 248 bytes --]

Dear GNU Emacs maintainers,

this patch against the Git repository makes the minibuffer messages
appear with the same face as the minibuffer prompt, to make them more
visually distinguished from user input.

Thanks for your attention.
Best Regards

[-- Attachment #2: 0001-minibuffer.el-Make-minibuffer-message-use-minibuffer.patch --]
[-- Type: text/x-patch, Size: 974 bytes --]

From 37292a9cbe5ac7c19ee6ef273fca977105487b37 Mon Sep 17 00:00:00 2001
From: Raffaele Ricciardi <deleted@for.privacy>
Date: Mon, 20 Jul 2015 00:11:03 +0200
Subject: [PATCH] * minibuffer.el: Make 'minibuffer-message' use the
 'minibuffer-prompt' face.

---
 lisp/minibuffer.el | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 411416b..ac1b660 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -703,6 +703,7 @@ If ARGS are provided, then pass MESSAGE through `format'."
                       (copy-sequence message)
                     (concat " [" message "]")))
     (when args (setq message (apply 'format message args)))
+    (setq message (propertize message 'face 'minibuffer-prompt))
     (let ((ol (make-overlay (point-max) (point-max) nil t t))
           ;; A quit during sit-for normally only interrupts the sit-for,
           ;; but since minibuffer-message is used at the end of a command,
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2015-07-22 12:46 bug#21112: 25; Patch: show minibuffer messages with a face Raffaele Ricciardi
@ 2015-07-22 13:42 ` Drew Adams
  2015-07-22 13:44   ` Drew Adams
  2016-02-23  9:34 ` Lars Ingebrigtsen
  1 sibling, 1 reply; 20+ messages in thread
From: Drew Adams @ 2015-07-22 13:42 UTC (permalink / raw)
  To: Raffaele Ricciardi, 21112

> this patch against the Git repository makes the minibuffer messages
> appear with the same face as the minibuffer prompt, to make them
> more visually distinguished from user input.

FWIW, I hope this does not get applied in general.

Currently, *users* have control over the faces used in message
echoes.  It should remain that way.  It is trivial for user code
to control the output appearance now.  Let's not mess this up.

In fact, we should not even apply a face by default to the prompt.
That was a step backward (misguided), IMHO.  If a user (or library)
wants something different (other than customizing the prompt face,
which still gives the same appearance to the whole prompt), then
s?he now needs to fiddle.

Shouldn't be necessary.  We should have just left things
unhighlighted by default, letting users themselves (again,
trivially) propertize the prompt string any way they want.

Doing the kind of thing suggested by this enhancement request
does not add a feature.  It takes away a feature.  We already,
everyone, have the ability to propertize messages in any way
we like.  If you want them all to have face `minibuffer-prompt'
then you can accomplish that trivially - for your own use.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2015-07-22 13:42 ` Drew Adams
@ 2015-07-22 13:44   ` Drew Adams
  2015-07-22 15:27     ` Raffaele Ricciardi
  0 siblings, 1 reply; 20+ messages in thread
From: Drew Adams @ 2015-07-22 13:44 UTC (permalink / raw)
  To: Raffaele Ricciardi, 21112

I haven't looked at the patch, and I misread the request as applying
to `message' output, not `minibuffer-message'.  But I have the same
response in the latter case - leave it alone, so users can do with
it what they like.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2015-07-22 13:44   ` Drew Adams
@ 2015-07-22 15:27     ` Raffaele Ricciardi
  2015-07-22 15:42       ` Drew Adams
  0 siblings, 1 reply; 20+ messages in thread
From: Raffaele Ricciardi @ 2015-07-22 15:27 UTC (permalink / raw)
  To: Drew Adams, 21112

On 22/07/15 15:44, Drew Adams wrote:
> I haven't looked at the patch, and I misread the request as applying
> to `message' output, not `minibuffer-message'. But I have the same
> response in the latter case - leave it alone, so users can do with
> it what they like.

I understand what you mean and I agree when you say that the current
implementation is more flexible.  The problem that this patch tries to
solve is that -- as far as I can see -- all Emacs messages are
currently passed as plain strings, and thus appear in the same face as
user input, making it seem that Emacs is meddling with user input,
which is not the case.  Now, requiring callers to specify a face for
every single message would be burdensome, wouldn't it?  Maybe, could
we make `minibuffer-message' apply the `minibuffer-prompt' face only
if the message lacks its own faces?  Or maybe, could we split
`minibuffer-message' in two functions, one -- internal -- that applies
the `minibuffer-prompt' face and one that doesn't?  The same approach
could be applied to the minibuffer prompt, too.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2015-07-22 15:27     ` Raffaele Ricciardi
@ 2015-07-22 15:42       ` Drew Adams
  0 siblings, 0 replies; 20+ messages in thread
From: Drew Adams @ 2015-07-22 15:42 UTC (permalink / raw)
  To: Raffaele Ricciardi, 21112

> > I haven't looked at the patch, and I misread the request as
> applying
> > to `message' output, not `minibuffer-message'. But I have the same
> > response in the latter case - leave it alone, so users can do with
> > it what they like.
> 
> I understand what you mean and I agree when you say that the current
> implementation is more flexible.  The problem that this patch tries
> to
> solve is that -- as far as I can see -- all Emacs messages are
> currently passed as plain strings, and thus appear in the same face
> as
> user input, making it seem that Emacs is meddling with user input,
> which is not the case.  Now, requiring callers to specify a face for
> every single message would be burdensome, wouldn't it?  Maybe, could
> we make `minibuffer-message' apply the `minibuffer-prompt' face only
> if the message lacks its own faces?  Or maybe, could we split
> `minibuffer-message' in two functions, one -- internal -- that
> applies
> the `minibuffer-prompt' face and one that doesn't?  The same
> approach
> could be applied to the minibuffer prompt, too.

I hear you, but I would (still) say leave it alone.

It is not just that the string that might already have faces.
A user can have a standalone minibuffer with a default face, etc.

YAGNI - my 2 cents





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2015-07-22 12:46 bug#21112: 25; Patch: show minibuffer messages with a face Raffaele Ricciardi
  2015-07-22 13:42 ` Drew Adams
@ 2016-02-23  9:34 ` Lars Ingebrigtsen
  2019-06-25 15:50   ` Lars Ingebrigtsen
  1 sibling, 1 reply; 20+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-23  9:34 UTC (permalink / raw)
  To: Raffaele Ricciardi; +Cc: 21112

Raffaele Ricciardi <rfflrccrd@gmail.com> writes:

> Dear GNU Emacs maintainers,
>
> this patch against the Git repository makes the minibuffer messages
> appear with the same face as the minibuffer prompt, to make them more
> visually distinguished from user input.

[...]

>      (when args (setq message (apply 'format message args)))
> +    (setq message (propertize message 'face 'minibuffer-prompt))

I think it might be a good idea to use a different face for these
temporary messages, but you can currently do this:

(minibuffer-message (propertize "Foo" 'face 'bold))

And overwriting the specified face isn't a good idea.  But perhaps it
could apply a default face to the string if no face has already been
set?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2016-02-23  9:34 ` Lars Ingebrigtsen
@ 2019-06-25 15:50   ` Lars Ingebrigtsen
  2019-06-25 19:47     ` Juri Linkov
  0 siblings, 1 reply; 20+ messages in thread
From: Lars Ingebrigtsen @ 2019-06-25 15:50 UTC (permalink / raw)
  To: Raffaele Ricciardi; +Cc: 21112

Lars Ingebrigtsen <larsi@gnus.org> writes:

>>      (when args (setq message (apply 'format message args)))
>> +    (setq message (propertize message 'face 'minibuffer-prompt))
>
> I think it might be a good idea to use a different face for these
> temporary messages, but you can currently do this:
>
> (minibuffer-message (propertize "Foo" 'face 'bold))

So I don't think this is something that we want; closing the bug report.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-25 15:50   ` Lars Ingebrigtsen
@ 2019-06-25 19:47     ` Juri Linkov
  2019-06-25 20:43       ` Lars Ingebrigtsen
  2019-06-25 20:54       ` Drew Adams
  0 siblings, 2 replies; 20+ messages in thread
From: Juri Linkov @ 2019-06-25 19:47 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 21112, Raffaele Ricciardi

[-- Attachment #1: Type: text/plain, Size: 711 bytes --]

>>>      (when args (setq message (apply 'format message args)))
>>> +    (setq message (propertize message 'face 'minibuffer-prompt))
>>
>> I think it might be a good idea to use a different face for these
>> temporary messages, but you can currently do this:
>>
>> (minibuffer-message (propertize "Foo" 'face 'bold))
>
> So I don't think this is something that we want; closing the bug report.

For consistency with isearch messages that are highlighted with the
minibuffer-prompt face, minibuffer-message needs to do the same.

But since a message is displayed at different part of the minibuffer,
it should be highlighted using a new separate customizable variable
similar to minibuffer-prompt-properties:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: minibuffer-message-properties.patch --]
[-- Type: text/x-diff, Size: 2465 bytes --]

diff --git a/lisp/isearch.el b/lisp/isearch.el
index bb29c2914b..b527a210ac 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1996,7 +1996,7 @@ isearch--momentary-message
     (message "%s%s%s"
              (isearch-message-prefix nil isearch-nonincremental)
              isearch-message
-             (propertize (format " [%s]" string) 'face 'minibuffer-prompt)))
+             (apply #'propertize (format " [%s]" string) minibuffer-message-properties)))
   (sit-for 1))
 
 (isearch-define-mode-toggle lax-whitespace " " nil
@@ -3200,18 +3200,18 @@ isearch-message-prefix
 			(concat " [" current-input-method-title "]: "))
 		     ": ")
 		   )))
-    (propertize (concat (isearch-lazy-count-format)
+    (apply #'propertize (concat (isearch-lazy-count-format)
                         (upcase (substring m 0 1)) (substring m 1))
-		'face 'minibuffer-prompt)))
+	   minibuffer-message-properties)))
 
 (defun isearch-message-suffix (&optional c-q-hack)
-  (propertize (concat (if c-q-hack "^Q" "")
+  (apply #'propertize (concat (if c-q-hack "^Q" "")
 		      (isearch-lazy-count-format 'suffix)
 		      (if isearch-error
 			  (concat " [" isearch-error "]")
 			"")
 		      (or isearch-message-suffix-add ""))
-	      'face 'minibuffer-prompt))
+	 minibuffer-message-properties))
 
 (defun isearch-lazy-count-format (&optional suffix-p)
   "Format the current match number and the total number of matches.
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 57702760fb..5f3986697b 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -693,6 +693,9 @@ minibuffer
   :link '(custom-manual "(emacs)Minibuffer")
   :group 'environment)
 
+(defvar minibuffer-message-properties minibuffer-prompt-properties
+  "Text properties that are added to minibuffer messages.")
+
 (defun minibuffer-message (message &rest args)
   "Temporarily display MESSAGE at the end of the minibuffer.
 The text is displayed for `minibuffer-message-timeout' seconds,
@@ -714,6 +717,7 @@ minibuffer-message
                       (copy-sequence message)
                     (concat " [" message "]")))
     (when args (setq message (apply #'format-message message args)))
+    (setq message (apply #'propertize message minibuffer-message-properties))
     (let ((ol (make-overlay (point-max) (point-max) nil t t))
           ;; A quit during sit-for normally only interrupts the sit-for,
           ;; but since minibuffer-message is used at the end of a command,

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-25 19:47     ` Juri Linkov
@ 2019-06-25 20:43       ` Lars Ingebrigtsen
  2019-06-26 21:28         ` Juri Linkov
  2019-07-04 22:01         ` Juri Linkov
  2019-06-25 20:54       ` Drew Adams
  1 sibling, 2 replies; 20+ messages in thread
From: Lars Ingebrigtsen @ 2019-06-25 20:43 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 21112, Raffaele Ricciardi

Juri Linkov <juri@linkov.net> writes:

>>> I think it might be a good idea to use a different face for these
>>> temporary messages, but you can currently do this:
>>>
>>> (minibuffer-message (propertize "Foo" 'face 'bold))
>>
>> So I don't think this is something that we want; closing the bug report.
>
> For consistency with isearch messages that are highlighted with the
> minibuffer-prompt face, minibuffer-message needs to do the same.

[...]

> +    (setq message (apply #'propertize message minibuffer-message-properties))

But this will overwrite the face properties the caller has set, right?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-25 19:47     ` Juri Linkov
  2019-06-25 20:43       ` Lars Ingebrigtsen
@ 2019-06-25 20:54       ` Drew Adams
  2019-06-26 21:30         ` Juri Linkov
  1 sibling, 1 reply; 20+ messages in thread
From: Drew Adams @ 2019-06-25 20:54 UTC (permalink / raw)
  To: Juri Linkov, Lars Ingebrigtsen; +Cc: 21112, Raffaele Ricciardi

> For consistency with isearch messages that are highlighted with the
> minibuffer-prompt face, minibuffer-message needs to do the same.

Neither Isearch prompts nor `minibuffer-message' output
should be highlighted with face `minibuffer-prompt'.

Isearch doesn't use the minibuffer.
And `minibuffer-message' is not a prompt.

> But since a message is displayed at different part of the minibuffer,
> it should be highlighted using a new separate customizable variable
> similar to minibuffer-prompt-properties:

1. If you go that route, which lets libraries and
users easily change the properties (good), please
separate Isearch and `minibuffer-message'.  Use two
different variables.  They are not the same species.

The default value could be, but it need not be,
the same for both.

On the other hand, it could be helpful to separate
out property `face', defining an actual face (for
each of Isearch and `minibuffer-message') that
users can customize for this.  That also has the
benefit that one can inherit from one to the other.

The other properties would be applied first, so that
if `face' is among them for some reason it will be
overridden by the face provided specifically for this.

2. The doc string of `minibuffer-message-properties'
should not say that the properties are added to
"minibuffer messages" - that's too broad.  It should
say that they are added to the text shown by function
`minibuffer-message' - or else describe that text,
and only that text, in another way.

The doc string of the similar variable for Isearch
should say that the properties are added to "the
search prompt" or some such.  Not sure whether the
right description is "prompt", but whatever is the
best way to describe it should be used in the doc
string.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-25 20:43       ` Lars Ingebrigtsen
@ 2019-06-26 21:28         ` Juri Linkov
  2019-06-27 10:28           ` Lars Ingebrigtsen
  2019-07-04 22:01         ` Juri Linkov
  1 sibling, 1 reply; 20+ messages in thread
From: Juri Linkov @ 2019-06-26 21:28 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 21112, Raffaele Ricciardi

[-- Attachment #1: Type: text/plain, Size: 653 bytes --]

>>>> I think it might be a good idea to use a different face for these
>>>> temporary messages, but you can currently do this:
>>>>
>>>> (minibuffer-message (propertize "Foo" 'face 'bold))
>>>
>>> So I don't think this is something that we want; closing the bug report.
>>
>> For consistency with isearch messages that are highlighted with the
>> minibuffer-prompt face, minibuffer-message needs to do the same.
>
> [...]
>
>> +    (setq message (apply #'propertize message minibuffer-message-properties))
>
> But this will overwrite the face properties the caller has set, right?

This patch checks for existing face properties to not overwrite them:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: minibuffer-message-properties.3.patch --]
[-- Type: text/x-diff, Size: 757 bytes --]

diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 57702760fb..9a473b6867 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -714,6 +717,9 @@ minibuffer-message
                       (copy-sequence message)
                     (concat " [" message "]")))
     (when args (setq message (apply #'format-message message args)))
+    ;; If not already propertized:
+    (unless (or (text-properties-at 0 message) (next-property-change 0 message))
+      (setq message (apply #'propertize message minibuffer-message-properties)))
     (let ((ol (make-overlay (point-max) (point-max) nil t t))
           ;; A quit during sit-for normally only interrupts the sit-for,
           ;; but since minibuffer-message is used at the end of a command,

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-25 20:54       ` Drew Adams
@ 2019-06-26 21:30         ` Juri Linkov
  2019-06-26 22:13           ` Drew Adams
  0 siblings, 1 reply; 20+ messages in thread
From: Juri Linkov @ 2019-06-26 21:30 UTC (permalink / raw)
  To: Drew Adams; +Cc: Lars Ingebrigtsen, Raffaele Ricciardi, 21112

[-- Attachment #1: Type: text/plain, Size: 1745 bytes --]

>> But since a message is displayed at different part of the minibuffer,
>> it should be highlighted using a new separate customizable variable
>> similar to minibuffer-prompt-properties:
>
> 1. If you go that route, which lets libraries and
> users easily change the properties (good), please
> separate Isearch and `minibuffer-message'.  Use two
> different variables.  They are not the same species.
>
> The default value could be, but it need not be,
> the same for both.

OK, implemented in the following patch.

> On the other hand, it could be helpful to separate
> out property `face', defining an actual face (for
> each of Isearch and `minibuffer-message') that
> users can customize for this.  That also has the
> benefit that one can inherit from one to the other.
>
> The other properties would be applied first, so that
> if `face' is among them for some reason it will be
> overridden by the face provided specifically for this.

There are already too many faces in M-x list-faces-display
for users to comprehend that adding three more faces with
the same color would make matters worse.

> 2. The doc string of `minibuffer-message-properties'
> should not say that the properties are added to
> "minibuffer messages" - that's too broad.  It should
> say that they are added to the text shown by function
> `minibuffer-message' - or else describe that text,
> and only that text, in another way.

OK, fixed in the attached patch.

> The doc string of the similar variable for Isearch
> should say that the properties are added to "the
> search prompt" or some such.  Not sure whether the
> right description is "prompt", but whatever is the
> best way to describe it should be used in the doc
> string.

OK, added to this patch:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: minibuffer-message-properties.2.patch --]
[-- Type: text/x-diff, Size: 2366 bytes --]

diff --git a/lisp/isearch.el b/lisp/isearch.el
index f150a3bba4..94c30eb57b 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1992,13 +1992,17 @@ isearch-define-mode-toggle
   (setq isearch-regexp (not isearch-regexp))
   (if isearch-regexp (setq isearch-regexp-function nil)))
 
+(defvar isearch-message-properties minibuffer-prompt-properties
+  "Text properties that are added to the isearch prompt.")
+
 (defun isearch--momentary-message (string)
   "Print STRING at the end of the isearch prompt for 1 second"
   (let ((message-log-max nil))
     (message "%s%s%s"
              (isearch-message-prefix nil isearch-nonincremental)
              isearch-message
-             (propertize (format " [%s]" string) 'face 'minibuffer-prompt)))
+             (apply #'propertize (format " [%s]" string)
+                    isearch-message-properties)))
   (sit-for 1))
 
 (isearch-define-mode-toggle lax-whitespace " " nil
@@ -3202,18 +3206,18 @@ isearch-message-prefix
 			(concat " [" current-input-method-title "]: "))
 		     ": ")
 		   )))
-    (propertize (concat (isearch-lazy-count-format)
+    (apply #'propertize (concat (isearch-lazy-count-format)
                         (upcase (substring m 0 1)) (substring m 1))
-		'face 'minibuffer-prompt)))
+	   isearch-message-properties)))
 
 (defun isearch-message-suffix (&optional c-q-hack)
-  (propertize (concat (if c-q-hack "^Q" "")
+  (apply #'propertize (concat (if c-q-hack "^Q" "")
 		      (isearch-lazy-count-format 'suffix)
 		      (if isearch-error
 			  (concat " [" isearch-error "]")
 			"")
 		      (or isearch-message-suffix-add ""))
-	      'face 'minibuffer-prompt))
+	 isearch-message-properties))
 
 (defun isearch-lazy-count-format (&optional suffix-p)
   "Format the current match number and the total number of matches.
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 57702760fb..9a473b6867 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -693,6 +693,9 @@ minibuffer
   :link '(custom-manual "(emacs)Minibuffer")
   :group 'environment)
 
+(defvar minibuffer-message-properties minibuffer-prompt-properties
+  "Text properties added to the text shown by `minibuffer-message'.")
+
 (defun minibuffer-message (message &rest args)
   "Temporarily display MESSAGE at the end of the minibuffer.
 The text is displayed for `minibuffer-message-timeout' seconds,

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-26 21:30         ` Juri Linkov
@ 2019-06-26 22:13           ` Drew Adams
  0 siblings, 0 replies; 20+ messages in thread
From: Drew Adams @ 2019-06-26 22:13 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Lars Ingebrigtsen, Raffaele Ricciardi, 21112

> >> But since a message is displayed at different part of the minibuffer,
> >> it should be highlighted using a new separate customizable variable
> >> similar to minibuffer-prompt-properties:
> >
> > 1. If you go that route, which lets libraries and
> > users easily change the properties (good), please
> > separate Isearch and `minibuffer-message'.  Use two
> > different variables.  They are not the same species.
> >
> > The default value could be, but it need not be,
> > the same for both.
> 
> OK, implemented in the following patch.
> 
> > On the other hand, it could be helpful to separate
> > out property `face', defining an actual face (for
> > each of Isearch and `minibuffer-message') that
> > users can customize for this.  That also has the
> > benefit that one can inherit from one to the other.
> >
> > The other properties would be applied first, so that
> > if `face' is among them for some reason it will be
> > overridden by the face provided specifically for this.
> 
> There are already too many faces in M-x list-faces-display
> for users to comprehend that adding three more faces with
> the same color would make matters worse.

That's not a good argument for not adding faces.
Users and libraries can already create any
number of faces.

The solution for that problem, which is not
relevant here, is to give `list-faces-display'
a way to filter (e.g. on an input pattern).

Users deserve an easy way to have whatever
faces they want for such prompts/msgs, including
being able to inherit etc.  Let them, not you/us,
decide individually whether/when faces should
appear the same.

Easy to do.  No penalty.  But yes,
`list-faces-display', like `list-colors-display'
and some others, could benefit from incremental
filtering.

> > 2. The doc string of `minibuffer-message-properties'
> > should not say that the properties are added to
> > "minibuffer messages" - that's too broad.  It should
> > say that they are added to the text shown by function
> > `minibuffer-message' - or else describe that text,
> > and only that text, in another way.
> 
> OK, fixed in the attached patch.
> 
> > The doc string of the similar variable for Isearch
> > should say that the properties are added to "the
> > search prompt" or some such.  Not sure whether the
> > right description is "prompt", but whatever is the
> > best way to describe it should be used in the doc
> > string.
> 
> OK, added to this patch:

Haven't looked at the patch (no time now), but
I'm sure it's an improvement.  Thx.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-26 21:28         ` Juri Linkov
@ 2019-06-27 10:28           ` Lars Ingebrigtsen
  2019-06-27 14:22             ` Drew Adams
  2019-06-27 20:28             ` Juri Linkov
  0 siblings, 2 replies; 20+ messages in thread
From: Lars Ingebrigtsen @ 2019-06-27 10:28 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 21112, Raffaele Ricciardi

Juri Linkov <juri@linkov.net> writes:

> This patch checks for existing face properties to not overwrite them:

I'm not really convinced that there should be any face properties on the
minibuffer messages at all, though.  :-)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-27 10:28           ` Lars Ingebrigtsen
@ 2019-06-27 14:22             ` Drew Adams
  2019-06-27 20:29               ` Juri Linkov
  2019-06-27 20:28             ` Juri Linkov
  1 sibling, 1 reply; 20+ messages in thread
From: Drew Adams @ 2019-06-27 14:22 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Juri Linkov; +Cc: 21112, Raffaele Ricciardi

> I'm not really convinced that there should be any face properties on the
> minibuffer messages at all, though.  :-)

Yes, and a caller can always add whatever properties
it wants/needs.  It's not hard to pass a propertized
string to `minibuffer-message'.

At any rate, if we do provide for properties in some
way, it needs to be easy for a user or calling code
to control the properties.  It not kosher to hard-code
properties for such things.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-27 10:28           ` Lars Ingebrigtsen
  2019-06-27 14:22             ` Drew Adams
@ 2019-06-27 20:28             ` Juri Linkov
  2019-06-27 21:37               ` Drew Adams
  1 sibling, 1 reply; 20+ messages in thread
From: Juri Linkov @ 2019-06-27 20:28 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 21112, Raffaele Ricciardi

>> This patch checks for existing face properties to not overwrite them:
>
> I'm not really convinced that there should be any face properties on the
> minibuffer messages at all, though.  :-)

Without highlighting of minibuffer messages there is a danger that the
message will remain unnoticed, especially in the multiline minibuffer.

So minibuffer messages need to be highlighted for the same reason
why the minibuffer prompt is already highlighted:

1. to designate non-editable read-only parts of the minibuffer;

2. to help the users to turn attention to the active part
   of the minibuffer.

Thus all informational text in the minibuffer should be highlighted
consistently in one color to help not to miss important message.

Isn't it so already that elsewhere in Emacs font-lock is used
to highlight more important parts of the buffer?

PS: I already added configurability in the previous patch,
so now we are discussing the default value.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-27 14:22             ` Drew Adams
@ 2019-06-27 20:29               ` Juri Linkov
  2019-06-27 21:19                 ` Drew Adams
  0 siblings, 1 reply; 20+ messages in thread
From: Juri Linkov @ 2019-06-27 20:29 UTC (permalink / raw)
  To: Drew Adams; +Cc: Lars Ingebrigtsen, Raffaele Ricciardi, 21112

>> I'm not really convinced that there should be any face properties on the
>> minibuffer messages at all, though.  :-)
>
> Yes, and a caller can always add whatever properties
> it wants/needs.  It's not hard to pass a propertized
> string to `minibuffer-message'.

It makes no sense for a caller of a particular command
to decide whether to highlight the message or not.

It should be user's preference whether to highlight
all messages from all commands, or none at all.

If the user decided "I don't want caller's highlighting",
a caller should not have the right to override user's preference.

So we should not allow a caller to overwrite the default
face properties, and I retract that part of my previous patch.

This is a better patch that uses caller's properties
only when minibuffer-message-properties is nil:

diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 57702760fb..fa45616bf3 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -693,6 +693,9 @@ minibuffer
   :link '(custom-manual "(emacs)Minibuffer")
   :group 'environment)
 
+(defvar minibuffer-message-properties minibuffer-prompt-properties
+  "Text properties added to the text shown by `minibuffer-message'.")
+
 (defun minibuffer-message (message &rest args)
   "Temporarily display MESSAGE at the end of the minibuffer.
 The text is displayed for `minibuffer-message-timeout' seconds,
@@ -714,6 +717,8 @@ minibuffer-message
                       (copy-sequence message)
                     (concat " [" message "]")))
     (when args (setq message (apply #'format-message message args)))
+    (when minibuffer-message-properties
+      (setq message (apply #'propertize message minibuffer-message-properties)))
     (let ((ol (make-overlay (point-max) (point-max) nil t t))
           ;; A quit during sit-for normally only interrupts the sit-for,
           ;; but since minibuffer-message is used at the end of a command,






^ permalink raw reply related	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-27 20:29               ` Juri Linkov
@ 2019-06-27 21:19                 ` Drew Adams
  0 siblings, 0 replies; 20+ messages in thread
From: Drew Adams @ 2019-06-27 21:19 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Lars Ingebrigtsen, Raffaele Ricciardi, 21112

> >> I'm not really convinced that there should be any face properties on the
> >> minibuffer messages at all, though.  :-)
> >
> > Yes, and a caller can always add whatever properties
> > it wants/needs.  It's not hard to pass a propertized
> > string to `minibuffer-message'.
> 
> It makes no sense for a caller of a particular command
> to decide whether to highlight the message or not.

Why would you decide that for everyone?  Can't you
imagine that it might make sense for some calling
code to do that?

Who said "command"?  Why shouldn't some code that calls
`minibuffer-message' propertize parts of that message
any way its author sees fit?  The caller can choose the
text to display; why shouldn't it be able to choose how
to emphasize (or whatever) particular parts of it?

> It should be user's preference whether to highlight
> all messages from all commands, or none at all.

All or nothing, eh?  Why so limited?

In any case, a user should also be able to choose
to use some library or other code that highlights
some text displayed by `minibuffer-message' in a
way deemed appropriate (by that code and that user).

User choices are not limited to user options and
faces.

A one-size-fits-all outlook is not Emacsy.  It
"makes no sense" for Emacs design to do that.

Emacs typically gives users (including coders)
enough rope to hang themselves on - on purpose,
because it tries to be flexible and maximize
their possibilities.

> If the user decided "I don't want caller's highlighting",
> a caller should not have the right to override user's preference.

If a user decides to use code that does the
kind of highlighting s?he wants, s?he should
be able to do that.

Customize is not the only knob users have, to
express choices.  Among the most common ways
to express choice are choosing to turn on
particular modes and load particular libraries.

> So we should not allow a caller to overwrite the default
> face properties, and I retract that part of my previous patch.

Whatever.

Many users are also code writers.  Most code
writers are also users.  Give users the
ability to adapt and adopt whatever they want
to, however they want to.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-27 20:28             ` Juri Linkov
@ 2019-06-27 21:37               ` Drew Adams
  0 siblings, 0 replies; 20+ messages in thread
From: Drew Adams @ 2019-06-27 21:37 UTC (permalink / raw)
  To: Juri Linkov, Lars Ingebrigtsen; +Cc: 21112, Raffaele Ricciardi

> Without highlighting of minibuffer messages there is a danger that the
> message will remain unnoticed, especially in the multiline minibuffer.

Danger?  Really?

Some people don't like danger notices.
Some people don't like (what they call) "angry
fruit salad".  Some people don't like lots of
highlighting - or even any highlighting, e.g.
in something like Dired.  Some people even
turn off `font-lock-mode'.

(I'm not one of those people, but they exist.)

People are different.  Their use cases and
contexts of use are different.  One size does
not fit all.

> So minibuffer messages need to be highlighted for the same reason
> why the minibuffer prompt is already highlighted:


"Need to be"?  Neither of those things _needs_
to be highlighted.  Lots of us users will
appreciate that they can be highlighted.

We'll also appreciate being able to choose
how, how much, and whether they're highlighted.

> 1. to designate non-editable read-only parts of the minibuffer;
> 2. to help the users to turn attention to the active part
>    of the minibuffer.

I agree (personally and generally) with those
aids - helpful.  I don't agree about there
being "danger" if they are absent.

> Thus all informational text in the minibuffer should be highlighted
> consistently in one color to help not to miss important message.

"Thus"?  That doesn't follow, even if one accepts
your argument above.  Nothing in that argument
implies that ALL informational text in the
minibuffer should be highlighted CONSISTENTLY IN
ONE COLOR.

It's quite possible for important messages not to
be missed without such a paint-it-all-the-same
approach.  It's quite possible that some code
wants (and the users who choose to use that code
want) to emphasize certain parts of a message
specially - including precisely "to help not to
miss" something particularly noteworthy.

What is true in this regard of `message' is also
true of `minibuffer-message'.  Are you thinking
of imposing the same kind of blanket treatment
for `message'?  If not, why not?  Why doesn't
that apply also to `minibuffer-message'?

> Isn't it so already that elsewhere in Emacs font-lock is used
> to highlight more important parts of the buffer?

Font-lock does not impose a single face
("consistently in one color") for all its
highlighting, does it?  Why not?  Because it
can be useful to emphasize different things
differently...





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#21112: 25; Patch: show minibuffer messages with a face
  2019-06-25 20:43       ` Lars Ingebrigtsen
  2019-06-26 21:28         ` Juri Linkov
@ 2019-07-04 22:01         ` Juri Linkov
  1 sibling, 0 replies; 20+ messages in thread
From: Juri Linkov @ 2019-07-04 22:01 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 21112, Raffaele Ricciardi

tags 21112 - wontfix
fixed 21112 27.0.50
thanks

> But this will overwrite the face properties the caller has set, right?

I pushed to master the patch that doesn't overwrite the face properties
the caller has set, and doesn't set face properties on all minibuffer messages
(nil by default).





^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2019-07-04 22:01 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-22 12:46 bug#21112: 25; Patch: show minibuffer messages with a face Raffaele Ricciardi
2015-07-22 13:42 ` Drew Adams
2015-07-22 13:44   ` Drew Adams
2015-07-22 15:27     ` Raffaele Ricciardi
2015-07-22 15:42       ` Drew Adams
2016-02-23  9:34 ` Lars Ingebrigtsen
2019-06-25 15:50   ` Lars Ingebrigtsen
2019-06-25 19:47     ` Juri Linkov
2019-06-25 20:43       ` Lars Ingebrigtsen
2019-06-26 21:28         ` Juri Linkov
2019-06-27 10:28           ` Lars Ingebrigtsen
2019-06-27 14:22             ` Drew Adams
2019-06-27 20:29               ` Juri Linkov
2019-06-27 21:19                 ` Drew Adams
2019-06-27 20:28             ` Juri Linkov
2019-06-27 21:37               ` Drew Adams
2019-07-04 22:01         ` Juri Linkov
2019-06-25 20:54       ` Drew Adams
2019-06-26 21:30         ` Juri Linkov
2019-06-26 22:13           ` Drew Adams

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).