Hello, attached there are a few patches reworking the code, fixing the bug, and introducing a new mode flag to enable Calc's units simplification mode as discussed in a recent thread on the mailing list. I haven't updated the documentation. I can do it once we agree that this feature is a good idea. Cheers, Dan On 19/10/2020 17:38, Daniele Nicolodi wrote: > Hello, > > I am hacking org-table-eval-formula (see thread about monetary values in > org-tables) which uses this inline function: > > (defsubst org-table--set-calc-mode (var &optional value) > (if (stringp var) > (setq var (assoc var '(("D" calc-angle-mode deg) > ("R" calc-angle-mode rad) > ("F" calc-prefer-frac t) > ("S" calc-symbolic-mode t))) > value (nth 2 var) var (nth 1 var))) > (if (memq var org-tbl-calc-modes) > (setcar (cdr (memq var org-tbl-calc-modes)) value) > (cons var (cons value org-tbl-calc-modes))) > org-tbl-calc-modes) > > which I am not able to understand or which is not correct. > > The first (if ...) does some value substitutions, however, IIUC the > second (if ...) sets a new value for an entry in the org-tbl-calc-modes > plist if the entry is already present and builds a new plist with the > entry prepended if the entry is not there. However, the original plist > is returned and not the one with the new entry prepended. > > It does not seem to be the intended behavior. > > Shouldn't this be simply: > > (defsubst org-table--set-calc-mode (var &optional value) > (if (stringp var) > (setq var (assoc var '(("D" calc-angle-mode deg) > ("R" calc-angle-mode rad) > ("F" calc-prefer-frac t) > ("S" calc-symbolic-mode t))) > value (nth 2 var) var (nth 1 var))) > (plist-put org-tbl-calc-modes var value)) > > or, better, the code refactored to do not use this function? > > Cheers, > Dan >