Hi Stefan, On 11/21/17 20:59, Stefan Monnier wrote: >> match BatEnum.peek enum with >> | None -> {re; im = multiplier} >> | Some (Kwd ".") >> | Some (Kwd "*") -> >> BatEnum.junk enum; >> parse_im ~multiplier re >> | Some _token -> >> parse_im ~multiplier re >> >> However, Tuareg, in my currenct configuration does instead this: >> >> match BatEnum.peek enum with >> | None -> {re; im = multiplier} >> | Some (Kwd ".") >> | Some (Kwd "*") -> >> BatEnum.junk enum; >> parse_im ~multiplier re >> | Some _token -> >> parse_im ~multiplier re > > Here's how you can do it: > - Go to the first line that Tuareg indents wrong (i.e. `| Some (Kwd "*") ->`) > - Change its indentation to match your expectation > - run `M-x smie-config-set-indent RET` > - this should suggest to set (:before "|-or") to 0, which you can accept. > - go to the next line (that Tuareg indents wrong) > - Change its indentation to match your expectation > - run `M-x smie-config-set-indent RET` > - this time it asks you which rule you want to change (because 2 rules > are used to determine this indentation): either (after "->") or > (before "->") depending on whether you want to also change > > | Some (Kwd "*") > -> BatEnum.junk enum; > > or not. > > - once that is done, you should be able to do `M-x smie-config-save > RET`. To save the result into your Customize settings. So far so good. After following the above instructions, I was able to tweak the Emacs behavior in the desired way. Thank you! What puzzled me was that once I restart Eamcs, I get the old behavior. I am guessing that this is because I need to "save" the configuration somehow, which I failed to figure out. So, first, one must "save SMIE configuration" to "customize setting". And then one must "save customize settings" to ~/.emacs QUESTION: Is that right? MY ASSUMPTION WAS: Yes. I have tried two things (and I failed in both cases); the 1-st attempt: ----------------- After doing "M-x smie-config-save", I have tried to use "M-x customize-save-variable smie-config". Emacs responded: Wrote /home/mkosik/.emacs This sounded like a progress. After I looked at ~/.emacs, I can see this: (load "/home/mkosik/.opam/4.06.0/share/emacs/site-lisp/tuareg-site-file") (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(inhibit-startup-screen t) '(smie-config nil)) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) This does not seem currect, does it? (At least I would expect "smie-config" variable to be set to something interesting, not "nil".) To confirm, I restarted Emacs and I can confirm, that the Emacs behaves again in the original undesired way (defined in my first email) FAIL the 2-nd attempt After repreating your helpful instructions and doing "M-x smie-config-save", I tried to use "M-x customize-save-customized" Emacs responded: Wrote /home/mkosik/.emacs That file changed in the following way: (load "/home/mkosik/.opam/4.06.0/share/emacs/site-lisp/tuareg-site-file") (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(inhibit-startup-screen t) '(smie-config (quote ((tuareg-mode (2 :after "->" 1) (0 :before "|-or" nil)))))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) This is more like it (I thought). I optimistically restarted Emacs and again, unfortunatelly, Emacs behaves again in the original undesired way (defined in my first email). I find this strange because "M: (print smie-config)" gives me: (tuareg-mode (2 :after "->" 1) (0 :before "|-or" nil))) (tuareg-mode (2 :after "->" 1) (0 :before "|-or" nil))) FAIL Is this a bug? Is this the expected behavior and I merely do not understadn SMIE and should read some more documentation? If yes, then which one? I haven't noticed many questions about Ocaml indentation in Emacs, so I am guessing that this works for everyone perfectly. Is that the case?