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

Org *Edit formula* formules elisp

4 réponses
Avatar
jj.retorre
Lorsque je veux modifier une formule elisp d'une table org-mode
(org-table-edit-formulas) le buffer qui s'ouvre est en mode
fundamental. Ce n'est pas très pratique. Je suis obligé d'ouvrir un
buffer temporaire en emacs-lisp-mode pour bénéficier du confort de ce
mode. Y a-t-il une solution plus intelligente ?


Pour être plus concret, voici un exemple de tableau qui me pose
problème :

Je suis malheureusement un gros consommateur de médicaments et je
tiens à jour la quantité de médicaments disponibles pour ne pas être
pris de court. Certains sont à prendre plusieurs fois par jour, d'autre
sont à prendre à intervalles réguliers. La colonne $5 enregistre
l'inventaire à la date indiquée. Le calcul consiste à indiquer le
nombres de jours de traitement disponibles ($2) compte tenu des
éventuels oublis ($4)

|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Médicament | Jours | à renouveler | Manques | [2017-03-31 ven.] | fois/j | tous les |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Eau de source 2cl | 4 | Oui | | 33 | 3 | 1 |
| air de la campagne 10cm^3 | 34 | - | 5 | 36 | 1 | 1 |
| fleur de pissenlit 2mg | 4 | Oui | | 5 | 1 | 2 |
| Extrait de Rose de Berne 2mg | 56 | - | | 127 | 2 | 1 |
| Et caetera dilué 3mg/l | 18 | Oui | 2 | 23 | 1 | 1 |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
#+TBLFM: $2='(let ((nb-init (string-to-number $5) ) (nb-jours (org-time-stamp-to-now @1$5 ) ) (p-jour(string-to-number $6)) (tous-les (string-to-number $7)) (manques (string-to-number $4)))(* tous-les(/ (+(- nb-init (/(* p-jour (- nb-jours))tous-les))manques)p-jour)))::$3='(if (> (string-to-number $2) 28 ) "-" "Oui" )

Comme vous pourrez le constater, éditer la colonne $2 en ignorant la solution que vous allez me proposer n'est pas très
confortable .

--
JJR

4 réponses

Avatar
vincent.belaiche
(Jean-Jacques Rétorré) writes:
Lorsque je veux modifier une formule elisp d'une table org-mode
(org-table-edit-formulas) le buffer qui s'ouvre est en mode
fundamental. Ce n'est pas très pratique. Je suis obligé d'ouvrir un
buffer temporaire en emacs-lisp-mode pour bénéficier du confort de ce
mode. Y a-t-il une solution plus intelligente ?
Pour être plus concret, voici un exemple de tableau qui me pose
problème :
Je suis malheureusement un gros consommateur de médicaments et je
tiens à jour la quantité de médicaments disponibles pour ne pas être
pris de court. Certains sont à prendre plusieurs fois par jour,
d'autre sont à prendre à intervalles réguliers. La colonne $5
enregistre l'inventaire à la date indiquée. Le calcul consiste à
indiquer le nombres de jours de traitement disponibles ($2) compte
tenu des éventuels oublis ($4)
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Médicament | Jours | à renouveler | Manques | [2017-03-31 ven.] | fois/j | tous les |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Eau de source 2cl | 4 | Oui | | 33 | 3 | 1 |
| air de la campagne 10cm^3 | 34 | - | 5 | 36 | 1 | 1 |
| fleur de pissenlit 2mg | 4 | Oui | | 5 | 1 | 2 |
| Extrait de Rose de Berne 2mg | 56 | - | | 127 | 2 | 1 |
| Et caetera dilué 3mg/l | 18 | Oui | 2 | 23 | 1 | 1 |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
#+TBLFM: $2='(let ((nb-init (string-to-number $5) ) (nb-jours (org-time-stamp-to-now @1$5 ) ) (p-jour(string-to-number $6)) (tous-les (string-to-number $7)) (manques (string-to-number $4)))(* tous-les(/ (+(- nb-init (/(* p-jour (- nb-jours))tous-les))manques)p-jour)))::$3='(if (> (string-to-number $2) 28 ) "-" "Oui" )
Comme vous pourrez le constater, éditer la colonne $2 en ignorant la
solution que vous allez me proposer n'est pas très confortable .
--
JJR

Juste pour dire que chez moi ce n'est pas du mode purement Fundamental,
car lorsque le curseur est sur une référence alors la cellule
correspondante est mise en vedette.
Sinon tu as SES pour les feuilles de calcul... Pour info SES ne permet
pas de faire une formule par colonne...
Vincent.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
jj.retorre
dim. 09 avril 2017, (Vincent Belaïche) disait :
(Jean-Jacques Rétorré) writes:
Lorsque je veux modifier une formule elisp d'une table org-mode
(org-table-edit-formulas) le buffer qui s'ouvre est en mode
fundamental. Ce n'est pas très pratique. Je suis obligé d'ouvrir un
buffer temporaire en emacs-lisp-mode pour bénéficier du confort de ce
mode. Y a-t-il une solution plus intelligente ?
Pour être plus concret, voici un exemple de tableau qui me pose
problème :
Je suis malheureusement un gros consommateur de médicaments et je
tiens à jour la quantité de médicaments disponibles pour ne pas être
pris de court. Certains sont à prendre plusieurs fois par jour,
d'autre sont à prendre à intervalles réguliers. La colonne $5
enregistre l'inventaire à la date indiquée. Le calcul consiste à
indiquer le nombres de jours de traitement disponibles ($2) compte
tenu des éventuels oublis ($4)
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Médicament | Jours | à renouveler | Manques | [2017-03-31 ven.] | fois/j | tous les |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Eau de source 2cl | 4 | Oui | | 33 | 3 | 1 |
| air de la campagne 10cm^3 | 34 | - | 5 | 36 | 1 | 1 |
| fleur de pissenlit 2mg | 4 | Oui | | 5 | 1 | 2 |
| Extrait de Rose de Berne 2mg | 56 | - | | 127 | 2 | 1 |
| Et caetera dilué 3mg/l | 18 | Oui | 2 | 23 | 1 | 1 |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
#+TBLFM: $2='(let ((nb-init (string-to-number $5) ) (nb-jours
(org-time-stamp-to-now @1$5 ) ) (p-jour(string-to-number $6))
(tous-les (string-to-number $7)) (manques (string-to-number $4)))(*
tous-les(/ (+(- nb-init (/(* p-jour (-
nb-jours))tous-les))manques)p-jour)))::$3='(if (> (string-to-number
$2) 28 ) "-" "Oui" )
Comme vous pourrez le constater, éditer la colonne $2 en ignorant la
solution que vous allez me proposer n'est pas très confortable .
--
JJR

Juste pour dire que chez moi ce n'est pas du mode purement Fundamental,
car lorsque le curseur est sur une référence alors la cellule
correspondante est mise en vedette.
Sinon tu as SES pour les feuilles de calcul... Pour info SES ne permet
pas de faire une formule par colonne...

Ben oui, chez moi aussi ça fonctionne comme ça. J'ai utilisé SES
org-mode est clairement plus sympa, j'ai abandonné. Et puis, mon
tableau, je l'exporte en HTML pour le récupérer via Dropbox sur mon
smartphone.
(au passage, mobileOrg android ne fonctionne pas sur mon Moto E :-( )
C'est pas plus compliqué d'ouvrir un buffer en emacs-lisp-mode. Je
pensais que j'avais manqué quelque chose de simple, apparemment ça ne
l'est pas.
Je vais essayer de me faire un org-table-edit-formulas à ma sauce.
Merci pour ta réponse qui m'aide quand même d'une certaine façon.
--
JJR.
Avatar
vincent.belaiche
(Jean-Jacques Rétorré) writes:
dim. 09 avril 2017, (Vincent Belaïche) disait :
(Jean-Jacques Rétorré) writes:
Lorsque je veux modifier une formule elisp d'une table org-mode
(org-table-edit-formulas) le buffer qui s'ouvre est en mode
fundamental. Ce n'est pas très pratique. Je suis obligé d'ouvrir un
buffer temporaire en emacs-lisp-mode pour bénéficier du confort de ce
mode. Y a-t-il une solution plus intelligente ?
Pour être plus concret, voici un exemple de tableau qui me pose
problème :
Je suis malheureusement un gros consommateur de médicaments et je
tiens à jour la quantité de médicaments disponibles pour ne pas être
pris de court. Certains sont à prendre plusieurs fois par jour,
d'autre sont à prendre à intervalles réguliers. La colonne $5
enregistre l'inventaire à la date indiquée. Le calcul consiste à
indiquer le nombres de jours de traitement disponibles ($2) compte
tenu des éventuels oublis ($4)
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Médicament | Jours | à renouveler | Manques | [2017-03-31 ven.] | fois/j | tous les |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Eau de source 2cl | 4 | Oui | | 33 | 3 | 1 |
| air de la campagne 10cm^3 | 34 | - | 5 | 36 | 1 | 1 |
| fleur de pissenlit 2mg | 4 | Oui | | 5 | 1 | 2 |
| Extrait de Rose de Berne 2mg | 56 | - | | 127 | 2 | 1 |
| Et caetera dilué 3mg/l | 18 | Oui | 2 | 23 | 1 | 1 |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
#+TBLFM: $2='(let ((nb-init (string-to-number $5) ) (nb-jours
(org-time-stamp-to-now @1$5 ) ) (p-jour(string-to-number $6))
(tous-les (string-to-number $7)) (manques (string-to-number $4)))(*
tous-les(/ (+(- nb-init (/(* p-jour (-
nb-jours))tous-les))manques)p-jour)))::$3='(if (> (string-to-number
$2) 28 ) "-" "Oui" )
Comme vous pourrez le constater, éditer la colonne $2 en ignorant la
solution que vous allez me proposer n'est pas très confortable .
--
JJR

Juste pour dire que chez moi ce n'est pas du mode purement Fundamental,
car lorsque le curseur est sur une référence alors la cellule
correspondante est mise en vedette.
Sinon tu as SES pour les feuilles de calcul... Pour info SES ne permet
pas de faire une formule par colonne...

Ben oui, chez moi aussi ça fonctionne comme ça. J'ai utilisé SES
org-mode est clairement plus sympa, j'ai abandonné.

Juste pour info, je suis le mainteneur de SES, mais là clairement je
n'ai pas vraiment le temps de faire tout ce que je voudrais y rajouter
(permutation de cellules, formule mathématique Calc, etc...). C'est vrai
que rajouter un tampon temportaire pour éditer confortablement les
formules serait intéressant.
Et puis, mon tableau, je l'exporte en HTML pour le récupérer via
Dropbox sur mon smartphone.

Là en effet, en SES pour ce genre d'exportation compliquée je m'écris
une petite macro. Ça serait peut-être une bonne idée que je donne un
exemple dans le manuel...
(au passage, mobileOrg android ne fonctionne pas sur mon Moto E :-( )
C'est pas plus compliqué d'ouvrir un buffer en emacs-lisp-mode. Je
pensais que j'avais manqué quelque chose de simple, apparemment ça ne
l'est pas. Je vais essayer de me faire un org-table-edit-formulas à
ma sauce.
Merci pour ta réponse qui m'aide quand même d'une certaine façon.
--
JJR.

Vincent.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
jj.retorre
lun. 10 avril 2017, (Vincent Belaïche) disait :
(Jean-Jacques Rétorré) writes:
dim. 09 avril 2017, (Vincent Belaïche) disait :
(Jean-Jacques Rétorré) writes:
Lorsque je veux modifier une formule elisp d'une table org-mode
(org-table-edit-formulas) le buffer qui s'ouvre est en mode
fundamental. Ce n'est pas très pratique. Je suis obligé d'ouvrir un
buffer temporaire en emacs-lisp-mode pour bénéficier du confort de ce
mode. Y a-t-il une solution plus intelligente ?
Pour être plus concret, voici un exemple de tableau qui me pose
problème :
Je suis malheureusement un gros consommateur de médicaments et je
tiens à jour la quantité de médicaments disponibles pour ne pas être
pris de court. Certains sont à prendre plusieurs fois par jour,
d'autre sont à prendre à intervalles réguliers. La colonne $5
enregistre l'inventaire à la date indiquée. Le calcul consiste à
indiquer le nombres de jours de traitement disponibles ($2) compte
tenu des éventuels oublis ($4)
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Médicament | Jours | à renouveler | Manques | [2017-03-31 ven.]
| | fois/j | tous les |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
| Eau de source 2cl | 4 | Oui | | 33 | 3 | 1 |
| air de la campagne 10cm^3 | 34 | - | 5 | 36 | 1 | 1 |
| fleur de pissenlit 2mg | 4 | Oui | | 5 | 1 | 2 |
| Extrait de Rose de Berne 2mg | 56 | - | | 127 | 2 | 1 |
| Et caetera dilué 3mg/l | 18 | Oui | 2 | 23 | 1 | 1 |
|------------------------------+-------+--------------+---------+-------------------+--------+----------|
#+TBLFM: $2='(let ((nb-init (string-to-number $5) ) (nb-jours
(org-time-stamp-to-now @1$5 ) ) (p-jour(string-to-number $6))
(tous-les (string-to-number $7)) (manques (string-to-number $4)))(*
tous-les(/ (+(- nb-init (/(* p-jour (-
nb-jours))tous-les))manques)p-jour)))::$3='(if (> (string-to-number
$2) 28 ) "-" "Oui" )
Comme vous pourrez le constater, éditer la colonne $2 en ignorant la
solution que vous allez me proposer n'est pas très confortable .
--
JJR

Juste pour dire que chez moi ce n'est pas du mode purement Fundamental,
car lorsque le curseur est sur une référence alors la cellule
correspondante est mise en vedette.
Sinon tu as SES pour les feuilles de calcul... Pour info SES ne permet
pas de faire une formule par colonne...

Ben oui, chez moi aussi ça fonctionne comme ça. J'ai utilisé SES
org-mode est clairement plus sympa, j'ai abandonné.

Juste pour info, je suis le mainteneur de SES, mais là clairement je
n'ai pas vraiment le temps de faire tout ce que je voudrais y rajouter
(permutation de cellules, formule mathématique Calc, etc...). C'est vrai
que rajouter un tampon temportaire pour éditer confortablement les
formules serait intéressant.
Et puis, mon tableau, je l'exporte en HTML pour le récupérer via
Dropbox sur mon smartphone.

Là en effet, en SES pour ce genre d'exportation compliquée je m'écris
une petite macro. Ça serait peut-être une bonne idée que je donne un
exemple dans le manuel...

J'ai une solution qui semble convenir en questionnant sur Emacs Stack
exchange
#+BEGIN_SRC emacs-lisp
(defun my--advice-for-edit-formulas (orig-fun &rest args)
(advice-add #'fundamental-mode :after #'emacs-lisp-mode)
(apply orig-fun args)
(advice-remove #'fundamental-mode #'emacs-lisp-mode))
(advice-add #'org-table-edit-formulas :around
#'my--advice-for-edit-formulas)
#+END_SRC
Le probléme est que si on active emacs-mode-lisp, il faut ensuite
revenir dans l'environnement de l'appel de org-table-edit-formulas.
Une solution que je n'aurais certainement pas trouvé tout seul...
--
JJR.