Hello, after working on this I realized that the org-tbl-calc-modes variables is used only locally despite being declare globally. Maybe a remnant from pre-lexical-binding times. Attached is a patch (on top of the others one in this thread) that simplifies things a little. Cheers, Dan On 20/10/2020 15:30, Daniele Nicolodi wrote: > 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 >> >