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
>