* Distinguish inactive windows @ 2011-06-24 0:52 Joe Riel 2011-06-24 2:45 ` Alp Aker 2011-06-24 2:51 ` Alp Aker 0 siblings, 2 replies; 6+ messages in thread From: Joe Riel @ 2011-06-24 0:52 UTC (permalink / raw) To: help-gnu-emacs I'm creating an application where focus is in a particular Emacs frame, call it the control panel. Events in the control panel affect a selected window in a separate frame. How can the selected window be visually distinguished from the other windows in its frame? I'd like to, say, set mode-line background of the selected window to a particular color. Using (set-face-background 'mode-line-inactive "yellow") doesn't work because that changes the mode-line of all inactive windows, not just the one desired. Similarly, setting mode-line doesn't work because the active window is in the control panel, not the one that is being changed. -- Joe Riel ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Distinguish inactive windows 2011-06-24 0:52 Distinguish inactive windows Joe Riel @ 2011-06-24 2:45 ` Alp Aker 2011-06-25 4:47 ` Joe Riel 2011-06-24 2:51 ` Alp Aker 1 sibling, 1 reply; 6+ messages in thread From: Alp Aker @ 2011-06-24 2:45 UTC (permalink / raw) To: help-gnu-emacs > How can the selected window be visually distinguished from the other > windows in its frame? I'd like to, say, set mode-line background of the > selected window to a particular color. Is specifically a unique *window* whose mode-line you want to distinguish, or would it suffice to change the mode-line for all windows displaying a particular *buffer*? If the former, you're out of luck; there's no way (that I'm aware of) to do it. If the latter, you can use the variable `mode-line-format', which is buffer-local and which allows you to specify a face. E.g., (setq mode-line-format `(:propertize ,mode-line-format face default)) will highlight (part of) the mode-line. Unfortunately, to get the full effect you're probably looking for, you'll have to dissect the mode-line format construct and put the face properties you want on elements buried several levels deep. See the info node "(elisp) Mode Line Format" for the details on how it works. (Be forewarned that the API is rather cumbersome.) Another way to get a buffer-specific (rather that window-specific) effect is to use `header-line-format', which, when given a non-nil value, will put a line at the top of every window displaying the buffer, and whose appearance is controlled by the face `header-line'. (The format construct rules for header lines are the same as for mode lines. Two advantages header lines might have for your purposes is that they're displayed the same whether the window is selected or not, and they're only used by a few modes, so you can, in most contexts, specify a simple header line you construct from scratch, rather than, as you have to do with mode lines, modifying an existing--and non-trivial--construct.) If what you need really is to highlight a specific window, you might consider using the fringes or marginal display areas to indicate the window of interest. Those can be controlled on a per-window basis. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Distinguish inactive windows 2011-06-24 2:45 ` Alp Aker @ 2011-06-25 4:47 ` Joe Riel 2011-06-25 16:00 ` Alp Aker 0 siblings, 1 reply; 6+ messages in thread From: Joe Riel @ 2011-06-25 4:47 UTC (permalink / raw) To: Alp Aker; +Cc: help-gnu-emacs On Fri, 24 Jun 2011 02:45:41 +0000 (UTC) Alp Aker <alp.tekin.aker@gmail.com> wrote: > > How can the selected window be visually distinguished from the other > > windows in its frame? I'd like to, say, set mode-line background > > of the selected window to a particular color. > > Is specifically a unique *window* whose mode-line you want to > distinguish, or would it suffice to change the mode-line for all > windows displaying a particular *buffer*? If the former, you're out > of luck; there's no way (that I'm aware of) to do it. If the latter, > you can use the variable `mode-line-format', which is buffer-local > and which allows you to specify a face. It only has to be unique to a buffer. Here's a simpler variant on your scheme that does precisely what I want: (make-local-variable 'face-remapping-alist) (setq face-remapping-alist '((mode-line-inactive :foreground "black" :background "yellow"))) Thanks again for the ideas, they helped. Joe Riel ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Distinguish inactive windows 2011-06-25 4:47 ` Joe Riel @ 2011-06-25 16:00 ` Alp Aker 0 siblings, 0 replies; 6+ messages in thread From: Alp Aker @ 2011-06-25 16:00 UTC (permalink / raw) To: help-gnu-emacs Joe Riel <jriel@maplesoft.com> wrote: > It only has to be unique to a buffer. Here's a simpler variant on your > scheme that does precisely what I want: > > (make-local-variable 'face-remapping-alist) > (setq face-remapping-alist > '((mode-line-inactive :foreground "black" :background "yellow"))) > > Thanks again for the ideas, they helped. That's a nice solution, better than either of mine. (Be aware that it's not supported on v22, though.) ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Distinguish inactive windows 2011-06-24 0:52 Distinguish inactive windows Joe Riel 2011-06-24 2:45 ` Alp Aker @ 2011-06-24 2:51 ` Alp Aker 2011-06-24 5:38 ` Joe Riel 1 sibling, 1 reply; 6+ messages in thread From: Alp Aker @ 2011-06-24 2:51 UTC (permalink / raw) To: help-gnu-emacs I just thought of another, potentially much simpler expedient, one which will work for a particular window. You can use an overlay to put a light shading over the contents of the window. E.g., (setq o (make-overlay (window-start w) (window-end w t))) (overlay-put o 'face '(:background "gray97")) where `w' is the window of interest. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Distinguish inactive windows 2011-06-24 2:51 ` Alp Aker @ 2011-06-24 5:38 ` Joe Riel 0 siblings, 0 replies; 6+ messages in thread From: Joe Riel @ 2011-06-24 5:38 UTC (permalink / raw) To: help-gnu-emacs On Fri, 24 Jun 2011 02:51:41 +0000 (UTC) Alp Aker <alp.tekin.aker@gmail.com> wrote: > I just thought of another, potentially much simpler expedient, one > which will work for a particular window. You can use an overlay to > put a light shading over the contents of the window. E.g., > > (setq o (make-overlay (window-start w) (window-end w t))) > (overlay-put o 'face '(:background "gray97")) > > where `w' is the window of interest. Thanks for both ideas, I'll see which I prefer. I'm already customizing the mode-line, but the overlay is simple to implement. -- Joe Riel ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-06-25 16:00 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-06-24 0:52 Distinguish inactive windows Joe Riel 2011-06-24 2:45 ` Alp Aker 2011-06-25 4:47 ` Joe Riel 2011-06-25 16:00 ` Alp Aker 2011-06-24 2:51 ` Alp Aker 2011-06-24 5:38 ` Joe Riel
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).