Avec Vim, je peux facilement faire
$ echo 123 | vim -
Est-il possible de faire avec Emacs?
$ echo 123 | emacs23
... Emacs starts with a Welcome message
$ echo 123 | emacs23 -
... Emacs starts with an empty *scratch* buffer and “Unknown option”
$ echo 123 | emacs23 --insert -
... “No such file or directory”, empty *scratch* buffer
Est-il vraiment impossible de lire un tampon à partir d'un pipe Unix?
Edit : En guise de solution, j'ai écrit un wrapper de shell nommé emacspipe
:
#!/bin/sh
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
Vous pouvez utiliser la substitution de processus :
la source
emacs: standard input is not a tty
Vous pouvez rediriger vers un fichier, puis l'ouvrir. par exemple
jweede note que si vous souhaitez que le fichier temporaire soit automatiquement supprimé, vous pouvez:
Pour ce faire, Emacsy exécute la commande shell dans Emacs .
Cela vous donne un tampon nommé * Shell Command Output * avec les résultats de la commande.
la source
echo 123 > temp; emacs temp; rm temp
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
. Merci à tous!C'est possible, voir https://stackoverflow.com/questions/2879746/idomatic-batch-processing-of-text-in-emacs
Voici echo dans un script emacs (copié à partir du lien ci-dessus):
ou de le lire dans un tampon puis de l'imprimer en une seule fois
la source
Il est possible de créer une fonction shell simple qui fonctionne comme si elle lisait à partir de stdin (bien qu’en réalité, elle écrit dans un fichier temporaire puis la lit). Voici le code que j'utilise:
Vous utilisez simplement la fonction comme alias pour emacs, par exemple
ou comme d'habitude à partir de fichiers
Le remplacement
emacs
paremacsclient
dans la fonction fonctionne également.la source
emacsclient -c -t $@
, ou du moins supprimer l’option -n. pages de manuel avecemacsclient -t --eval "(man \"$1\")" --eval "(delete-window)"
(et maintenant vous pouvezhelm-swoop
vous rendre à Man Glory!)Cela marche:
mais, pour une raison quelconque, uniquement avec emacs en mode graphique (Gnome, Konsole, GNU Emacs 23.4.1). La commande:
génère une erreur 'emacs: l'entrée standard n'est pas un tty'. La même erreur apparaît lorsque vous essayez dans la console de texte brut.
la source
echo 123 | exec emacs -nw --insert <(cat) </dev/tty
devrait marcher.Une autre possibilité non mentionnée dans les réponses précédentes est d'utiliser
/dev/stdin
si la variante Unix choisie l'a.Essayer d'ouvrir
/dev/stdin
directement ne fonctionne pas, car Emacs effectue quelques vérifications puis génère des rapportsSymbolic link that points to nonexistent file
. (Et si Emacs vous aurait permis de charger le fichier, essayez de le sauvegarder à nouveau comme le/dev/stdin
ferait rarement ce que l'utilisateur attendait.)Cependant, la combinaison
/dev/stdin
avec l'--insert
argument fonctionne:Il est à noter que cette version ne fonctionne que sous X. Si vous avez besoin d'une solution qui fonctionne dans un terminal, je vous suggère de chercher une autre réponse .
la source
emacs: standard input is not a tty
message le testant sur linux et bsdunset DISPLAY
, j’obtiens le même message d’erreur que vous.désinvolte, quelque chose comme:
ou
est une option. Emacs ne s'intègre pas avec UNIX comme le fait vim.
la source
M-!
, qui capture automatiquement la sortie résultante dans un tampon temporaire.) Holy guerres de côté, aucun éditeur n’est "meilleur" que l’autre; ils ont juste des perspectives très différentes sur à peu près tout.curl foo.bar | vim -
.. Je suis désolé. Je voulais direcurl foo.bar | emacs
sauf que tu ne peux pas faire ça