Subject: 28.0.50; tramp-sh.el uses mknod file p which is not available on macos
From: Damien Merenne <[email-masked]>
To: [email-masked]
Date: Thu, 23 Sep 2021 08:29:53 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

I'm trying to use eglot over tramp using `emacs -Q -f package-initialize
-L /path/to/my/eglot -l eglot.el`. From what I understand, to
capture the remote process stderr, tramp creates a fifo, in
`tramp-sh-handle-make-process`, `tramp-sh.el:2889`. The MacOS mknod
command does not support the "p" parameter, so the communication with
the process does not work. Also no error is reported while the mknod
command is failing. I tried replacing `mknod %s p` with `mkfifo %s` or using gnu coreutils mknod. This
fixes the fifo creation but the process communication is still
broken after that.

I can reproduce the problem with

(let ((default-directory "/ssh:macos-laptop:"))
  (make-process
   :name "TEST"
   :buffer "*TEST*"
   :command '("sh" "-c" "while sleep 1; do echo $(hostname) out; echo $(hostname) err >&2; done")
   :connection-type 'pipe
   :coding 'utf-8-emacs-unix
   :noquery t
   :stderr (get-buffer-create "*TEST stderr*")
   :file-handler t))

And it works correctly with

(let ((default-directory "/ssh:localhost:"))
  (make-process
   :name "TEST"
   :buffer "*TEST*"
   :command '("sh" "-c" "while sleep 1; do echo $(hostname) out; echo $(hostname) err >&2; done")
   :connection-type 'pipe
   :coding 'utf-8-emacs-unix
   :noquery t
   :stderr (get-buffer-create "*TEST stderr*")
   :file-handler t))

In GNU Emacs 28.0.50 (build 5, x86_64-pc-linux-gnu, GTK+ Version 3.24.25, cairo version 1.16.0)
 of 2021-09-16 built on workstation.lan
Repository revision: 7f53446a10eaf029f73e637bba3c9c6bf7c33111
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101001
System Description: Ubuntu 21.04

Configured using:
 'configure --with-native-compilation --with-mailutils --with-gnutls
 --with-modules --with-json --without-gpm --with-file-notification=yes
 --with-xwidgets --without-selinux --with-libsystemd --with-jpeg
 --with-tiff --with-gif --with-png --with-rsvg --with-imagemagick
 CC=gcc-10'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ
IMAGEMAGICK JPEG JSON LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP
NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF
TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM XWIDGETS GTK3 ZLIB

Important settings:
  value of $LC_MONETARY: fr_BE.UTF-8
  value of $LC_NUMERIC: fr_BE.UTF-8
  value of $LC_TIME: fr_BE.UTF-8
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: C++//lw

Minor modes in effect:
  cov-mode: t
  bloom-global-minor-mode: t
  bloom-minor-mode: t
  eglot--managed-mode: t
  flymake-mode: t
  flyspell-mode: t
  bug-reference-prog-mode: t
  magit-wip-after-apply-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  dtrt-indent-global-mode: t
  dtrt-indent-mode: t
  test-runner-mode: t
  pdf-occur-global-minor-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  subword-mode: t
  smartparens-global-mode: t
  smartparens-mode: t
  show-paren-mode: t
  auto-revert-mode: t
  marginalia-mode: t
  selectrum-mode: t
  corfu-global-mode: t
  corfu-mode: t
  global-ligature-mode: t
  ligature-mode: t
  shell-dirtrack-mode: t
  envrc-global-mode: t
  envrc-mode: t
  bepo-global-mode: t
  which-key-mode: t
  savehist-mode: t
  global-so-long-mode: t
  override-global-mode: t
  straight-use-package-mode: t
  straight-package-neutering-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  auto-fill-function: yas--auto-fill
  transient-mark-mode: t
  abbrev-mode: t

Load-path shadows:
/home/dam/.emacs.d/straight/build/transient/transient hides /usr/local/share/emacs/28.0.50/lisp/transient
/home/dam/.emacs.d/straight/build/jsonrpc/jsonrpc hides /usr/local/share/emacs/28.0.50/lisp/jsonrpc
/home/dam/.emacs.d/straight/build/xref/xref hides /usr/local/share/emacs/28.0.50/lisp/progmodes/xref
/home/dam/.emacs.d/straight/build/flymake/flymake hides /usr/local/share/emacs/28.0.50/lisp/progmodes/flymake
/home/dam/.emacs.d/straight/build/project/project hides /usr/local/share/emacs/28.0.50/lisp/progmodes/project
/home/dam/.emacs.d/straight/build/let-alist/let-alist hides /usr/local/share/emacs/28.0.50/lisp/emacs-lisp/let-alist
/home/dam/.emacs.d/straight/build/eldoc/eldoc hides /usr/local/share/emacs/28.0.50/lisp/emacs-lisp/eldoc

Features:
(shadow sort mail-extr pulse sh-script executable conf-mode rect
mm-archive network-stream url-cache goto-addr emacsbug sendmail helpful
trace edebug info-look help-fns elisp-refs tramp-cmds misearch
multi-isearch cov elquery mule-util terraform-mode hcl-mode vterm term
disp-table ehelp vterm-module term/xterm xterm face-remap vc-mtn vc-hg
vc-git vc-bzr vc-src vc-sccs vc-cvs vc-rcs vc vc-dispatcher checkdoc
form-feed bloomlife bloom-mode eglot array jsonrpc ert ewoc debug
backtrace bloom-sensor gdb-mi bloom-tools bloom-magit
bloom-magit-bitbucket atlassian-bitbucket bloom-magit-build
bloom-project bloom-test-runner bloom-build bloom-cmake bloom-conan
bloom-bbw bloom-target bloom-common bloom-pkg bloomlife-autoloads
autoload radix-tree lisp-mnt sonar sonar-autoloads circleci
circleci-autoloads atlassian atlassian-jira atlassian-common request
atlassian-autoloads request-autoloads magit-async-section
magit-async-section-autoloads terraform-mode-autoloads
hcl-mode-autoloads cargo-autoloads racer smartparens-rust rust-utils
rust-mode rust-rustfmt rust-playpen rust-compile rust-cargo
racer-autoloads pos-tip-autoloads rust-mode-autoloads rubocop
rubocop-autoloads robe etags fileloop generator inf-ruby robe-autoloads
inf-ruby-autoloads rbenv rbenv-autoloads ruby-mode smie
smartparens-python python tramp-sh smartparens-scala scala-mode
scala-mode-prettify-symbols scala-mode-imenu scala-mode-map
scala-mode-fontlock scala-mode-indent scala-mode-paragraph
scala-mode-syntax scala-mode-lib scala-mode-autoloads java-imports
pcache eieio-base java-imports-autoloads pcache-autoloads
form-feed-autoloads elisp-format flymake-proc flymake flyspell
elisp-format-autoloads test-runner-ert elfmt elfmt-autoloads cask-mode
cask-mode-autoloads docker docker-volume docker-network docker-machine
docker-image docker-container docker-faces docker-compose docker-utils
json-mode json-reformat json-snatcher smartparens-javascript js
docker-core docker-autoloads json-mode-autoloads json-snatcher-autoloads
json-reformat-autoloads docker-tramp-autoloads docker-tramp tramp-cache
dockerfile-mode-autoloads djinni-mode djinni-mode-autoloads
cov-autoloads elquery-autoloads gud-lldb cmake-api cmake-api-autoloads
test-runner-catch2 test-runner-catch2-autoloads eglot-clangd-autoloads
eldoc-cmake eldoc-cmake-autoloads cmake-font-lock-autoloads cmake-mode
smartparens-rst rst cmake-mode-autoloads android android-autoloads pbuf
pbuf-autoloads gud xref forge-list forge-commands forge-semi
forge-bitbucket buck forge-gogs gogs forge-gitea gtea forge-gitlab glab
forge-github forge-notify forge-revnote forge-pullreq forge-issue
forge-topic yaml bug-reference forge-post forge-repo forge forge-core
forge-db forge-autoloads yaml-autoloads closql emacsql-sqlite emacsql
emacsql-compiler closql-autoloads emacsql-sqlite-autoloads
emacsql-autoloads ghub-graphql treepy gsexp ghub url-http url-gw nsm
url-auth ghub-autoloads treepy-autoloads magit-extras magit-bookmark
magit-submodule magit-obsolete magit-blame magit-stash magit-reflog
magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status
magit magit-repos magit-apply magit-wip magit-log which-func magit-diff
smerge-mode diff-mode git-commit log-edit message rmc rfc822 mml mml-sec
epa derived epg rfc6068 epg-config mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader pcvs-util add-log
magit-core magit-autorevert magit-margin magit-transient magit-process
with-editor server magit-mode transient comp comp-cstr warnings
magit-git magit-section magit-utils magit-autoloads
magit-section-autoloads git-commit-autoloads with-editor-autoloads
transient-autoloads eglot-autoloads project-autoloads xref-autoloads
flymake-autoloads eldoc-autoloads jsonrpc-autoloads dtrt-indent
dtrt-indent-autoloads diff ispell reformatter reformatter-autoloads
test-runner project test-runner-autoloads vterm-autoloads ag vc-svn
find-dired ag-autoloads dired-collapse dired-collapse-autoloads
dired-rainbow dired-rainbow-autoloads dired-narrow delsel
dired-narrow-autoloads dired-ranger-autoloads dired-subtree-autoloads
dired-filter f s dired-hacks-utils dired-x dired-filter-autoloads
dired-hacks-utils-autoloads dired-aux yaml-mode-autoloads plantuml-mode
plantuml-mode-autoloads pdf-occur ibuf-ext ibuffer ibuffer-loaddefs
tablist tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local find-func cedet
pdf-isearch let-alist pdf-misc imenu pdf-tools package pdf-view
jka-compr pdf-cache pdf-info tq pdf-util pdf-macs pdf-tools-autoloads
let-alist-autoloads tablist-autoloads xwwp eww xdg url-queue shr kinsoku
svg dom mm-url gnus nnheader gnus-util rmail rmail-loaddefs rfc2047
rfc2045 ietf-drums mail-utils mm-util mail-prsvr xwwp-autoloads xwidget
url-handlers image-mode dired dired-loaddefs exif browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
url-domsuf url-util mailcap osx-browse-autoloads
browse-url-dwim-autoloads string-utils-autoloads list-utils-autoloads cl
smartparens-markdown markdown-mode url-parse url-vars noutline outline
markdown-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads
yasnippet yasnippet-autoloads wgrep grep compile wgrep-autoloads
cap-words superword subword string-inflection
string-inflection-autoloads smartparens-config smartparens-text
smartparens-c smartparens-ruby smartparens dash smartparens-autoloads
cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
cc-vars cc-defs paren mmm-mode mmm-univ mmm-class mmm-region mmm-auto
mmm-vars mmm-utils mmm-compat mmm-mode-autoloads iedit iedit-lib
iedit-autoloads autorevert filenotify marginalia marginalia-autoloads
embark-consult-autoloads embark-autoloads consult-selectrum selectrum
minibuf-eldef crm selectrum-autoloads orderless orderless-autoloads
corfu corfu-autoloads ns-auto-titlebar-autoloads
all-the-icons-dired-autoloads all-the-icons all-the-icons-faces
data-material data-weathericons data-octicons data-fileicons
data-faicons data-alltheicons all-the-icons-autoloads rx ligature
ligature-autoloads solarized-dark-high-contrast-theme solarized-palettes
solarized-theme solarized solarized-faces color
solarized-theme-autoloads use-theme use-theme-autoloads tramp
tramp-loaddefs trampver tramp-integration files-x tramp-compat shell
pcomplete comint ring parse-time iso8601 time-date ls-lisp auth-source
eieio eieio-core eieio-loaddefs password-cache envrc inheritenv
ansi-color envrc-autoloads inheritenv-autoloads eshell esh-cmd esh-ext
esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util bepo
which-key advice which-key-autoloads time savehist edmacro
helpful-autoloads elisp-refs-autoloads f-autoloads s-autoloads
dash-autoloads exec-path-from-shell exec-path-from-shell-autoloads
so-long diminish diminish-autoloads consult-dash pcase consult recentf
tree-widget kmacro bookmark text-property-search consult-dash-autoloads
consult-autoloads dash-docs use-package-dash-docs gnutls puny thingatpt
format-spec xml json map dash-docs-autoloads async async-autoloads
no-littering no-littering-autoloads finder-inf
use-package-ensure-system-package system-packages
use-package-ensure-system-package-autoloads system-packages-autoloads
use-package use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core
use-package-autoloads bind-key-autoloads cus-edit pp cus-load wid-edit
straight-autoloads info cl-seq cl-extra help-mode seq byte-opt straight
subr-x cl-macs gv cl-loaddefs cl-lib bytecomp byte-compile cconv
iso-transl tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice button loaddefs faces cus-face macroexp files
window text-properties overlay sha1 md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote threads
xwidget-internal dbusbind inotify lcms2 dynamic-setting
system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit
x multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 1171416 99492)
 (symbols 48 48827 4)
 (strings 32 188566 42756)
 (string-bytes 1 7819478)
 (vectors 16 95165)
 (vector-slots 8 2534894 561288)
 (floats 8 840 2000)
 (intervals 56 71789 3857)
 (buffers 992 60))