Explicação do bug
remember-other-frame chama switch-to-buffer-other-frame
que chama display-buffer com a variável pop-up-frames definido como% código%. Isso resulta em uma chamada para t com o argumento make-frame . A função pop-up-frame-alist cria um quadro no mesmo dispositivo de exibição que o quadro selecionado atual. (O que o Emacs chama de frame é o que as GUIs chamam de janela, exceto que um frame também pode estar em um terminal de texto.) Neste ponto, o Emacs ainda está rodando no modo daemon, então não há frame selecionado. Portanto, make-frame não vê nenhum ambiente GUI e acha que deve criar um quadro de terminal, mas também não há terminal de texto, resultando na mensagem de erro confusa “Tipo de terminal desconhecido”.
Solução simples, mas desajeitada
make-frame é a função certa para chamar de dentro de uma janela existente do Emacs, mas está tecnicamente errada no emacsclient. Lá, devemos usar a opção remember-other-frame para fazer o Emacs criar um novo quadro e a função -c simples.
emacsclient -a "" -c -e "(remember)"
No entanto, isso não é muito bom porque remember cria uma janela que precisa ser descartada com remember (que também salva a nota), então o quadro deve ser descartado com C-c C-c . Se você esquecer C-x 5 0 (o que é mais provável porque a mensagem para digitar C-c C-c sobrescreve a mensagem para digitar C-x 5 0 na área de eco), a nota nem é salva.
Uma solução alternativa melhor
Instrua C-c C-c explicitamente para criar o quadro no display X atual.
emacsclient -a "" -e "
(let ((pop-up-frame-alist \'((window-system . x)
(display . \"$DISPLAY\")
,@pop-up-frame-alist)))
(remember-other-frame))"
Você pode colocar tudo isso em uma linha, apenas certifique-se de não alterar a pontuação.
emacsclient -a "" -e "(let ((pop-up-frame-alist \'((window-system . x) (display . \"$DISPLAY\") ,@pop-up-frame-alist))) (remember-other-frame))"