Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

emacs en read-only

5 réponses
Avatar
nospam
Bonjour

est-ce qu'il est possible d'utiliser emacs pour consulter un document sans
le modifier. Je sais qu'il est possible d'utiliser la commande
"find-file-read-only" mais j'aimerais faire cela depuis le shell, avec un
truc du genre

emacs --read-only monfichier.txt

J'ai cherché dans le man d'emacs et j'ai rien trouvé. J'ai pensé aussi à
créer un fichiers d'initialisation readonly.el qui mettrait le premier
buffer d'emacs dans le mode désiré et qu'on pourrait appeller

emacs -l readonly.el monfichier.txt

ou

emacs -f find-file-read-only monfichier.txt


mais là aussi mes connaissances d'emacs sont trop limitées et je n'y suis
pas arrivé. Si vous avez des pistes, je suis intéressé.

d'avance merci de votre aide


--
new

5 réponses

Avatar
Sébastien Kirche
Le 30 juin 2008 à 12:17, nospam s'est exprimé ainsi :

emacs -f find-file-read-only monfichier.txt


mais là aussi mes connaissances d'emacs sont trop limitées et je n'y
suis pas arrivé. Si vous avez des pistes, je suis intéressé.



Pas vu non plus d'option au niveau de la ligne de commande.
Sinon avec
emacs -eval '(find-file-read-only "le_chemin_vers_le_fichier")'

?

Je viens de tester avec linux, ça fonctionne. Par contre avec Windows je
n'y arrive pas, à cause de cette saleté de console qui ne gère pas les
quotes et les arguments que les shells unix. Avec zsh.exe à la place de
cmd.exe c'est ok.

--
Sébastien Kirche
Avatar
Vincent Belaïche
Sébastien Kirche a écrit :
Le 30 juin 2008 à 12:17, nospam s'est exprimé ainsi :

emacs -f find-file-read-only monfichier.txt


mais là aussi mes connaissances d'emacs sont trop limitées et je n'y
suis pas arrivé. Si vous avez des pistes, je suis intéressé.



Pas vu non plus d'option au niveau de la ligne de commande.
Sinon avec
emacs -eval '(find-file-read-only "le_chemin_vers_le_fichier")'

?

Je viens de tester avec linux, ça fonctionne. Par contre avec Windows je
n'y arrive pas, à cause de cette saleté de console qui ne gère pas les
quotes et les arguments que les shells unix. Avec zsh.exe à la place de
cmd.exe c'est ok.



Moi sous Windows c'est tellement merdique que je gruges en faisant un
truc du genre :

SET monfic="le nom de mon fichier"
EMACS -l "ouvreenlectureseule"


dans le shell script (.bat), et après tu te fais un fichier
ouvreenlectureseule.el que tu mets par exemple dans le répertoire
site-lisp et dans lequel il y a cette ligne

(find-file-read-only (getenv "monfic"))
Avatar
Sébastien Kirche
Le 30 juin 2008 à 22:29, Vincent Belaïche a dit :

Moi sous Windows c'est tellement merdique que je gruges en faisant un
truc du genre :

SET monfic="le nom de mon fichier"
EMACS -l "ouvreenlectureseule"


dans le shell script (.bat), et après tu te fais un fichier
ouvreenlectureseule.el que tu mets par exemple dans le répertoire
site-lisp et dans lequel il y a cette ligne

(find-file-read-only (getenv "monfic"))



Un peu lourd quand même :(
--
Sébastien Kirche
Avatar
nospam
Avatar
Matthieu Moy
writes:

j'ai essayé de mettre cela dans un fichier bash:

-------------------------------------------------
#!/bin/bash

emacs -eval '(find-file-read-only $1)'
-------------------------------------------------

mais bien entendu, il semble que emacs ne connaisse pas le fichier $1..
Est-ce qu'on peut passer un argument d'un script shell à une commande
emacs ?



Bien sûr. Mais les guillemets simples '' veulent dire en bash « prends
la chaine entre les guillemets telle qu'elle ». Ce que tu veux, c'est
au final lancer quelque chose comme

emacs -eval "(find-file-read-only "toto.txt")"

Et Emacs va interpréter le bout de lisp

(find-file-read-only "toto.txt")

(les guillemets extérieurs sont interprétés par le shell, et les
doubles autour de « toto.txt » sont échappés pour qu'ils soient passés
à Emacs, et que ce soit une chaine de caractères emacs-lisp).

On devrait donc y arriver avec :

emacs -eval "(find-file-read-only "$1")"

(qui ne marchera pas si le fichier contient des «  » ou des « " »
dans son nom)

Sinon, on peut aussi faire simplement :

emacs "$1" -eval '(toggle-read-only 1)'

--
Matthieu