Automatic operator formatting mode in Emacs
Emacs has a nice new mode called electric-operator developed by David Spepherd. It helps when you write code by formatting all operators in a predefined way. For example, in R it adds spaces around the operator signs, when you write 1+1, this is automatically converted into 1 + 1.
You can define your own way of formatting for other modes. For gams-mode you add the following to your .emacs file
(apply #'electric-operator-add-rules-for-mode 'gams-mode
(cons "=E=" " =E= ")
(cons "=G=" " =G= ")
(cons "*" #'gams-mode-*)
(cons "**" " ** "))
(add-hook 'gams-mode-hook #'electric-operator-mode)
(add-hook 'ess-mode-hook #'electric-operator-mode)
(defun gams-mode-* ()
(cond ((bolp) "* ")
;; Othewise act as normal
(" * ")))
First you set gams-mode as a mode on which electric operator can work.Then you add some rules. After that you set a hook so electric-operator is automatically started when you use Gams (or ESS).
A special formatting is necessary for the comments in GAMS as they start with the same symbol as the multiplication. With the help of David, I could add a function gams-mode-* that changes the “*” used as a comment in “* “ and otherwise in “ * “. It checks if the “*” symbol is at the beginning of the line and in that case will not add a space in front of it.
It probably needs some more tweaking, and I will keep you posted on improvements.