diff options
Diffstat (limited to 'doc/emacs/programs.texi')
-rw-r--r-- | doc/emacs/programs.texi | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 69b4f56bee1..62df88a731e 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -163,6 +163,7 @@ Emacs we use it for all languages. * Left Margin Paren:: An open-paren or similar opening delimiter starts a defun if it is at the left margin. * Moving by Defuns:: Commands to move over or mark a major definition. +* Moving by Sentences:: Commands to move over certain code units. * Imenu:: Making buffer indexes as menus. * Which Function:: Which Function mode shows which function you are in. @end menu @@ -265,6 +266,66 @@ tree-sitter library provide control of this behavior: if the variable @code{treesit-defun-tactic} is set to the value @code{top-level}, the defun commands will find the @emph{outermost} defuns instead. +@node Moving by Sentences +@subsection Moving by Sentences +@cindex sentences, in programming languages + + These commands move point or set up the region based on units of +code, also called @dfn{sentences}. Even though sentences are usually +considered when writing human languages, Emacs can use the same +commands to move over certain constructs in programming languages +(@pxref{Sentences}, @pxref{Moving by Defuns}). In a programming +language a sentence is usually a complete language construct smaller +than defuns, but larger than sexps (@pxref{List Motion,,, elisp, The +Emacs Lisp Reference Manual}). What exactly is a sentence in this +case depends on the programming language, but usually it is a complete +statement, such as a variable definition and initialization, or a +conditional statement. An example of a sentence in the C language +could be + +@example +int x = 5; +@end example + +@noindent +or in the JavaScript language it could look like + +@example +@group +const thing = () => console.log("Hi"); +@end group +@group +const foo = [1] == '1' + ? "No way" + : "..."; +@end group + +@end example + +@table @kbd +@item M-a +Move to beginning of current or preceding sentence +(@code{backward-sentence}). +@item M-e +Move to end of current or following sentence (@code{forward-sentence}). +@end table + +@cindex move to beginning or end of sentence +@cindex sentence, move to beginning or end +@kindex M-a @r{(programming modes)} +@kindex M-e @r{(programming modes)} +@findex backward-sentence @r{(programming modes)} +@findex forward-sentence @r{(programming modes)} + The commands to move to the beginning and end of the current +sentence are @kbd{M-a} (@code{backward-sentence}) and @kbd{M-e} +(@code{forward-sentence}). If you repeat one of these commands, or +use a positive numeric argument, each repetition moves to the next +sentence in the direction of motion. + + @kbd{M-a} with a negative argument @minus{}@var{n} moves forward +@var{n} times to the next end of a sentence. Likewise, @kbd{M-e} with +a negative argument moves back to the start of a sentence. + @node Imenu @subsection Imenu @cindex index of buffer definitions @@ -431,6 +492,9 @@ large chunks of code: @table @kbd @item C-M-q Reindent all the lines within one parenthetical grouping. +@item M-q +Fill a single paragraph in a defun, or reindent all the lines within +that defun. @item C-u @key{TAB} Shift an entire parenthetical grouping rigidly sideways so that its first line is properly indented. @@ -451,6 +515,21 @@ indentation of the line where the grouping starts). The function that etc. To correct the overall indentation as well, type @kbd{@key{TAB}} first. +@kindex M-q +@findex prog-fill-reindent-defun +@vindex beginning-of-defun-function +@vindex end-of-defun-function +@vindex fill-paragraph-function + To reindent the entire defun around point, type @kbd{M-q} +(@code{prog-fill-reindent-defun}). If point is in a comment or a +string, this command fills and indents the comment or string instead. +What exactly constitutes a comment, a string, or a defun depends on +the major mode: the bounds of a defun are decided by the variables +@code{beginning-of-defun-function} and @code{end-of-defun-function} +(@pxref{List Motion,,, elisp, The Emacs Lisp Reference Manual}), +and the filling mechanism is decided by @code{fill-paragraph-function} +(@pxref{Filling,,, elisp, The Emacs Lisp Reference Manual}). + @kindex C-u TAB If you like the relative indentation within a grouping but not the indentation of its first line, move point to that first line and type @@ -1308,6 +1387,12 @@ this, change the value of the variable @code{Man-switches} to @kbd{M-p} to switch between man pages in different sections. The mode line shows how many manual pages are available. +@vindex Man-prefer-synchronous-call + By default, @kbd{M-x man} calls the @code{man} program +asynchronously. You can force the invocation to be synchronous by +customizing @code{Man-prefer-synchronous-calls} to a non-@code{nil} +value. + @findex woman @cindex manual pages, on MS-DOS/MS-Windows An alternative way of reading manual pages is the @kbd{M-x woman} |