-
Notifications
You must be signed in to change notification settings - Fork 0
/
adjust-parens.html
125 lines (100 loc) · 4.82 KB
/
adjust-parens.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<!DOCTYPE HTML PUBLIC>
<html lang="en" xml:lang="en">
<head>
<title>GNU ELPA - adjust-parens</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" type="image/png" href="../favicon.png">
<link rel="stylesheet" href="//code.cdn.mozilla.net/fonts/fira.css">
<link rel="stylesheet" type="text/css" href="../layout.css">
<script src="../javascript/jquery.min.js" type="text/javascript"></script>
<script src="../javascript/jquery.filtertable.min.js" type="text/javascript"></script>
<script src="../javascript/package-search.js" type="text/javascript"></script>
<meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,width=device-width" />
</head>
<body>
<div class="wrapper">
<div class="header small">
<div class="container">
<h1><a href="index.html">GNU ELPA</a> - adjust-parens</h1>
</div>
</div>
<div class="container">
<h2 class="package">adjust-parens</h2><dl><dt>Description</dt><dd>Indent and dedent Lisp code, automatically adjust close parens</dd>
<dt>Latest</dt> <dd><a href="adjust-parens-3.1.tar">adjust-parens-3.1.tar</a>, 2021-May-19, 30.0 KiB</dd>
<dt>Maintainer</dt> <dd>Barry O'Reilly <[email protected]></dd>
<dt>Home page</dt> <dd><a href="https://elpa.gnu.org/packages/adjust-parens.html">https://elpa.gnu.org/packages/adjust-parens.html</a></dd>
<dt>Browse repository</dt> <dd><a href="https://git.savannah.gnu.org/cgit/emacs/elpa.git/?h=externals/adjust-parens">CGit</a> or <a href="https://git.savannah.gnu.org/gitweb/?p=emacs/elpa.git;a=shortlog;h=refs/heads/externals/adjust-parens">Gitweb</a></dd>
</dl><p>To install this package, run in Emacs:</p>
<pre>M-x <span class="kw">package-install</span> RET <span class="kw">adjust-parens</span> RET</pre><h2>Full description</h2><pre>
This package provides commands for indenting and dedenting Lisp
code such that close parentheses and brackets are automatically
adjusted to be consistent with the new level of indentation.
When reading Lisp, the programmer pays attention to open parens and
the close parens on the same line. But when a sexp spans more than
one line, she deduces the close paren from indentation alone. Given
that's how we read Lisp, this package aims to enable editing Lisp
similarly: automatically adjust the close parens programmers ignore
when reading. A result of this is an editing experience somewhat
like python-mode, which also offers "indent" and "dedent" commands.
There are differences because lisp-mode knows more due to existing
parens.
To use:
(require 'adjust-parens)
(add-hook 'emacs-lisp-mode-hook #'adjust-parens-mode)
(add-hook 'clojure-mode-hook #'adjust-parens-mode)
;; etc
This binds two keys in Lisp Mode:
(local-set-key (kbd "TAB") 'lisp-indent-adjust-parens)
(local-set-key (kbd "<backtab>") 'lisp-dedent-adjust-parens)
lisp-indent-adjust-parens potentially calls indent-for-tab-command
(the usual binding for TAB in Lisp Mode). Thus it should not
interfere with other TAB features like completion-at-point.
Some examples follow. | indicates the position of point.
(let ((x 10) (y (some-func 20))))
|
After one TAB:
(let ((x 10) (y (some-func 20)))
|)
After three more TAB:
(let ((x 10) (y (some-func 20
|))))
After two Shift-TAB to dedent:
(let ((x 10) (y (some-func 20))
|))
When dedenting, the sexp may have sibling sexps on lines below. It
makes little sense for those sexps to stay at the same indentation,
because they cannot keep the same parent sexp without being moved
completely. Thus they are dedented too. An example of this:
(defun func ()
(save-excursion
(other-func-1)
|(other-func-2)
(other-func-3)))
After Shift-TAB:
(defun func ()
(save-excursion
(other-func-1))
|(other-func-2)
(other-func-3))
If you indent again with TAB, the sexps siblings aren't indented:
(defun func ()
(save-excursion
(other-func-1)
|(other-func-2))
(other-func-3))
Thus TAB and Shift-TAB are not exact inverse operations of each
other, though they often seem to be.
</pre>
<div class="footer">
<div class="container">
<p>Copyright 2016-2021 <a href="https://fsf.org">Free Software Foundation</a>, Inc.</p>
<p>Design provided by <a href="https://nicolas.petton.fr">Nicolas Petton</a></p>
<p>
This website is licensed under the
<a href="https://creativecommons.org/licenses/by-nd/4.0/">CC BY-ND 4.0</a>
International License.
</p>
<p><a href="/jslicense.html" data-jslicense="1">JavaScript Licenses</a></p>
</div>
</div>
</body>