<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?action=history&amp;feed=atom&amp;title=Slang-mode</id>
	<title>Slang-mode - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?action=history&amp;feed=atom&amp;title=Slang-mode"/>
	<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;action=history"/>
	<updated>2026-05-01T10:20:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.7</generator>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;diff=1592&amp;oldid=prev</id>
		<title>Thalhammer at 08:13, 25 June 2018</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;diff=1592&amp;oldid=prev"/>
		<updated>2018-06-25T08:13:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:13, 25 June 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot; &gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tools]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tools]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;; slang-mode.el --- a major-mode for editing slang scripts&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;; slang-mode.el --- a major-mode for editing slang scripts&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l713&quot; &gt;Line 713:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 713:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;; slang-mode.el ends here&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;; slang-mode.el ends here&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thalhammer</name></author>
	</entry>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;diff=1469&amp;oldid=prev</id>
		<title>Oertel at 08:05, 3 May 2018</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;diff=1469&amp;oldid=prev"/>
		<updated>2018-05-03T08:05:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:05, 3 May 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot; &gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tools]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tools]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;; slang-mode.el --- a major-mode for editing slang scripts&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;; slang-mode.el --- a major-mode for editing slang scripts&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l713&quot; &gt;Line 713:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 713:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;; slang-mode.el ends here&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;; slang-mode.el ends here&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Oertel</name></author>
	</entry>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;diff=1465&amp;oldid=prev</id>
		<title>Oertel at 07:46, 3 May 2018</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;diff=1465&amp;oldid=prev"/>
		<updated>2018-05-03T07:46:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:46, 3 May 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tools&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;:editors&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tools]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Oertel</name></author>
	</entry>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;diff=1464&amp;oldid=prev</id>
		<title>Oertel: Created page with &quot;  Category:Tools:editors   ;;; slang-mode.el --- a major-mode for editing slang scripts  ;; Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.  ;; Modified By:...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Slang-mode&amp;diff=1464&amp;oldid=prev"/>
		<updated>2018-05-03T07:45:16Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;  &lt;a href=&quot;/wiki/index.php?title=Category:Tools:editors&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Tools:editors (page does not exist)&quot;&gt;Category:Tools:editors&lt;/a&gt;   ;;; slang-mode.el --- a major-mode for editing slang scripts  ;; Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.  ;; Modified By:...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tools:editors]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;;; slang-mode.el --- a major-mode for editing slang scripts&lt;br /&gt;
&lt;br /&gt;
;; Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.&lt;br /&gt;
&lt;br /&gt;
;; Modified By: Joe Robertson &amp;lt;jmrobert@sbcs.com&amp;gt;&lt;br /&gt;
;; Modified From: tcl-mode.el&lt;br /&gt;
;; &lt;br /&gt;
;; Original Author: Gregor Schmid &amp;lt;schmid@fb3-s7.math.tu-berlin.de&amp;gt;&lt;br /&gt;
;; Keywords: languages, processes, tools&lt;br /&gt;
&lt;br /&gt;
;; This file is part of GNU Emacs.&lt;br /&gt;
&lt;br /&gt;
;; GNU Emacs is free software; you can redistribute it and/or modify&lt;br /&gt;
;; it under the terms of the GNU General Public License as published by&lt;br /&gt;
;; the Free Software Foundation; either version 2, or (at your option)&lt;br /&gt;
;; any later version.&lt;br /&gt;
&lt;br /&gt;
;; GNU Emacs is distributed in the hope that it will be useful,&lt;br /&gt;
;; but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
;; GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
;; You should have received a copy of the GNU General Public License&lt;br /&gt;
;; along with GNU Emacs; see the file COPYING.  If not, write to the&lt;br /&gt;
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,&lt;br /&gt;
;; Boston, MA 02111-1307, USA.&lt;br /&gt;
&lt;br /&gt;
;;; Commentary:&lt;br /&gt;
&lt;br /&gt;
;; Add these lines to your .emacs file to enable slang mode&lt;br /&gt;
;; slang mode&lt;br /&gt;
;; (autoload 'slang-mode &amp;quot;slang-mode&amp;quot;&lt;br /&gt;
;;  &amp;quot;Mode for editing slang source files&amp;quot;)&lt;br /&gt;
;; (setq auto-mode-alist&lt;br /&gt;
;;      (append '((&amp;quot;\\.sl$&amp;quot; . slang-mode)) auto-mode-alist))&lt;br /&gt;
&lt;br /&gt;
;; Special Thanks to Simon Marshall &amp;lt;simonm@mail.esrin.esa.it&amp;gt; for&lt;br /&gt;
;; font-lock patches.&lt;br /&gt;
&lt;br /&gt;
;; This file was written with emacs using Jamie Lokier's folding mode&lt;br /&gt;
;; That's what the funny ;;{{{ marks are there for&lt;br /&gt;
&lt;br /&gt;
;;{{{ Usage&lt;br /&gt;
&lt;br /&gt;
;; Slang-mode supports c-mode style formatting and sending of&lt;br /&gt;
;; lines/regions/files to a slang interpreter. An interpreter (see&lt;br /&gt;
;; variable `slang-default-application') will be started if you try to&lt;br /&gt;
;; send some code and none is running. You can use the process-buffer&lt;br /&gt;
;; (named after the application you chose) as if it were an&lt;br /&gt;
;; interactive shell. See the documentation for `comint.el' for&lt;br /&gt;
;; details.&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ Key-bindings&lt;br /&gt;
&lt;br /&gt;
;; To see all the keybindings for folding mode, look at `slang-setup-keymap'&lt;br /&gt;
;; or start `slang-mode' and type `\C-h m'.&lt;br /&gt;
;; The keybindings may seem strange, since I prefer to use them with&lt;br /&gt;
;; slang-prefix-key set to nil, but since those keybindings are already used&lt;br /&gt;
;; the default for `slang-prefix-key' is `\C-c', which is the conventional&lt;br /&gt;
;; prefix for major-mode commands.&lt;br /&gt;
&lt;br /&gt;
;; You can customise the keybindings either by setting `slang-prefix-key'&lt;br /&gt;
;; or by putting the following in your .emacs&lt;br /&gt;
;; 	(setq slang-mode-map (make-sparse-keymap))&lt;br /&gt;
;; and&lt;br /&gt;
;; 	(define-key slang-mode-map &amp;lt;your-key&amp;gt; &amp;lt;function&amp;gt;)&lt;br /&gt;
;; for all the functions you need.&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ Variables&lt;br /&gt;
&lt;br /&gt;
;; You may want to customize the following variables:&lt;br /&gt;
;; 	slang-indent-level&lt;br /&gt;
;; 	slang-always-show&lt;br /&gt;
;;	slang-mode-map&lt;br /&gt;
;;	slang-prefix-key&lt;br /&gt;
;;	slang-mode-hook&lt;br /&gt;
;; 	slang-default-application&lt;br /&gt;
;; 	slang-default-command-switches&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
&lt;br /&gt;
;;; Code:&lt;br /&gt;
&lt;br /&gt;
;; We need that !&lt;br /&gt;
(require 'comint)&lt;br /&gt;
&lt;br /&gt;
;;{{{ variables&lt;br /&gt;
&lt;br /&gt;
(defgroup slang nil&lt;br /&gt;
  &amp;quot;Major mode for editing slang code.&amp;quot;&lt;br /&gt;
  :prefix &amp;quot;slang-&amp;quot;&lt;br /&gt;
  :group 'languages)&lt;br /&gt;
&lt;br /&gt;
(defcustom slang-default-application &amp;quot;c:/bin/slsh.exe&amp;quot;&lt;br /&gt;
  &amp;quot;Default slang application to run in slang subprocess.&amp;quot;&lt;br /&gt;
  :type 'string&lt;br /&gt;
  :group 'slang)&lt;br /&gt;
&lt;br /&gt;
(defcustom slang-default-command-switches nil&lt;br /&gt;
  &amp;quot;Command switches for `slang-default-application'.&lt;br /&gt;
Should be a list of strings.&amp;quot;&lt;br /&gt;
  :type '(repeat string)&lt;br /&gt;
  :group 'slang)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-process nil&lt;br /&gt;
  &amp;quot;The active slang subprocess corresponding to current buffer.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-process-buffer nil&lt;br /&gt;
  &amp;quot;Buffer used for communication with slang subprocess for current buffer.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
(defcustom slang-always-show t&lt;br /&gt;
  &amp;quot;*Non-nil means display slang-process-buffer after sending a command.&amp;quot;&lt;br /&gt;
  :type 'boolean&lt;br /&gt;
  :group 'slang)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-mode-map nil&lt;br /&gt;
  &amp;quot;Keymap used with slang mode.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-prefix-key &amp;quot;\C-c&amp;quot;&lt;br /&gt;
  &amp;quot;Prefix for all slang-mode commands.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
(defcustom slang-mode-hook nil&lt;br /&gt;
  &amp;quot;Hooks called when slang mode fires up.&amp;quot;&lt;br /&gt;
  :type 'hook&lt;br /&gt;
  :group 'slang)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-region-start (make-marker)&lt;br /&gt;
  &amp;quot;Start of special region for slang communication.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-region-end (make-marker)&lt;br /&gt;
  &amp;quot;End of special region for slang communication.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
(defcustom slang-indent-level 4&lt;br /&gt;
  &amp;quot;Amount by which slang subexpressions are indented.&amp;quot;&lt;br /&gt;
  :type 'integer&lt;br /&gt;
  :group 'slang)&lt;br /&gt;
&lt;br /&gt;
(defcustom slang-default-eval &amp;quot;eval&amp;quot;&lt;br /&gt;
  &amp;quot;Default command used when sending regions.&amp;quot;&lt;br /&gt;
  :type 'string&lt;br /&gt;
  :group 'slang)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-mode-menu (make-sparse-keymap &amp;quot;Slang-Mode&amp;quot;)&lt;br /&gt;
  &amp;quot;Keymap for slang-mode's menu.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-font-lock-keywords&lt;br /&gt;
  (eval-when-compile&lt;br /&gt;
    (list&lt;br /&gt;
     ;;&lt;br /&gt;
     ;; Function name declarations.&lt;br /&gt;
     '(&amp;quot;\\&amp;lt;\\(islang_class\\|class\\|method\\|proc\\|body\\)\\&amp;gt;[ \t]*\\(\\sw+\\)?&amp;quot;&lt;br /&gt;
       (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))&lt;br /&gt;
     ;;&lt;br /&gt;
     ;; Keywords.&lt;br /&gt;
;(make-regexp '(&amp;quot;if&amp;quot; &amp;quot;then&amp;quot; &amp;quot;else&amp;quot; &amp;quot;elseif&amp;quot; &amp;quot;for&amp;quot; &amp;quot;foreach&amp;quot; &amp;quot;break&amp;quot;&lt;br /&gt;
;	       &amp;quot;continue&amp;quot; &amp;quot;while&amp;quot; &amp;quot;eval&amp;quot; &amp;quot;case&amp;quot; &amp;quot;in&amp;quot; &amp;quot;switch&amp;quot; &amp;quot;default&amp;quot;&lt;br /&gt;
;	       &amp;quot;exit&amp;quot; &amp;quot;error&amp;quot; &amp;quot;proc&amp;quot; &amp;quot;return&amp;quot; &amp;quot;uplevel&amp;quot; &amp;quot;constructor&amp;quot;&lt;br /&gt;
;	       &amp;quot;destructor&amp;quot; &amp;quot;islang_class&amp;quot; &amp;quot;loop&amp;quot; &amp;quot;for_array_keys&amp;quot;&lt;br /&gt;
;	       &amp;quot;for_recursive_glob&amp;quot; &amp;quot;for_file&amp;quot;))&lt;br /&gt;
     (concat &amp;quot;\\&amp;lt;\\(&amp;quot;&lt;br /&gt;
	     &amp;quot;break\\|case\\|else\\|if\\|!if\\|for&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|each\\|else\\|else if\\|loop&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|namespace\\|eval\\|export&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|orelse\\|andelse\\|message\\|(s|f|)print.&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|return\\|switch\\|while&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|not\\|do\\|forever\\|foreach\\|using&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|return\\|continue\\|error&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|static\\|variable\\|implements\\|reshape&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|struct\\|(EXECUTE_|)ERROR_BLOCK&amp;quot;&lt;br /&gt;
	     &amp;quot;\\|define&amp;quot;&lt;br /&gt;
	     &amp;quot;\\)\\&amp;gt;&amp;quot;)&lt;br /&gt;
     ;;&lt;br /&gt;
     ;; Types.&lt;br /&gt;
;   (make-regexp '(&amp;quot;global&amp;quot; &amp;quot;upvar&amp;quot; &amp;quot;variable&amp;quot; &amp;quot;inherit&amp;quot; &amp;quot;public&amp;quot;&lt;br /&gt;
;		   &amp;quot;private&amp;quot; &amp;quot;protected&amp;quot; &amp;quot;common&amp;quot;))&lt;br /&gt;
     (cons (concat &amp;quot;\\&amp;lt;\\(&amp;quot;&lt;br /&gt;
		   &amp;quot;common\\|global\\|inherit\\|p\\(r\\(ivate\\|otected\\)\\|ublic\\)&amp;quot;&lt;br /&gt;
		   &amp;quot;\\|upvar\\|variable\\|.*_Type&amp;quot;&lt;br /&gt;
		   &amp;quot;\\)\\&amp;gt;&amp;quot;)&lt;br /&gt;
	   'font-lock-type-face)&lt;br /&gt;
     ))&lt;br /&gt;
  &amp;quot;Default expressions to highlight in SLANG modes.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
(defvar slang-imenu-generic-expression&lt;br /&gt;
  '(&lt;br /&gt;
    (nil &amp;quot;^\\s-*\\(proc\\|body\\)\\s-+\\(\\(\\s_\\|\\sw\\)+\\)&amp;quot; 2)&lt;br /&gt;
    (&amp;quot;Classes&amp;quot; &amp;quot;^\\s-*class\\s-+\\(\\(\\s_\\|\\sw\\)+\\)&amp;quot; 1))&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Imenu generic expression for slang-mode.  See `imenu-generic-expression'.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-mode&lt;br /&gt;
&lt;br /&gt;
;;;###autoload&lt;br /&gt;
(defun slang-mode ()&lt;br /&gt;
  &amp;quot;Major mode for editing slang scripts.&lt;br /&gt;
The following keys are bound:&lt;br /&gt;
\\{slang-mode-map}&lt;br /&gt;
&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (let ((switches nil)&lt;br /&gt;
	s)&lt;br /&gt;
    (kill-all-local-variables)&lt;br /&gt;
    (setq major-mode 'slang-mode)&lt;br /&gt;
    (setq mode-name &amp;quot;SLANG&amp;quot;)&lt;br /&gt;
    (set (make-local-variable 'slang-process) nil)&lt;br /&gt;
    (set (make-local-variable 'slang-process-buffer) nil)&lt;br /&gt;
    (make-local-variable 'slang-default-command-switches)&lt;br /&gt;
    (set (make-local-variable 'indent-line-function) 'slang-indent-line)&lt;br /&gt;
&lt;br /&gt;
    (set (make-local-variable 'comment-start) &amp;quot;% &amp;quot;)&lt;br /&gt;
    (set (make-local-variable 'comment-start-skip) &amp;quot;% *&amp;quot;)&lt;br /&gt;
    (set (make-local-variable 'font-lock-defaults)&lt;br /&gt;
	 '(slang-font-lock-keywords nil nil ((?_ . &amp;quot;w&amp;quot;) (?: . &amp;quot;w&amp;quot;))))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    (set (make-local-variable 'imenu-generic-expression)&lt;br /&gt;
	 slang-imenu-generic-expression)&lt;br /&gt;
    (setq imenu-case-fold-search nil)&lt;br /&gt;
    (setq imenu-syntax-alist '((?: . &amp;quot;w&amp;quot;)))&lt;br /&gt;
    (make-local-variable 'slang-default-eval)&lt;br /&gt;
    (or slang-mode-map&lt;br /&gt;
	(slang-setup-keymap))&lt;br /&gt;
    (use-local-map slang-mode-map)&lt;br /&gt;
    (set-syntax-table (copy-syntax-table))&lt;br /&gt;
    ;;real comment keys is right here&lt;br /&gt;
    (modify-syntax-entry ?# &amp;quot;&amp;lt;&amp;quot;)&lt;br /&gt;
    (modify-syntax-entry ?% &amp;quot;&amp;lt;&amp;quot;)&lt;br /&gt;
    (modify-syntax-entry ?\n &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
    ;; look for a #!.../wish -f line at bob&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (goto-char (point-min))&lt;br /&gt;
      (if (looking-at &amp;quot;#![ \t]*\\([^ \t]*\\)[ \t]\\(.*[ \t]\\)-f&amp;quot;)&lt;br /&gt;
	  (progn&lt;br /&gt;
	    (set (make-local-variable 'slang-default-application)&lt;br /&gt;
		 (buffer-substring (match-beginning 1)&lt;br /&gt;
				   (match-end 1)))&lt;br /&gt;
	    (if (match-beginning 2)&lt;br /&gt;
		(progn&lt;br /&gt;
		  (goto-char (match-beginning 2))&lt;br /&gt;
		  (set (make-local-variable 'slang-default-command-switches) nil)&lt;br /&gt;
		  (while (&amp;lt; (point) (match-end 2))&lt;br /&gt;
		    (setq s (read (current-buffer)))&lt;br /&gt;
		    (if (&amp;lt;= (point) (match-end 2))&lt;br /&gt;
			(setq slang-default-command-switches&lt;br /&gt;
			      (append slang-default-command-switches&lt;br /&gt;
				      (list (prin1-to-string s)))))))))&lt;br /&gt;
	;; if this fails, look for the #!/bin/csh ... exec hack&lt;br /&gt;
	(while (eq (following-char) ?#)&lt;br /&gt;
	  (forward-line 1))&lt;br /&gt;
	(or (bobp)&lt;br /&gt;
	    (forward-char -1))&lt;br /&gt;
	(if (eq (preceding-char) ?\\)&lt;br /&gt;
	    (progn&lt;br /&gt;
	      (forward-char 1)&lt;br /&gt;
	      (if (looking-at &amp;quot;exec[ \t]+\\([^ \t]*\\)[ \t]\\(.*[ \t]\\)*-f&amp;quot;)&lt;br /&gt;
		  (progn&lt;br /&gt;
		    (set (make-local-variable 'slang-default-application)&lt;br /&gt;
			 (buffer-substring (match-beginning 1)&lt;br /&gt;
					   (match-end 1)))&lt;br /&gt;
		    (if (match-beginning 2)&lt;br /&gt;
			(progn&lt;br /&gt;
			  (goto-char (match-beginning 2))&lt;br /&gt;
			  (set (make-local-variable&lt;br /&gt;
				'slang-default-command-switches)&lt;br /&gt;
			       nil)&lt;br /&gt;
			  (while (&amp;lt; (point) (match-end 2))&lt;br /&gt;
			    (setq s (read (current-buffer)))&lt;br /&gt;
			    (if (&amp;lt;= (point) (match-end 2))&lt;br /&gt;
				(setq slang-default-command-switches&lt;br /&gt;
				      (append slang-default-command-switches&lt;br /&gt;
					      (list (prin1-to-string s)))))))))&lt;br /&gt;
		)))))&lt;br /&gt;
    (run-hooks 'slang-mode-hook)))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-setup-keymap&lt;br /&gt;
&lt;br /&gt;
(defun slang-setup-keymap ()&lt;br /&gt;
  &amp;quot;Set up keymap for slang mode.&lt;br /&gt;
If the variable `slang-prefix-key' is nil, the bindings go directly&lt;br /&gt;
to `slang-mode-map', otherwise they are prefixed with `slang-prefix-key'.&amp;quot;&lt;br /&gt;
  (setq slang-mode-map (make-sparse-keymap))&lt;br /&gt;
  (define-key slang-mode-map [menu-bar slang-mode]&lt;br /&gt;
    (cons &amp;quot;Slang-Mode&amp;quot; slang-mode-menu))&lt;br /&gt;
  (let ((map (if slang-prefix-key&lt;br /&gt;
		 (make-sparse-keymap)&lt;br /&gt;
	       slang-mode-map)))&lt;br /&gt;
  ;; indentation&lt;br /&gt;
  (define-key slang-mode-map [?}] 'slang-electric-brace)&lt;br /&gt;
  ;; communication&lt;br /&gt;
  (define-key map &amp;quot;\M-e&amp;quot; 'slang-send-current-line)&lt;br /&gt;
  (define-key map &amp;quot;\M-r&amp;quot; 'slang-send-region)&lt;br /&gt;
  (define-key map &amp;quot;\M-w&amp;quot; 'slang-send-proc)&lt;br /&gt;
  (define-key map &amp;quot;\M-a&amp;quot; 'slang-send-buffer)&lt;br /&gt;
  (define-key map &amp;quot;\M-q&amp;quot; 'slang-kill-process)&lt;br /&gt;
  (define-key map &amp;quot;\M-u&amp;quot; 'slang-restart-with-whole-file)&lt;br /&gt;
  (define-key map &amp;quot;\M-s&amp;quot; 'slang-show-process-buffer)&lt;br /&gt;
  (define-key map &amp;quot;\M-h&amp;quot; 'slang-hide-process-buffer)&lt;br /&gt;
  (define-key map &amp;quot;\M-i&amp;quot; 'slang-get-error-info)&lt;br /&gt;
  (define-key map &amp;quot;\M-[&amp;quot; 'slang-beginning-of-proc)&lt;br /&gt;
  (define-key map &amp;quot;\M-]&amp;quot; 'slang-end-of-proc)&lt;br /&gt;
  (define-key map &amp;quot;\C-\M-s&amp;quot; 'slang-set-slang-region-start)&lt;br /&gt;
  (define-key map &amp;quot;\C-\M-e&amp;quot; 'slang-set-slang-region-end)&lt;br /&gt;
  (define-key map &amp;quot;\C-\M-r&amp;quot; 'slang-send-slang-region)&lt;br /&gt;
  (if slang-prefix-key&lt;br /&gt;
      (define-key slang-mode-map slang-prefix-key map))&lt;br /&gt;
  ))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ indentation&lt;br /&gt;
&lt;br /&gt;
;;{{{ slang-indent-line&lt;br /&gt;
&lt;br /&gt;
(defun slang-indent-line ()&lt;br /&gt;
  &amp;quot;Indent current line as slang code.&lt;br /&gt;
Return the amount the indentation changed by.&amp;quot;&lt;br /&gt;
  (let ((indent (slang-calculate-indentation nil))&lt;br /&gt;
	beg shift-amt&lt;br /&gt;
	(case-fold-search nil)&lt;br /&gt;
	(pos (- (point-max) (point))))&lt;br /&gt;
    (beginning-of-line)&lt;br /&gt;
    (setq beg (point))&lt;br /&gt;
    (skip-chars-forward &amp;quot; \t&amp;quot;)&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (while (eq (following-char) ?})&lt;br /&gt;
	(setq indent (max (- indent slang-indent-level) 0))&lt;br /&gt;
	(forward-char 1)&lt;br /&gt;
	(if (looking-at &amp;quot;\\([ \t]*\\)}&amp;quot;)&lt;br /&gt;
	    (progn&lt;br /&gt;
	      (delete-region (match-beginning 1) (match-end 1))&lt;br /&gt;
	      (insert-char ?  (1- slang-indent-level))))))&lt;br /&gt;
    (setq shift-amt (- indent (current-column)))&lt;br /&gt;
    (if (zerop shift-amt)&lt;br /&gt;
	(if (&amp;gt; (- (point-max) pos) (point))&lt;br /&gt;
	    (goto-char (- (point-max) pos)))&lt;br /&gt;
      (delete-region beg (point))&lt;br /&gt;
      (indent-to indent)&lt;br /&gt;
      ;; If initial point was within line's indentation,&lt;br /&gt;
      ;; position after the indentation.  Else stay at same point in text.&lt;br /&gt;
      (if (&amp;gt; (- (point-max) pos) (point))&lt;br /&gt;
	  (goto-char (- (point-max) pos))))&lt;br /&gt;
    shift-amt))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-calculate-indentation&lt;br /&gt;
&lt;br /&gt;
(defun slang-calculate-indentation (&amp;amp;optional parse-start)&lt;br /&gt;
  &amp;quot;Return appropriate indentation for current line as slang code.&lt;br /&gt;
In usual case returns an integer: the column to indent to.&amp;quot;&lt;br /&gt;
  (let ((pos (point)))&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (if parse-start&lt;br /&gt;
	  (setq pos (goto-char parse-start)))&lt;br /&gt;
      (beginning-of-line)&lt;br /&gt;
      (if (bobp)&lt;br /&gt;
	  (current-indentation)&lt;br /&gt;
	(forward-char -1)&lt;br /&gt;
	(if (eq (preceding-char) ?\\)&lt;br /&gt;
	    (+ (current-indentation)&lt;br /&gt;
	       (progn&lt;br /&gt;
		 (beginning-of-line)&lt;br /&gt;
		 (if (bobp)&lt;br /&gt;
		     (* 2 slang-indent-level)&lt;br /&gt;
		   (forward-char -1)&lt;br /&gt;
		   (if (not (eq (preceding-char) ?\\))&lt;br /&gt;
		       (* 2 slang-indent-level)&lt;br /&gt;
		     0))))&lt;br /&gt;
	  (forward-char 1)&lt;br /&gt;
	  (if (re-search-backward&lt;br /&gt;
	       &amp;quot;\\(^[^ \t\n\r%]\\)\\|\\({\\s *[%\n]\\)\\|\\(}\\s *\n\\)&amp;quot;&lt;br /&gt;
	       nil  t)&lt;br /&gt;
	      (+ (- (current-indentation)&lt;br /&gt;
		    (if (save-excursion&lt;br /&gt;
			  (beginning-of-line)&lt;br /&gt;
			  (and (not (bobp))&lt;br /&gt;
			       (progn&lt;br /&gt;
				 (forward-char -1)&lt;br /&gt;
				 (eq (preceding-char) ?\\))))&lt;br /&gt;
			(* 2 slang-indent-level)&lt;br /&gt;
		      0))&lt;br /&gt;
		 (if (eq (following-char) ?{)&lt;br /&gt;
		     slang-indent-level&lt;br /&gt;
		   0))&lt;br /&gt;
	    (goto-char pos)&lt;br /&gt;
	    (beginning-of-line)&lt;br /&gt;
	    (forward-line -1)&lt;br /&gt;
	    (current-indentation)))))))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-electric-brace&lt;br /&gt;
&lt;br /&gt;
(defun slang-electric-brace (arg)&lt;br /&gt;
  &amp;quot;Insert `}' and indent line for slang.&amp;quot;&lt;br /&gt;
  (interactive &amp;quot;P&amp;quot;)&lt;br /&gt;
  (insert-char ?} (prefix-numeric-value arg))&lt;br /&gt;
  (slang-indent-line)&lt;br /&gt;
  (blink-matching-open))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ searching&lt;br /&gt;
&lt;br /&gt;
;;{{{ slang-beginning-of-proc&lt;br /&gt;
&lt;br /&gt;
(defun slang-beginning-of-proc (&amp;amp;optional arg)&lt;br /&gt;
  &amp;quot;Move backward to the beginning of a slang proc (or similar).&lt;br /&gt;
With argument, do it that many times.  Negative arg -N&lt;br /&gt;
means move forward to Nth following beginning of proc.&lt;br /&gt;
Returns t unless search stops due to beginning or end of buffer.&amp;quot;&lt;br /&gt;
  (interactive &amp;quot;P&amp;quot;)&lt;br /&gt;
  (or arg&lt;br /&gt;
      (setq arg 1))&lt;br /&gt;
  (let ((found nil)&lt;br /&gt;
	(ret t))&lt;br /&gt;
    (if (and (&amp;lt; arg 0)&lt;br /&gt;
	     (looking-at &amp;quot;^[^ \t\n%][^\n]*{[ \t]*$&amp;quot;))&lt;br /&gt;
	(forward-char 1))&lt;br /&gt;
    (while (&amp;lt; arg 0)&lt;br /&gt;
      (if (re-search-forward &amp;quot;^[^ \t\n%][^\n]*{[ \t]*$&amp;quot; nil t)&lt;br /&gt;
	  (setq arg (1+ arg)&lt;br /&gt;
		found t)&lt;br /&gt;
	(setq ret nil&lt;br /&gt;
	      arg 0)))&lt;br /&gt;
    (if found&lt;br /&gt;
	(beginning-of-line))&lt;br /&gt;
    (while (&amp;gt; arg 0)&lt;br /&gt;
      (if (re-search-backward &amp;quot;^[^ \t\n%][^\n]*{[ \t]*$&amp;quot; nil t)&lt;br /&gt;
	  (setq arg (1- arg))&lt;br /&gt;
	(setq ret nil&lt;br /&gt;
	      arg 0)))&lt;br /&gt;
    ret))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-end-of-proc&lt;br /&gt;
&lt;br /&gt;
(defun slang-end-of-proc (&amp;amp;optional arg)&lt;br /&gt;
  &amp;quot;Move forward to next end of slang proc (or similar).&lt;br /&gt;
With argument, do it that many times.  Negative argument -N means move&lt;br /&gt;
back to Nth preceding end of proc.&lt;br /&gt;
&lt;br /&gt;
This function just searches for a `}' at the beginning of a line.&amp;quot;&lt;br /&gt;
  (interactive &amp;quot;P&amp;quot;)&lt;br /&gt;
  (or arg&lt;br /&gt;
      (setq arg 1))&lt;br /&gt;
  (let ((found nil)&lt;br /&gt;
	(ret t))&lt;br /&gt;
    (if (and (&amp;lt; arg 0)&lt;br /&gt;
	     (not (bolp))&lt;br /&gt;
	     (save-excursion&lt;br /&gt;
	       (beginning-of-line)&lt;br /&gt;
	       (eq (following-char) ?})))&lt;br /&gt;
	(forward-char -1))&lt;br /&gt;
    (while (&amp;gt; arg 0)&lt;br /&gt;
      (if (re-search-forward &amp;quot;^}&amp;quot; nil t)&lt;br /&gt;
	  (setq arg (1- arg)&lt;br /&gt;
		found t)&lt;br /&gt;
	(setq ret nil&lt;br /&gt;
	      arg 0)))&lt;br /&gt;
    (while (&amp;lt; arg 0)&lt;br /&gt;
      (if (re-search-backward &amp;quot;^}&amp;quot; nil t)&lt;br /&gt;
	  (setq arg (1+ arg)&lt;br /&gt;
		found t)&lt;br /&gt;
	(setq ret nil&lt;br /&gt;
	      arg 0)))&lt;br /&gt;
    (if found&lt;br /&gt;
	(end-of-line))&lt;br /&gt;
    ret))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ communication with a inferior process via comint&lt;br /&gt;
&lt;br /&gt;
;;{{{ slang-start-process&lt;br /&gt;
&lt;br /&gt;
(defun slang-start-process (name program &amp;amp;optional startfile &amp;amp;rest switches)&lt;br /&gt;
  &amp;quot;Start a slang process named NAME, running PROGRAM.&amp;quot;&lt;br /&gt;
  (or switches&lt;br /&gt;
      (setq switches slang-default-command-switches))&lt;br /&gt;
  (setq slang-process-buffer (apply 'make-comint name program startfile switches))&lt;br /&gt;
  (setq slang-process (get-buffer-process slang-process-buffer))&lt;br /&gt;
  (save-excursion&lt;br /&gt;
    (set-buffer slang-process-buffer)&lt;br /&gt;
    (setq comint-prompt-regexp &amp;quot;^[^% ]*\\(\\)* *&amp;quot;)&lt;br /&gt;
    )&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-kill-process&lt;br /&gt;
&lt;br /&gt;
(defun slang-kill-process ()&lt;br /&gt;
  &amp;quot;Kill slang subprocess and its buffer.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (if slang-process-buffer&lt;br /&gt;
      (kill-buffer slang-process-buffer)))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-set-slang-region-start&lt;br /&gt;
&lt;br /&gt;
(defun slang-set-slang-region-start (&amp;amp;optional arg)&lt;br /&gt;
  &amp;quot;Set start of region for use with `slang-send-slang-region'.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (set-marker slang-region-start (or arg (point))))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-set-slang-region-end&lt;br /&gt;
&lt;br /&gt;
(defun slang-set-slang-region-end (&amp;amp;optional arg)&lt;br /&gt;
  &amp;quot;Set end of region for use with `slang-send-slang-region'.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (set-marker slang-region-end (or arg (point))))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ send line/region/buffer to slang-process&lt;br /&gt;
&lt;br /&gt;
;;{{{ slang-send-current-line&lt;br /&gt;
&lt;br /&gt;
(defun slang-send-current-line ()&lt;br /&gt;
  &amp;quot;Send current line to slang subprocess, found in `slang-process'.&lt;br /&gt;
If `slang-process' is nil or dead, start a new process first.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (let ((start (save-excursion (beginning-of-line) (point)))&lt;br /&gt;
	(end (save-excursion (end-of-line) (point))))&lt;br /&gt;
    (or (and slang-process&lt;br /&gt;
	     (eq (process-status slang-process) 'run))&lt;br /&gt;
	(slang-start-process slang-default-application slang-default-application))&lt;br /&gt;
    (comint-simple-send slang-process (buffer-substring start end))&lt;br /&gt;
    (forward-line 1)&lt;br /&gt;
    (if slang-always-show&lt;br /&gt;
	(display-buffer slang-process-buffer))))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-send-region&lt;br /&gt;
&lt;br /&gt;
(defun slang-send-region (start end)&lt;br /&gt;
  &amp;quot;Send region to slang subprocess, wrapped in `eval { ... }'.&amp;quot;&lt;br /&gt;
  (interactive &amp;quot;r&amp;quot;)&lt;br /&gt;
  (or (and slang-process&lt;br /&gt;
	   (comint-check-proc slang-process-buffer))&lt;br /&gt;
      (slang-start-process slang-default-application slang-default-application))&lt;br /&gt;
  (comint-simple-send slang-process&lt;br /&gt;
		      (concat slang-default-eval&lt;br /&gt;
			      &amp;quot; {\n&amp;quot;(buffer-substring start end) &amp;quot;\n}&amp;quot;))&lt;br /&gt;
  (if slang-always-show&lt;br /&gt;
      (display-buffer slang-process-buffer)))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-send-slang-region&lt;br /&gt;
&lt;br /&gt;
(defun slang-send-slang-region ()&lt;br /&gt;
  &amp;quot;Send preset slang region to slang subprocess, wrapped in `eval { ... }'.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (or (and slang-region-start slang-region-end)&lt;br /&gt;
      (error &amp;quot;slang-region not set&amp;quot;))&lt;br /&gt;
  (or (and slang-process&lt;br /&gt;
	   (comint-check-proc slang-process-buffer))&lt;br /&gt;
      (slang-start-process slang-default-application slang-default-application))&lt;br /&gt;
  (comint-simple-send slang-process&lt;br /&gt;
		      (concat slang-default-eval&lt;br /&gt;
			      &amp;quot; {\n&amp;quot;&lt;br /&gt;
			      (buffer-substring slang-region-start slang-region-end)&lt;br /&gt;
			      &amp;quot;\n}&amp;quot;))&lt;br /&gt;
  (if slang-always-show&lt;br /&gt;
      (display-buffer slang-process-buffer)))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-send-proc&lt;br /&gt;
&lt;br /&gt;
(defun slang-send-proc ()&lt;br /&gt;
  &amp;quot;Send proc around point to slang subprocess, wrapped in `eval { ... }'.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (let (beg end)&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (slang-beginning-of-proc)&lt;br /&gt;
      (setq beg (point))&lt;br /&gt;
      (slang-end-of-proc)&lt;br /&gt;
      (setq end (point)))&lt;br /&gt;
    (or (and slang-process&lt;br /&gt;
	     (comint-check-proc slang-process-buffer))&lt;br /&gt;
	(slang-start-process slang-default-application slang-default-application))&lt;br /&gt;
    (comint-simple-send slang-process&lt;br /&gt;
			(concat slang-default-eval&lt;br /&gt;
				&amp;quot; {\n&amp;quot;&lt;br /&gt;
				(buffer-substring beg end)&lt;br /&gt;
				&amp;quot;\n}&amp;quot;))&lt;br /&gt;
    (if slang-always-show&lt;br /&gt;
	(display-buffer slang-process-buffer))))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-send-buffer&lt;br /&gt;
&lt;br /&gt;
(defun slang-send-buffer ()&lt;br /&gt;
  &amp;quot;Send whole buffer to slang subprocess, wrapped in `eval { ... }'.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (or (and slang-process&lt;br /&gt;
	   (comint-check-proc slang-process-buffer))&lt;br /&gt;
      (slang-start-process slang-default-application slang-default-application))&lt;br /&gt;
  (if (buffer-modified-p)&lt;br /&gt;
      (comint-simple-send slang-process&lt;br /&gt;
			  (concat&lt;br /&gt;
			   slang-default-eval&lt;br /&gt;
			   &amp;quot; {\n&amp;quot;&lt;br /&gt;
			   (buffer-substring (point-min) (point-max))&lt;br /&gt;
			   &amp;quot;\n}&amp;quot;))&lt;br /&gt;
    (comint-simple-send slang-process&lt;br /&gt;
			(concat &amp;quot;source &amp;quot;&lt;br /&gt;
				(buffer-file-name)&lt;br /&gt;
				&amp;quot;\n&amp;quot;)))&lt;br /&gt;
  (if slang-always-show&lt;br /&gt;
      (display-buffer slang-process-buffer)))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-get-error-info&lt;br /&gt;
&lt;br /&gt;
(defun slang-get-error-info ()&lt;br /&gt;
  &amp;quot;Send string `set errorInfo' to slang subprocess and display the slang buffer.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (or (and slang-process&lt;br /&gt;
	   (comint-check-proc slang-process-buffer))&lt;br /&gt;
      (slang-start-process slang-default-application slang-default-application))&lt;br /&gt;
  (comint-simple-send slang-process &amp;quot;set errorInfo\n&amp;quot;)&lt;br /&gt;
  (display-buffer slang-process-buffer))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-restart-with-whole-file&lt;br /&gt;
&lt;br /&gt;
(defun slang-restart-with-whole-file ()&lt;br /&gt;
  &amp;quot;Restart slang subprocess and send whole file as input.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (slang-kill-process)&lt;br /&gt;
  (slang-start-process slang-default-application slang-default-application)&lt;br /&gt;
  (slang-send-buffer))&lt;br /&gt;
  &lt;br /&gt;
;;}}}  &lt;br /&gt;
;;{{{ slang-show-process-buffer&lt;br /&gt;
&lt;br /&gt;
(defun slang-show-process-buffer ()&lt;br /&gt;
  &amp;quot;Make sure `slang-process-buffer' is being displayed.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (display-buffer slang-process-buffer))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
;;{{{ slang-hide-process-buffer&lt;br /&gt;
&lt;br /&gt;
(defun slang-hide-process-buffer ()&lt;br /&gt;
  &amp;quot;Delete all windows that display `slang-process-buffer'.&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (delete-windows-on slang-process-buffer))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
&lt;br /&gt;
;;{{{ menu bar&lt;br /&gt;
&lt;br /&gt;
(define-key slang-mode-menu [restart-with-whole-file]&lt;br /&gt;
  '(&amp;quot;Restart With Whole File&amp;quot; .  slang-restart-with-whole-file))&lt;br /&gt;
(define-key slang-mode-menu [kill-process]&lt;br /&gt;
  '(&amp;quot;Kill Process&amp;quot; . slang-kill-process))&lt;br /&gt;
&lt;br /&gt;
(define-key slang-mode-menu [hide-process-buffer]&lt;br /&gt;
  '(&amp;quot;Hide Process Buffer&amp;quot; . slang-hide-process-buffer))&lt;br /&gt;
(define-key slang-mode-menu [get-error-info]&lt;br /&gt;
  '(&amp;quot;Get Error Info&amp;quot; . slang-get-error-info))&lt;br /&gt;
(define-key slang-mode-menu [show-process-buffer]&lt;br /&gt;
  '(&amp;quot;Show Process Buffer&amp;quot; . slang-show-process-buffer))&lt;br /&gt;
&lt;br /&gt;
(define-key slang-mode-menu [end-of-proc]&lt;br /&gt;
  '(&amp;quot;End Of Proc&amp;quot; . slang-end-of-proc))&lt;br /&gt;
(define-key slang-mode-menu [beginning-of-proc]&lt;br /&gt;
  '(&amp;quot;Beginning Of Proc&amp;quot; . slang-beginning-of-proc))&lt;br /&gt;
&lt;br /&gt;
(define-key slang-mode-menu [send-slang-region]&lt;br /&gt;
  '(&amp;quot;Send Slang-Region&amp;quot; . slang-send-slang-region))&lt;br /&gt;
(define-key slang-mode-menu [set-slang-regio-end]&lt;br /&gt;
  '(&amp;quot;Set Slang-Region End&amp;quot; . slang-set-slang-region-end))&lt;br /&gt;
(define-key slang-mode-menu [set-slang-region-start]&lt;br /&gt;
  '(&amp;quot;Set Slang-Region Start&amp;quot; . slang-set-slang-region-start))&lt;br /&gt;
&lt;br /&gt;
(define-key slang-mode-menu [send-current-line]&lt;br /&gt;
  '(&amp;quot;Send Current Line&amp;quot; . slang-send-current-line))&lt;br /&gt;
(define-key slang-mode-menu [send-region]&lt;br /&gt;
  '(&amp;quot;Send Region&amp;quot; . slang-send-region))&lt;br /&gt;
(define-key slang-mode-menu [send-proc]&lt;br /&gt;
  '(&amp;quot;Send Proc&amp;quot; . slang-send-proc))&lt;br /&gt;
(define-key slang-mode-menu [send-buffer]&lt;br /&gt;
  '(&amp;quot;Send Buffer&amp;quot; . slang-send-buffer))&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
&lt;br /&gt;
(provide 'slang-mode)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;;{{{ Emacs local variables&lt;br /&gt;
&lt;br /&gt;
;; Local Variables:&lt;br /&gt;
;; folded-file: t&lt;br /&gt;
;; End:&lt;br /&gt;
&lt;br /&gt;
;;}}}&lt;br /&gt;
&lt;br /&gt;
;;; slang-mode.el ends here&lt;/div&gt;</summary>
		<author><name>Oertel</name></author>
	</entry>
</feed>