unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
@ 2012-12-19 13:14 Константин Куликов
  2012-12-20  0:43 ` Константин Куликов
  0 siblings, 1 reply; 9+ messages in thread
From: Константин Куликов @ 2012-12-19 13:14 UTC (permalink / raw)
  To: help-gnu-emacs

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

If you run command emacsclient -c the new frame will be created and then
selected window(that have cursor and input focus) of this frame is switched
to display *scratch* buffer.
I added hook to `after-make-frame-functions', that already perform
switching to another buffer that I need, but it's then switched to
*scratch*.
Can I somehow override this behaviour, by disabling switching to *scratch*
buffer in new frame, that was created by 'emacsclient -c' ?

[-- Attachment #2: Type: text/html, Size: 545 bytes --]

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

* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
  2012-12-19 13:14 Константин Куликов
@ 2012-12-20  0:43 ` Константин Куликов
  0 siblings, 0 replies; 9+ messages in thread
From: Константин Куликов @ 2012-12-20  0:43 UTC (permalink / raw)
  To: help-gnu-emacs

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

Heh, found, that it I can set `initial-buffer-choice' to some file-name and
it will be opened instead of switching to *scratch*.
But can't specify buffer without underlying file though.


2012/12/19 Константин Куликов <zxnotdead@gmail.com>

> If you run command emacsclient -c the new frame will be created and then
> selected window(that have cursor and input focus) of this frame is switched
> to display *scratch* buffer.
> I added hook to `after-make-frame-functions', that already perform
> switching to another buffer that I need, but it's then switched to
> *scratch*.
> Can I somehow override this behaviour, by disabling switching to *scratch*
> buffer in new frame, that was created by 'emacsclient -c' ?
>
>

[-- Attachment #2: Type: text/html, Size: 1175 bytes --]

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

* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
@ 2012-12-20  9:59 martin rudalics
  0 siblings, 0 replies; 9+ messages in thread
From: martin rudalics @ 2012-12-20  9:59 UTC (permalink / raw)
  To: zxnotdead; +Cc: help-gnu-emacs

 > Heh, found, that it I can set `initial-buffer-choice' to some
 > file-name and it will be opened instead of switching to *scratch*.
 > But can't specify buffer without underlying file though.

I wonder which buffer you want to display here if it doesn't correspond
to a file.

martin



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

* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
       [not found]     ` <CAFkz2ypcP-fmRH7jJWdhYRaRVB-VEtn0=5qWYQ_S+QCTmZ=TRQ@mail.gmail.com>
@ 2012-12-20 13:52       ` martin rudalics
  2012-12-20 14:46         ` Thien-Thi Nguyen
  0 siblings, 1 reply; 9+ messages in thread
From: martin rudalics @ 2012-12-20 13:52 UTC (permalink / raw)
  To: Константин Куликов
  Cc: help-gnu-emacs

 >> add an appropriate customization type for `initial-buffer-choice'
 > I don't think that it's will be useful for users to customise, but who
 > knows...

`initial-buffer-choice' _is_ an option specified via `defcustom' in
startup.el.  We cannot implicitly ignore this fact in `command-line-1'.
But we could, for example, allow a function here and you could specify a
function to provide the buffer of your choice here.

 > Here the scenario:
 > I want new frames to switch to some buffer so I added hook to
 > `after-make-frame-functions'.
 > Inside this hook I do `(switch-to-buffer <some-buffer>)' the window on this
 > frame is switched to that <some-buffer> at first, but after a short time
 > it's
 > switched to *scratch*. So as I think it would be better that
 > `after-make-frame-functions' will be called after this 'default switching to
 > *scratch* behaviour' is performed.

I'm afraid that this would mean a quite intrusive change to the sequence
of operations performed by the startup code.  Are there any reasons why
you can't use `emacs-startup-hook' or `term-setup-hook' instead?

 > And than will be no need for me to
 > add code to server.el.
 > // New version:
 >           (unless (or files commands)
 >             (let ((type (type-of initial-buffer-choice))
 >                   (buf "*scratch*"))
 >               (cond
 >                ((eq 'string type) (setq buf (find-file-noselect
 > initial-buffer-choice)))
 >                ((eq 'buffer type) (when (buffer-live-p
 > initial-buffer-choice)
 >                                     (setq buf initial-buffer-choice))))
 >               (switch-to-buffer (get-buffer-create buf) 'norecord)))

Looks good to me.

martin



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

* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
  2012-12-20 13:52       ` Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c' martin rudalics
@ 2012-12-20 14:46         ` Thien-Thi Nguyen
  2012-12-20 17:06           ` Stefan Monnier
  0 siblings, 1 reply; 9+ messages in thread
From: Thien-Thi Nguyen @ 2012-12-20 14:46 UTC (permalink / raw)
  To: martin rudalics; +Cc: help-gnu-emacs

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

() martin rudalics <rudalics@gmx.at>
() Thu, 20 Dec 2012 14:52:31 +0100

   > (unless (or files commands)
   >   (let ((type (type-of initial-buffer-choice))
   >         (buf "*scratch*"))
   >     (cond
   >      ((eq 'string type) (setq buf (find-file-noselect initial-buffer-choice)))
   >      ((eq 'buffer type) (when (buffer-live-p initial-buffer-choice)
   >                           (setq buf initial-buffer-choice))))
   >     (switch-to-buffer (get-buffer-create buf) 'norecord)))

   Looks good to me.

It would be better w/o local vars and ‘setq’, though.

-- 
Thien-Thi Nguyen ..................................... GPG key: 4C807502
.                  NB: ttn at glug dot org is not me                   .
.                 (and has not been since 2007 or so)                  .
.                        ACCEPT NO SUBSTITUTES                         .
........... please send technical questions to mailing lists ...........

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

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

* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
  2012-12-20 14:46         ` Thien-Thi Nguyen
@ 2012-12-20 17:06           ` Stefan Monnier
  2012-12-21 13:10             ` Thien-Thi Nguyen
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2012-12-20 17:06 UTC (permalink / raw)
  To: help-gnu-emacs

   > (unless (or files commands)
   >   (let ((type (type-of initial-buffer-choice))
   >         (buf "*scratch*"))
   >     (cond
   >      ((eq 'string type) (setq buf (find-file-noselect initial-buffer-choice)))
   >      ((eq 'buffer type) (when (buffer-live-p initial-buffer-choice)
   >                           (setq buf initial-buffer-choice))))
   >     (switch-to-buffer (get-buffer-create buf) 'norecord)))

> It would be better w/o local vars and ‘setq’, though.

You mean like

   (unless (or files commands)
     (let ((buf
            (cond
             ((stringp initial-buffer-choice)
              (find-file-noselect initial-buffer-choice))
             ((buffer-live-p initial-buffer-choice) initial-buffer-choice)
             (t "*scratch*"))))
       (switch-to-buffer (get-buffer-create buf) 'norecord)))


-- Stefan




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

* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
  2012-12-20 17:06           ` Stefan Monnier
@ 2012-12-21 13:10             ` Thien-Thi Nguyen
  2012-12-21 15:43               ` Constantin Kulikov
  2012-12-22 17:46               ` Stefan Monnier
  0 siblings, 2 replies; 9+ messages in thread
From: Thien-Thi Nguyen @ 2012-12-21 13:10 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: help-gnu-emacs

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

() Stefan Monnier <monnier@iro.umontreal.ca>
() Thu, 20 Dec 2012 12:06:54 -0500

   You mean like

      (unless (or files commands)
        (let ((buf
               (cond
                ((stringp initial-buffer-choice)
                 (find-file-noselect initial-buffer-choice))
                ((buffer-live-p initial-buffer-choice) initial-buffer-choice)
                (t "*scratch*"))))
          (switch-to-buffer (get-buffer-create buf) 'norecord)))

Almost.  To rid ourselves of the last local var:

 (unless (or files commands)
   (switch-to-buffer 
    (get-buffer-create 
     (cond ((stringp initial-buffer-choice)
            (find-file-noselect initial-buffer-choice))
           ((buffer-live-p initial-buffer-choice) 
            initial-buffer-choice)
           (t "*scratch*")))
    'norecord))

or (hewing closer to OP approach):

 (unless (or files commands)
   (switch-to-buffer 
    (get-buffer-create 
     (or (case (type-of initial-buffer-choice)
           (string (find-file-noselect initial-buffer-choice))
           (buffer (when (buffer-live-p initial-buffer-choice)
                     initial-buffer-choice)))
         "*scratch*"))
    'norecord))

Same difference; more stack, less state...  Since we're talking style,
i'd say the most important thing is sane indentation, but luckily we
have Emacs for that.  :-D

-- 
Thien-Thi Nguyen ..................................... GPG key: 4C807502
.                  NB: ttn at glug dot org is not me                   .
.                 (and has not been since 2007 or so)                  .
.                        ACCEPT NO SUBSTITUTES                         .
........... please send technical questions to mailing lists ...........

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

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

* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
  2012-12-21 13:10             ` Thien-Thi Nguyen
@ 2012-12-21 15:43               ` Constantin Kulikov
  2012-12-22 17:46               ` Stefan Monnier
  1 sibling, 0 replies; 9+ messages in thread
From: Constantin Kulikov @ 2012-12-21 15:43 UTC (permalink / raw)
  To: help-gnu-emacs

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

:-) nice.
And I think that martin was right, it's more useful to allow setting
initial-buffer-choice to a function returning a buffer.

[-- Attachment #2: Type: text/html, Size: 182 bytes --]

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

* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c'
  2012-12-21 13:10             ` Thien-Thi Nguyen
  2012-12-21 15:43               ` Constantin Kulikov
@ 2012-12-22 17:46               ` Stefan Monnier
  1 sibling, 0 replies; 9+ messages in thread
From: Stefan Monnier @ 2012-12-22 17:46 UTC (permalink / raw)
  To: help-gnu-emacs

>      (or (case (type-of initial-buffer-choice)

I really dislike type-of (e.g. what's the type of nil?  Is `bold'
a symbol or a face?).

> Same difference; more stack, less state...  Since we're talking style,

Actually (let ((foo ...)) ...foo...) does not use more "state".
State only creeps in when we use things like setq.

As for whether the use of a let-binding for a single-use variable is
warranted: it mostly depends on aesthetics.  In this specific case, I'd
favor the let-form since it gives a name to the intermediate value
without costing you an extra line.


        Stefan




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

end of thread, other threads:[~2012-12-22 17:46 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <CAFkz2yroLhknptDnWyC9B1fbZKEwTCV-T0VttHQiwZoaAW-j6A@mail.gmail.com>
     [not found] ` <CAFkz2yrZ3wuMiyNY2edNLDG4jTAfNKXb5mvC6OYqu+0xE94Qgg@mail.gmail.com>
     [not found]   ` <50D2F0FD.30804@gmx.at>
     [not found]     ` <CAFkz2ypcP-fmRH7jJWdhYRaRVB-VEtn0=5qWYQ_S+QCTmZ=TRQ@mail.gmail.com>
2012-12-20 13:52       ` Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c' martin rudalics
2012-12-20 14:46         ` Thien-Thi Nguyen
2012-12-20 17:06           ` Stefan Monnier
2012-12-21 13:10             ` Thien-Thi Nguyen
2012-12-21 15:43               ` Constantin Kulikov
2012-12-22 17:46               ` Stefan Monnier
2012-12-20  9:59 martin rudalics
  -- strict thread matches above, loose matches on Subject: below --
2012-12-19 13:14 Константин Куликов
2012-12-20  0:43 ` Константин Куликов

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