Emacs - emacsclient or new frame?
emacs, emacs23, emacsclient
Solution
There's really no difference between the two situations, other than the fact that the server sets up some buffer-local state to enable `C-x #` (aka `server-edit`).
You can limit `M-x list-buffers` behavior like you're asking with the following advice:
(defadvice list-buffers-noselect (before list-buffers-noselect-limit-to-those-for-emacsclient activate)
"When the current buffer is a being viewed by an emacclient, restrict the buffers to those associated with the emacsclient"
(when (and (null (ad-get-arg 1)) server-buffer-clients)
(let ((blist (delete-dups (reduce 'append
(mapcar (lambda (proc) (process-get proc 'buffers))
server-buffer-clients)))))
(ad-set-arg 1 blist))))
Now when you do `M-x buffer-menu` in a buffer visited by `emacsclient`, you only see other buffers visited by the same client(s). It works as normal when the buffer is not visited by an `emacsclient`.
I don't use `ido`, but I imagine the customization would be similar (if this advice doesn't work as is).
The details are that when you run `emacsclient`, the buffers that get opened up are associated with the server process (it can be more than one because you can open up the same file via multiple invocations of `emacsclient`). A buffer's server clients are stored in the buffer local variable `server-buffer-clients`.
To find out which buffers are associated with a particular invocation of `emacsclient`, find the process for that emacsclient, and do: `(process-get proc 'buffers)` (where `proc` is the particular emacsclient process - one of the elements of the list found in `server-buffer-clients`).
That's all the advice does.
Problem
this is a rather rudimentary question, but what is the practical difference between opening a new file in a separate frame (make-new-frame) from emacs or opening the file in an instance of emacsclient? I can see that if you are working through a terminal, the difference is clear... but can emacsclient additionally restrict the list of buffers accessed by (buffer-menu) or ido-mode to buffers opened in that particular emacsclient instance?