unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Fontification of the interactive prompt string?
@ 2015-06-05 21:44 Marcin Borkowski
  2015-06-05 22:12 ` Tassilo Horn
  2015-06-05 22:34 ` Drew Adams
  0 siblings, 2 replies; 3+ messages in thread
From: Marcin Borkowski @ 2015-06-05 21:44 UTC (permalink / raw)
  To: Help Gnu Emacs mailing list

Hi all,

I have an (interactive "cprompt\n") call, and I'd like the prompt to
list possible characters (they define a few options for my function, and
I have good reasons to implement it this way and not with C-u etc.)  I'd
like to have the relevant characters highlighted, like in:

"file: _n_ew, _o_pen, _c_lose"

where the underscores mean that something is e.g. in a different color.

Is it possible?  Bonus points if instead of colors the relevant letter
might be e.g. put in brackets on terminals not supporting colors.

TIA,

-- 
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Faculty of Mathematics and Computer Science
Adam Mickiewicz University



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

* Re: Fontification of the interactive prompt string?
  2015-06-05 21:44 Fontification of the interactive prompt string? Marcin Borkowski
@ 2015-06-05 22:12 ` Tassilo Horn
  2015-06-05 22:34 ` Drew Adams
  1 sibling, 0 replies; 3+ messages in thread
From: Tassilo Horn @ 2015-06-05 22:12 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: Help Gnu Emacs mailing list

Marcin Borkowski <mbork@mbork.pl> writes:

Hi Marcin,

> I have an (interactive "cprompt\n") call, and I'd like the prompt to
> list possible characters (they define a few options for my function,
> and I have good reasons to implement it this way and not with C-u
> etc.)  I'd like to have the relevant characters highlighted, like in:
>
> "file: _n_ew, _o_pen, _c_lose"
>
> where the underscores mean that something is e.g. in a different
> color.
>
> Is it possible?

The `interactive' argument may also be a form which reads the arguments
as it sees fit.

,----[ (info "(elisp)Using Interactive") ]
|    • It may be a Lisp expression that is not a string; then it should be
|      a form that is evaluated to get a list of arguments to pass to the
|      command.  Usually this form will call various functions to read
|      input from the user, most often through the minibuffer (*note
|      Minibuffers::) or directly from the keyboard (*note Reading
|      Input::).
`----

> Bonus points if instead of colors the relevant letter might be
> e.g. put in brackets on terminals not supporting colors.

I don't know but I would refrain from trying to test terminal
capabilities from elisp and then act differently.

Bye,
Tassilo



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

* RE: Fontification of the interactive prompt string?
  2015-06-05 21:44 Fontification of the interactive prompt string? Marcin Borkowski
  2015-06-05 22:12 ` Tassilo Horn
@ 2015-06-05 22:34 ` Drew Adams
  1 sibling, 0 replies; 3+ messages in thread
From: Drew Adams @ 2015-06-05 22:34 UTC (permalink / raw)
  To: Marcin Borkowski, Help Gnu Emacs mailing list

> I have an (interactive "cprompt\n") call, and I'd like the prompt to
> list possible characters (they define a few options for my function,
> and I have good reasons to implement it this way and not with C-u etc.)
> I'd like to have the relevant characters highlighted, like in:
> "file: _n_ew, _o_pen, _c_lose" where the underscores mean that
> something is e.g. in a different color.
> 
> Is it possible?

Yes.

The value of variable `minibuffer-prompt-properties' is applied to
the prompt.  And by default the value is this, which applies a face:
`(read-only t face minibuffer-prompt)'.

So you will want to bind that variable to a value that does not
have any entry for property `face' - e.g., to just `(read-only t)'.

Then you can use whatever propertized prompt string you like.

Here is something quick-&-dirty, to give you an idea what I mean:

;; Substitute for `completing-read'.  It just binds
;; `minibuffer-prompt-properties', to stop it from imposing its
;; single default face.
;;
(defun my-compl-read (prompt collection &optional predicate
                             require-match initial-input hist def
                             inherit-input-method)
  (let ((minibuffer-prompt-properties  '(read-only t)))
    (completing-read prompt collection predicate require-match
                     initial-input hist def inherit-input-method)))

(defun my-prompt (string.face-alist)
  (apply #'concat (mapcar (lambda (s.f)
                            (if (cdr s.f)
                                (propertize (car s.f) 'face (cdr s.f))
                              (car s.f)))
                          string.face-alist)))

(my-compl-read (my-prompt '(("Plain and ")
                            ("highlighted " . font-lock-comment-face)
                            ("text ")
                            ("IS " . font-lock-keyword-face)
                            ("possible: ")))
                          '(a b c d e))

Obviously, you can construct the prompt string in other ways.

And instead of defining a function like `my-compl-read' you could
use variable `completing-read-function' or advise `completing-read'.




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

end of thread, other threads:[~2015-06-05 22:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-05 21:44 Fontification of the interactive prompt string? Marcin Borkowski
2015-06-05 22:12 ` Tassilo Horn
2015-06-05 22:34 ` Drew Adams

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).