24268


emacsclient と tmux を併用して、以下の挙動に遭遇しました。

  1. `emacs --daemon` を起動
  2. `tmux` を起動
  3. pane 分割
  4. 一方の pane で `emacsclient` を起動 -> 問題なく起動
  5. もう一方の pane で `emacsclient` を起動 -> Waiting for Emacs... (そして、 4 の pane で client が２重に起動しているような挙動。２回 client を終了すると shell にもどるので)

になっているのですが、どうしてこのような挙動になるのでしょうか。具体的には、どうして 5 の pane で起動した `emacsclient` が 4 の
pane で動くのでしょうか。


CC BY-SA 3.0
2016-04-22T15:56:13.400
24266
2016-04-22T18:18:38.823
754
question
emacs tmux
tmux と emacsclient を併用すると、片一方の pane に client がとられてしまう


emacsclient のソースコードを眺めてみますと、デフォルトでは最初の接続で作成した frame(この場合は terminal frame)を以降の
emacsclient による接続でも使用する事が分かります。

**emacs/lib-src/emacsclient.c**

[code]

    /* Nonzero means don't open a new frame. Inverse of --create-frame.  */
    int current_frame = 1;
             :
    static void
    decode_options (int argc, char **argv)
    {
             :
      switch (opt)
        {
             :
          case 't':
            tty = 1;
            current_frame = 0;
            break;
             :
    
    int
    main (int argc, char **argv)
    {
             :
      if (current_frame)
        send_to_emacs (emacs_socket, "-current-frame ");
             :
    
[/code]

**emacs/lisp/server.el**

[code]

    (cl-defun server-process-filter (proc string)
             :
      ;; -current-frame:  Don't create frames.
      (`"-current-frame" (setq use-current-frame t))
    
[/code]

なお、新たに frame を作成する場合は `-nw/-t/-tty` オプションを指定します。

> **emacsclient(1)**
[code]

>     -nw, -t, --tty
>  
>       open a new Emacs frame on the current terminal
>  
[/code]


CC BY-SA 3.0
2016-04-22T18:18:38.823
24268
2016-04-22T18:18:38.823
2020-06-17T08:14:45.997
-1
24266
answer