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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
(require 'electric-operator) (apply #'electric-operator-add-rules-for-mode 'gams-mode electric-operator-prog-mode-rules) (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.