GNU Emacs Lisp Reference Manual
An important function of each major mode is to customize the TAB key to indent properly for the language being edited. This section describes the mechanism of the TAB key and how to control it. The functions in this section return unpredictable values.
TAB (and various commands) to indent the current line. The command indent-according-to-mode does no more than call this function. In Lisp mode, the value is the symbol lisp-indent-line; in C mode, c-indent-line; in Fortran mode, fortran-indent-line. In Fundamental mode, Text mode, and many other modes with no standard for indentation, the value is indent-to-left-margin (which is the default value).
indent-line-function to indent the current line in a way appropriate for the current major mode.indent-line-function to indent the current line; except that if that function is indent-to-left-margin, it calls insert-tab instead. (That is a trivial command that inserts a tab character.)It does indentation by calling the current indent-line-function. In programming language modes, this is the same thing TAB does, but in some text modes, where TAB inserts a tab, newline-and-indent indents to the column specified by left-margin.
This command does indentation on both lines according to the current major mode, by calling the current value of indent-line-function. In programming language modes, this is the same thing TAB does, but in some text modes, where TAB inserts a tab, reindent-then-newline-and-indent indents to the column specified by left-margin.