Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I determine why emacs indented a certain amount?

Tags:

emacs

elisp

In Emacs I'm editing some source code, and I hit <tab>. Emacs indents the line to n spaces. I'd like to change the amount that indents for that kind of line. How do I figure out what rule emacs applied to indent that line by n spaces?

I want to change n, but I need to figure out which of the many indentation-related variables Emacs just used.

like image 242
Daniel Stutzbach Avatar asked Dec 28 '22 11:12

Daniel Stutzbach


1 Answers

A generic answer is difficult. Some modes will make this more apparent than others, but in the general case (as they are free to implement indentation however they wish) I don't think you'll get away from needing to read some elisp.

Starting with the binding for TAB will work, but might be slightly time-consuming depending on how many layers of indirection are involved.

If you know that the major mode in question implements its own indentation, then one (non-rigorous, but fast) approach that you could try to help track down the functions being called is to use ELP, the built in elisp profiler. elp-instrument-package will instrument for profiling all functions with names matching the prefix string argument you specify. Therefore you might do something like the following in a PHP file (noting that php-mode tells you that it is derived from c-mode)

M-x elp-instrument-package RET php- RET
M-x elp-instrument-package RET c- RET
M-x elp-instrument-package RET indent RET

Now type TAB in your source code, and run M-x elp-results to see which of those instrumented functions were called.

At this point you're on your own -- look for the likely suspects, and see what the code is doing -- but it can be a handy way to filter the search.

Once you've finished, use M-x elp-restore-all to prevent any further profiling.

like image 152
phils Avatar answered Jan 08 '23 14:01

phils