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

Lancer emacsclient dans un mode spécifique

11 réponses
Avatar
Denis Bitouzé
Bonjour,

je souhaiterais, en ligne de commandes, lancer emacsclient dans un mode
sp=E9cifique (en l'occurrence mail-mode). J'ai trouv=E9 sur Internet
l'option :

--execute '(mail-mode)'

mais elle ne semble valable que pour emacs (serveur) et en tous cas pas
pour emacsclient.

Merci d'avance pour toute piste.
--=20
Denis

10 réponses

1 2
Avatar
Pascal J. Bourguignon
Denis Bitouzé writes:

Bonjour,

je souhaiterais, en ligne de commandes, lancer emacsclient dans un mode
spécifique (en l'occurrence mail-mode). J'ai trouvé sur Internet
l'option :

--execute '(mail-mode)'

mais elle ne semble valable que pour emacs (serveur) et en tous cas pas
pour emacsclient.

Merci d'avance pour toute piste.



emacsclient --eval '(mail-mode)'

Mais attention: ça évalue dans un tampon " *server*:

emacsclient --eval '(current-buffer)'
--> #<buffer *server*>


Donc, faire plutôt quelque chose comme:

emacsclient --eval '(with-current-buffer (switch-to-buffer (get-buffer-create "mon-buffer")) (mail-mode))'

(switch-to-buffer si tu veux le voir apparaître, sinon tu peux
l'éliminer).

--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
You know you've been lisping too long when you see a recent picture of George
Lucas and think "Wait, I thought John McCarthy was dead!" -- Dalek_Baldwin
Avatar
Denis Bitouzé
Le dimanche 30/06/13 à 12h22,
"Pascal J. Bourguignon" a écrit :

Snif car :

emacsclient --eval '(mail-mode)'



$ emacsclient --eval '(mail-mode)'
nil

[...]

emacsclient --eval '(with-current-buffer (switch-to-buffer
(get-buffer-create "mon-buffer")) (mail-mode))'

[...]



$ emacsclient --eval '(with-current-buffer (switch-to-buffer
(get-buffer-create "mon-buffer")) (mail-mode))'
nil

Merci en tous cas.
--
Denis
Avatar
Denis Bitouzé
Le dimanche 30/06/13 à 12h42,
Denis Bitouzé a écrit :

$ emacsclient --eval '(with-current-buffer (switch-to-buffer
(get-buffer-create "mon-buffer")) (mail-mode))'
nil



Oups, je n'ai rien dit : ça marche en ligne de commandes.

Mais, en fait, ma question vient de ce que je veux utiliser donc
emacsclient en mode mail-mode comme éditeur par défaut de mon
client mail claws-mail. Il y a un champ spécifique pour ce faire
mais y mettre, en plus de ce que tu m'as indiqué, ce que j'avais vu
conseillé pour cette action spécifique, à savoir :

--no-wait '%s'

conduit à l'erreur :

*ERROR*: Symbol's value as variable is void: /home/bitouze/.claws-mail/t mp/tmpmsg.0x8ba4d48
--
Denis
Avatar
Pascal J. Bourguignon
Denis Bitouzé writes:

Le dimanche 30/06/13 à 12h42,
Denis Bitouzé a écrit :

$ emacsclient --eval '(with-current-buffer (switch-to-buffer
(get-buffer-create "mon-buffer")) (mail-mode))'
nil



Oups, je n'ai rien dit : ça marche en ligne de commandes.

Mais, en fait, ma question vient de ce que je veux utiliser donc
emacsclient en mode mail-mode comme éditeur par défaut de mon
client mail claws-mail. Il y a un champ spécifique pour ce faire
mais y mettre, en plus de ce que tu m'as indiqué, ce que j'avais vu
conseillé pour cette action spécifique, à savoir :

--no-wait '%s'

conduit à l'erreur :

*ERROR*: Symbol's value as variable is void: /home/bitouze/.claws-mail/tmp/tmpmsg.0x8ba4d48




Quand on passe une option --eval, tous les arguments sont pris comme des
expressions lisp à évaluer, au lieu de les considérer comme des fichiers
à éditer.

Donc si on veut utiliser emacsclient pour éditer des fichiers pour un
autre programme, ça va être plus difficile. En général dans ce cas, on
veut qu'emacsclient attende la fin de l'édition de ces fichier pour
continuer, afin que le programme puisse reprendre avce les fichiers
finis d'éditer. Donc normalement, on ne veut pas passer --no-wait, et
pas non plus --eval.

Il reste donc seulement les mécanismes des variables locale de fichier,
de répertoire, ou la liste associative de mode automatique.


Dans le cas d'un programme comme claws-mail, le contenu du fichier
initial est généralement établi par le programme, alors pour y insérer
des variables locales de fichier, il faudrait faire intervenir un script
intermédiaire. De même, le répertoire où se trouve ces fichiers est
souvent différent et créé dynamiquement (avec une partie aléatoire ou
dépendant de l'utilisateur), ce qui rend difficule la configuration de
variables locale de répertoire. D'un autre côté, les fichiers que ces
programmes passent à l'éditeur ont on général une partie du nom ou du
chemin fixe. On peut alors envisager d'utiliser la liste associative de
mode automatique.

D'après l'exemple que tu donnes :

"/home/bitouze/.claws-mail/tmp/tmpmsg.0x8ba4d48"

on peut envisager l'expression régulière suivante:

"^.*/.claws-mail/tmp/tmpmsg..*$"

Donc, mettre quelque chose comme:

(add-to-list 'auto-mode-alist
'("^.*/.claws-mail/tmp/tmpmsg..*$" . mail-mode))

dans ~/.emacs devrait faire l'affaire, avec comme editeur externe pour
claws-mail simplement emacsclient.


--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
You know you've been lisping too long when you see a recent picture of George
Lucas and think "Wait, I thought John McCarthy was dead!" -- Dalek_Baldwin
Avatar
Denis Bitouzé
Le dimanche 30/06/13 à 15h31,
"Pascal J. Bourguignon" a écrit :

Quand on passe une option --eval, tous les arguments sont pris comme
des expressions lisp à évaluer, au lieu de les considérer comme des
fichiers à éditer.



OK.

Donc si on veut utiliser emacsclient pour éditer des fichiers pour un
autre programme, ça va être plus difficile. En général dans ce c as,
on veut qu'emacsclient attende la fin de l'édition de ces fichier pour
continuer, afin que le programme puisse reprendre avce les fichiers
finis d'éditer. Donc normalement, on ne veut pas passer --no-wait, et
pas non plus --eval.



OK.

Il reste donc seulement les mécanismes des variables locale de
fichier, de répertoire, ou la liste associative de mode automatique.



Argh !

Dans le cas d'un programme comme claws-mail, le contenu du fichier
initial est généralement établi par le programme, alors pour y ins érer
des variables locales de fichier, il faudrait faire intervenir un
script intermédiaire. De même, le répertoire où se trouve ces
fichiers est souvent différent et créé dynamiquement (avec une part ie
aléatoire ou dépendant de l'utilisateur), ce qui rend difficule la
configuration de variables locale de répertoire. D'un autre côté,
les fichiers que ces programmes passent à l'éditeur ont on général
une partie du nom ou du chemin fixe. On peut alors envisager
d'utiliser la liste associative de mode automatique.



OK.

D'après l'exemple que tu donnes :

"/home/bitouze/.claws-mail/tmp/tmpmsg.0x8ba4d48"

on peut envisager l'expression régulière suivante:

"^.*/.claws-mail/tmp/tmpmsg..*$"

Donc, mettre quelque chose comme:

(add-to-list 'auto-mode-alist
'("^.*/.claws-mail/tmp/tmpmsg..*$" .
mail-mode))

dans ~/.emacs devrait faire l'affaire, avec comme editeur externe pour
claws-mail simplement emacsclient.



Merci pour ces explications détaillées.

« emacsclient » ne suffit pas, mais avec « emacsclient '%s' », ça
marche du tonnerre : la preuve, c'est avec ça que j'écris le
présent message.

Merci beaucoup !
--
Denis
Avatar
Denis Bitouzé
Le dimanche 30/06/13 à 15h31,
"Pascal J. Bourguignon" a écrit :

Donc, mettre quelque chose comme:

(add-to-list 'auto-mode-alist
'("^.*/.claws-mail/tmp/tmpmsg..*$" . mail-mode))



J'aimerais cumuler mail-mode avec org-mode. J'ai tenté :

(add-to-list 'auto-mode-alist
'("^.*/.claws-mail/tmp/tmpmsg..*$" . mail-mode org-mode))

mais seul le dernier est pris en compte. Dois-je nécessairement
recourir à mmm-mode pour ce faire ?

Merci d'avance.
--
Denis
Avatar
Nicolas Richard
Denis Bitouzé writes:
J'aimerais cumuler mail-mode avec org-mode. J'ai tenté :



Quel est le but ? Ces deux modes sont des "major modes", ce qui empêche
de les activer en même temps.

(add-to-list 'auto-mode-alist
'("^.*/.claws-mail/tmp/tmpmsg..*$" . mail-mode org-mode))

mais seul le dernier est pris en compte.



Et en plus ça a provoqué des erreurs ;)

Dois-je nécessairement recourir à mmm-mode pour ce faire ?



Diverses solutions sont envisageables selon ce qui t'intéresse dans
chaque mode. Plus précisément, quel est l'intérêt de mail-mode dans ce
cas-ci ? Peut être qu'ajouter quelque "keybindings" serait suffisant ?

--
N.
Avatar
jca+news
Denis Bitouzé writes:

Le dimanche 30/06/13 à 15h31,
"Pascal J. Bourguignon" a écrit :

Donc, mettre quelque chose comme:

(add-to-list 'auto-mode-alist
'("^.*/.claws-mail/tmp/tmpmsg..*$" . mail-mode))



J'aimerais cumuler mail-mode avec org-mode. J'ai tenté :



Essaie ça : (info "(org) Orgstruct mode")

[...]

--
Jérémie Courrèges-Anglas
Empreinte PGP : 61DB D9A0 00A4 67CF 2A90 8961 6191 8FBF 06A1 1494
Avatar
Denis Bitouzé
Le lundi 01/07/13 à 12h26,
"Nicolas Richard" a écrit :

Quel est le but ? Ces deux modes sont des "major modes", ce qui
empêche de les activer en même temps.



Mais argh-euh !

Diverses solutions sont envisageables selon ce qui t'intéresse dans
chaque mode. Plus précisément, quel est l'intérêt de mail-mode da ns ce
cas-ci ?



À dire vrai, je ne sais pas trop : j'imaginais, peut-être à tort,
que ce mode proposait des facilités d'édition propre aux mails, par
exemple par une gestion particulière des citations (c-à-d de ce qui
est précédé de « > »).

Peut être qu'ajouter quelque "keybindings" serait suffisant ?



Peut-être : je navigue à vue :)

Merci.
--
Denis
Avatar
Denis Bitouzé
Le lundi 01/07/13 à 13h17,
jca+ (Jérémie Courrèges-Anglas) a écrit :

Essaie ça : (info "(org) Orgstruct mode")



1. J'ai lu.
2. J'ai adapté : (add-hook 'mail-mode-hook 'turn-on-orgstruct++).
3. J'ai adopté : la preuve, la présente liste a été construite avec
les facilités d'édition de Org-mode :)

Merci !
--
Denis
1 2