emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Matt Price <moptop99@gmail.com>
To: Drew Adams <drew.adams@oracle.com>
Cc: Bastien <bzg@altern.org>,
	Help-gnu-emacs@gnu.org, Org Mode <emacs-orgmode@gnu.org>,
	drain <aeuster@gmail.com>
Subject: Re: naming and/or directly addressing particular windows?
Date: Sun, 2 Dec 2012 00:31:52 -0500	[thread overview]
Message-ID: <CAN_Dec_0JJXFAn7013poJL=swdvmPZ=2GbsS8ppdSfpoo8kARQ@mail.gmail.com> (raw)
In-Reply-To: <9480173485434C39B7ACE90E55A0FBD7@us.oracle.com>

On Sat, Dec 1, 2012 at 10:59 AM, Drew Adams <drew.adams@oracle.com> wrote:
>> Anyway:  is it possible to give/get a name for a window that persists
>> long enough to be called in functions?
>
> This might help:
>
> (defun icicle-make-window-alist (&optional all-p)
>   "Return an alist of entries (WNAME . WINDOW), where WNAME names WINDOW.
> The name of the buffer in a window is used as its name, unless there
> is more than one window displaying the same buffer.  In that case,
> WNAME includes a suffix [NUMBER], to make it a unique name.  The
> NUMBER order among window names that differ only by their [NUMBER] is
> arbitrary.
>
> Non-nil argument ALL-P means use windows from all visible frames.
> Otherwise, use only windows from the selected frame."
>   (lexical-let ((win-alist  ())
>                 (count      2)
>                 wname new-name)
>     (walk-windows (lambda (w)
>                     (setq wname  (buffer-name (window-buffer w)))
>                     (if (not (assoc wname win-alist))
>                         (push (cons wname w) win-alist)
>                       (setq new-name  wname)
>                       (while (assoc new-name win-alist)
>                         (setq new-name  (format "%s[%d]" wname count)
>                               count     (1+ count)))
>                       (push (cons new-name w) win-alist))
>                     (setq count  2))
>                   'no-mini
>                   (if all-p 'visible 'this-frame))
>     win-alist))
>
> (This is used in command `icicle-select-window-by-name', which in turn is the
> action function for multi-command `icicle-select-window'.  Code here:
> http://www.emacswiki.org/emacs-en/download/icicles-cmd1.el.)
>
> I'm guessing that there are other, similar functions available on Emacs Wiki -
> start here, perhaps: http://www.emacswiki.org/emacs/CategoryWindows
>
I'm slowly starting to understand.  I now have this primitive code,
which at least sets up the windows the way I want them:

(defun my-windows-function ()
  "Trying to figure out how to get a nice windows config for writers-room-mode"
  (interactive )
  (global-linum-mode 0)
  (delete-other-windows)
  (setq my-this-win (selected-window))
  (setq my-winlist '())
  (add-to-list 'my-winlist
               (cons 'guide  (selected-window))
               )
  (split-window-horizontally)
  (fix-window-horizontal-size 35)
  (windmove-right)
  (add-to-list 'my-winlist
               (cons 'main  (selected-window))
               )
  (split-window-horizontally)
  (windmove-right)
  (fix-window-horizontal-size 35)
  (add-to-list 'my-winlist
               (cons 'metadata  (selected-window))
               )

  (split-window-vertically)
  (windmove-down)
  (add-to-list 'my-winlist
               (cons 'not-sure-what-this-is-for  (selected-window))
               )

  (select-window(cdr(assoc 'guide my-winlist)) )
  )

The final select-window ommand demonstrates that I can now address the
windows by name (yay!).

The next step for me is to rewrite the existing
org-tree-to-indirect-buffer function so that it reliably sends org
subtree indirect buffers to the "main" window (in the middle column of
the frame).  The function starts at line 7091 of org.el:

http://orgmode.org/w/org-mode.git/blob/lisp/org.el

I'm not having  an easy time figuring out how that function decides
which window to use when creating and focussing on the new indirect
buffer.  I can see (and the documentation states) that a choice is
first made between using a new or dedicated frame, or the same frame
with either the original or another window.  But the code to put the
buffer in another window in the same frame is quite simple:

     ((eq org-indirect-buffer-display 'other-window)
       (pop-to-buffer ibuf))


I've been chasing the code down to native emacs functions --
pop-to-buffer ends up relying on display-buffer -- but I haven't yet
found a place where I an specify a particular window for the new
buffer.  Does anyone else know a way?

Thanks again,
Matt

  reply	other threads:[~2012-12-02  5:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-01 15:22 naming and/or directly addressing particular windows? Matt Price
2012-12-01 15:59 ` Drew Adams
2012-12-02  5:31   ` Matt Price [this message]
2012-12-01 16:58 ` Eduardo Ochs
2012-12-02  2:41   ` Matt Price

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

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAN_Dec_0JJXFAn7013poJL=swdvmPZ=2GbsS8ppdSfpoo8kARQ@mail.gmail.com' \
    --to=moptop99@gmail.com \
    --cc=Help-gnu-emacs@gnu.org \
    --cc=aeuster@gmail.com \
    --cc=bzg@altern.org \
    --cc=drew.adams@oracle.com \
    --cc=emacs-orgmode@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 public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.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).