magit; gendoc anclas GNU/Emacs 28.2, magit. sphinx: GNU/Emacs 29.1. Pestaña manuales

This commit is contained in:
Tano Papúa 2023-11-02 17:22:38 -03:00
parent bf16579c0f
commit 7fe4c3ed8e
60 changed files with 12289 additions and 32 deletions

View File

@ -12,7 +12,7 @@
<div class="frame content">
<input type="radio" name="page" id="_" checked><input type="radio" name="page" id="_la_organizacion_de_la_pantalla"><input type="radio" name="page" id="_tipo_de_entradas_de_los_usuarios"><input type="radio" name="page" id="_teclas_comandos"><input type="radio" name="page" id="_entrar_y_salir_de_emacs"><input type="radio" name="page" id="_comandos_basicos_de_edicion"><input type="radio" name="page" id="_el_minibuffer"><input type="radio" name="page" id="_ejecutar_comandos_por_nombres"><input type="radio" name="page" id="_ayuda_help"><input type="radio" name="page" id="_la_marca_y_la_region"><input type="radio" name="page" id="_matar_y_mover_texto"><input type="radio" name="page" id="_registros"><input type="radio" name="page" id="_control_de_la_pantalla"><input type="radio" name="page" id="_busqueda_y_reemplazo"><input type="radio" name="page" id="_comandos_para_corregir_errores_tipograficos"><input type="radio" name="page" id="_macros_de_teclado"><input type="radio" name="page" id="_manejo_de_archivos"><input type="radio" name="page" id="_usando_multiples_buffers"><input type="radio" name="page" id="_ventanas_multiples"><input type="radio" name="page" id="_marcos_y_pantallas_graficas"><input type="radio" name="page" id="_soporte_de_juegos_de_caracteres_internacionales"><input type="radio" name="page" id="_modos_mayores_y_menores"><input type="radio" name="page" id="_sangria"><input type="radio" name="page" id="_comandos_para_lenguajes_humanos"><input type="radio" name="page" id="_edicion_de_programas"><input type="radio" name="page" id="_compilacion_y_prueba_de_programas"><input type="radio" name="page" id="_mantenimiendo_de_programas_grandes"><input type="radio" name="page" id="_abreviaturas"><input type="radio" name="page" id="_dired_el_editor_de_directorios"><input type="radio" name="page" id="_el_calendario_y_la_agenda"><input type="radio" name="page" id="_envio_de_correo"><input type="radio" name="page" id="_leer_el_correo_con_rmail"><input type="radio" name="page" id="_correo_electronico_y_noticias_de_usenet_con_gnus"><input type="radio" name="page" id="_seguridad_en_el_host"><input type="radio" name="page" id="_seguridad_de_la_red"><input type="radio" name="page" id="_visualizacion_de_documentos"><input type="radio" name="page" id="_ejecutar_comandos_de_la_shell_desde_tt_emacs_tt"><input type="radio" name="page" id="_uso_de_emacs_como_servidor"><input type="radio" name="page" id="_impresion_de_copias_en_papel"><input type="radio" name="page" id="_ordenar_el_texto"><input type="radio" name="page" id="_edicion_de_imagenes"><input type="radio" name="page" id="_edicion_de_archivos_binarios"><input type="radio" name="page" id="_guardar_sesiones_de_emacs"><input type="radio" name="page" id="_niveles_de_edicion_recursiva"><input type="radio" name="page" id="_funciones_de_hipervinculo_y_navegacion_web"><input type="radio" name="page" id="_juegos_y_otras_diversiones"><input type="radio" name="page" id="_paquetes_emacs_lisp"><input type="radio" name="page" id="_personalizacion"><input type="radio" name="page" id="_salir_y_abortar"><input type="radio" name="page" id="_solucion_de_problemas_con_emacs"><input type="radio" name="page" id="_informar_errores"><input type="radio" name="page" id="_como_contribuir_al_desarrollo_de_emacs"><input type="radio" name="page" id="_apendice_a_licencia_publica_general_de_gnu"><input type="radio" name="page" id="_apendice_b_licencia_de_documentacion_libre_gnu"><input type="radio" name="page" id="_apendice_c_argumentos_de_la_linea_de_comandos_para_la_invocacion_de_emacs"><input type="radio" name="page" id="_apendice_d_opciones_y_recursos_de_x">
<input type="checkbox" id="menuchk" style="display:none;"><nav class="side nav"><div>
<div class="title"><a href="./00_Emacs.html"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAG7AAABuwBHnU4NQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAWdSURBVEiJjVZtbFNVGH7OuXftbdfvruu6de0Y7djYsjFQvhJMlMSAiGh0iJqQEONHjD9INBFNjJhIDJj4wwQCKjGQ+EP5Q0iQhOAkRs1AvuRjwsY2Njb30bVbu9329rbnHH/ctpYJ6Juc3OTcN8/zvO95zn0vwcODAKCbQrscikVanENmEREiz7kYTsya+n+d3pcGwAGIhwHcdz+CjabOzlXvWUyV20wOa5XF5VDMNquFM46sqqbV2Iymp9WJtJb8+vj1zw4CyN+P6H4E9Ln2D7Y6rO69vtbFAUfQX0Fo4Q0XABcQXAAcEHmG+PCoNnl7cGwmOf766YGDZwsVlUJaAC5t7di9rzoU/jD0WKdfcdkkQgq6SsACEAKKSQLLCVjsDtlbV+dhqr4l7Ghjt6Z6esorKSegLyz7aG9tc/Qt/7KonZBCccJQa7XIaGryYOWaWjz1TBRPbFiEzpUB3B1IYj6pw+n3K7l0dlWdEk32T5+/WCQpEpAtHbueralr+Njf2WQvUZapzmkMsXEVfTfiuHkthvoGJ6qqrXC6FVw9Nw7KiXB6fGY1kVxdY2v4cTB++S8AkA2kFbJLqfo88Gizy1BtgC9p9qA+5IDVKsNmM8HhNMPlViBX0JKG+KQKwoQAN7rf2LzMo11OHQawHACTAZDnOza+7W0JBwilpYMMhZ3oeqmlBKTO6bh7J4kblyahpnSk53NIzWhi7HYSYAKCG6JkIsPtqW18vPHVDT8NHv5BBkAVxb7DFa4xl7dkbCSJ8dE5BIJ2pNUcvtjTg5yWh+AChBNxr6OKC+BcoKZmUeVUbOgdAKdou/9dxWy1VBNBIJgACiuvMRw99Ad6r8ZgrazAizvaUFNrA2EQYNxQXZYPJsAL+xKRUSFZIkAXkVYH1kQ9wbo3bT6vGWVqBBdgOkPvpSkM988iHHFj/eYIgg1OkoxrmI2lDccX8vmCSmaTEzlnLntA5hRhU6XFDM6Ny1OWSAkQbnKhPuwSiak0kSWCSKsXkVYvGbqZwImvrolELAPcAy4gMQpFslRIlbmgzAWj4KJwUAY7AbBqXRBr14dgc5hLN35mOoOeM8PovxITd2/NIKvlS4qLT5lRUE5BBIEQnMh5Qe5oc6ommDCDCxABbHutHdGl3pKD7g7M4vT3fWK0f/YBLRGgnEDiFJQRUE6g6WouPaePydlkdjiTSmXBjMSaoP0e8NHBJI7suyCYzgrA+HdLODUImPGknCCrp7WLM5inZ2MHMpo6HxOMQXCBxERazM1mSwQsz2E2SWWq+T+qmdESqbQMEq7nkcmrA8AxIQFAo2eFy6LY1lmtdsp0hpsXp2C1VxBfrQ3uKgtWPxkm0Q4fCTW5SbjJTeojLoSiboSbq+AL2EByBFo8B4lTSJxiKNGbHp0ffH8kef1PAgARRMzLO1/pW/rI2noIUlLo8iho6qxG41Iv8dfbYbbI0NQcWI6DUgJPbSUAQM8wfLPjN5GJ58AZQ/fI8ZsnBw60A8gX5wF5esnOl33+8P7w4qWOB3nbLEuoj7ixuMNHWtcFoKt5DF6I49qJMaGO66CcoGfizMyA2rfl3MixX0r2K36uN7XtPNBQ27Ld5w8pRXC73QR/2I7gIjccboWkYppIjKQx2ZtCJq6DFpwjcYrr8d/V/rlre7rvHN2HwuBZMNG6pM0tgUNeT6grFGyxF2eBxAkkRgwwTkAZhVRwi0EgcD728+xYZmh/99CR3QBYEXHBROsVfdPnTvqUxnhyZnK5WbZYbRV2KvOCSwqHKBcUS4xiLDWkn5vqHpvMjLxxdvjbL4vKi/HAod/q66oMuTyfmGTbJofZ6XZZvFaLZFfABTR9LhPPTKVT2cS0mp//buTO5Ke3cUrH/xz65UEBkDXB7TWynG+TCI0KxvU8xFBaz1+5PHEsgf/4bfkbR78PQj8fX1wAAAAASUVORK5CYII="> GNU Emacs 28.2</a><div class="version">Traducción: Revisión 2.75</div><input id="_q" class="search" type="text" required="required" onkeyup="s(this.value);"></div> <div id="_s" class="nav"></div>
<div class="title"><a href="./00_Emacs.html"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAG7AAABuwBHnU4NQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAWdSURBVEiJjVZtbFNVGH7OuXftbdfvruu6de0Y7djYsjFQvhJMlMSAiGh0iJqQEONHjD9INBFNjJhIDJj4wwQCKjGQ+EP5Q0iQhOAkRs1AvuRjwsY2Njb30bVbu9329rbnHH/ctpYJ6Juc3OTcN8/zvO95zn0vwcODAKCbQrscikVanENmEREiz7kYTsya+n+d3pcGwAGIhwHcdz+CjabOzlXvWUyV20wOa5XF5VDMNquFM46sqqbV2Iymp9WJtJb8+vj1zw4CyN+P6H4E9Ln2D7Y6rO69vtbFAUfQX0Fo4Q0XABcQXAAcEHmG+PCoNnl7cGwmOf766YGDZwsVlUJaAC5t7di9rzoU/jD0WKdfcdkkQgq6SsACEAKKSQLLCVjsDtlbV+dhqr4l7Ghjt6Z6esorKSegLyz7aG9tc/Qt/7KonZBCccJQa7XIaGryYOWaWjz1TBRPbFiEzpUB3B1IYj6pw+n3K7l0dlWdEk32T5+/WCQpEpAtHbueralr+Njf2WQvUZapzmkMsXEVfTfiuHkthvoGJ6qqrXC6FVw9Nw7KiXB6fGY1kVxdY2v4cTB++S8AkA2kFbJLqfo88Gizy1BtgC9p9qA+5IDVKsNmM8HhNMPlViBX0JKG+KQKwoQAN7rf2LzMo11OHQawHACTAZDnOza+7W0JBwilpYMMhZ3oeqmlBKTO6bh7J4kblyahpnSk53NIzWhi7HYSYAKCG6JkIsPtqW18vPHVDT8NHv5BBkAVxb7DFa4xl7dkbCSJ8dE5BIJ2pNUcvtjTg5yWh+AChBNxr6OKC+BcoKZmUeVUbOgdAKdou/9dxWy1VBNBIJgACiuvMRw99Ad6r8ZgrazAizvaUFNrA2EQYNxQXZYPJsAL+xKRUSFZIkAXkVYH1kQ9wbo3bT6vGWVqBBdgOkPvpSkM988iHHFj/eYIgg1OkoxrmI2lDccX8vmCSmaTEzlnLntA5hRhU6XFDM6Ny1OWSAkQbnKhPuwSiak0kSWCSKsXkVYvGbqZwImvrolELAPcAy4gMQpFslRIlbmgzAWj4KJwUAY7AbBqXRBr14dgc5hLN35mOoOeM8PovxITd2/NIKvlS4qLT5lRUE5BBIEQnMh5Qe5oc6ommDCDCxABbHutHdGl3pKD7g7M4vT3fWK0f/YBLRGgnEDiFJQRUE6g6WouPaePydlkdjiTSmXBjMSaoP0e8NHBJI7suyCYzgrA+HdLODUImPGknCCrp7WLM5inZ2MHMpo6HxOMQXCBxERazM1mSwQsz2E2SWWq+T+qmdESqbQMEq7nkcmrA8AxIQFAo2eFy6LY1lmtdsp0hpsXp2C1VxBfrQ3uKgtWPxkm0Q4fCTW5SbjJTeojLoSiboSbq+AL2EByBFo8B4lTSJxiKNGbHp0ffH8kef1PAgARRMzLO1/pW/rI2noIUlLo8iho6qxG41Iv8dfbYbbI0NQcWI6DUgJPbSUAQM8wfLPjN5GJ58AZQ/fI8ZsnBw60A8gX5wF5esnOl33+8P7w4qWOB3nbLEuoj7ixuMNHWtcFoKt5DF6I49qJMaGO66CcoGfizMyA2rfl3MixX0r2K36uN7XtPNBQ27Ld5w8pRXC73QR/2I7gIjccboWkYppIjKQx2ZtCJq6DFpwjcYrr8d/V/rlre7rvHN2HwuBZMNG6pM0tgUNeT6grFGyxF2eBxAkkRgwwTkAZhVRwi0EgcD728+xYZmh/99CR3QBYEXHBROsVfdPnTvqUxnhyZnK5WbZYbRV2KvOCSwqHKBcUS4xiLDWkn5vqHpvMjLxxdvjbL4vKi/HAod/q66oMuTyfmGTbJofZ6XZZvFaLZFfABTR9LhPPTKVT2cS0mp//buTO5Ke3cUrH/xz65UEBkDXB7TWynG+TCI0KxvU8xFBaz1+5PHEsgf/4bfkbR78PQj8fX1wAAAAASUVORK5CYII="> GNU Emacs 28.2</a><div class="version">Traducción: Revisión 2.76</div><input id="_q" class="search" type="text" required="required" onkeyup="s(this.value);"></div> <div id="_s" class="nav"></div>
<div id="_t" class="nav">
<p>Conceptos Generales Importantes</p>
<ul>
@ -465,7 +465,7 @@
<li class="h4"><a href="#creacion_de_nuevas_ramas" onclick="m()">Creación de nuevas ramas</a></li>
<li class="h3"><a href="#comandos_y_caracteristicas_diversas_de_vc" onclick="m()">Comandos y características diversas de VC</a></li>
<li class="h4"><a href="#registros_de_cambios_y_cvs" onclick="m()">Registros de cambios y CVS</a></li>
<li class="h4"><a href="#eliminacion_y_cambio_de_nombre_de_archivos_con_control_de_versiones" onclick="m()">Eliminación y cambio de nombre de archivos con control de versiones</a></li>
<li class="h4"><a href="#borrar_y_cambiar_nombre_de_archivos_bajo_control_de_versiones" onclick="m()">Borrar y cambiar nombre de archivos bajo control de versiones</a></li>
<li class="h4"><a href="#etiquetas_de_revision" onclick="m()">Etiquetas de revisión</a></li>
<li class="h4"><a href="#insertar_cabeceras_de_control_de_versiones" onclick="m()">Insertar cabeceras de control de versiones</a></li>
<li class="h3"><a href="#personalizacion_de_vc" onclick="m()">Personalización de VC</a></li>
@ -9329,12 +9329,12 @@ Si la sintaxis de <samp>diff-font-lock</samp> es distinta de cero, los fragmento
</p>
<h2 id="copiar_nombrar_y_renombrar_archivos">Copiar, nombrar y renombrar archivos<a href="#copiar_nombrar_y_renombrar_archivos"></a></h2>
<p>
Emacs tiene varios comandos para copiar, nombrar y renombrar archivos. Todos ellos leen dos nombres de archivo, viejo (o destino) y nuevo, utilizando el minibuffer, y luego
copian o ajustan el nombre de un archivo en consecuencia; no aceptan nombres de archivo con comodines.
Emacs tiene varios comandos para copiar, nombrar y renombrar archivos. Todos ellos leen dos nombres de archivo, <i>antiguo</i> (o <i>destino</i>) y <i>new</i> (nuevo), utilizando el
minibuffer, luego copian o ajustan el nombre de un archivo en consecuencia; no aceptan nombres de archivo con comodines.
</p>
<p>
En todos estos comandos, si el argumento new es sólo un nombre de directorio (véase Nombres de directorios en el Manual de referencia de Emacs Lisp), el verdadero nombre
nuevo está en ese directorio, con el mismo componente no directivo que old. Por ejemplo, el comando <kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>rename</samp></b> <kbd>RETURN</kbd>
En todos estos comandos, si el argumento <i>new</i> es sólo un nombre de directorio (véase <a href="#@GENDOC:nombres_de_directorios@" onclick="c('@GENDOC:nombres_de_directorios@')">Nombres de directorios</a> en el Manual de referencia de Emacs Lisp), el verdadero nombre
nuevo está en ese directorio, con el mismo componente no directivo que <i>old</i>. Por ejemplo, el comando <kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>rename</samp></b> <kbd>RETURN</kbd>
<b><samp>~/foo</samp></b> <kbd>RETURN</kbd> <b><samp>/tmp/</samp></b> <kbd>RETURN</kbd> (<samp>M-x rename-file RET ~/foo RET /tmp/ RET</samp>) renombra <samp>~/foo</samp> a <samp>/tmp/foo</samp>. En GNU
y otros sistemas tipo POSIX, los nombres de directorio terminan en <samp>/</samp>.
</p>
@ -9342,13 +9342,13 @@ y otros sistemas tipo POSIX, los nombres de directorio terminan en <samp>/</s
Todos estos comandos piden confirmación cuando el nuevo nombre de archivo ya existe.
</p>
<p>
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>copy-file</samp></b> (<samp>M-x copy-file</samp>) copia el contenido del archivo antiguo al archivo nuevo.
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>copy-file</samp></b> (<samp>M-x copy-file</samp>) copia el contenido del archivo <i>antiguo</i> al archivo <i>nuevo</i>.
</p>
<p>
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>copy-directory</samp></b> (<samp>M-x copy-directory</samp>) copia directorios, de forma similar al comando de shell <samp>cp -r</samp>. Si <i>nuevo</i> es un
nombre de directorio, crea una copia del directorio antiguo y la coloca en <i>nuevo</i>. En caso contrario, copia todo el contenido de <i>antiguo</i> en un directorio llamado nuevo.
Si <samp>copy-directory-create-symlink</samp> es non-<samp>nil</samp> y <i>antiguo</i> es un enlace simbólico, este comando copiará el enlace simbólico. Si es <samp>nil</samp>, este comando
seguirá el enlace y copiará el contenido en su lugar. (Este es el valor por defecto).
nombre de directorio, crea una copia del directorio <i>antiguo</i> y la coloca en <i>nuevo</i>. En caso contrario, copia todo el contenido de <i>antiguo</i> en un directorio llamado
<i>nuevo</i>. Si <samp>copy-directory-create-symlink</samp> es non-<samp>nil</samp> y <i>antiguo</i> es un enlace simbólico, este comando copiará el enlace simbólico. Si es <samp>nil</samp>, este
comando seguirá el enlace y copiará el contenido en su lugar. (Este es el valor por defecto).
</p>
<p>
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>rename-file</samp></b> (<samp>M-x rename-file</samp>) renombra el archivo <i>antiguo</i> como <i>nuevo</i>. Si el nombre del archivo <i>nuevo</i> ya
@ -9356,8 +9356,8 @@ existe, debe confirmarlo con un <samp>yes</samp> (sí) o el renombramiento no se
<i>nuevo</i>. Si <i>antiguo</i> y <i>nuevo</i> están en sistemas de archivos diferentes, el archivo <i>antiguo</i> se copia y se borra.
</p>
<p>
Si un archivo está bajo control de versiones (véase Control de versiones), debe renombrarlo utilizando <samp>M-x vc-rename-file</samp> en lugar de <samp>M-x rename-file</samp>. Vea Borrar y
renombrar archivos bajo control de versiones.
Si un archivo está bajo control de versiones (véase <a href="#control_de_versiones" onclick="c('control_de_versiones')">Control de Versiones</a>), debe renombrarlo utilizando <samp>M-x vc-rename-file</samp> en lugar de <samp>M-x rename-file</samp>. Vea
<a href="#@GENDOC:eliminacion_y_cambio_de_nombre_de_archivos_con_control_de_versiones@" onclick="c('@GENDOC:eliminacion_y_cambio_de_nombre_de_archivos_con_control_de_versiones@')">Eliminación y cambio de nombre de archivos con control de versiones</a>.
</p>
<p>
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>add-name-to-file</samp></b> (<samp>M-x add-name-to-file</samp>) añade un nombre adicional a un archivo existente sin eliminar el nombre antiguo. El nuevo
@ -9365,36 +9365,36 @@ nombre se crea como un enlace duro al archivo existente. El nuevo nombre debe pe
sólo funciona si el archivo reside en un sistema de archivos NTFS. En MS-DOS, y en algunos tipos de sistemas remotos, funciona copiando el archivo.
</p>
<p>
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>make-symbolic-link</samp></b> (<samp>M-x make-symbolic-link</samp>) crea un enlace simbólico llamado <i>nuevo</i>, que apunta al <i>objetivo</i>. El
efecto es que los futuros intentos de abrir el archivo <i>nuevo</i> se referirán a cualquier archivo que se llame <i>objetivo</i> en el momento de la apertura, o recibirán un
error si el nombre <i>objetivo</i> no existe en ese momento. Este comando no expande el argumento <i>objetivo</i>, por lo que permite especificar un nombre relativo como destino del
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>make-symbolic-link</samp></b> (<samp>M-x make-symbolic-link</samp>) crea un enlace simbólico llamado <i>nuevo</i>, que apunta a <i>destino</i>. El
efecto es que los futuros intentos de abrir el archivo <i>nuevo</i> se referirán a cualquier archivo que se llame <i>destino</i> en el momento de la apertura, o recibirán un
error si el nombre <i>destino</i> no existe en ese momento. Este comando no expande el argumento <i>destino</i>, por lo que permite especificar un nombre relativo como destino del
enlace. Sin embargo, este comando expande el <samp>~</samp> inicial en el <i>objetivo</i> para que pueda especificar fácilmente los directorios de origen, y elimina el <samp>/:</samp>
inicial para que pueda especificar nombres relativos que comiencen con el literal <samp>~</samp> o <samp>/:</samp>. Véase Nombres de archivos entre comillas. En MS-Windows, este comando
sólo funciona en MS Windows Vista y posteriores. Cuando es new, funciona dependiendo del tipo de sistema.
inicial para que pueda especificar nombres relativos que comiencen con el literal <samp>~</samp> o <samp>/:</samp>. Véase <a href="#@GENDOC:nombres_de_archivos_entrecomillados@" onclick="c('@GENDOC:nombres_de_archivos_entrecomillados@')">Nombres de archivos entrecomillados</a>. En MS-Windows, este
comando sólo funciona en MS Windows Vista y posteriores. Cuando es new, funciona dependiendo del tipo de sistema.
</p>
<h2 id="diversas_operaciones_de_archivo">Diversas operaciones de archivo<a href="#diversas_operaciones_de_archivo"></a></h2>
<p>
Emacs tiene comandos para realizar muchas otras operaciones con archivos. Todas operan sobre un archivo; no aceptan nombres de archivo con comodines.
Emacs tiene comandos para realizar muchas otras operaciones con ficheros. Todas operan sobre un archivo; no aceptan nombres de archivo con comodines.
</p>
<p>
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>delete-file</samp></b> (<samp>M-x delete-file</samp>) solicita un archivo y lo borra. Si está borrando muchos archivos en un directorio, puede ser más
conveniente usar Dired en lugar de <samp>delete-file</samp>. Vea Borrar archivos con Dired.
conveniente usar Dired en lugar de <samp>delete-file</samp>. Vea <a href="#borrar_archivos_con_dired" onclick="c('borrar_archivos_con_dired')">Borrar archivos con Dired</a>.
</p>
<p>
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>move-file-to-trash</samp></b> (<samp>M-x move-file-to-trash</samp>) mueve un archivo a la papelera del sistema (o a la papelera de reciclaje). Esta es una
facilidad disponible en la mayoría de los sistemas operativos; los archivos que se mueven a la Papelera pueden ser recuperados más tarde si cambias de opinión. (La forma de restaurar
facilidad disponible en la mayoría de los sistemas operativos; los archivos que se mueven a la Papelera pueden ser recuperados más tarde si cambia de opinión. (La forma de restaurar
los archivos en la papelera depende del sistema).
</p>
<p>
Por defecto, los comandos de borrado de Emacs no utilizan la Papelera. Para usar la Papelera (cuando esté disponible) para los comandos de borrado comunes, cambie la variable
<samp>delete-by-moving-to-trash</samp> a <samp>t</samp>. Esto afecta a los comandos <kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>delete-file</samp></b> (<samp>M-x delete-file</samp>) y
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>delete-directory</samp></b> (<samp>M-x delete-directory</samp>) (ver Directorios de archivos), así como a los comandos de borrado en Dired (ver Borrar
archivos con Dired). El suministro de un argumento de prefijo a <samp>M-x delete-file</samp> o <samp>M-x delete-directory</samp> hace que se eliminen directamente, en lugar de utilizar la
Papelera, independientemente de la eliminación por movimiento a la Papelera.
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>delete-directory</samp></b> (<samp>M-x delete-directory</samp>) (ver <a href="#directorios_de_archivos" onclick="c('directorios_de_archivos')">Directorios de archivos</a>), así como a los comandos de borrado en Dired (ver
<a href="#borrar_archivos_con_dired" onclick="c('borrar_archivos_con_dired')">Borrar archivos con Dired</a>). Suministrar un argumento de prefijo a <samp>M-x delete-file</samp> o <samp>M-x delete-directory</samp> hace que se eliminen directamente, en lugar de
usar la Papelera, independientemente de la eliminación por movimiento a la Papelera.
</p>
<p>
Si un archivo está bajo control de versiones (ver Control de Versiones), debería borrarlo usando <kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>vc-delete-file</samp></b> (<samp>M-x
vc-delete-file</samp>) en lugar de <kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>delete-file</samp></b> (<samp>M-x delete-file</samp>). Vea Borrar y renombrar archivos bajo control de versiones.
Si un archivo está bajo control de versiones (ver <a href="#control_de_versiones" onclick="c('control_de_versiones')">Control de Versiones</a>), debería borrarlo usando <kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>vc-delete-file</samp></b> (<samp>M-x
vc-delete-file</samp>) en lugar de <kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>delete-file</samp></b> (<samp>M-x delete-file</samp>). Vea <a href="#@GENDOC:borrar_y_renombrar_archivos_bajo_control_de_versiones@" onclick="c('@GENDOC:borrar_y_renombrar_archivos_bajo_control_de_versiones@')"> Borrar y renombrar archivos bajo control de versiones</a>.
</p>
<p>
<kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>insert-file</samp></b> (<samp>M-x insert-file</samp>, también <kbd>Ctrl</kbd>-<kbd>x</kbd> <kbd>i</kbd> (<samp>C-x i</samp>)) inserta una copia del contenido
@ -19635,7 +19635,7 @@ Por ejemplo, si una entrada de registro para <samp>vc.el</samp> es <samp>(vc-
Cuando <kbd>Ctrl</kbd>-<kbd>x</kbd> <kbd>v</kbd><kbd>a</kbd> (<samp>C-x v a</samp>) añade varias entradas de registro de cambios a la vez, agrupa las entradas de registro relacionadas
si todas son registradas por el mismo autor casi al mismo tiempo. Si las entradas de registro de varios archivos de este tipo tienen el mismo texto, las agrupa en una sola entrada.
</p>
<h4 id="eliminacion_y_cambio_de_nombre_de_archivos_con_control_de_versiones">Eliminación y cambio de nombre de archivos con control de versiones<a href="#eliminacion_y_cambio_de_nombre_de_archivos_con_control_de_versiones"></a></h4>
<h4 id="borrar_y_cambiar_nombre_de_archivos_bajo_control_de_versiones">Borrar y cambiar nombre de archivos bajo control de versiones<a href="#borrar_y_cambiar_nombre_de_archivos_bajo_control_de_versiones"></a></h4>
<dl>
<dt><kbd>Alt</kbd>-<kbd>x</kbd> <b><samp>vc-delete-files</samp></b> (<samp>M-x vc-delete-files</samp>)</dt>
<dd>

File diff suppressed because one or more lines are too long

View File

@ -77,13 +77,15 @@
</table>
<hr>
<h2><A name="002"></a> «Edición»</h2>
<h4>El Editor Emacs</h4>
<h4>El Editor GNU/Emacs</h4>
<table div id="tabla-centrada" border="1" style="1" style="text-align:center">
<tr>
<th div id="th-color">Formato <em>gendoc</em></th>
<th div id="th-color">Formato <em>sphinx</em></th>
</tr>
<tr>
<td><a href="./archivos-gendoc/00_Emacs.html" target="_blank" title="Traducido por Tano">Manual GNU Emacs</a> <strong>**</strong></td>
<td><a href="./archivos-gendoc/00_Emacs.html" target="_blank" title="Traducido por Tano">Manual GNU Emacs 28.2</a> <strong>**</strong></td>
<td><a href="./sphinx/emacs29/doc/build/index.html" target="_blank">Manual GNU/Emacs 29.1</a> <strong>**</strong></td>
</tr>
</table>
<h4>Funcionalidades GNU/Emacs</h4>

4
sphinx/emacs29/doc/build/.buildinfo vendored Normal file
View File

@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 91805b3a8189c2a01e58d2029f0aaef9
tags: 645f666f9bcd5a90fca523b33c5a78b7

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,286 @@
1 La organización de la pantalla
=================================
En una pantalla gráfica, como en GNU/Linux usando el Sistema X Window, Emacs ocupa una ventana gráfica. En un terminal de texto, Emacs ocupa toda la pantalla del terminal. Usaremos el término *marco* para referirnos a una ventana gráfica o pantalla de terminal ocupada por Emacs. Emacs se comporta de forma muy similar en ambos tipos de marcos. Normalmente comienza con un solo marco, pero puedes crear marcos adicionales si lo desea (**ver Marcos y Pantallas Gráficas**).
Cada marco consta de varias regiones distintas. En la parte superior del marco hay una *barra de menús*, que permite acceder a los comandos a través de una serie de menús. En una pantalla gráfica, justo debajo de la barra de menús hay una *barra de herramientas*, una fila de iconos que ejecutan comandos de edición al hacer clic sobre ellos. En la parte inferior del marco hay un *área de eco*, donde se muestran mensajes informativos y donde introduce información cuando Emacs se la pide.
La zona principal del marco, por debajo de la barra de herramientas (si existe) y por encima de la zona de eco, se denomina *ventana*. En adelante, en este manual, usaremos la palabra "ventana" en este sentido. Los sistemas de visualización gráfica suelen utilizar la palabra "ventana" con un significado diferente; pero, como se ha indicado anteriormente, nos referimos a esas ventanas gráficas como "marcos".
Una ventana de Emacs es el lugar donde se muestra el *buffer* -el texto u otros gráficos que esté editando o visualizando-. En una pantalla gráfica, la ventana posee una barra de desplazamiento en un lado, que puede usarse para desplazarse por el búfer. La última línea de la ventana es una *línea de modo*. Muestra información diversa sobre lo que ocurre en el búfer, como por ejemplo si hay cambios sin guardar, los modos de edición que se están utilizando, el número de línea actual, etc.
Cuando inicia Emacs, normalmente sólo hay una ventana en el marco. Sin embargo, puede subdividir esta ventana horizontal o verticalmente para crear múltiples ventanas, cada una de las cuales puede mostrar independientemente un buffer (**vea Múltiples ventanas**).
En cualquier momento, una ventana es la *ventana seleccionada*. En una pantalla gráfica, la ventana seleccionada muestra un cursor más prominente (normalmente sólido y parpadeante); otras ventanas muestran un cursor menos prominente (normalmente una caja hueca). En un terminal de texto, sólo hay un cursor, que se muestra en la ventana seleccionada. El búfer que se muestra en la ventana seleccionada se llama *búfer actual*, y es donde tiene lugar la edición. La mayoría de los comandos de Emacs se aplican implícitamente al buffer actual; el texto mostrado en las ventanas no seleccionadas es visible principalmente como referencia. Si usa múltiples marcos en una pantalla gráfica, al seleccionar un marco en particular se selecciona una ventana en ese marco.
1.1 El Punto
------------
El cursor en la ventana seleccionada muestra la localización donde la mayoría de los comandos de edición tienen efecto, que se llama *punto* [2]_. Muchos comandos de Emacs mueven el punto a diferentes lugares del buffer; por ejemplo, puede colocar el punto pulsando el botón 1 del ratón (normalmente el botón izquierdo) en el lugar deseado.
Por defecto, el cursor en la ventana seleccionada se dibuja como un bloque sólido y parece estar sobre un carácter, pero debe pensar en el punto como si estuviera entre dos caracteres; está situado *antes* del carácter bajo el cursor. Por ejemplo, si su texto se parece a ``frob`` con el cursor sobre la ``b``, entonces el punto está entre la ``o`` y la ``b``. Si inserta el carácter ``!`` en esa posición, el resultado será ``fro!b``, con el punto entre el ``!`` y la ``b``. Así, el cursor permanece sobre la ``b``, como antes.
Si está editando varios ficheros en Emacs, cada uno en su propio buffer, cada buffer tiene su propio valor de punto. Un búfer que no se muestra en ese momento recuerda su valor de punto si lo vuelve a mostrar más tarde. Además, si un buffer se muestra en varias ventanas, cada una de esas ventanas tiene su propio valor de punto.
Si está editando varios ficheros en Emacs, cada uno en su propio buffer, cada buffer tiene su propio valor de punto. Un búfer que no se muestra en ese momento recuerda su valor de punto si lo vuelve a mostrar más tarde. Además, si un buffer se muestra en múltiples ventanas, cada una de esas ventanas tiene su propio valor de punto.
**Ver Visualización del Cursor**, para opciones que controlan cómo Emacs muestra el cursor.
.. [2] El término "punto" proviene del carácter ``.``, que era el comando en TECO (el lenguaje en el que se escribió el Emacs original) para acceder a la posición de edición.
1.2 El área de eco
------------------
La línea situada en la parte inferior del marco es el *área de eco*. Se usa para mostrar pequeñas cantidades de texto para varios propósitos.
El área de eco se llama así porque una de las cosas para las que se utiliza es para *hacer eco*, lo que significa mostrar los caracteres de un comando de varios caracteres a medida que se escribe. Los comandos de un solo carácter no tienen eco. Los comandos de varios caracteres (**ver Teclas**) se repiten si hace una pausa de más de un segundo en medio de un comando. Emacs entonces hace eco de todos los caracteres del comando hasta el momento, para preguntarte por el resto. Una vez que el eco ha comenzado, el resto del comando se hace eco inmediatamente mientras lo teclea. Este comportamiento está diseñado para dar a los usuarios confiados una respuesta rápida, mientras que a los usuarios indecisos les proporciona la mejor retroalimentación.
El área de eco también se usa para mostrar un *mensaje de error* cuando un comando no puede hacer su trabajo. Los mensajes de error pueden ir acompañados de un pitido o de un parpadeo de la pantalla.
Algunos comandos muestran mensajes informativos en el área de eco para decirle lo que ha hecho el comando, o para proporcionarle alguna información específica. Estos mensajes *informativos*, a diferencia de los mensajes de error, no van acompañados de un pitido o parpadeo. Por ejemplo, :kbd:`Ctrl`-:kbd:`x` :kbd:`=` (``C-x =`` mantenga pulsada la tecla :kbd:`Ctrl` y escriba :kbd:`x`, luego suelte la tecla :kbd:`Ctrl` y escriba :kbd:`=`) muestra un mensaje que describe el carácter en el punto, su posición en la memoria intermedia y su columna actual en la ventana. Los comandos que llevan mucho tiempo suelen mostrar mensajes que terminan en ``...`` mientras trabajan (a veces también indican cuánto se ha avanzado, en porcentaje), y añaden ``done`` (terminado) cuando finaliza.
Los mensajes informativos del área de eco se guardan en un búfer especial denominado ``*Messages*`` (*\*Mensajes\**). (Aún no hemos explicado los búferes; consulte **Uso de Búferes Múltiples**, para obtener más información sobre ellos). Si se pierde un mensaje que ha aparecido brevemente en la pantalla, puede pasar al búfer ``*Messages*`` para volver a verlo. Este búfer está limitado a un cierto número de líneas, especificado por la variable ``message-log-max``. (Tampoco hemos explicado las variables; **véase Variables**, para más información sobre ellas). Más allá de este límite, se borra una línea del principio cada vez que se añade una nueva línea de mensaje al final.
**Vea Personalización de la Pantalla**, para opciones que controlan cómo Emacs usa el área de eco.
El área de eco también se usa para mostrar el minibuffer, una ventana especial en la que se pueden introducir argumentos para los comandos, como el nombre de un archivo que se va a editar. Cuando se utiliza el minibuffer, el texto que aparece en el área de eco comienza con una cadena de comandos, y el cursor activo aparece dentro del minibuffer, que se considera temporalmente la ventana seleccionada. Siempre se puede salir del minibuffer tecleando :kbd:`Ctrl`-:kbd:`g` (``C-g``). **Véase El minibuffer**.
1.3 La línea de modo
--------------------
En la parte inferior de cada ventana hay una *línea de modo*, que describe lo que está pasando en el búfer actual. Cuando sólo hay una ventana, la línea de modo aparece justo encima del área de eco; es la penúltima línea del cuadro. En una pantalla gráfica, la línea de modo se dibuja con una apariencia de caja 3D. Emacs también suele dibujar la línea de modo de la ventana seleccionada con un color diferente al de las ventanas no seleccionadas, para que destaque.
El texto mostrado en la línea de modo tiene el siguiente formato:
::
cs:ch-fr buf pos line (major minor)
En un terminal de texto, este texto va seguido de una serie de guiones que se extienden hasta el borde derecho de la ventana. Estos guiones se omiten en una pantalla gráfica.
La cadena *cs* y los dos puntos que la siguen describen el juego de caracteres y la convención de nueva línea usada para el buffer actual. Normalmente, Emacs maneja automáticamente estos ajustes por Ud., pero a veces es útil tener esta información.
*cs* describe el juego de caracteres del texto del búfer (**véase Sistemas de Codificación**). Si es un guión (``-``), indica que no hay tratamiento especial del juego de caracteres (con la posible excepción de las convenciones de fin de línea, descritas en el párrafo siguiente). ``=`` significa que no hay conversión alguna, y suele utilizarse para ficheros que contienen datos no textuales. Otros caracteres representan diversos sistemas de codificación; por ejemplo, ``1`` representa ISO Latin-1.
En un terminal de texto, *cs* va precedido de dos caracteres adicionales que describen los sistemas de codificación para la entrada del teclado y la salida del terminal. Además, si está usando un método de entrada, *cs* va precedido de una cadena que identifica el método de entrada (**véase Métodos de Entrada**).
El carácter después de *cs* suele ser dos puntos. Si se muestra una cadena diferente, eso indica una convención de final de línea no trivial para codificar un archivo. Normalmente, las líneas de texto se separan mediante caracteres de *nueva línea* en un archivo, pero a veces se usan otras dos convenciones. La convención MS-DOS utiliza un carácter de retorno de carro seguido de un carácter de salto de línea; al editar estos archivos, los dos puntos cambian a una barra invertida (``\``) o ``(DOS)``, dependiendo del sistema operativo. Otra convención, empleada por los antiguos sistemas Macintosh, usa un carácter de retorno de carro en lugar de una nueva línea; al editar dichos ficheros, los dos puntos cambian a una barra inclinada (``/``) o ``(Mac)``. En algunos sistemas, Emacs muestra ``(Unix)`` en lugar de los dos puntos para los ficheros que usan la nueva línea como separador de línea.
En marcos creados para ``emacsclient`` (**ver Invocando emacsclient**), el siguiente carácter es ``@``. Esta indicación es típica para marcos de un proceso Emacs ejecutándose como demonio (**ver Usando Emacs como Servidor**).
El siguiente elemento en la línea de modo es la cadena indicada por *ch*. Esta muestra dos guiones (``--``) si el buffer mostrado en la ventana tiene el mismo contenido que el fichero correspondiente en el disco; es decir, si el buffer no está modificado. Si el búfer está modificado, muestra dos asteriscos (``**``). Para un búfer de sólo lectura, muestra ``%*`` si el búfer está modificado, y ``%%`` en caso contrario.
Normalmente, el carácter que sigue a *ch* es un guión (``-``). Sin embargo, si el directorio por defecto (**véase Nombres de Archivos**) para el búfer actual está en una máquina remota, en su lugar aparece ``@``.
*fr* da el nombre del marco seleccionado (**ver Marcos y Pantallas Gráficas**). Sólo aparece en terminales de texto. El nombre del marco inicial es ``F1``.
*buf* es el nombre del buffer que se muestra en la ventana. Normalmente, es el mismo que el nombre del fichero que está editando. **Véase Uso de Múltiples Búferes**.
*pos* le indica si hay texto adicional por encima de la parte superior de la ventana, o por debajo de la parte inferior. Si su búfer es pequeño y todo él es visible en la ventana, *pos* es ``All`` (Todo). De lo contrario, es ``Top`` (Arriba) si está mirando al principio del buffer, ``Bot`` si está mirando al final del buffer, o ``nn%``, donde *nn* es el porcentaje del buffer por encima de la parte superior de la ventana. Con el modo Indication Size Mode (modo Indicación de Tamaño), también puede mostrar el tamaño del búfer. **Véase Características Opcionales de la Línea de Modo**.
*line* (línea) es el carácter ``L`` seguido del número de línea en el punto. (También puede visualizar el número de columna actual, activando el modo Column Number (Número de Columna). **Véase Modo Opcional Características de Línea**).
*major* es el nombre del *modo principal* utilizado en el búfer. Un modo principal es un modo de edición principal para el búfer, como el modo Texto, el modo Lisp, el modo C, etc. **Véase Modos Principales**. Algunos modos principales muestran información adicional después del nombre del modo principal. Por ejemplo, los buffers de Compilación y Shell muestran el estado del subproceso.
*minor* es una lista de algunos de los modos menores habilitados, que son modos de edición opcionales que proporcionan características adicionales además del modo mayor. **Ver Modos Menores**.
Algunas funciones aparecen junto con los modos secundarios cuando están activados, aunque no sean realmente modos secundarios. ``Narrow`` (Estrechamiento) significa que el búfer que se está visualizando tiene la edición restringida sólo a una parte de su texto (**vea Estrechamiento**). ``Def`` significa que se está definiendo una macro de teclado (**ver Macros de Teclado**).
Además, si Emacs está dentro de un nivel de edición recursivo, aparecen corchetes (``[...]``) alrededor de los paréntesis que rodean los modos. Si Emacs está en un nivel de edición recursiva dentro de otro, aparecen corchetes dobles, y así sucesivamente. Como los niveles de edición recursiva afectan a Emacs globalmente, tales corchetes aparecen en la línea de modo de cada ventana. **Ver Niveles de Edición Recursiva**.
Puede cambiar la apariencia de la línea de modo así como el formato de su contenido. **Vea Características Opcionales de la Línea de Modo**. Además, la línea de modo es sensible al ratón; al hacer clic en diferentes partes de la línea de modo se ejecutan varios comandos. **Consulte Comandos del Ratón en la Línea de Modo**. Además, al pasar el puntero del ratón por encima de las partes de la línea de modo sensibles al ratón, se muestra información sobre herramientas (**consulte Información sobre Herramientas**) con información sobre los comandos que puede invocar haciendo clic en la línea de modo.
1.4 La Barra de Menús
---------------------
Cada marco de Emacs tiene normalmente una *barra de menú* en la parte superior que puede usar para realizar operaciones comunes. No hay necesidad de listarlas aquí, ya que puede verlas Usted mismo más fácilmente.
En una pantalla que soporte ratón, puede usar el ratón para elegir un comando de la barra de menú. Una flecha en el borde derecho de un elemento de menú significa que conduce a un menú secundario, o *submenú*. Un ``...`` al final de un elemento de menú significa que el comando le pedirá más información antes de realizar ninguna acción.
Algunos de los comandos de la barra de menús también están vinculados a teclas normales; si es así, se muestra un vínculo a la tecla después del propio elemento. Para ver el nombre completo del comando y la documentación de un elemento de menú, escriba :kbd:`Ctrl`-:kbd:`h` :kbd:`k` (``C-h k``) y, a continuación, seleccione la barra de menús con el ratón de la forma habitual (**consulte Documentación de una tecla**).
En lugar de usar el ratón, también puede invocar el primer elemento de la barra de menús pulsando :kbd:`F10` (para ejecutar el comando ``menú-bar-open``). A continuación, puede navegar por los menús con las teclas de flecha o con :kbd:`Ctrl`-:kbd:`b` (``C-b``, izquierda), :kbd:`Ctrl`-:kbd:`f` (``C-f``, derecha), :kbd:`Ctrl`-:kbd:`p` (``C-p``, arriba) y :kbd:`Ctrl`-:kbd:`n` (``C-n``, abajo). Para activar un elemento de menú seleccionado, pulse :kbd:`RET`; para cancelar la navegación por el menú, pulse :kbd:`Ctrl`-:kbd:`g` (``C-g``) o :kbd:`Esc` :kbd:`ESC` :kbd:`ESC` (``ESC`` ``ESC`` ``ESC``). (Sin embargo, tenga en cuenta que cuando Emacs ha sido construido con un kit de herramientas GUI, los menús son dibujados y controlados por el kit de herramientas, y las secuencias de teclas para cancelar la navegación por el menú pueden ser diferentes de la descripción anterior).
En un terminal de texto, puede acceder opcionalmente a los menús de la barra de menús en el área de eco. Para ello, personalice la variable ``tty-menu-open-use-tmm`` a un valor no nulo. Entonces tecleando :kbd:`F10` se ejecutará el comando ``tmm-menubar`` en lugar de desplegarse el menú. (También puede escribir :kbd:`M`-:kbd:`\`` (``M-```), que siempre invoca ``tmm-menubar``). ``tmm-menubar`` le permite seleccionar un elemento del menú con el teclado. Aparece una opción provisional en el área de eco. Puede utilizar las teclas de flecha arriba y abajo para desplazarse por el menú hasta los distintos elementos y, a continuación, puede escribir :kbd:`RET` para seleccionar el elemento. Cada elemento del menú también se designa con una letra o un dígito (normalmente la inicial de alguna palabra del nombre del elemento). Esta letra o dígito se separa del nombre del elemento mediante ``==>``. Puede escribir la letra o el dígito del elemento para seleccionarlo.
2 Tipos de Entrada del Usuario
==============================
GNU Emacs está diseñado principalmente para usarse con el teclado. Aunque es posible usar el ratón para emitir comandos de edición a través de la barra de menús y la barra de herramientas, normalmente no es tan eficiente como usar el teclado.
La entrada del teclado en Emacs se basa en una versión muy extendida de ASCII. Los caracteres simples, como ``a``, ``B``, ``3``, ``=``, y el carácter de espacio (denotado como ``SPC``), se introducen tecleando la tecla correspondiente. Los caracteres de control, como ``RET``, ``TAB``, ``DEL``, ``ESC``, ``F1``, ``Inicio`` e ``IZQUIERDA``, también se introducen de esta forma, al igual que algunos caracteres que se encuentran en teclados no ingleses (**véase Soporte de Juegos de Caracteres Internacionales**).
Emacs también reconoce los caracteres de control que se introducen usando teclas modificadoras. Dos teclas modificadoras de uso común son ``Control`` (:kbd:`Ctrl` normalmente denominada ``Ctrl``) y ``Meta`` (:kbd:`Alt` normalmente denominada ``Alt``) [3]_. Por ejemplo, ``Control-a`` se introduce manteniendo pulsada la tecla :kbd:`Ctrl` (``Ctrl``) mientras se pulsa :kbd:`a` (``a``); nos referiremos a esto como :kbd:`Ctrl`-:kbd:`a` (``C-a``) para abreviar. Del mismo modo, ``Meta-a``, o ``M-a`` para abreviar, se introduce manteniendo pulsada la tecla :kbd:`Alt` (``Alt``) y pulsando :kbd:`a` (``a``). Las teclas modificadoras también pueden aplicarse a caracteres no alfanuméricos, por ejemplo, :kbd:`Ctrl`-:kbd:`F1` (``C-F1``) o :kbd:`Alt`-:kbd:`←` (``M-LEFT``).
También puede escribir caracteres Meta usando secuencias de dos caracteres empezando por ``ESC``. Así, puede introducir ``M-a`` escribiendo :kbd:`ESC`-:kbd:`a`. Puede introducir :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`a` (``C-M-a``) (manteniendo pulsadas las teclas :kbd:`Ctrl` (``Ctrl``) y :kbd:`Alt` (``Alt``), y pulsando :kbd:`a` (``a``)) escribiendo :kbd:`ESC` :kbd:`Ctrl`-:kbd:`a` (``ESC C-a``). A diferencia de ``Meta``, ``ESC`` se introduce como un carácter independiente. No debe mantener pulsado :kbd:`ESC` (``ESC``) mientras escribe el siguiente carácter; en su lugar, pulse :kbd:`ESC` (``ESC``) y suéltelo, después introduzca el siguiente carácter. Esta función es útil en algunos terminales de texto en los que la tecla :kbd:`Alt` (``Meta``) no funciona de forma fiable.
Emacs soporta 3 teclas modificadoras adicionales, **ver Teclas Modificadoras**.
Emacs tiene un amplio soporte para el uso de botones y rueda de ratón, y otros dispositivos señaladores como touchpads y pantallas táctiles. **Ver Entrada del Ratón**, para más detalles.
En ciertos entornos, el gestor de ventanas puede bloquear algunas entradas de teclado, incluyendo :kbd:`Alt`-:kbd:`TAB` (``M-TAB``), :kbd:`Alt`-:kbd:`SPACE` (``M-SPC``), :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`d` (``C-M-d``) y :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`l` (``C-M-l``). Si tiene este problema, puede personalizar su gestor de ventanas para que no bloquee esas teclas, o volver a enlazar los comandos Emacs afectados (vea **Personalización**).
Los caracteres simples y los caracteres de control, así como ciertas entradas que no son de teclado, como los clics del ratón, se denominan colectivamente eventos de entrada. Para más detalles sobre cómo Emacs maneja internamente los eventos de entrada, **vea Eventos de Entrada** en el Manual de Referencia de Emacs Lisp.
Los caracteres simples y los caracteres de control, así como ciertas entradas ajenas al teclado como los clics del ratón, se denominan colectivamente *eventos de entrada*. Para más detalles sobre cómo Emacs maneja internamente los eventos de entrada, **vea Eventos de Entrada** en el Manual de Referencia de Emacs Lisp.
.. [3] Nos refermios a ``Alt`` como ``Meta`` por razones históricas.
.. _teclas:
3 Teclas
========
Algunos comandos de Emacs se invocan con un solo evento de entrada; por ejemplo, :kbd:`Ctrl`-:kbd:`f` (``C-f``) avanza un carácter en el buffer. Otros comandos necesitan dos o más eventos de entrada para ser invocados, como :kbd:`Ctrl`-:kbd:`x` :kbd:`Ctrl`-:kbd:`f` (``C-x C-f``) y :kbd:`Ctrl`-:kbd:`x` :kbd:`4` :kbd:`Ctrl`-:kbd:`f` (``C-x 4 C-f``).
Una *secuencia de teclas*, o *tecla* para abreviar, es una secuencia de uno o más eventos de entrada que tiene sentido como unidad. Si una secuencia de teclas invoca un comando, la llamamos *tecla completa*; por ejemplo, :kbd:`Ctrl`-:kbd:`f` (``C-f``), :kbd:`Ctrl`-:kbd:`x` :kbd:`Ctrl`-:kbd:`f` (``C-x C-f``) y :kbd:`Ctrl`-:kbd:`x` :kbd:`4` :kbd:`Ctrl`-:kbd:`f` (``C-x 4 C-f``) son teclas completas. Si una secuencia de teclas no es lo suficientemente larga como para invocar un comando, la llamamos *tecla prefijo*; en el ejemplo anterior, vemos que :kbd:`Ctrl`-:kbd:`x` (``C-x``) y :kbd:`Ctrl`-:kbd:`x` :kbd:`4` (``C-x 4``) son teclas prefijo. Toda secuencia de teclas puede ser una tecla completa o una tecla prefijo.
Una tecla prefijo se combina con el siguiente evento de entrada para formar una secuencia de teclas más larga. Por ejemplo, :kbd:`Ctrl`-:kbd:`x` (``C-x``) es una tecla prefijo, por lo que teclear :kbd:`Ctrl`-:kbd:`x` (``C-x``) por sí solo no invoca un comando; en su lugar, Emacs espera más entradas (si hace una pausa de más de un segundo, hace eco de la tecla :kbd:`Ctrl`-:kbd:`x` (``C-x``) para pedir esa entrada; **ver El Área de Eco**). :kbd:`Ctrl`-:kbd:`x` (``C-x``) se combina con el siguiente evento de entrada para hacer una secuencia de teclas de dos eventos, que puede ser una tecla prefija (como :kbd:`Ctrl`-:kbd:`x` :kbd:`4` (``C-x 4``)), o una tecla completa (como :kbd:`Ctrl`-:kbd:`x` :kbd:`Ctrl`-:kbd:`f` (``C-x C-f``)). No hay límite para la longitud de las secuencias de teclas, pero en la práctica rara vez superan los tres o cuatro eventos de entrada.
No se pueden añadir eventos de entrada a una tecla completa. Por ejemplo, como :kbd:`Ctrl`-:kbd:`f` (``C-f``) es una tecla completa, la secuencia de dos eventos :kbd:`Ctrl`-:kbd:`f` :kbd:`Ctrl`-:kbd:`k` (``C-f C-k``) son dos secuencias de teclas, no una.
Por defecto, las teclas de prefijo en Emacs son :kbd:`Ctrl`-:kbd:`x` (``C-c``), :kbd:`Ctrl`-:kbd:`h` (``C-h``), :kbd:`Ctrl`-:kbd:`x` (``C-x``), :kbd:`Ctrl`-:kbd:`x` :kbd:`RETURN` (``C-x RET``), :kbd:`Ctrl`-:kbd:`x` :kbd:`@` (``C-x @``), :kbd:`Ctrl`-:kbd:`x` :kbd:`a` (``C-x a``), :kbd:`Ctrl`-:kbd:`x` :kbd:`n` (``C-x n``), :kbd:`Ctrl`-:kbd:`x` :kbd:`r` (``C-x r``), :kbd:`Ctrl`-:kbd:`x` :kbd:`t` (``C-x t``), :kbd:`Ctrl`-:kbd:`x` :kbd:`v` (``C-x v``), :kbd:`Ctrl`-:kbd:`x` :kbd:`4` (``C-x 4``), :kbd:`Ctrl`-:kbd:`x` :kbd:`5` (``C-x 5``), :kbd:`Ctrl`-:kbd:`x` :kbd:`6` (``C-x 6``), :kbd:`ESC` (``ESC``), y :kbd:`Alt`-:kbd:`g` (``M-g``). (:kbd:`F1` (``F1``) y :kbd:`F2` (``F2``) son alias para :kbd:`Ctrl`-:kbd:`h` (``C-h``) y :kbd:`Ctrl`-:kbd:`x` :kbd:`6` (``C-x 6``).) Esta lista no está grabada en piedra; si personaliza Emacs, puede hacer nuevas teclas de prefijo. Por ejemplo, si elimina la definición de prefijo de :kbd:`Ctrl`-:kbd:`x` :kbd:`4` (``C-x 4``), entonces :kbd:`Ctrl`-:kbd:`x` :kbd:`4` :kbd:`Ctrl`-:kbd:`f` (``C-x 4 C-f``) se convierte en una secuencia de teclas inválida. **Consulte Personalización de las Combinaciones de Teclas**.
Al escribir el carácter de ayuda (:kbd:`Ctrl`-:kbd:`h` (``C-h``) o :kbd:`F1` (``F1``)) después de una tecla de prefijo, se muestra una lista de los comandos que comienzan con ese prefijo. La única excepción a esta regla es :kbd:`ESC`:kbd:`:` :kbd:`ESC` :kbd:`Ctrl`-:kbd:`h` (``ESC: ESC C-h``) equivale a :kbd:`Ctrl`-:kbd:`Àlt`-:kbd:`h` (``C-M-h``), que hace algo completamente distinto. Sin embargo, puede usar :kbd:`F1` (``F1``) para mostrar una lista de comandos que empiecen por :kbd:`ESC` (``ESC``).
4 Entrada del Ratón
===================
Por defecto, Emacs soporta todas las acciones normales del ratón, como fijar el cursor pulsando el botón izquierdo, y seleccionar un área arrastrando el puntero del ratón. Todas las acciones del ratón pueden usarse para enlazar comandos de la misma forma que se enlazan a eventos del teclado (ver Teclas_). Esta sección proporciona una visión general del uso del ratón en Emacs; ver Comandos del Ratón para Editar, y las secciones que le siguen, para más detalles sobre los comandos del ratón en Emacs.
Cuando pulsa el botón izquierdo del ratón, Emacs recibe un evento ``mouse-1``. Para ver qué comando está ligado a ese evento, pulse el botón izquierdo del ratón. Para ver qué comando está ligado a ese evento, puede teclear :kbd:`Ctrl`-:kbd:`h` :kbd:`c` (``C-h c``) y luego pulsar el botón izquierdo del ratón. De forma similar, el botón central del ratón es ``mouse-2`` y el botón derecho es ``mouse-3``. Si tiene un ratón con rueda, los eventos de la rueda suelen estar vinculados a rueda abajo o rueda arriba, o ``mouse-4`` y ``mouse-5``, pero eso depende de la configuración del sistema operativo.
En general, los sistemas X heredados y los terminales (véase Uso de un Ratón en Terminales de Texto) reportarán ``mouse-4`` y ``mouse-5``, mientras que todos los demás sistemas reportarán ``wheel-down`` (rueda hacia abajo) y ``wheel-up`` (rueda hacia arriba).
Algunos ratones también tienen una rueda de desplazamiento horizontal, y los touchpads normalmente soportan el desplazamiento horizontal también. Estos eventos se reportan como ``wheel-left`` (rueda-izquierda) y ``whell-right`` (rueda-derecha) en todos los sistemas excepto en terminales y sistemas X heredados, donde son ``mouse-6`` y ``mouse-7``.
También puede combinar modificadores de teclado con eventos de ratón, por lo que puede enlazar un comando especial que se active cuando, por ejemplo, mantenga pulsada la tecla :kbd:`Alt` (``Meta``) y luego utilice el botón central del ratón. En ese caso, el nombre del evento será ``M-mouse-2``.
En algunos sistemas, también puede enlazar comandos para manejar eventos de pantalla táctil. En ese caso, los eventos se denominan ``touchscreen-update`` y ``touchscreen-end``.

View File

@ -0,0 +1,25 @@
Distribución
============
GNU Emacs es *software libre;* esto significa que todo el mundo es libre de usarlo y libre de redistribuirlo bajo ciertas condiciones. Emacs de GNU no es de dominio público; tiene copyright y hay restricciones en su distribución, pero estas restricciones están diseñadas para permitir todo lo que un buen ciudadano cooperador querría hacer. Lo que no está permitido es intentar evitar que otros sigan compartiendo cualquier versión de GNU Emacs que puedan obtener de usted. Las condiciones precisas se encuentran en la Licencia Pública General de GNU que viene con Emacs y que también aparece en este manual [1]_. Ver LICENCIA PÚBLICA GENERAL DE GNU.
Una forma de obtener una copia de GNU Emacs es de otra persona que lo tenga. No necesita pedirnos permiso para hacerlo, ni decírselo a nadie; simplemente cópielo. Si tiene acceso a Internet, puede obtener la última versión de distribución de GNU Emacs por FTP anónimo; vea https://www.gnu.org/software/emacs en nuestro sitio web para más información.
También puede recibir GNU Emacs al comprar un ordenador. Los fabricantes de ordenadores son libres de distribuir copias en los mismos términos que se aplican a todos los demás. Estos términos requieren que le den las fuentes completas, incluyendo cualquier cambio que puedan haber hecho, y que le permitan redistribuir el Emacs de GNU recibido de ellos bajo los términos habituales de la Licencia Pública General. En otras palabras, el programa debe ser libre para Usted cuando lo obtenga, no sólo libre para el fabricante.
Si encuentra útil GNU Emacs, por favor **envíe una donación** a la Free Software Foundation para apoyar nuestro trabajo. Las donaciones a la Free Software Foundation son deducibles de impuestos en los Estados Unidos. Si usa GNU Emacs en su lugar de trabajo, por favor sugiera a la empresa que haga una donación. Para donar, vea `<https://my.fsf.org/donate/>`_. Para otras formas en las que puede ayudar, vea `<https://www.gnu.org/help/help.html>`_.
También vendemos versiones impresas de este manual y de An Introduction to Programming in Emacs Lisp, de Robert J. Chassell. Puede visitar nuestra tienda en línea en `<https://shop.fsf.org/>`_. Los ingresos de las ventas se destinan a apoyar el propósito de la fundación: el desarrollo de nuevo software libre, y mejoras en nuestros programas existentes, incluyendo GNU Emacs.
Si necesita contactarse con la Fundación del Software Libre (Free Software Foundation) vea `<https://www.fsf.org/about/contact/>`_ o escriba a:
::
Free Software Foundation
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301
USA
.. [1] Este manual está cubierto por la Licencia de Documentación Libre de GNU. Esta licencia es similar en espíritu a la Licencia Pública General, pero es más adecuada para la documentación. Véase la Licencia de documentación libre de GNU.

View File

@ -0,0 +1,51 @@
.. GNU/Emacs 28.2 documentation master file, created by
sphinx-quickstart on Fri Oct 27 12:33:18 2023.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Archivo maestro de documentación de Guia Sphinx, creado por sphinx-quickstart
el Thu May 11 20:34:32 2017.
Puede adaptar este archivo completamente a su gusto, pero al menos debe
contener la directiva raíz `toctree`.
Documentación en Español GNU/Emacs 29.1
=======================================
.. toctree::
:maxdepth: 3
:caption: .. Contents::
Emacs es el editor avanzado, extensible, personalizable y autodocumentado. Este manual describe cómo editar con Emacs y algunas formas de personalizarlo; corresponde a la versión 29.1 de GNU Emacs.
| El sitio web de GNU Emacs está en https://www.gnu.org/software/emacs/.
| Para ver este manual en otros formatos, pulse `aquí <https://www.gnu.org/software/emacs/manual/emacs.html>`_.
| También puede adquirir una copia impresa en la `tienda <https://shop.fsf.org/product/emacs-manual/>`_ de la FSF.
Para información sobre cómo extender Emacs, vea `Emacs Lisp <https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html#Top>`_ en The Emacs Lisp Reference Manual.
Este es el Manual de GNU Emacs, actualizado para la versión 29.1 de Emacs.
Copyright © 1985-1987, 1993-2023 Free Software Foundation, Inc.
Se concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de GNU, Versión 1.3 o cualquier versión posterior
publicada por la Free Software Foundation; siendo las Secciones Invariantes "El Manifiesto de GNU", "Distribución" y "LICENCIA PÚBLICA GENERAL DE GNU", siendo los Textos de Cubierta
Delantera "Un Manual de GNU", y con los Textos de Cubierta Trasera como en (a) más abajo. Se incluye una copia de la licencia en la sección titulada "GNU Free Documentation License".
\(a\) El texto de contraportada de la FSF es: "Usted tiene la libertad de copiar y modificar este manual GNU. Comprar copias a la FSF la apoya en el desarrollo de GNU y en la promoción
de la libertad del software."
Índice de Contenidos
--------------------
.. * :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
.. toctree::
distribucion
introduccion
OrganizDeLaPant/01_1-2-3-4

View File

@ -0,0 +1,201 @@
Introducción
============
Está leyendo sobre GNU Emacs, la encarnación GNU del avanzado, autodocumentado, personalizable y extensible editor Emacs. (La ``G`` de GNU (GNU no es Unix) no es muda).
Llamamos *avanzado* a Emacs porque puede hacer mucho más que una simple inserción y borrado de texto. Puede controlar subprocesos, sangrar programas automáticamente, mostrar múltiples archivos a la vez, editar archivos remotos como si fueran archivos locales, y mucho más. Los comandos de edición de Emacs funcionan en términos de caracteres, palabras, líneas, frases, párrafos y páginas, así como de expresiones y comentarios en varios lenguajes de programación.
*Autodocumentado* significa que en cualquier momento puede utilizar comandos especiales, conocidos como *comandos de ayuda*, para averiguar cuáles son sus opciones, o para averiguar qué hace
cualquier comando, o para encontrar todos los comandos que pertenecen a un tema determinado. **Véase Ayuda** .
*Personalizable* significa que puede alterar fácilmente el comportamiento de los comandos de Emacs de maneras sencillas. Por ejemplo, si usa un lenguaje de programación en el que los comentarios empiezan con ``<**`` y terminan con ``**>``, puede decirle a los comandos de manipulación de comentarios de Emacs que usen esas cadenas (**vea Manipulación de comentarios**). Por poner otro ejemplo, puede reenlazar los comandos básicos de movimiento del cursor (arriba, abajo, izquierda y derecha) a cualquier tecla del teclado que te resulte cómoda. **Véase Personalización**.
*Extensible* significa que puede ir más allá de la simple personalización y crear comandos completamente nuevos. Los nuevos comandos son simplemente programas escritos en lenguaje Lisp, que son ejecutados por el propio intérprete Lisp de Emacs. Los comandos existentes pueden incluso redefinirse en mitad de una sesión de edición, sin tener que reiniciar Emacs. La mayoría de los comandos de edición en Emacs están escritos en Lisp; las pocas excepciones podrían haber sido escritas en Lisp pero usan C en su lugar por eficiencia. Escribir una extensión es programar, pero los no programadores pueden usarla después. **Ver Prefacio en Una Introducción a la Programación en Emacs Lisp**, si quiere aprender programación en Emacs Lisp.

View File

@ -0,0 +1,123 @@
/* Compatability shim for jQuery and underscores.js.
*
* Copyright Sphinx contributors
* Released under the two clause BSD licence
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View File

@ -0,0 +1,294 @@
/**@constructor*/
BaseStemmer = function() {
this.setCurrent = function(value) {
this.current = value;
this.cursor = 0;
this.limit = this.current.length;
this.limit_backward = 0;
this.bra = this.cursor;
this.ket = this.limit;
};
this.getCurrent = function() {
return this.current;
};
this.copy_from = function(other) {
this.current = other.current;
this.cursor = other.cursor;
this.limit = other.limit;
this.limit_backward = other.limit_backward;
this.bra = other.bra;
this.ket = other.ket;
};
this.in_grouping = function(s, min, max) {
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor++;
return true;
};
this.in_grouping_b = function(s, min, max) {
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor--;
return true;
};
this.out_grouping = function(s, min, max) {
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) {
this.cursor++;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) {
this.cursor++;
return true;
}
return false;
};
this.out_grouping_b = function(s, min, max) {
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) {
this.cursor--;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) {
this.cursor--;
return true;
}
return false;
};
this.eq_s = function(s)
{
if (this.limit - this.cursor < s.length) return false;
if (this.current.slice(this.cursor, this.cursor + s.length) != s)
{
return false;
}
this.cursor += s.length;
return true;
};
this.eq_s_b = function(s)
{
if (this.cursor - this.limit_backward < s.length) return false;
if (this.current.slice(this.cursor - s.length, this.cursor) != s)
{
return false;
}
this.cursor -= s.length;
return true;
};
/** @return {number} */ this.find_among = function(v)
{
var i = 0;
var j = v.length;
var c = this.cursor;
var l = this.limit;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >>> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j; // smaller
// w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
var w = v[k];
var i2;
for (i2 = common; i2 < w[0].length; i2++)
{
if (c + common == l)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break; // v->s has been inspected
if (j == i) break; // only one item in v
// - but now we need to go round once more to get
// v->s inspected. This looks messy, but is actually
// the optimal approach.
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c + w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c + w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
// find_among_b is for backwards processing. Same comments apply
this.find_among_b = function(v)
{
var i = 0;
var j = v.length
var c = this.cursor;
var lb = this.limit_backward;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j;
var w = v[k];
var i2;
for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
{
if (c - common == lb)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break;
if (j == i) break;
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c - w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c - w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
/* to replace chars between c_bra and c_ket in this.current by the
* chars in s.
*/
this.replace_s = function(c_bra, c_ket, s)
{
var adjustment = s.length - (c_ket - c_bra);
this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
this.limit += adjustment;
if (this.cursor >= c_ket) this.cursor += adjustment;
else if (this.cursor > c_bra) this.cursor = c_bra;
return adjustment;
};
this.slice_check = function()
{
if (this.bra < 0 ||
this.bra > this.ket ||
this.ket > this.limit ||
this.limit > this.current.length)
{
return false;
}
return true;
};
this.slice_from = function(s)
{
var result = false;
if (this.slice_check())
{
this.replace_s(this.bra, this.ket, s);
result = true;
}
return result;
};
this.slice_del = function()
{
return this.slice_from("");
};
this.insert = function(c_bra, c_ket, s)
{
var adjustment = this.replace_s(c_bra, c_ket, s);
if (c_bra <= this.bra) this.bra += adjustment;
if (c_bra <= this.ket) this.ket += adjustment;
};
this.slice_to = function()
{
var result = '';
if (this.slice_check())
{
result = this.current.slice(this.bra, this.ket);
}
return result;
};
this.assign_to = function()
{
return this.current.slice(0, this.limit);
};
};

View File

@ -0,0 +1,925 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a:visited {
color: #551A8B;
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
float: left;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
.sig dd {
margin-top: 0px;
margin-bottom: 0px;
}
.sig dl {
margin-top: 0px;
margin-bottom: 0px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0 0.5em;
content: ":";
display: inline-block;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
.translated {
background-color: rgba(207, 255, 207, 0.2)
}
.untranslated {
background-color: rgba(255, 207, 207, 0.2)
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
white-space: nowrap;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

View File

@ -0,0 +1 @@
.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,156 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
};
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
},
/**
* Initialise the domain index toggle buttons
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
},
initOnKeyListeners: () => {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
if (!event.shiftKey) {
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
};
// quick alias for translations
const _ = Documentation.gettext;
_ready(Documentation.init);

View File

@ -0,0 +1,13 @@
const DOCUMENTATION_OPTIONS = {
VERSION: '0.01',
LANGUAGE: 'es',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: true,
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});

View File

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);

View File

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

View File

@ -0,0 +1,75 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #9C6500 } /* Comment.Preproc */
.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #E40000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #008400 } /* Generic.Inserted */
.highlight .go { color: #717171 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #687822 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #767600 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */

View File

@ -0,0 +1,574 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms, highlightTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const contentRoot = document.documentElement.dataset.content_root;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = contentRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = contentRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr) {
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
// highlight search terms in the description
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
}
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
// highlight search terms in the summary
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms,
highlightTerms,
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms, highlightTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
}
},
hasIndex: () => Search._index !== null,
deferQuery: (query) => (Search._queued_query = query),
stopPulse: () => (Search._pulse_status = -1),
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the word
let word = stemmer.stemWord(queryTermLower);
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
}
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms, highlightTerms);
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
const results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
};
_ready(Search.init);

View File

@ -0,0 +1,990 @@
// Generated by Snowball 2.1.0 - https://snowballstem.org/
/**@constructor*/
SpanishStemmer = function() {
var base = new BaseStemmer();
/** @const */ var a_0 = [
["", -1, 6],
["\u00E1", 0, 1],
["\u00E9", 0, 2],
["\u00ED", 0, 3],
["\u00F3", 0, 4],
["\u00FA", 0, 5]
];
/** @const */ var a_1 = [
["la", -1, -1],
["sela", 0, -1],
["le", -1, -1],
["me", -1, -1],
["se", -1, -1],
["lo", -1, -1],
["selo", 5, -1],
["las", -1, -1],
["selas", 7, -1],
["les", -1, -1],
["los", -1, -1],
["selos", 10, -1],
["nos", -1, -1]
];
/** @const */ var a_2 = [
["ando", -1, 6],
["iendo", -1, 6],
["yendo", -1, 7],
["\u00E1ndo", -1, 2],
["i\u00E9ndo", -1, 1],
["ar", -1, 6],
["er", -1, 6],
["ir", -1, 6],
["\u00E1r", -1, 3],
["\u00E9r", -1, 4],
["\u00EDr", -1, 5]
];
/** @const */ var a_3 = [
["ic", -1, -1],
["ad", -1, -1],
["os", -1, -1],
["iv", -1, 1]
];
/** @const */ var a_4 = [
["able", -1, 1],
["ible", -1, 1],
["ante", -1, 1]
];
/** @const */ var a_5 = [
["ic", -1, 1],
["abil", -1, 1],
["iv", -1, 1]
];
/** @const */ var a_6 = [
["ica", -1, 1],
["ancia", -1, 2],
["encia", -1, 5],
["adora", -1, 2],
["osa", -1, 1],
["ista", -1, 1],
["iva", -1, 9],
["anza", -1, 1],
["log\u00EDa", -1, 3],
["idad", -1, 8],
["able", -1, 1],
["ible", -1, 1],
["ante", -1, 2],
["mente", -1, 7],
["amente", 13, 6],
["aci\u00F3n", -1, 2],
["uci\u00F3n", -1, 4],
["ico", -1, 1],
["ismo", -1, 1],
["oso", -1, 1],
["amiento", -1, 1],
["imiento", -1, 1],
["ivo", -1, 9],
["ador", -1, 2],
["icas", -1, 1],
["ancias", -1, 2],
["encias", -1, 5],
["adoras", -1, 2],
["osas", -1, 1],
["istas", -1, 1],
["ivas", -1, 9],
["anzas", -1, 1],
["log\u00EDas", -1, 3],
["idades", -1, 8],
["ables", -1, 1],
["ibles", -1, 1],
["aciones", -1, 2],
["uciones", -1, 4],
["adores", -1, 2],
["antes", -1, 2],
["icos", -1, 1],
["ismos", -1, 1],
["osos", -1, 1],
["amientos", -1, 1],
["imientos", -1, 1],
["ivos", -1, 9]
];
/** @const */ var a_7 = [
["ya", -1, 1],
["ye", -1, 1],
["yan", -1, 1],
["yen", -1, 1],
["yeron", -1, 1],
["yendo", -1, 1],
["yo", -1, 1],
["yas", -1, 1],
["yes", -1, 1],
["yais", -1, 1],
["yamos", -1, 1],
["y\u00F3", -1, 1]
];
/** @const */ var a_8 = [
["aba", -1, 2],
["ada", -1, 2],
["ida", -1, 2],
["ara", -1, 2],
["iera", -1, 2],
["\u00EDa", -1, 2],
["ar\u00EDa", 5, 2],
["er\u00EDa", 5, 2],
["ir\u00EDa", 5, 2],
["ad", -1, 2],
["ed", -1, 2],
["id", -1, 2],
["ase", -1, 2],
["iese", -1, 2],
["aste", -1, 2],
["iste", -1, 2],
["an", -1, 2],
["aban", 16, 2],
["aran", 16, 2],
["ieran", 16, 2],
["\u00EDan", 16, 2],
["ar\u00EDan", 20, 2],
["er\u00EDan", 20, 2],
["ir\u00EDan", 20, 2],
["en", -1, 1],
["asen", 24, 2],
["iesen", 24, 2],
["aron", -1, 2],
["ieron", -1, 2],
["ar\u00E1n", -1, 2],
["er\u00E1n", -1, 2],
["ir\u00E1n", -1, 2],
["ado", -1, 2],
["ido", -1, 2],
["ando", -1, 2],
["iendo", -1, 2],
["ar", -1, 2],
["er", -1, 2],
["ir", -1, 2],
["as", -1, 2],
["abas", 39, 2],
["adas", 39, 2],
["idas", 39, 2],
["aras", 39, 2],
["ieras", 39, 2],
["\u00EDas", 39, 2],
["ar\u00EDas", 45, 2],
["er\u00EDas", 45, 2],
["ir\u00EDas", 45, 2],
["es", -1, 1],
["ases", 49, 2],
["ieses", 49, 2],
["abais", -1, 2],
["arais", -1, 2],
["ierais", -1, 2],
["\u00EDais", -1, 2],
["ar\u00EDais", 55, 2],
["er\u00EDais", 55, 2],
["ir\u00EDais", 55, 2],
["aseis", -1, 2],
["ieseis", -1, 2],
["asteis", -1, 2],
["isteis", -1, 2],
["\u00E1is", -1, 2],
["\u00E9is", -1, 1],
["ar\u00E9is", 64, 2],
["er\u00E9is", 64, 2],
["ir\u00E9is", 64, 2],
["ados", -1, 2],
["idos", -1, 2],
["amos", -1, 2],
["\u00E1bamos", 70, 2],
["\u00E1ramos", 70, 2],
["i\u00E9ramos", 70, 2],
["\u00EDamos", 70, 2],
["ar\u00EDamos", 74, 2],
["er\u00EDamos", 74, 2],
["ir\u00EDamos", 74, 2],
["emos", -1, 1],
["aremos", 78, 2],
["eremos", 78, 2],
["iremos", 78, 2],
["\u00E1semos", 78, 2],
["i\u00E9semos", 78, 2],
["imos", -1, 2],
["ar\u00E1s", -1, 2],
["er\u00E1s", -1, 2],
["ir\u00E1s", -1, 2],
["\u00EDs", -1, 2],
["ar\u00E1", -1, 2],
["er\u00E1", -1, 2],
["ir\u00E1", -1, 2],
["ar\u00E9", -1, 2],
["er\u00E9", -1, 2],
["ir\u00E9", -1, 2],
["i\u00F3", -1, 2]
];
/** @const */ var a_9 = [
["a", -1, 1],
["e", -1, 2],
["o", -1, 1],
["os", -1, 1],
["\u00E1", -1, 1],
["\u00E9", -1, 2],
["\u00ED", -1, 1],
["\u00F3", -1, 1]
];
/** @const */ var /** Array<int> */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10];
var /** number */ I_p2 = 0;
var /** number */ I_p1 = 0;
var /** number */ I_pV = 0;
/** @return {boolean} */
function r_mark_regions() {
I_pV = base.limit;
I_p1 = base.limit;
I_p2 = base.limit;
var /** number */ v_1 = base.cursor;
lab0: {
lab1: {
var /** number */ v_2 = base.cursor;
lab2: {
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab2;
}
lab3: {
var /** number */ v_3 = base.cursor;
lab4: {
if (!(base.out_grouping(g_v, 97, 252)))
{
break lab4;
}
golab5: while(true)
{
lab6: {
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab6;
}
break golab5;
}
if (base.cursor >= base.limit)
{
break lab4;
}
base.cursor++;
}
break lab3;
}
base.cursor = v_3;
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab2;
}
golab7: while(true)
{
lab8: {
if (!(base.out_grouping(g_v, 97, 252)))
{
break lab8;
}
break golab7;
}
if (base.cursor >= base.limit)
{
break lab2;
}
base.cursor++;
}
}
break lab1;
}
base.cursor = v_2;
if (!(base.out_grouping(g_v, 97, 252)))
{
break lab0;
}
lab9: {
var /** number */ v_6 = base.cursor;
lab10: {
if (!(base.out_grouping(g_v, 97, 252)))
{
break lab10;
}
golab11: while(true)
{
lab12: {
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab12;
}
break golab11;
}
if (base.cursor >= base.limit)
{
break lab10;
}
base.cursor++;
}
break lab9;
}
base.cursor = v_6;
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab0;
}
if (base.cursor >= base.limit)
{
break lab0;
}
base.cursor++;
}
}
I_pV = base.cursor;
}
base.cursor = v_1;
var /** number */ v_8 = base.cursor;
lab13: {
golab14: while(true)
{
lab15: {
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab15;
}
break golab14;
}
if (base.cursor >= base.limit)
{
break lab13;
}
base.cursor++;
}
golab16: while(true)
{
lab17: {
if (!(base.out_grouping(g_v, 97, 252)))
{
break lab17;
}
break golab16;
}
if (base.cursor >= base.limit)
{
break lab13;
}
base.cursor++;
}
I_p1 = base.cursor;
golab18: while(true)
{
lab19: {
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab19;
}
break golab18;
}
if (base.cursor >= base.limit)
{
break lab13;
}
base.cursor++;
}
golab20: while(true)
{
lab21: {
if (!(base.out_grouping(g_v, 97, 252)))
{
break lab21;
}
break golab20;
}
if (base.cursor >= base.limit)
{
break lab13;
}
base.cursor++;
}
I_p2 = base.cursor;
}
base.cursor = v_8;
return true;
};
/** @return {boolean} */
function r_postlude() {
var /** number */ among_var;
while(true)
{
var /** number */ v_1 = base.cursor;
lab0: {
base.bra = base.cursor;
among_var = base.find_among(a_0);
if (among_var == 0)
{
break lab0;
}
base.ket = base.cursor;
switch (among_var) {
case 1:
if (!base.slice_from("a"))
{
return false;
}
break;
case 2:
if (!base.slice_from("e"))
{
return false;
}
break;
case 3:
if (!base.slice_from("i"))
{
return false;
}
break;
case 4:
if (!base.slice_from("o"))
{
return false;
}
break;
case 5:
if (!base.slice_from("u"))
{
return false;
}
break;
case 6:
if (base.cursor >= base.limit)
{
break lab0;
}
base.cursor++;
break;
}
continue;
}
base.cursor = v_1;
break;
}
return true;
};
/** @return {boolean} */
function r_RV() {
if (!(I_pV <= base.cursor))
{
return false;
}
return true;
};
/** @return {boolean} */
function r_R1() {
if (!(I_p1 <= base.cursor))
{
return false;
}
return true;
};
/** @return {boolean} */
function r_R2() {
if (!(I_p2 <= base.cursor))
{
return false;
}
return true;
};
/** @return {boolean} */
function r_attached_pronoun() {
var /** number */ among_var;
base.ket = base.cursor;
if (base.find_among_b(a_1) == 0)
{
return false;
}
base.bra = base.cursor;
among_var = base.find_among_b(a_2);
if (among_var == 0)
{
return false;
}
if (!r_RV())
{
return false;
}
switch (among_var) {
case 1:
base.bra = base.cursor;
if (!base.slice_from("iendo"))
{
return false;
}
break;
case 2:
base.bra = base.cursor;
if (!base.slice_from("ando"))
{
return false;
}
break;
case 3:
base.bra = base.cursor;
if (!base.slice_from("ar"))
{
return false;
}
break;
case 4:
base.bra = base.cursor;
if (!base.slice_from("er"))
{
return false;
}
break;
case 5:
base.bra = base.cursor;
if (!base.slice_from("ir"))
{
return false;
}
break;
case 6:
if (!base.slice_del())
{
return false;
}
break;
case 7:
if (!(base.eq_s_b("u")))
{
return false;
}
if (!base.slice_del())
{
return false;
}
break;
}
return true;
};
/** @return {boolean} */
function r_standard_suffix() {
var /** number */ among_var;
base.ket = base.cursor;
among_var = base.find_among_b(a_6);
if (among_var == 0)
{
return false;
}
base.bra = base.cursor;
switch (among_var) {
case 1:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
break;
case 2:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_1 = base.limit - base.cursor;
lab0: {
base.ket = base.cursor;
if (!(base.eq_s_b("ic")))
{
base.cursor = base.limit - v_1;
break lab0;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_1;
break lab0;
}
if (!base.slice_del())
{
return false;
}
}
break;
case 3:
if (!r_R2())
{
return false;
}
if (!base.slice_from("log"))
{
return false;
}
break;
case 4:
if (!r_R2())
{
return false;
}
if (!base.slice_from("u"))
{
return false;
}
break;
case 5:
if (!r_R2())
{
return false;
}
if (!base.slice_from("ente"))
{
return false;
}
break;
case 6:
if (!r_R1())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_2 = base.limit - base.cursor;
lab1: {
base.ket = base.cursor;
among_var = base.find_among_b(a_3);
if (among_var == 0)
{
base.cursor = base.limit - v_2;
break lab1;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_2;
break lab1;
}
if (!base.slice_del())
{
return false;
}
switch (among_var) {
case 1:
base.ket = base.cursor;
if (!(base.eq_s_b("at")))
{
base.cursor = base.limit - v_2;
break lab1;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_2;
break lab1;
}
if (!base.slice_del())
{
return false;
}
break;
}
}
break;
case 7:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_3 = base.limit - base.cursor;
lab2: {
base.ket = base.cursor;
if (base.find_among_b(a_4) == 0)
{
base.cursor = base.limit - v_3;
break lab2;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_3;
break lab2;
}
if (!base.slice_del())
{
return false;
}
}
break;
case 8:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_4 = base.limit - base.cursor;
lab3: {
base.ket = base.cursor;
if (base.find_among_b(a_5) == 0)
{
base.cursor = base.limit - v_4;
break lab3;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_4;
break lab3;
}
if (!base.slice_del())
{
return false;
}
}
break;
case 9:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_5 = base.limit - base.cursor;
lab4: {
base.ket = base.cursor;
if (!(base.eq_s_b("at")))
{
base.cursor = base.limit - v_5;
break lab4;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_5;
break lab4;
}
if (!base.slice_del())
{
return false;
}
}
break;
}
return true;
};
/** @return {boolean} */
function r_y_verb_suffix() {
if (base.cursor < I_pV)
{
return false;
}
var /** number */ v_2 = base.limit_backward;
base.limit_backward = I_pV;
base.ket = base.cursor;
if (base.find_among_b(a_7) == 0)
{
base.limit_backward = v_2;
return false;
}
base.bra = base.cursor;
base.limit_backward = v_2;
if (!(base.eq_s_b("u")))
{
return false;
}
if (!base.slice_del())
{
return false;
}
return true;
};
/** @return {boolean} */
function r_verb_suffix() {
var /** number */ among_var;
if (base.cursor < I_pV)
{
return false;
}
var /** number */ v_2 = base.limit_backward;
base.limit_backward = I_pV;
base.ket = base.cursor;
among_var = base.find_among_b(a_8);
if (among_var == 0)
{
base.limit_backward = v_2;
return false;
}
base.bra = base.cursor;
base.limit_backward = v_2;
switch (among_var) {
case 1:
var /** number */ v_3 = base.limit - base.cursor;
lab0: {
if (!(base.eq_s_b("u")))
{
base.cursor = base.limit - v_3;
break lab0;
}
var /** number */ v_4 = base.limit - base.cursor;
if (!(base.eq_s_b("g")))
{
base.cursor = base.limit - v_3;
break lab0;
}
base.cursor = base.limit - v_4;
}
base.bra = base.cursor;
if (!base.slice_del())
{
return false;
}
break;
case 2:
if (!base.slice_del())
{
return false;
}
break;
}
return true;
};
/** @return {boolean} */
function r_residual_suffix() {
var /** number */ among_var;
base.ket = base.cursor;
among_var = base.find_among_b(a_9);
if (among_var == 0)
{
return false;
}
base.bra = base.cursor;
switch (among_var) {
case 1:
if (!r_RV())
{
return false;
}
if (!base.slice_del())
{
return false;
}
break;
case 2:
if (!r_RV())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_1 = base.limit - base.cursor;
lab0: {
base.ket = base.cursor;
if (!(base.eq_s_b("u")))
{
base.cursor = base.limit - v_1;
break lab0;
}
base.bra = base.cursor;
var /** number */ v_2 = base.limit - base.cursor;
if (!(base.eq_s_b("g")))
{
base.cursor = base.limit - v_1;
break lab0;
}
base.cursor = base.limit - v_2;
if (!r_RV())
{
base.cursor = base.limit - v_1;
break lab0;
}
if (!base.slice_del())
{
return false;
}
}
break;
}
return true;
};
this.stem = /** @return {boolean} */ function() {
r_mark_regions();
base.limit_backward = base.cursor; base.cursor = base.limit;
var /** number */ v_2 = base.limit - base.cursor;
r_attached_pronoun();
base.cursor = base.limit - v_2;
var /** number */ v_3 = base.limit - base.cursor;
lab0: {
lab1: {
var /** number */ v_4 = base.limit - base.cursor;
lab2: {
if (!r_standard_suffix())
{
break lab2;
}
break lab1;
}
base.cursor = base.limit - v_4;
lab3: {
if (!r_y_verb_suffix())
{
break lab3;
}
break lab1;
}
base.cursor = base.limit - v_4;
if (!r_verb_suffix())
{
break lab0;
}
}
}
base.cursor = base.limit - v_3;
var /** number */ v_5 = base.limit - base.cursor;
r_residual_suffix();
base.cursor = base.limit - v_5;
base.cursor = base.limit_backward;
var /** number */ v_6 = base.cursor;
r_postlude();
base.cursor = v_6;
return true;
};
/**@return{string}*/
this['stemWord'] = function(/**string*/word) {
base.setCurrent(word);
this.stem();
return base.getCurrent();
};
};

View File

@ -0,0 +1,154 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
const rest = document.createTextNode(val.substr(pos + text.length));
parent.insertBefore(
span,
parent.insertBefore(
rest,
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
/* There may be more occurrences of search term in this node. So call this
* function recursively on the remaining fragment.
*/
_highlight(rest, addItems, text, className);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(() => {
/* Do not call highlightSearchWords() when we are on the search page.
* It will highlight words from the *previous* search query.
*/
if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
SphinxHighlight.initEscapeListener();
});

View File

@ -0,0 +1,60 @@
Documentation.addTranslations({
"locale": "es",
"messages": {
"%(filename)s &#8212; %(docstitle)s": "%(filename)s &#8212; %(docstitle)s",
"&#169; %(copyright_prefix)s %(copyright)s.": "",
", in ": ", en ",
"About these documents": "Sobre este documento",
"Automatically generated list of changes in version %(version)s": "Lista de cambios generada autom\u00e1ticamente en la versi\u00f3n %(version)s",
"C API changes": "Cambios en la API C",
"Changes in Version %(version)s &#8212; %(docstitle)s": "Cambios en la versi\u00f3n %(version)s &#8212; %(docstitle)s",
"Collapse sidebar": "Contraer barra lateral",
"Complete Table of Contents": "\u00cdndice de contenidos completo",
"Contents": "Contenidos",
"Copyright": "Copyright",
"Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creado usando <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.",
"Expand sidebar": "Expandir barra lateral",
"Full index on one page": "\u00cdndice completo en una p\u00e1gina",
"General Index": "\u00cdndice General",
"Global Module Index": "\u00cdndice Global de M\u00f3dulos",
"Go": "Ir a",
"Hide Search Matches": "Ocultar coincidencias de la b\u00fasqueda",
"Index": "\u00cdndice",
"Index &ndash; %(key)s": "\u00cdndice &ndash; %(key)s",
"Index pages by letter": "\u00cdndice alfab\u00e9tico de p\u00e1ginas",
"Indices and tables:": "\u00cdndices y tablas:",
"Last updated on %(last_updated)s.": "Actualizado por \u00faltima vez en %(last_updated)s.",
"Library changes": "Cambios en la biblioteca",
"Navigation": "Navegaci\u00f3n",
"Next topic": "Pr\u00f3ximo tema",
"Other changes": "Otros cambios",
"Overview": "Resumen",
"Please activate JavaScript to enable the search\n functionality.": "Por favor, active JavaScript para habilitar la funcionalidad\n de b\u00fasqueda.",
"Preparing search...": "Preparando b\u00fasqueda...",
"Previous topic": "Tema anterior",
"Quick search": "B\u00fasqueda r\u00e1pida",
"Search": "B\u00fasqueda",
"Search Page": "P\u00e1gina de B\u00fasqueda",
"Search Results": "Resultados de la b\u00fasqueda",
"Search finished, found ${resultCount} page(s) matching the search query.": "B\u00fasqueda finalizada, se encontraron ${resultCount} p\u00e1ginas que coinciden con la consulta de b\u00fasqueda.",
"Search within %(docstitle)s": "Buscar en %(docstitle)s",
"Searching": "Buscando",
"Searching for multiple words only shows matches that contain\n all words.": "La b\u00fasqueda de varias palabras solo muestra coincidencias que contienen\n todas las palabras.",
"Show Source": "Mostrar el c\u00f3digo",
"Table of Contents": "Tabla de contenido",
"This Page": "Esta p\u00e1gina",
"Welcome! This is": "\u00a1Bienvenido! Este es",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Su b\u00fasqueda no coincide con ning\u00fan documentos. Por favor, aseg\u00farese de que todas las palabras est\u00e9n correctamente escritas y que usted all\u00e1 seleccionado las suficientes categor\u00edas.",
"all functions, classes, terms": "todas las funciones, clases, t\u00e9rminos",
"can be huge": "puede ser muy grande",
"last updated": "actualizado por \u00faltima vez el",
"lists all sections and subsections": "muestra todas las secciones y subsecciones",
"next chapter": "pr\u00f3ximo cap\u00edtulo",
"previous chapter": "cap\u00edtulo anterior",
"quick access to all modules": "acceso r\u00e1pido a todos los m\u00f3dulos",
"search": "buscar",
"search this documentation": "buscar en esta documentaci\u00f3n",
"the documentation for": "la documentaci\u00f3n para"
},
"plural_expr": "n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2"
});

View File

@ -0,0 +1,135 @@
<!DOCTYPE html>
<html class="writer-html5" lang="es" >
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Distribución &mdash; documentación de GNU/Emacs 29.1 - 0.01</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=d7315b5f"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/translations.js?v=efdbd0b9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Índice" href="genindex.html" />
<link rel="search" title="Búsqueda" href="search.html" />
<link rel="next" title="Introducción" href="introduccion.html" />
<link rel="prev" title="Documentación en Español GNU/Emacs 29.1" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
GNU/Emacs 29.1
</a>
<div class="version">
0.01
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Buscar documentos" aria-label="Buscar documentos" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Distribución</a></li>
<li class="toctree-l1"><a class="reference internal" href="introduccion.html">Introducción</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html">1 La organización de la pantalla</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#tipos-de-entrada-del-usuario">2 Tipos de Entrada del Usuario</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#id5">Teclas</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#entrada-del-raton">4 Entrada del Ratón</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">GNU/Emacs 29.1</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Distribución</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/distribucion.rst.txt" rel="nofollow"> Ver código fuente de la página</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="distribucion">
<h1>Distribución<a class="headerlink" href="#distribucion" title="Link to this heading"></a></h1>
<p>GNU Emacs es <em>software libre;</em> esto significa que todo el mundo es libre de usarlo y libre de redistribuirlo bajo ciertas condiciones. Emacs de GNU no es de dominio público; tiene copyright y hay restricciones en su distribución, pero estas restricciones están diseñadas para permitir todo lo que un buen ciudadano cooperador querría hacer. Lo que no está permitido es intentar evitar que otros sigan compartiendo cualquier versión de GNU Emacs que puedan obtener de usted. Las condiciones precisas se encuentran en la Licencia Pública General de GNU que viene con Emacs y que también aparece en este manual <a class="footnote-reference brackets" href="#id2" id="id1" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>. Ver LICENCIA PÚBLICA GENERAL DE GNU.</p>
<p>Una forma de obtener una copia de GNU Emacs es de otra persona que lo tenga. No necesita pedirnos permiso para hacerlo, ni decírselo a nadie; simplemente cópielo. Si tiene acceso a Internet, puede obtener la última versión de distribución de GNU Emacs por FTP anónimo; vea <a class="reference external" href="https://www.gnu.org/software/emacs">https://www.gnu.org/software/emacs</a> en nuestro sitio web para más información.</p>
<p>También puede recibir GNU Emacs al comprar un ordenador. Los fabricantes de ordenadores son libres de distribuir copias en los mismos términos que se aplican a todos los demás. Estos términos requieren que le den las fuentes completas, incluyendo cualquier cambio que puedan haber hecho, y que le permitan redistribuir el Emacs de GNU recibido de ellos bajo los términos habituales de la Licencia Pública General. En otras palabras, el programa debe ser libre para Usted cuando lo obtenga, no sólo libre para el fabricante.</p>
<p>Si encuentra útil GNU Emacs, por favor <strong>envíe una donación</strong> a la Free Software Foundation para apoyar nuestro trabajo. Las donaciones a la Free Software Foundation son deducibles de impuestos en los Estados Unidos. Si usa GNU Emacs en su lugar de trabajo, por favor sugiera a la empresa que haga una donación. Para donar, vea <a class="reference external" href="https://my.fsf.org/donate/">https://my.fsf.org/donate/</a>. Para otras formas en las que puede ayudar, vea <a class="reference external" href="https://www.gnu.org/help/help.html">https://www.gnu.org/help/help.html</a>.</p>
<p>También vendemos versiones impresas de este manual y de An Introduction to Programming in Emacs Lisp, de Robert J. Chassell. Puede visitar nuestra tienda en línea en <a class="reference external" href="https://shop.fsf.org/">https://shop.fsf.org/</a>. Los ingresos de las ventas se destinan a apoyar el propósito de la fundación: el desarrollo de nuevo software libre, y mejoras en nuestros programas existentes, incluyendo GNU Emacs.</p>
<p>Si necesita contactarse con la Fundación del Software Libre (Free Software Foundation) vea <a class="reference external" href="https://www.fsf.org/about/contact/">https://www.fsf.org/about/contact/</a> o escriba a:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Free</span> <span class="n">Software</span> <span class="n">Foundation</span>
<span class="mi">51</span> <span class="n">Franklin</span> <span class="n">Street</span><span class="p">,</span> <span class="n">Fifth</span> <span class="n">Floor</span>
<span class="n">Boston</span><span class="p">,</span> <span class="n">MA</span> <span class="mi">02110</span><span class="o">-</span><span class="mi">1301</span>
<span class="n">USA</span>
</pre></div>
</div>
<aside class="footnote-list brackets">
<aside class="footnote brackets" id="id2" role="doc-footnote">
<span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id1">1</a><span class="fn-bracket">]</span></span>
<p>Este manual está cubierto por la Licencia de Documentación Libre de GNU. Esta licencia es similar en espíritu a la Licencia Pública General, pero es más adecuada para la documentación. Véase la Licencia de documentación libre de GNU.</p>
</aside>
</aside>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="index.html" class="btn btn-neutral float-left" title="Documentación en Español GNU/Emacs 29.1" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="introduccion.html" class="btn btn-neutral float-right" title="Introducción" accesskey="n" rel="next">Siguiente <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

113
sphinx/emacs29/doc/build/genindex.html vendored Normal file
View File

@ -0,0 +1,113 @@
<!DOCTYPE html>
<html class="writer-html5" lang="es" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Índice &mdash; documentación de GNU/Emacs 29.1 - 0.01</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=d7315b5f"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/translations.js?v=efdbd0b9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Índice" href="#" />
<link rel="search" title="Búsqueda" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
GNU/Emacs 29.1
</a>
<div class="version">
0.01
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Buscar documentos" aria-label="Buscar documentos" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="distribucion.html">Distribución</a></li>
<li class="toctree-l1"><a class="reference internal" href="introduccion.html">Introducción</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html">1 La organización de la pantalla</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#tipos-de-entrada-del-usuario">2 Tipos de Entrada del Usuario</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#teclas">3 Teclas</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#entrada-del-raton">4 Entrada del Ratón</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">GNU/Emacs 29.1</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Índice</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1 id="index">Índice</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

152
sphinx/emacs29/doc/build/index.html vendored Normal file
View File

@ -0,0 +1,152 @@
<!DOCTYPE html>
<html class="writer-html5" lang="es" >
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documentación en Español GNU/Emacs 29.1 &mdash; documentación de GNU/Emacs 29.1 - 0.01</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=d7315b5f"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/translations.js?v=efdbd0b9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Índice" href="genindex.html" />
<link rel="search" title="Búsqueda" href="search.html" />
<link rel="next" title="Distribución" href="distribucion.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="#" class="icon icon-home">
GNU/Emacs 29.1
</a>
<div class="version">
0.01
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Buscar documentos" aria-label="Buscar documentos" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="distribucion.html">Distribución</a></li>
<li class="toctree-l1"><a class="reference internal" href="introduccion.html">Introducción</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html">1 La organización de la pantalla</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#tipos-de-entrada-del-usuario">2 Tipos de Entrada del Usuario</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#teclas">3 Teclas</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#entrada-del-raton">4 Entrada del Ratón</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">GNU/Emacs 29.1</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="#" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Documentación en Español GNU/Emacs 29.1</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/index.rst.txt" rel="nofollow"> Ver código fuente de la página</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="documentacion-en-espanol-gnu-emacs-29-1">
<h1>Documentación en Español GNU/Emacs 29.1<a class="headerlink" href="#documentacion-en-espanol-gnu-emacs-29-1" title="Link to this heading"></a></h1>
<div class="toctree-wrapper compound">
</div>
<p>Emacs es el editor avanzado, extensible, personalizable y autodocumentado. Este manual describe cómo editar con Emacs y algunas formas de personalizarlo; corresponde a la versión 29.1 de GNU Emacs.</p>
<div class="line-block">
<div class="line">El sitio web de GNU Emacs está en <a class="reference external" href="https://www.gnu.org/software/emacs/">https://www.gnu.org/software/emacs/</a>.</div>
<div class="line">Para ver este manual en otros formatos, pulse <a class="reference external" href="https://www.gnu.org/software/emacs/manual/emacs.html">aquí</a>.</div>
<div class="line">También puede adquirir una copia impresa en la <a class="reference external" href="https://shop.fsf.org/product/emacs-manual/">tienda</a> de la FSF.</div>
</div>
<p>Para información sobre cómo extender Emacs, vea <a class="reference external" href="https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html#Top">Emacs Lisp</a> en The Emacs Lisp Reference Manual.</p>
<p>Este es el Manual de GNU Emacs, actualizado para la versión 29.1 de Emacs.</p>
<p>Copyright © 1985-1987, 1993-2023 Free Software Foundation, Inc.</p>
<blockquote>
<div><p>Se concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de GNU, Versión 1.3 o cualquier versión posterior
publicada por la Free Software Foundation; siendo las Secciones Invariantes «El Manifiesto de GNU», «Distribución» y «LICENCIA PÚBLICA GENERAL DE GNU», siendo los Textos de Cubierta
Delantera «Un Manual de GNU», y con los Textos de Cubierta Trasera como en (a) más abajo. Se incluye una copia de la licencia en la sección titulada «GNU Free Documentation License».</p>
<p>(a) El texto de contraportada de la FSF es: «Usted tiene la libertad de copiar y modificar este manual GNU. Comprar copias a la FSF la apoya en el desarrollo de GNU y en la promoción
de la libertad del software.»</p>
</div></blockquote>
<section id="indice-de-contenidos">
<h2>Índice de Contenidos<a class="headerlink" href="#indice-de-contenidos" title="Link to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="distribucion.html">Distribución</a></li>
<li class="toctree-l1"><a class="reference internal" href="introduccion.html">Introducción</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html">1 La organización de la pantalla</a><ul>
<li class="toctree-l2"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#el-punto">1.1 El Punto</a></li>
<li class="toctree-l2"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#el-area-de-eco">1.2 El área de eco</a></li>
<li class="toctree-l2"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#la-linea-de-modo">1.3 La línea de modo</a></li>
<li class="toctree-l2"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#la-barra-de-menus">1.4 La Barra de Menús</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#tipos-de-entrada-del-usuario">2 Tipos de Entrada del Usuario</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#teclas">3 Teclas</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#entrada-del-raton">4 Entrada del Ratón</a></li>
</ul>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="distribucion.html" class="btn btn-neutral float-right" title="Distribución" accesskey="n" rel="next">Siguiente <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -0,0 +1,123 @@
<!DOCTYPE html>
<html class="writer-html5" lang="es" >
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Introducción &mdash; documentación de GNU/Emacs 29.1 - 0.01</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=d7315b5f"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/translations.js?v=efdbd0b9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Índice" href="genindex.html" />
<link rel="search" title="Búsqueda" href="search.html" />
<link rel="next" title="1 La organización de la pantalla" href="OrganizDeLaPant/01_1-2-3-4.html" />
<link rel="prev" title="Distribución" href="distribucion.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
GNU/Emacs 29.1
</a>
<div class="version">
0.01
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Buscar documentos" aria-label="Buscar documentos" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="distribucion.html">Distribución</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Introducción</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html">1 La organización de la pantalla</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#tipos-de-entrada-del-usuario">2 Tipos de Entrada del Usuario</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#id5">Teclas</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#entrada-del-raton">4 Entrada del Ratón</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">GNU/Emacs 29.1</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Introducción</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/introduccion.rst.txt" rel="nofollow"> Ver código fuente de la página</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="introduccion">
<h1>Introducción<a class="headerlink" href="#introduccion" title="Link to this heading"></a></h1>
<p>Está leyendo sobre GNU Emacs, la encarnación GNU del avanzado, autodocumentado, personalizable y extensible editor Emacs. (La <code class="docutils literal notranslate"><span class="pre">G</span></code> de GNU (GNU no es Unix) no es muda).</p>
<p>Llamamos <em>avanzado</em> a Emacs porque puede hacer mucho más que una simple inserción y borrado de texto. Puede controlar subprocesos, sangrar programas automáticamente, mostrar múltiples archivos a la vez, editar archivos remotos como si fueran archivos locales, y mucho más. Los comandos de edición de Emacs funcionan en términos de caracteres, palabras, líneas, frases, párrafos y páginas, así como de expresiones y comentarios en varios lenguajes de programación.</p>
<p><em>Autodocumentado</em> significa que en cualquier momento puede utilizar comandos especiales, conocidos como <em>comandos de ayuda</em>, para averiguar cuáles son sus opciones, o para averiguar qué hace
cualquier comando, o para encontrar todos los comandos que pertenecen a un tema determinado. <strong>Véase Ayuda</strong> .</p>
<p><em>Personalizable</em> significa que puede alterar fácilmente el comportamiento de los comandos de Emacs de maneras sencillas. Por ejemplo, si usa un lenguaje de programación en el que los comentarios empiezan con <code class="docutils literal notranslate"><span class="pre">&lt;**</span></code> y terminan con <code class="docutils literal notranslate"><span class="pre">**&gt;</span></code>, puede decirle a los comandos de manipulación de comentarios de Emacs que usen esas cadenas (<strong>vea Manipulación de comentarios</strong>). Por poner otro ejemplo, puede reenlazar los comandos básicos de movimiento del cursor (arriba, abajo, izquierda y derecha) a cualquier tecla del teclado que te resulte cómoda. <strong>Véase Personalización</strong>.</p>
<p><em>Extensible</em> significa que puede ir más allá de la simple personalización y crear comandos completamente nuevos. Los nuevos comandos son simplemente programas escritos en lenguaje Lisp, que son ejecutados por el propio intérprete Lisp de Emacs. Los comandos existentes pueden incluso redefinirse en mitad de una sesión de edición, sin tener que reiniciar Emacs. La mayoría de los comandos de edición en Emacs están escritos en Lisp; las pocas excepciones podrían haber sido escritas en Lisp pero usan C en su lugar por eficiencia. Escribir una extensión es programar, pero los no programadores pueden usarla después. <strong>Ver Prefacio en Una Introducción a la Programación en Emacs Lisp</strong>, si quiere aprender programación en Emacs Lisp.</p>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="distribucion.html" class="btn btn-neutral float-left" title="Distribución" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="OrganizDeLaPant/01_1-2-3-4.html" class="btn btn-neutral float-right" title="1 La organización de la pantalla" accesskey="n" rel="next">Siguiente <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

6
sphinx/emacs29/doc/build/objects.inv vendored Normal file
View File

@ -0,0 +1,6 @@
# Sphinx inventory version 2
# Project: GNU/Emacs 29.1
# Version: 0.01
# The remainder of this file is compressed using zlib.
xÚ•ANÃ0E÷>ÅH°uKZ6°D©R¡YÀMíQbɱCìH”;pŽ€ºcëÔ´8±ý~ïë˳jK4ê%§%hüô,{ÌøŒÏù98//¥À3XýJM*_kÈ`‰`#„B…­I šžF­Iå|«Ö<C2AB>PÖ¤Íi»òCÒ×°Œ2žwŽÆ5éÁڧѯF*Aìü*O˜ÜŠ®¦~L\G®Áðn5\ß=L5
³IÖ·øÖÊN/MóØysH†¥µ•?,m6|ÿ0;üÏmØÊN[Çèÿ6_YÃa+ª±³¨á­Tõ*|¸§Ž$2OB£Kûäæp¿óØ'ï§Î†

128
sphinx/emacs29/doc/build/search.html vendored Normal file
View File

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html class="writer-html5" lang="es" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Búsqueda &mdash; documentación de GNU/Emacs 29.1 - 0.01</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=d7315b5f"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/translations.js?v=efdbd0b9"></script>
<script src="_static/js/theme.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="Índice" href="genindex.html" />
<link rel="search" title="Búsqueda" href="#" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
GNU/Emacs 29.1
</a>
<div class="version">
0.01
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="#" method="get">
<input type="text" name="q" placeholder="Buscar documentos" aria-label="Buscar documentos" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="distribucion.html">Distribución</a></li>
<li class="toctree-l1"><a class="reference internal" href="introduccion.html">Introducción</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html">1 La organización de la pantalla</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#tipos-de-entrada-del-usuario">2 Tipos de Entrada del Usuario</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#teclas">3 Teclas</a></li>
<li class="toctree-l1"><a class="reference internal" href="OrganizDeLaPant/01_1-2-3-4.html#entrada-del-raton">4 Entrada del Ratón</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">GNU/Emacs 29.1</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Búsqueda</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<noscript>
<div id="fallback" class="admonition warning">
<p class="last">
Por favor, active JavaScript para habilitar la funcionalidad de búsqueda.
</p>
</div>
</noscript>
<div id="search-results">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
<script>
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script id="searchindexloader"></script>
</body>
</html>

File diff suppressed because one or more lines are too long