* Re: [not found] <CAFkz2yroLhknptDnWyC9B1fbZKEwTCV-T0VttHQiwZoaAW-j6A@mail.gmail.com> @ 2012-12-20 8:36 ` Константин Куликов 2012-12-20 11:05 ` Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c' martin rudalics 0 siblings, 1 reply; 3+ messages in thread From: Константин Куликов @ 2012-12-20 8:36 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 2929 bytes --] found how code it more correct: No need to change anything in startup.el Code for server.el will be: (unless (or files commands) (let ((type (type-of initial-buffer-choice))) (cond ((eq 'string type) (find-file initial-buffer-choice)) ((eq 'buffer type) (switch-to-buffer initial-buffer-choice 'norecord)) (t (switch-to-buffer (get-buffer-create "*scratch*") 'norecord))))) So, someone who has write access to emacs, maybe add this change to trunk? (if u see no bugs with this code of course =p) 2012/12/20 Константин Куликов <zxnotdead@gmail.com> > I discribed my problem here: > http://comments.gmane.org/gmane.emacs.help/88218 . > short: > > when you run 'emacsclient -c' the new frame created and window in that > frame is switched to > > *scratch* buffer or file with name that is set in > `initial-buffer-choice'. > So, I can set `initial-buffer-choice' in the `after-make-frame-functions' > to switch to buffer other than *scratch* on frame creation, but can't set > somehow to buffer without underlying file. > > I found place where this behaviour handled(server.el:1258): > > ;; If we were told only to open a new client, obey > ;; `initial-buffer-choice' if it specifies a file. > (unless (or files commands) > (if (stringp initial-buffer-choice) > (find-file initial-buffer-choice) > (switch-to-buffer (get-buffer-create "*scratch*") > 'norecord))) > > Changed it to this: > (unless (or files commands) > (typecase initial-buffer-choice > (string (find-file initial-buffer-choice)) > (buffer (switch-to-buffer initial-buffer-choice 'norecord)) > (t (switch-to-buffer (get-buffer-create "*scratch*") > 'norecord))) > > then emacsclient -c it create frame and after short time destroys it with > error: > "*ERROR*: Wrong type argument: stringp, #<buffer *scratch*>" > > ok. I grepped sources, find startup.el:2325 : > (when initial-buffer-choice > (cond ((eq initial-buffer-choice t) > (switch-to-buffer (get-buffer-create "*scratch*"))) > ((stringp initial-buffer-choice) > (find-file initial-buffer-choice)))) > > replaced it to: > (when initial-buffer-choice > (typecase initial-buffer-choice > (symbol (when (eq initial-buffer-choice t) > (switch-to-buffer (get-buffer-create "*scratch*")))) > (string (find-file initial-buffer-choice)) > (buffer (switch-to-buffer initial-buffer-choice)))) > > But still get same error: > "*ERROR*: Wrong type argument: stringp, #<buffer *scratch*>" > > Any suggestions? > > [-- Attachment #2: Type: text/html, Size: 4048 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c' 2012-12-20 8:36 ` Константин Куликов @ 2012-12-20 11:05 ` martin rudalics 2012-12-20 12:13 ` Константин Куликов 0 siblings, 1 reply; 3+ messages in thread From: martin rudalics @ 2012-12-20 11:05 UTC (permalink / raw) To: Константин Куликов Cc: emacs-devel > found how code it more correct: > No need to change anything in startup.el > Code for server.el will be: > > (unless (or files commands) > (let ((type (type-of initial-buffer-choice))) > (cond > ((eq 'string type) (find-file initial-buffer-choice)) > ((eq 'buffer type) (switch-to-buffer initial-buffer-choice > 'norecord)) > (t (switch-to-buffer (get-buffer-create "*scratch*") > 'norecord))))) > > So, someone who has write access to emacs, maybe add this change to trunk? > (if u see no bugs with this code of course =p) We probably should verify that the buffer is live and add an appropriate customization type for `initial-buffer-choice'. In any case, please file a bug report for this, preferably marked as a wishlist item. And, as further motivation, tell which buffer you want to show here in practice. This is far from obvious since initially we usually have only two non-file-visiting buffers - *Messages* and *scratch*. Just received this: > hint: For example it's could be needed if you want to restore to last > opened buffer on new frame(and it could be buffer like *ielm* or > *ansi-term*, etc). Where do you get this from if you have `initial-buffer-choice' set to such a buffer and that buffer does not exist? It doesn't sound like a good idea, in particular so, because `switch-to-buffer' leaves it to `set-window-buffer' to bark about displaying a deleted buffer. Thanks, martin ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c' 2012-12-20 11:05 ` Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c' martin rudalics @ 2012-12-20 12:13 ` Константин Куликов 0 siblings, 0 replies; 3+ messages in thread From: Константин Куликов @ 2012-12-20 12:13 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1509 bytes --] //sorry, for send you double ;p >We probably should verify that the buffer is live yes, it's reasonable >file a bug report for this only after discussion on this mail-list :) >which buffer you want to show here in practice it's could be just *any* buffer >set to such a buffer and that buffer does not exist? then, I think that we could fall back to *scratch* >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... >It doesn't sound like a good idea, in particular so 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. 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))) [-- Attachment #2: Type: text/html, Size: 2299 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-12-20 12:13 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <CAFkz2yroLhknptDnWyC9B1fbZKEwTCV-T0VttHQiwZoaAW-j6A@mail.gmail.com> 2012-12-20 8:36 ` Константин Куликов 2012-12-20 11:05 ` Overriding switch to *scratch* buffer after creating new frame with 'emacsclient -c' martin rudalics 2012-12-20 12:13 ` Константин Куликов
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).