1
0
Fork 0
cl-sites/ecl.common-lisp.dev/static/manual/Package-local-nicknames.html

290 lines
15 KiB
HTML
Raw Permalink Normal View History

2024-12-24 19:15:49 +01:00
<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.0.3, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Package local nicknames (ECL Manual)</title>
<meta name="description" content="Package local nicknames (ECL Manual)">
<meta name="keywords" content="Package local nicknames (ECL Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Indexes.html" rel="index" title="Indexes">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Extensions.html" rel="up" title="Extensions">
<link href="Package-locks.html" rel="next" title="Package locks">
<link href="Tree-walker.html" rel="prev" title="Tree walker">
<style type="text/css">
<!--
/* colors */
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
span.r {font-family: initial; font-weight: normal; font-style: normal}
span:hover a.copiable-link {visibility: visible}
strong.def-name {font-family: monospace; font-weight: bold; font-size: larger}
@media (prefers-color-scheme: dark) {
/* dark theme */
html { color: seashell;
background: #1A1A1A; }
body { background: #1A1A1A; }
th { border-bottom: 2px solid lightgray; }
h1, h2, h3, h4, h5 { background-image: linear-gradient(to left, #202020, #3A3A3A); }
code, var, code a { color: darkorange;
background: #2A2A2A; }
a { color: seashell; }
pre { background: #2A2A2A;
color: seashell;
/* mark longer code block with stripe on the left */
border-left: 5px solid darkorange;
padding-left: 10px; }
pre.screen { background: #2A2A2A;
border: 1px solid lightgray; }
pre.programlisting { background: #2A2A2A;
border-left: 1px solid lightgray;
border-top: 1px solid lightgray; }
/* we need a light background in order for the images to be readable */
img { background: white }
}
@media (prefers-color-scheme: light) {
/* light theme */
html { background: white }
body { background: white }
th { border-bottom: 2px solid gray; }
h1, h2, h3, h4, h5 { background: lightgray; }
code, var, code a { color: darkred;
background: whitesmoke; }
a { color: #000; }
pre { background: whitesmoke;
color: black;
/* mark longer code block with stripe on the left */
border-left: 5px solid darkred;
padding-left: 10px; }
pre.screen { background: #EEE;
border: 1px solid black; }
pre.programlisting { background: #EEEEEE;
border-left: 1px solid black;
border-top: 1px solid black; }
}
body {
margin: 1em 125px 0 10%;
line-height: 1.5em;
padding: 0 2em 1em 2em;
font: 13px Verdana,Arial, sans-serif
}
ul, dd, dl, dt { margin-top: 0; margin-bottom: 0; }
p, code, td, dl, dt {
line-height: 1.5em;
}
table {
font: inherit;
border-collapse: collapse;
}
th, td {
vertical-align: top;
}
h1, h2, h3 { padding-left: 15px; }
h4, h5 { padding-left: 5px; }
code, pre {
font-size: 1em;
font-family: monospace;
}
var {
font-size: 1em;
}
/* links inside code appear the same as the code itself */
code a {
font-weight: normal;
text-decoration: none;
}
/* but get an underline when hovering */
code a:hover {
text-decoration: underline;
}
/* ordinary links appear in bold */
a { font-weight: bold; }
pre.verbatim {
margin: 0 0 0 0;
}
pre {
overflow: auto;
}
pre.screen {
font-weight: bold;
padding: 0.5em;
}
pre.programlisting {
padding: 0.5em;
}
div p { padding: 0 2em }
li p { padding: 0; margin: 0 }
hr { display: none; }
div.funcsynopsis p {
text-indent: -2em;
}
div.variablelist {
padding: 0 2em;
}
.type, .funcsynopsis, .symbol {
font-family: monospace;
}
.type, .symbol, .replaceable {
white-space: nowrap;
}
-->
</style>
</head>
<body lang="en">
<div class="section-level-extent" id="Package-local-nicknames">
<div class="nav-panel">
<p>
Next: <a href="Package-locks.html" accesskey="n" rel="next">Package locks</a>, Previous: <a href="Tree-walker.html" accesskey="p" rel="prev">Tree walker</a>, Up: <a href="Extensions.html" accesskey="u" rel="up">Extensions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Indexes.html" title="Index" rel="index">Index</a>]</p>
</div>
<h3 class="section" id="Local-package-nicknames">3.10 Local package nicknames</h3>
<a class="index-entry-id" id="index-Package-local-nicknames"></a>
<a class="index-entry-id" id="index-PACKAGE_002dLOCAL_002dNICKNAMES"></a>
<ul class="mini-toc">
<li><a href="Package-local-nicknames.html#Overview-2" accesskey="1">Overview</a></li>
<li><a href="Package-local-nicknames.html#Package-local-nicknames-dictionary" accesskey="2">Package local nicknames dictionary</a></li>
</ul>
<div class="subsection-level-extent" id="Overview-2">
<h4 class="subsection">3.10.1 Overview</h4>
<p>ECL allows giving packages local nicknames: they allow short and
easy-to-use names to be used without fear of name conflict associated
with normal nicknames.
</p>
<p>A local nickname is valid only when inside the package for which it
has been specified. Different packages can use same local nickname for
different global names, or different local nickname for same global
name.
</p>
<p>The keyword <code class="code">:package-local-nicknames</code> in <code class="code">*features*</code>
indicates the support for this feature.
</p>
</div>
<div class="subsection-level-extent" id="Package-local-nicknames-dictionary">
<h4 class="subsection">3.10.2 Package local nicknames dictionary</h4>
<dl class="first-deffn first-defmac-alias-first-deffn">
<dt class="deffn defmac-alias-deffn" id="index-cl_003adefpackage"><span class="category-def">Macro: </span><span><strong class="def-name">cl:defpackage</strong> <var class="def-var-arguments">name [[options]]*</var><a class="copiable-link" href='Package-local-nicknames.html#index-cl_003adefpackage'> &para;</a></span></dt>
<dd><p>Options are extended to include
</p>
<div class="example">
<pre class="example-preformatted"> :local-nicknames (local-nickname actual-package-name)*
</pre></div>
<p>The package has the specified local nicknames for the
corresponding actual packages.
</p>
<a class="index-entry-id" id="index-defpackage-and-package-local-nicknames"></a>
<p>Example:
</p>
<div class="example lisp">
<pre class="lisp-preformatted">(defpackage :bar (:intern &quot;X&quot;))
(defpackage :foo (:intern &quot;X&quot;))
(defpackage :quux (:use :cl) (:local-nicknames (:bar :foo) (:foo :bar)))
(find-symbol &quot;X&quot; :foo) ; =&gt; FOO::X
(find-symbol &quot;X&quot; :bar) ; =&gt; BAR::X
(let ((*package* (find-package :quux)))
(find-symbol &quot;X&quot; :foo)) ; =&gt; BAR::X
(let ((*package* (find-package :quux)))
(find-symbol &quot;X&quot; :bar)) ; =&gt; FOO::X
</pre></div>
</dd></dl>
<a class="anchor" id="ext_003apackage_002dlocal_002dnicknames"></a><a class="index-entry-id" id="index-ext_003apackage_002dlocal_002dnicknames-1"></a>
<a class="anchor" id="si_005fpackage_005flocal_005fnicknames"></a><a class="index-entry-id" id="index-si_005fpackage_005flocal_005fnicknames"></a>
<dl class="first-deffn first-defun-alias-first-deffn">
<dt class="deffn defun-alias-deffn" id="index-ext_003apackage_002dlocal_002dnicknames"><span class="category-def">Function: </span><span><strong class="def-name">ext:package-local-nicknames</strong> <var class="def-var-arguments">package-designator</var><a class="copiable-link" href='Package-local-nicknames.html#index-ext_003apackage_002dlocal_002dnicknames'> &para;</a></span></dt>
</dl>
<dl class="first-deftypefn first-deftypefun-alias-first-deftypefn">
<dt class="deftypefn deftypefun-alias-deftypefn" id="index-si_005fpackage_005flocal_005fnicknames-1"><span class="category-def">Function: </span><span><code class="def-type">cl_object</code> <strong class="def-name">si_package_local_nicknames</strong> <code class="def-code-arguments">(cl_object package_designator)</code><a class="copiable-link" href='Package-local-nicknames.html#index-si_005fpackage_005flocal_005fnicknames-1'> &para;</a></span></dt>
<dd><p>Returns an alist of <code class="code">(local-nickname . actual-package)</code>
describing the nicknames local to the designated package.
</p>
<p>When in the designated package, calls to <code class="code">find-package</code> with any
of the local-nicknames will return the corresponding actual-package
instead. This also affects all implied calls to <code class="code">find-package</code>,
including those performed by the reader.
</p>
<p>When printing a package prefix for a symbol with a package local nickname, the
local nickname is used instead of the real name in order to preserve
print-read consistency.
</p></dd></dl>
<a class="anchor" id="ext_003apackage_002dlocally_002dnicknamed_002dby_002dlist"></a><a class="index-entry-id" id="index-ext_003apackage_002dlocally_002dnicknamed_002dby_002dlist-1"></a>
<a class="anchor" id="si_005fpackage_005flocally_005fnicknamed_005fby_005flist"></a><a class="index-entry-id" id="index-si_005fpackage_005flocally_005fnicknamed_005fby_005flist"></a>
<dl class="first-deffn first-defun-alias-first-deffn">
<dt class="deffn defun-alias-deffn" id="index-ext_003apackage_002dlocally_002dnicknamed_002dby_002dlist"><span class="category-def">Function: </span><span><strong class="def-name">ext:package-locally-nicknamed-by-list</strong> <var class="def-var-arguments">package-designator</var><a class="copiable-link" href='Package-local-nicknames.html#index-ext_003apackage_002dlocally_002dnicknamed_002dby_002dlist'> &para;</a></span></dt>
</dl>
<dl class="first-deftypefn first-deftypefun-alias-first-deftypefn">
<dt class="deftypefn deftypefun-alias-deftypefn" id="index-si_005fpackage_005flocally_005fnicknamed_005fby_005flist-1"><span class="category-def">Function: </span><span><code class="def-type">cl_object</code> <strong class="def-name">si_package_locally_nicknamed_by_list</strong> <code class="def-code-arguments">(cl_object package_designator)</code><a class="copiable-link" href='Package-local-nicknames.html#index-si_005fpackage_005flocally_005fnicknamed_005fby_005flist-1'> &para;</a></span></dt>
<dd><p>Returns a list of packages which have a local nickname for the
designated package.
</p></dd></dl>
<a class="anchor" id="ext_003aadd_002dpackage_002dlocal_002dnickname"></a><a class="index-entry-id" id="index-ext_003aadd_002dpackage_002dlocal_002dnickname-1"></a>
<a class="anchor" id="si_005fadd_005fpackage_005flocal_005fnickname"></a><a class="index-entry-id" id="index-si_005fadd_005fpackage_005flocal_005fnickname"></a>
<dl class="first-deffn first-defun-alias-first-deffn">
<dt class="deffn defun-alias-deffn" id="index-ext_003aadd_002dpackage_002dlocal_002dnickname"><span class="category-def">Function: </span><span><strong class="def-name">ext:add-package-local-nickname</strong> <var class="def-var-arguments">local-nickname actual-package &amp;optional package-designator</var><a class="copiable-link" href='Package-local-nicknames.html#index-ext_003aadd_002dpackage_002dlocal_002dnickname'> &para;</a></span></dt>
</dl>
<dl class="first-deftypefn first-deftypefun-alias-first-deftypefn">
<dt class="deftypefn deftypefun-alias-deftypefn" id="index-si_005fadd_005fpackage_005flocal_005fnickname-1"><span class="category-def">Function: </span><span><code class="def-type">cl_object</code> <strong class="def-name">si_add_package_local_nickname</strong> <code class="def-code-arguments">(cl_object local_nickname, cl_object actual_package, cl_object package_designator)</code><a class="copiable-link" href='Package-local-nicknames.html#index-si_005fadd_005fpackage_005flocal_005fnickname-1'> &para;</a></span></dt>
<dd><p>Adds <var class="var">local-nickname</var> for <var class="var">actual-package</var> in the designated
package, defaulting to current package. <var class="var">local-nickname</var> must be a
string designator, and <var class="var">actual-package</var> must be a package
designator.
</p>
<p>Returns the designated package.
</p>
<p>Signals a continuable error if <var class="var">local-nickname</var> is already a
package local nickname for a different package.
</p>
<p>When in the designated package, calls to <code class="code">find-package</code> with the
<var class="var">local-nickname</var> will return the package the designated
<var class="var">actual-package</var> instead. This also affects all implied calls to
<code class="code">find-package</code>, including those performed by the reader.
</p>
<p>When printing a package prefix for a symbol with a package local
nickname, the local nickname is used instead of the real name in order
to preserve print-read consistency.
</p></dd></dl>
<a class="anchor" id="ext_003aremove_002dpackage_002dlocal_002dnickname"></a><a class="index-entry-id" id="index-ext_003aremove_002dpackage_002dlocal_002dnickname-1"></a>
<a class="anchor" id="si_005fremove_005fpackage_005flocal_005fnickname"></a><a class="index-entry-id" id="index-si_005fremove_005fpackage_005flocal_005fnickname"></a>
<dl class="first-deffn first-defun-alias-first-deffn">
<dt class="deffn defun-alias-deffn" id="index-ext_003aremove_002dpackage_002dlocal_002dnickname"><span class="category-def">Function: </span><span><strong class="def-name">ext:remove-package-local-nickname</strong> <var class="def-var-arguments">old-nickname &amp;optional package-designator</var><a class="copiable-link" href='Package-local-nicknames.html#index-ext_003aremove_002dpackage_002dlocal_002dnickname'> &para;</a></span></dt>
</dl>
<dl class="first-deftypefn first-deftypefun-alias-first-deftypefn">
<dt class="deftypefn deftypefun-alias-deftypefn" id="index-si_005fremove_005fpackage_005flocal_005fnickname-1"><span class="category-def">Function: </span><span><code class="def-type">cl_object</code> <strong class="def-name">si_remove_package_local_nickname</strong> <code class="def-code-arguments">(cl_object old_nickname, cl_object package_designator)</code><a class="copiable-link" href='Package-local-nicknames.html#index-si_005fremove_005fpackage_005flocal_005fnickname-1'> &para;</a></span></dt>
<dd><p>If the designated package had <var class="var">old-nickname</var> as a local nickname
for another package, it is removed. Returns true if the nickname
existed and was removed, and <code class="code">nil</code> otherwise.
</p></dd></dl>
</div>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Package-locks.html" accesskey="n" rel="next">Package locks</a>, Previous: <a href="Tree-walker.html" accesskey="p" rel="prev">Tree walker</a>, Up: <a href="Extensions.html" accesskey="u" rel="up">Extensions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Indexes.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>