Org *Edit formula* formules elisp
Le
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
(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
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.
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.
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...
Vincent.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
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.