Hi,
The following snippet allows for the user to input two numbers $4 and $5, and the snippet computes the product $6=$4*$5. Then after entering a third number $7, the snippet computes a subtraction $8=$6-$7.
${1:$$(format-time-string "%Y/%m/%d")} StockSale --- ${2:<comment>}
; Stock Ticker: ${3:<ticker>}
; Price ${4:0.00}
; Number ${5:0}
Equity:StockSale -${6:0.00$(format "%.2f" (* (string-to-number (yas-field-value 4)) (string-to-number (yas-field-value 5))))}
Expenses:StockSale:Fee ${7:0.00}
Assets:Bank:Checking:Misc ${8:0.00$(format "%.2f" (- (string-to-number (yas-field-value 6)) (string-to-number (yas-field-value 7))))}
$0
It works.
However one thing I don't quite like about it is that you need to tab into fields 6 and 8 in order to get them to be computed/updated to reflect the latest values of $4, $5, and $7 (unlike when you have functions of a single variable implemented as mirrors and they are updated automatically).
Is there a way to make sure fields 6 and 8 are updated immediately whenever any of their dependencies (4,5 and 7) are updated, and also to even avoid having to tab into fields 6 and 8 at all?
I think that would be a much better user experience because
a) Since the user is really unable to modify or override the values of fields 6 and 8, there is no good reason (from a UX perspective) why the user should have to tab into those fields.
b) If the updates to fields 6 and 8 are not computed immediately and automatically whenever one of the dependencies (4, 5 and 7) is modified, then what happens is that you can modify one of the dependencies and then exit the snippet, and in that case
the invariants ($6=$4*$5 and $8=$6-$7) are *not* maintained and that is not good in some situations.
So basically I'd like to know how to evaluate $6 and $8 immediately whenever any character is typed into $4, $5 or $7. Kindly let me know if there is a way to do this already, or whether it is a worthwhile feature request.
Thank you,
Ambrose