pages/sphinx/emacs29/doc/build/CapConSecciones/19_ManejoArchivos.html
tanomarcelo 9fb8f731d7 magit; sphinx GNU/Emacs 29.1
Confirmación (commit) tanomarcelo-git
2024-02-10 16:45:29 -03:00

957 lines
No EOL
226 KiB
HTML

<!DOCTYPE html>
<html class="writer-html5" lang="es" data-content_root="../">
<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>19 Manejo de Archivos &mdash; documentación de GNU/Emacs 29.1 - 0.01</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=19f00094" />
<!--[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="20 Uso de Varios Búferes" href="20_UsarVariosBuferes.html" />
<link rel="prev" title="18 Macros de Teclado" href="18_MacrosDeTeclado.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">
Traducción Revisón: 1.07
</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"><a class="reference internal" href="../introduccion.html">Introducción</a></li>
<li class="toctree-l1"><a class="reference internal" href="../01_OrgPant.html">1 La organización de la pantalla</a></li>
<li class="toctree-l1"><a class="reference internal" href="../02_TipoEntrUsuario.html">2 Tipos de Entrada del Usuario</a></li>
<li class="toctree-l1"><a class="reference internal" href="../03_Teclas.html">3 Teclas</a></li>
<li class="toctree-l1"><a class="reference internal" href="../04_EntrDelRaton.html">4 Entrada del Ratón</a></li>
<li class="toctree-l1"><a class="reference internal" href="../05_TeclasComands.html">5 Teclas y Comandos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../06_EntrarEnEmacs.html">6 Entrar en Emacs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../07_SalirDeEmacs.html">7 Cómo Salir de Emacs</a></li>
<li class="toctree-l1"><a class="reference internal" href="08_ComBasicEdic.html">8 Comandos Básicos de Edición</a></li>
<li class="toctree-l1"><a class="reference internal" href="09_ElMinibufer.html">9 El Minibúfer</a></li>
<li class="toctree-l1"><a class="reference internal" href="10_EjecutarComndPorNombre.html">10 Ejecutar Comandos por Nombre</a></li>
<li class="toctree-l1"><a class="reference internal" href="11_Ayuda.html">11 Ayuda</a></li>
<li class="toctree-l1"><a class="reference internal" href="12_LaMarca-y-LaRegion.html">12 La marca y la región</a></li>
<li class="toctree-l1"><a class="reference internal" href="13_MatarMoverTxt.html">13 Matar y Mover Texto</a></li>
<li class="toctree-l1"><a class="reference internal" href="14_Registros.html">14 Registros</a></li>
<li class="toctree-l1"><a class="reference internal" href="15_ControlDisplay.html">15 Controlando la Pantalla</a></li>
<li class="toctree-l1"><a class="reference internal" href="16_BusqReemp.html">16 Búsqueda y Reemplazo</a></li>
<li class="toctree-l1"><a class="reference internal" href="17_CmdCorrecErrsTipogr.html">17 Comandos para Corregir Errores Tipográficos</a></li>
<li class="toctree-l1"><a class="reference internal" href="18_MacrosDeTeclado.html">18 Macros de Teclado</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">19 Manejo de Archivos</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#nombres-de-archivos">19.1 Nombres de Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#visitar-archivos">19.2 Visitar Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#guardar-archivos">19.3 Guardar Archivos</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#comandos-para-guardar-archivos">19.3.1 Comandos para Guardar Archivos</a></li>
<li class="toctree-l3"><a class="reference internal" href="#archivos-de-copia-de-seguridad">19.3.2 Archivos de Copia de Seguridad</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#copias-de-seguridad-simples-o-numeradas">19.3.2.1 Copias de Seguridad Simples o Numeradas</a></li>
<li class="toctree-l4"><a class="reference internal" href="#borrado-automatico-de-copias-de-seguridad">19.3.2.2 Borrado Automático de Copias de Seguridad</a></li>
<li class="toctree-l4"><a class="reference internal" href="#copiar-vs-renombrar">19.3.2.3 Copiar vs. Renombrar</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#personalizar-el-guardado-de-archivos">19.3.3 Personalizar el Guardado de Archivos</a></li>
<li class="toctree-l3"><a class="reference internal" href="#proteccion-contra-la-edicion-simultanea">19.3.4 Protección contra la Edición Simultánea</a></li>
<li class="toctree-l3"><a class="reference internal" href="#archivos-sombra">19.3.5 Archivos Sombra</a></li>
<li class="toctree-l3"><a class="reference internal" href="#actualizacion-automatica-de-marcas-de-tiempo">19.3.6 Actualización Automática de Marcas de Tiempo</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#revertir-un-bufer">19.4 Revertir un Búfer</a></li>
<li class="toctree-l2"><a class="reference internal" href="#reversion-automatica-mantener-los-buferes-actualizados-automaticamente">19.5 Reversión Automática: Mantener los Búferes Actualizados Automáticamente</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#reversion-automatica-de-buferes-que-no-son-de-archivo">19.5.1 Reversión Automática de Búferes que no son de Archivo</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#reversion-automatica-del-menu-de-buferes">19.5.1.1 Reversión Automática del Menú de Búferes</a></li>
<li class="toctree-l4"><a class="reference internal" href="#reversion-automatica-de-buferes-dired">19.5.1.2 Reversión Automática de Búferes Dired</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#guardado-automatico-proteccion-frente-a-desastres">19.6 Guardado Automático: Protección Frente a Desastres</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#autoguardar-archivos">19.6.1 Autoguardar Archivos</a></li>
<li class="toctree-l3"><a class="reference internal" href="#control-del-autoguardado">19.6.2. Control del Autoguardado</a></li>
<li class="toctree-l3"><a class="reference internal" href="#recuperacion-de-datos-de-autoguardados">19.6.3 Recuperación de Datos de Autoguardados</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#alias-de-nombres-de-archivo">19.7 Alias de Nombres de Archivo</a></li>
<li class="toctree-l2"><a class="reference internal" href="#directorios-de-archivos">19.8 Directorios de Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#comparacion-de-archivos">19.9 Comparación de Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modo-diff">19.10 Modo Diff</a></li>
<li class="toctree-l2"><a class="reference internal" href="#copiar-nombrar-y-renombrar-archivos">19.11 Copiar, Nombrar y Renombrar Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#operaciones-varias-con-archivos">19.12 Operaciones Varias con Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#acceso-a-archivos-comprimidos">19.13. Acceso a Archivos Comprimidos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#archivos-de-archivos">19.14 Archivos de Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#archivos-remotos">19.15 Archivos Remotos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#nombres-de-archivos-entrecomillados">19.16 Nombres de Archivos Entrecomillados</a></li>
<li class="toctree-l2"><a class="reference internal" href="#cache-de-nombres-de-archivo">19.17 Caché de Nombres de Archivo</a></li>
<li class="toctree-l2"><a class="reference internal" href="#funciones-utiles-para-encontrar-archivos">19.18 Funciones Útiles para Encontrar Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#visualizacion-de-archivos-de-imagen">19.19 Visualización de Archivos de Imagen</a></li>
<li class="toctree-l2"><a class="reference internal" href="#conjunto-de-archivos">19.20 Conjunto de Archivos</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</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">19 Manejo de Archivos</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/CapConSecciones/19_ManejoArchivos.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="manejo-de-archivos">
<h1>19 Manejo de Archivos<a class="headerlink" href="#manejo-de-archivos" title="Link to this heading"></a></h1>
<p>El sistema operativo almacena datos permanentemente en <em>archivos</em> con nombre, por lo que la mayor parte del texto que edita con Emacs proviene de un archivo y finalmente se guarda en uno de ellos.</p>
<p>Para editar un fichero, debe decirle a Emacs que lea el archivo y prepare un búfer que contenga una copia del texto del mismo. Esto se llama <em>visitar</em> el archivo. Los comandos de edición se aplican directamente al texto en el búfer; es decir, a la copia dentro de Emacs. Sus cambios aparecerán en el propio archivo sólo cuando <em>guarde</em> el búfer de nuevo en el archivo.</p>
<p>Además de visitar y guardar ficheros, Emacs puede borrar, copiar, renombrar y añadir a ficheros, mantener múltiples versiones de ellos y operar en directorios de ficheros.</p>
<section id="nombres-de-archivos">
<h2>19.1 Nombres de Archivos<a class="headerlink" href="#nombres-de-archivos" title="Link to this heading"></a></h2>
<p>Muchos comandos de Emacs que operan sobre un archivo requieren que se especifique el mismo utilizando el minibúfer (ver <strong>Minibúfer para Nombres de Archivo</strong>).</p>
<p>Mientras esté en el minibúfer, puede usar los comandos habituales de completado e historial (vea <strong>El Minibúfer</strong>). Tenga en cuenta que el completado de nombres de archivo ignora los nombres de archivo cuyas extensiones aparecen en la variable <code class="docutils literal notranslate"><span class="pre">completion-ignored-extensions</span></code> (vea <strong>Opciones de Completado</strong>). Observe también que la mayoría de los comandos usan completado permisivo con confirmación para leer nombres de archivo: se le permite enviar un nombre de archivo inexistente, pero si teclea <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>) inmediatamente después de completar hasta un nombre de archivo inexistente, Emacs imprime <code class="docutils literal notranslate"><span class="pre">[Confirm]</span></code> (Confirmar) y debe teclear un segundo <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>) para confirmar. Ver <strong>Salida del Completado</strong>, para más detalles.</p>
<p>Los comandos de historial del minibúfer ofrecen algunas características especiales para la lectura de nombres de ficheros, véase <strong>Historial del Minibúfer</strong>.</p>
<p>Cada búfer tiene un <em>directorio por defecto</em>, almacenado en la variable local del búfer <code class="docutils literal notranslate"><span class="pre">default-directory</span></code>. Siempre que Emacs lee un nombre de archivo usando el minibúfer, normalmente inserta el directorio por defecto en el minibúfer como contenido inicial. Puede inhibir esta inserción cambiando la variable <code class="docutils literal notranslate"><span class="pre">insert-default-directory</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code> (vea <strong>Minibúferes para Nombres de Archivo</strong>). En cualquier caso, Emacs siempre asume que cualquier nombre de archivo relativo es relativo al directorio por defecto, por ejemplo, introducir un nombre de archivo sin un directorio especifica un fichero en el directorio por defecto.</p>
<p>Cuando visita un archivo, Emacs establece <code class="docutils literal notranslate"><span class="pre">default-directory</span></code> en el búfer en el que visita al directorio de su archivo. Cuando crea un búfer nuevo que no está visitando un fichero, mediante un comando como <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">b</span></code>, su directorio por defecto es normalmente copiado del búfer que estaba activo en ese momento (vea <strong>Creando y Seleccionando Búferes</strong>). Puede usar el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">pwd</span></code> para ver el valor de <code class="docutils literal notranslate"><span class="pre">default-directory</span></code> (directorio-por-defecto) en el búfer actual. El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">cd</span></code> pide el nombre de un directorio, y establece el directorio por defecto del búfer a ese directorio (esto no cambia el nombre de archivo del búfer, si lo hay).</p>
<p>Por ejemplo, cuando visita el archivo <code class="docutils literal notranslate"><span class="pre">/u/rms/gnu/gnu.tasks</span></code>, el directorio predeterminado se establece en <code class="docutils literal notranslate"><span class="pre">/u/rms/gnu/</span></code>. Si invoca un comando que lee un nombre de archivo, al introducir sólo <code class="docutils literal notranslate"><span class="pre">foo</span></code> en el minibúfer, con un directorio omitido, se especifica el archivo <code class="docutils literal notranslate"><span class="pre">/u/rms/gnu/foo</span></code>; al introducir <code class="docutils literal notranslate"><span class="pre">../.login</span></code> se especifica <code class="docutils literal notranslate"><span class="pre">/u/rms/.login</span></code>; y al introducir <code class="docutils literal notranslate"><span class="pre">new/foo</span></code> se especifica <code class="docutils literal notranslate"><span class="pre">/u/rms/gnu/new/foo</span></code>.</p>
<p>Al escribir un nombre de archivo en el minibúfer, puede hacer uso de un par de atajos: una barra doble ignora todo lo que hay antes de la segunda barra del par, y <code class="docutils literal notranslate"><span class="pre">~/</span></code> es su directorio personal. Vea <strong>Minibuferes para Nombres de Archivos</strong>.</p>
<p>El carácter <code class="docutils literal notranslate"><span class="pre">$</span></code> se usa para sustituir una variable de entorno en un nombre de fichero. El nombre de la variable de entorno consiste en todos los caracteres alfanuméricos después del <code class="docutils literal notranslate"><span class="pre">$</span></code>; alternativamente, se puede encerrar entre llaves después del <code class="docutils literal notranslate"><span class="pre">$</span></code>. Por ejemplo, si ha utilizado el comando de shell <code class="docutils literal notranslate"><span class="pre">export</span> <span class="pre">FOO=rms/hacks</span></code> para establecer una variable de entorno llamada <code class="docutils literal notranslate"><span class="pre">FOO</span></code>, entonces tanto <code class="docutils literal notranslate"><span class="pre">/u/$FOO/test.c</span></code> como <code class="docutils literal notranslate"><span class="pre">/u/${FOO}/test.c</span></code> son abreviaturas de <code class="docutils literal notranslate"><span class="pre">/u/rms/hacks/test.c</span></code>. Si la variable de entorno no está definida, no se produce ninguna sustitución, de modo que el carácter <code class="docutils literal notranslate"><span class="pre">$</span></code> se representa a sí mismo. Tenga en cuenta que las variables de entorno establecidas fuera de Emacs sólo afectan a Emacs si se aplican antes de que se inicie Emacs.</p>
<p>Para acceder a un fichero con <code class="docutils literal notranslate"><span class="pre">$</span></code> en su nombre, si el <code class="docutils literal notranslate"><span class="pre">$</span></code> causa expansión, teclee <kbd class="kbd docutils literal notranslate">$</kbd><kbd class="kbd docutils literal notranslate">$</kbd> (<code class="docutils literal notranslate"><span class="pre">$$</span></code>). Este par se convierte en un único <code class="docutils literal notranslate"><span class="pre">$</span></code> al mismo tiempo que se realiza la sustitución de variables para un único <code class="docutils literal notranslate"><span class="pre">$</span></code>. También puede entrecomillar todo el nombre del archivo con <code class="docutils literal notranslate"><span class="pre">/:</span></code> (consulte <strong>Nombres de Archivos Entrecomillados</strong>). Los nombres de archivo que comienzan con un literal <code class="docutils literal notranslate"><span class="pre">~</span></code> también deben entrecomillarse con <code class="docutils literal notranslate"><span class="pre">/:</span></code>.</p>
<p>Puede incluir caracteres no ASCII en los nombres de archivo. Consulte <strong>Sistemas de Codificación para Nombres de Archivos</strong>.</p>
</section>
<section id="visitar-archivos">
<h2>19.2 Visitar Archivos<a class="headerlink" href="#visitar-archivos" title="Link to this heading"></a></h2>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code>)</p>
<blockquote>
<div><p>Visita un archivo (<code class="docutils literal notranslate"><span class="pre">find-file</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-r</span></code>)</p>
<blockquote>
<div><p>Visita un archivo para visualizarlo, sin permitir cambios en él (<code class="docutils literal notranslate"><span class="pre">find-file-read-only</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">v</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-v</span></code>)</p>
<blockquote>
<div><p>Visita un archivo diferente en lugar del último visitado (<code class="docutils literal notranslate"><span class="pre">find-alternate-file</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">4</kbd><kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span> <span class="pre">f</span></code>)</p>
<blockquote>
<div><p>Visita un archivo, en otra ventana (<code class="docutils literal notranslate"><span class="pre">find-file-other-window</span></code>). No altera lo que se muestra en la ventana seleccionada</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">5</kbd><kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">f</span></code>)</p>
<blockquote>
<div><p>Visita un archivo, en un nuevo marco (<code class="docutils literal notranslate"><span class="pre">find-file-other-frame</span></code>). No altera lo que se muestra en el marco seleccionado.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">find-file-literally</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">find-file-literally</span></code>)</p>
<blockquote>
<div><p>Visita un archivo sin conversión del contenido.</p>
</div></blockquote>
<p><em>Visitar</em> un archivo significa leer su contenido en un buffer de Emacs para poder editarlo. Emacs crea un nuevo buffer para cada archivo que visita.</p>
<p>Para visitar un archivo, teclee <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code>, <code class="docutils literal notranslate"><span class="pre">find-file</span></code>, buscar-archivo) y use el minibuffer para introducir el nombre del archivo requerido. Mientras esté en el minibúfer, puede abortar el comando tecleando <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">g</kbd> (<code class="docutils literal notranslate"><span class="pre">C-g</span></code>). Consulte <strong>Nombres de Archivos</strong>, para más detalles sobre la introducción de nombres de archivos en los minibúferes.</p>
<p>Si el archivo especificado existe pero el sistema no le permite leerlo, se muestra un mensaje de error en el área de eco (en sistemas GNU y Unix podría ser capaz de visitar tal archivo usando los métodos <code class="docutils literal notranslate"><span class="pre">su</span></code> o <code class="docutils literal notranslate"><span class="pre">sudo</span></code>; vea <strong>Archivos Remotos</strong>). De otro modo, puede saber que <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code> se ha completado con éxito por la aparición de nuevo texto en la pantalla, y por el nombre del buffer mostrado en la línea de modo (vea <strong>La Línea de Modo</strong>). Emacs normalmente construye el nombre del buffer a partir del nombre del archivo, omitiendo el nombre del directorio. Por ejemplo, un archivo llamado <code class="docutils literal notranslate"><span class="pre">/usr/rms/emacs.tex</span></code> es visitado en un búfer llamado <code class="docutils literal notranslate"><span class="pre">emacs.tex</span></code>. Si ya existe un búfer con ese nombre, Emacs construye un nombre único; el método normal es añadir un sufijo basado en el nombre del directorio (e.g., <code class="docutils literal notranslate"><span class="pre">&lt;rms&gt;</span></code>, <code class="docutils literal notranslate"><span class="pre">&lt;tmp&gt;</span></code>, y así sucesivamente), pero puede elegir otros métodos. Consulte <strong>Cómo Hacer que los Nombres de los Búferes sean Únicos</strong>.</p>
<p>Para crear un nuevo archivo, simplemente visítelo usando el mismo comando, <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code>). Emacs muestra <code class="docutils literal notranslate"><span class="pre">(</span> <span class="pre">New</span> <span class="pre">file)</span></code> (Archivo nuevo) en el área de eco, pero en otros aspectos se comporta como si hubiera visitado un archivo vacío existente.</p>
<p>Después de visitar un archivo, los cambios que haga con los comandos de edición se hacen en el búfer de Emacs. No tienen efecto en el archivo visitado, hasta que guarde el búfer (vea <strong>Guardando Archivos</strong>). Si un búfer contiene cambios que no han sido guardados, decimos que el búfer está <em>modificado</em>. Esto implica que algunos cambios se perderán si no se guarda el búfer. La línea de modo muestra dos asteriscos cerca del margen izquierdo para indicar que el búfer está modificado.</p>
<p>Si visita un archivo que ya está en Emacs, <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code> cambia al búfer existente en lugar de hacer otra copia. Antes de hacerlo, comprueba si el archivo ha cambiado desde la última vez que lo visitó o lo guardó. Si el fichero ha cambiado, Emacs ofrece releerlo.</p>
<p>Si se intenta visitar un archivo mayor que el umbral de advertencia de archivo grande (por defecto es 10000000, que son unos 10 megabytes), Emacs pide confirmación primero. Puede responder <code class="docutils literal notranslate"><span class="pre">y</span></code> para proceder a visitar el archivo o <code class="docutils literal notranslate"><span class="pre">l</span></code> para visitarlo literalmente (ver más abajo). Visitar archivos grandes literalmente acelera la navegación y edición de tales archivos, porque varias características potencialmente complejas están desactivadas. Tenga en cuenta, sin embargo, que Emacs no puede visitar ficheros que sean más grandes que el tamaño máximo del búfer, que está limitado por la cantidad de memoria que el Editor puede asignar y por los enteros que puede representar (vea <strong>Usando Búferes Múltiples</strong>). Si lo intenta, Emacs muestra un mensaje de error diciendo que se ha excedido el tamaño máximo del búfer.</p>
<p>Si intenta visitar un archivo cuyo modo principal (ver <strong>Modos Mayores</strong>) usa la biblioteca de análisis sintáctico tree-sitter, Emacs mostrará una advertencia si el tamaño del archivo en bytes es mayor que el valor de la variable <code class="docutils literal notranslate"><span class="pre">treesit-max-buffer-size</span></code>. El valor por defecto es 40 megabytes para Emacs de 64 bits y 15 megabytes para Emacs de 32 bits. Esto evita el peligro de que el Editor se quede sin memoria impidiendo la activación de modos principales basados en tree-sitter en búferes tan grandes, porque un típico analizador tree-sitter necesita unas 10 veces más memoria que el texto que analiza.</p>
<p>Si el nombre de archivo que especifica contiene caracteres comodín del tipo shell, Emacs visita todos los archivos que coincidan con él. (En los sistemas de ficheros que no distinguen entre mayúsculas y minúsculas, Emacs busca los comodines sin tener en cuenta las mayúsculas y minúsculas). Los comodines incluyen las secuencias <code class="docutils literal notranslate"><span class="pre">?</span></code>, <code class="docutils literal notranslate"><span class="pre">*</span></code> y <code class="docutils literal notranslate"><span class="pre">[...]</span></code>. Para introducir el comodín <code class="docutils literal notranslate"><span class="pre">?</span></code> en un nombre de archivo en el minibúfer, debe teclear <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">q</kbd> <kbd class="kbd docutils literal notranslate">?</kbd> (<code class="docutils literal notranslate"><span class="pre">C-q</span> <span class="pre">?</span></code>) Consulte <strong>Nombres de Archivos Entrecomillados</strong>, para obtener información sobre cómo visitar un archivo cuyo nombre contiene realmente caracteres comodín. Puede desactivar la función de comodines personalizando <code class="docutils literal notranslate"><span class="pre">find-file-wildcards</span></code>.</p>
<p>Si está pidiendo visitar un archivo que ya ha sido visitado en un búfer, pero el archivo ha cambiado externamente, Emacs normalmente le pregunta si quiere releer el archivo desde el disco. Pero si configura <code class="docutils literal notranslate"><span class="pre">query-about-changed-file</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>, Emacs no le preguntará, sino que simplemente mostrará el contenido del búfer antes de los cambios, y mostrará un mensaje en el echo-area diciéndole cómo revertir el búfer desde el archivo.</p>
<p>Si visita el archivo equivocado sin querer al escribir su nombre de manera incorrecta, escriba <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">v</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-v</span></code>, <code class="docutils literal notranslate"><span class="pre">find-alternate-file</span></code>) para visitar el archivo que realmente quería. <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-v</span></code> es similar a <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code>, pero elimina el búfer actual (después de ofrecer primero guardarlo si se modifica). Cuando <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-v</span></code> lee el nombre del archivo a visitar, inserta todo el nombre del archivo por defecto en el búfer, con el punto justo después de la parte del directorio; esto es conveniente si cometió un pequeño error al teclear el nombre.</p>
<p>Si visita un archivo que en realidad es un directorio, Emacs invoca Dired, el navegador de directorios de Emacs. Ver <strong>Dired, el Editor de Directorios</strong>. Puede desactivar este comportamiento estableciendo la variable <code class="docutils literal notranslate"><span class="pre">find-file-run-dired</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>; en ese caso, es un error intentar visitar un directorio.</p>
<p>Los archivos que en realidad <em>son colecciones de otros archivos</em>, o archivos de archivos, se visitan en modos especiales que invocan un entorno similar a Dired para permitir operaciones sobre los miembros de dichos archivo. Ver <strong>Archivos de Ficheros</strong>, para más información sobre estas características.</p>
<p>Si visita un archivo que el sistema operativo no le permite modificar, o que está marcado como de sólo lectura, Emacs hace que el búfer también sea de sólo lectura, para que no haga cambios que después le cueste guardar. Puede hacer que el búfer sea escribible (que deje de ser de sólo lectura) con <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-q</span></code> (<code class="docutils literal notranslate"><span class="pre">read-only-mode</span></code> , modo de sólo lectura). Vea <strong>Diversas Operaciones con el Buffer</strong>.</p>
<p>Si desea visitar un archivo como sólo-lectura para protegerse de introducir cambios accidentalmente, visítelo con el comando <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-r</span></code> (<code class="docutils literal notranslate"><span class="pre">find-file-read-only</span></code>, buscar-archivo-sólo-lectura) en lugar de <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code>.</p>
<p><code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span> <span class="pre">f</span></code> (<code class="docutils literal notranslate"><span class="pre">find-file-other-window</span></code>, buscar-archivo-otra-ventana) es como <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code> excepto en que el búfer que contiene el archivo especificado se selecciona en otra ventana. La ventana que estaba seleccionada antes de <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span> <span class="pre">f</span></code> sigue mostrando el mismo búfer que ya estaba mostrando. Si se usa este comando cuando sólo se está mostrando una ventana, esa ventana se divide en dos, con una ventana mostrando el mismo búfer que antes, y la otra mostrando el nuevo archivo solicitado. Véase <strong>Ventanas Múltiples</strong>.</p>
<p><code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">f</span></code> (<code class="docutils literal notranslate"><span class="pre">find-file-other-frame</span></code>) es similar, pero abre un nuevo marco, o selecciona cualquier marco existente que muestre el archivo especificado. Véase <strong>Marcos y Pantallas Gráficas</strong>.</p>
<p>En pantallas gráficas, hay dos métodos adicionales para visitar archivos. En primer lugar, cuando Emacs se construye con un conjunto de herramientas GUI adecuado, los comandos invocados con el ratón (pulsando en la barra de menús o en la barra de herramientas) usan el diálogo de selección de archivos estándar del conjunto de herramientas en lugar de pedir el nombre del archivo en el minibúfer. En GNU/Linux y plataformas Unix, Emacs hace esto cuando se construye con los toolkits GTK+, LessTif y Motif; en MS-Windows y Mac, la versión GUI lo hace por defecto. Para más información sobre cómo personalizarlo, véase <strong>Uso de Cuadros de Diálogo</strong>.</p>
<p>En segundo lugar, Emacs soporta arrastrar y soltar: soltar un archivo en una ventana ordinaria dentro de él, esto visita el archivo usando esa ventana. Como excepción, soltar un archivo en una ventana que muestre un búfer Dired mueve o copia el fichero en el directorio mostrado. Para más detalles, vea <strong>Arrastrar y Soltar</strong>, y <strong>Otras Características de Dired</strong>.</p>
<p>En terminales en modo texto y en pantallas gráficas cuando Emacs se construyó sin un conjunto de herramientas GUI, puede visitar archivos a través del menú <code class="docutils literal notranslate"><span class="pre">File</span></code> (Archivo) de la barra de menú, que tiene los ítems <code class="docutils literal notranslate"><span class="pre">Visit</span> <span class="pre">New</span> <span class="pre">File</span></code> (Visitar Nuevo Archivo) y <code class="docutils literal notranslate"><span class="pre">Open</span> <span class="pre">File</span></code> (Archivo Nuevo).</p>
<p>Cada vez que visita un archivo, Emacs escanea automáticamente su contenido para detectar qué codificación de caracteres y qué convención de fin de línea utiliza, y los convierte a la codificación interna de Emacs y a la convención de fin de línea dentro del búfer. Cuando guarda el buffer, Emacs lleva a cabo la conversión inversa, escribiendo el fichero en el disco con su codificación original y la convención de final de línea. Ver <strong>Sistemas de Codificación</strong>.</p>
<p>Si desea editar un archivo como una secuencia de caracteres ASCII sin codificación especial o conversión, use el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">find-file-literally</span></code>. Esto visita un archivo, como <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-f</span></code>, pero no hace conversión de formato (vea <strong>Conversión de Formato</strong> en el Manual de Referencia de Emacs Lisp), conversión de código de caracteres (vea <strong>Sistemas de Codificación</strong>), o descompresión automática (vea <strong>Acceso a Archivos Comprimidos</strong>), y no añade una nueva línea final debido a <code class="docutils literal notranslate"><span class="pre">require-final-newline</span></code> (vea <strong>Personalizando el Guardado de Archivos</strong>). Si ya ha visitado el mismo archivo de la manera habitual (no literal), este comando le pregunta si desea visitarlo literalmente en su lugar.</p>
<p>A veces, los archivos están (vagamente) ligados a otros archivos, y podría llamar a estos archivos: hermanos. Por ejemplo, al editar archivos C, si tiene un archivo llamado <code class="docutils literal notranslate"><span class="pre">&quot;foo.c&quot;</span></code>, a menudo también tiene un archivo llamado <code class="docutils literal notranslate"><span class="pre">&quot;foo.h&quot;</span></code>, y ese podría ser su archivo hermano. O puede tener diferentes versiones de un archivo, por ejemplo <code class="docutils literal notranslate"><span class="pre">&quot;src/emacs/emacs-27/lisp/allout.el&quot;</span></code> y <code class="docutils literal notranslate"><span class="pre">&quot;src/emacs/emacs-28/lisp/allout.el&quot;</span></code> podrían considerarse hermanos. Emacs proporciona el comando <code class="docutils literal notranslate"><span class="pre">find-sibling-file</span></code> para saltar entre ficheros de este tipo, pero es imposible adivinar qué archivos puede querer un Usuario que se consideren hermanos, así que Emacs permite configurarlo libremente alterando la opción de Usuario <code class="docutils literal notranslate"><span class="pre">find-sibling-rules</span></code>. Se trata de una lista de elementos de coincidencia/expansión.</p>
<p>Por ejemplo, para hacer el mapeo <code class="docutils literal notranslate"><span class="pre">&quot;.c&quot;</span></code> a <code class="docutils literal notranslate"><span class="pre">&quot;.h&quot;</span></code>, se podría indicar:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">setq</span> <span class="n">find</span><span class="o">-</span><span class="n">sibling</span><span class="o">-</span><span class="n">rules</span>
<span class="s1">&#39;((&quot;</span><span class="se">\\</span><span class="s1">([^/]+</span><span class="se">\\</span><span class="s1">)</span><span class="se">\\</span><span class="s1">.c</span><span class="se">\\</span><span class="s1">&#39;</span><span class="s2">&quot; &quot;</span>\\<span class="mf">1.</span><span class="n">h</span><span class="s2">&quot;)))</span>
</pre></div>
</div>
<p>(<code class="docutils literal notranslate"><span class="pre">ff-find-related-file</span></code> ofrece una funcionalidad similar especialmente orientada a archivos C, vea <strong>Otros Comandos para Modo C</strong>).</p>
<p>O, si quiere considerar todos los ficheros bajo <code class="docutils literal notranslate"><span class="pre">&quot;src/emacs/DIR/nombre-archivo&quot;</span></code> como hermanos de otros <em>directorios</em>, se podría escribir:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">setq</span> <span class="n">find</span><span class="o">-</span><span class="n">sibling</span><span class="o">-</span><span class="n">rules</span>
<span class="s1">&#39;((&quot;src/emacs/[^/]+/</span><span class="se">\\</span><span class="s1">(.*</span><span class="se">\\</span><span class="s1">)</span><span class="se">\\</span><span class="s1">&#39;</span><span class="s2">&quot; &quot;</span><span class="n">src</span><span class="o">/</span><span class="n">emacs</span><span class="o">/.*/</span>\\<span class="mi">1</span><span class="s2">&quot;)))</span>
</pre></div>
</div>
<p>Como puede ver, se trata de una lista de elementos (<em>MATCH EXPANSION…</em>). La <em>coincidencia</em> es una expresión regular que se corresponde con el nombre del archivo visitado, y cada expansión puede referirse a grupos de coincidencias utilizando <code class="docutils literal notranslate"><span class="pre">\\1</span></code> y así sucesivamente. La cadena de expansión resultante se aplica entonces al sistema de archivos para ver si algún archivo coincide con esta expansión (interpretada como una expreg).</p>
<p>Dos variables gancho especiales permiten a las extensiones modificar el funcionamiento de la visita de archivos. Al visitar un archivo que no existe, se ejecutan las funciones de <code class="docutils literal notranslate"><span class="pre">find-file-not-found-functions</span></code>; esta variable contiene una lista de funciones, que se llaman una a una (sin argumentos) hasta que una de ellas devuelve un valor no nulo. No se trata de un gancho normal, y el nombre termina en <code class="docutils literal notranslate"><span class="pre">-functions</span></code> en lugar de <code class="docutils literal notranslate"><span class="pre">-hook</span></code> para indicarlo.</p>
<p>La visita exitosa de cualquier archivo, existente o no, llama a las funciones en <code class="docutils literal notranslate"><span class="pre">find-file-hook</span></code>, sin argumentos. Esta variable es un gancho normal. En el caso de un archivo inexistente, se ejecutan primero las funciones <code class="docutils literal notranslate"><span class="pre">find-file-not-found</span></code>. Véase <strong>Ganchos</strong>.</p>
<p>Hay varias formas de especificar automáticamente el modo principal para editar el archivo (véase <strong>Elegir Modos de Archivo</strong>), y de especificar variables locales definidas para ese archivo (véase <strong>Variables Locales en Archivos</strong>).</p>
</section>
<section id="guardar-archivos">
<h2>19.3 Guardar Archivos<a class="headerlink" href="#guardar-archivos" title="Link to this heading"></a></h2>
<p><em>Guardar</em> un búfer en Emacs significa volver a escribir su contenido en el archivo que se visitó en dicho búfer.</p>
<section id="comandos-para-guardar-archivos">
<h3>19.3.1 Comandos para Guardar Archivos<a class="headerlink" href="#comandos-para-guardar-archivos" title="Link to this heading"></a></h3>
<p>Estos son los comandos relacionados con guardar y escribir archivos.</p>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code>)</p>
<blockquote>
<div><p>Guarda el búfer actual en su archivo (<code class="docutils literal notranslate"><span class="pre">save-buffer</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">s</span></code>)</p>
<blockquote>
<div><p>Guarda uno o todos los búferes en sus archivos (<code class="docutils literal notranslate"><span class="pre">save-some-buffers</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">~</kbd> (<code class="docutils literal notranslate"><span class="pre">M-~</span></code>)</p>
<blockquote>
<div><p>Olvida que el búfer actual ha sido modificado (<code class="docutils literal notranslate"><span class="pre">not-modified</span></code>). Con argumento prefijo (<code class="docutils literal notranslate"><span class="pre">C-u</span></code>), marca el búfer actual como modificado.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-:kbd.`w` (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-w</span></code>)</p>
<blockquote>
<div><p>Guarda el búfer actual con un nombre de archivo especificado (<code class="docutils literal notranslate"><span class="pre">write-file</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">set-visited-file-name</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">set-visited-file-name</span></code>)</p>
<blockquote>
<div><p>Cambia el nombre de archivo con el que se guardará el búfer actual.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">rename-visited-file</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">rename-visited-file</span></code>)</p>
<blockquote>
<div><p>Lo mismo que <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">set-visited-file-name</span></code>, pero además renombra el archivo que el buffer está visitando (si lo hay).</p>
</div></blockquote>
<p>Cuando desee guardar el archivo y hacer permanentes los cambios, escriba <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code>, <code class="docutils literal notranslate"><span class="pre">save-buffer</span></code>). Una vez guardado, <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code> muestra un mensaje como éste:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Wrote</span> <span class="p">(</span><span class="n">Escribió</span><span class="p">)</span> <span class="o">/</span><span class="n">u</span><span class="o">/</span><span class="n">rms</span><span class="o">/</span><span class="n">gnu</span><span class="o">/</span><span class="n">gnu</span><span class="o">.</span><span class="n">tasks</span>
</pre></div>
</div>
<p>Si el búfer actual no se modifica (no se han realizado cambios en él desde que se creó el búfer o se guardó por última vez), el guardado no se realiza realmente, ya que no tendría ningún efecto. En su lugar, <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code> muestra un mensaje como éste en el área de eco:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">No</span> <span class="n">changes</span> <span class="n">need</span> <span class="n">to</span> <span class="n">be</span> <span class="n">saved</span><span class="p">)</span>
</pre></div>
</div>
<p>(No es necesario guardar ningún cambio)</p>
<p>Con un argumento prefijo, <code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-x</span> <span class="pre">C-s</span></code>, Emacs también marca el búfer para hacer una copia de seguridad cuando se haga el siguiente guardado. Ver <strong>Archivos de Copia de Seguridad</strong>.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">s</span></code> (<code class="docutils literal notranslate"><span class="pre">save-some-buffers</span></code>, guardar-algunos-búferes) ofrece guardar cualquiera o todos los búferes modificados. Le pregunta qué hacer con cada búfer. Las respuestas posibles son análogas a las de <code class="docutils literal notranslate"><span class="pre">query-replace</span></code>:</p>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">y</kbd> (<code class="docutils literal notranslate"><span class="pre">y</span></code>)</div>
<div class="line"><kbd class="kbd docutils literal notranslate">SPACE</kbd> (<code class="docutils literal notranslate"><span class="pre">SPC</span></code>)</div>
</div>
<blockquote>
<div><p>Guarda este búfer y pregunta por el resto de los búferes.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">n</kbd> (<code class="docutils literal notranslate"><span class="pre">n</span></code>)</div>
<div class="line"><kbd class="kbd docutils literal notranslate">DEL</kbd> (<code class="docutils literal notranslate"><span class="pre">DEL</span></code>)</div>
</div>
<blockquote>
<div><p>No guarda este búfer, pero pregunta por el resto de los búferes.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">!</kbd> (<code class="docutils literal notranslate"><span class="pre">!</span></code>)</p>
<blockquote>
<div><p>Guarda este búfer y todos los demás sin más preguntas.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">q</kbd> (<code class="docutils literal notranslate"><span class="pre">q</span></code>)</div>
<div class="line"><kbd class="kbd docutils literal notranslate">RET</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Termina el guardado de algunas carpetas sin guardar más.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">.</kbd> (<code class="docutils literal notranslate"><span class="pre">.</span></code>)</p>
<blockquote>
<div><p>Guarda este búfer, luego sale de (<code class="docutils literal notranslate"><span class="pre">save-some-buffers</span></code>, guardar-algunos-búferes) sin siquiera preguntar por otros búferes.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>)</p>
<blockquote>
<div><p>Visualiza el búfer sobre el que se le pregunta en ese momento. Al salir del modo Vista, se vuelve a <code class="docutils literal notranslate"><span class="pre">save-some-buffers</span></code>, que vuelve a hacer la pregunta.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">C-f</span></code>)</p>
<blockquote>
<div><p>Sale de <code class="docutils literal notranslate"><span class="pre">save-some-buffers</span></code> y visita el buffer por el que se le está preguntando en ese momento.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">d</kbd> (<code class="docutils literal notranslate"><span class="pre">d</span></code>)</p>
<blockquote>
<div><p>Compara el búfer con su archivo correspondiente, para que pueda ver qué cambios estaría guardando. Para ello se invoca el comando <code class="docutils literal notranslate"><span class="pre">diff-buffer-with-file</span></code> (véase <strong>Comparación de
Archivos</strong>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">h</kbd> (<code class="docutils literal notranslate"><span class="pre">C-h</span></code>)</p>
<blockquote>
<div><p>Muestra un mensaje de ayuda sobre estas opciones.</p>
</div></blockquote>
<p>Puede personalizar el valor de <code class="docutils literal notranslate"><span class="pre">save-some-buffers-default-predicate</span></code> para controlar sobre qué búferes preguntará Emacs.</p>
<p><code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-c</span></code>, la secuencia de teclas para salir de Emacs, invoca <code class="docutils literal notranslate"><span class="pre">save-some-buffers</span></code> y por tanto hace las mismas preguntas.</p>
<p>Si ha cambiado un búfer pero no desea guardar los cambios, debería tomar alguna medida para evitarlo. De lo contrario, cada vez que utilice <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">s</span></code> o <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-c</span></code>, es probable que guarde este búfer por error. Una cosa que puede hacer es teclear <code class="docutils literal notranslate"><span class="pre">M-~</span></code> (<code class="docutils literal notranslate"><span class="pre">not-modified</span></code>), que borra la indicación de que el búfer está modificado. Si hace esto, ninguno de los comandos de guardado creerá que el búfer necesita ser guardado. (<code class="docutils literal notranslate"><span class="pre">~</span></code> se usa a menudo como símbolo matemático de «not» (negación); por tanto, <code class="docutils literal notranslate"><span class="pre">M-~</span></code> es «not», metafied). Alternativamente, puede cancelar todos los cambios realizados desde que el archivo fue visitado o guardado, leyendo de nuevo el texto del archivo. Esto se llama revertir. Vea <strong>Revertir un búfer</strong>. (También podría deshacer todos los cambios repitiendo el comando deshacer <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">u</span></code> hasta que haya deshecho todos los cambios; pero revertir es más fácil).</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">set-visited-file-name</span></code> altera el nombre del archivo que el búfer actual está visitando. Lee el nuevo nombre de archivo utilizando el minibúfer. Entonces marca el búfer como visitando ese nombre de archivo, y cambia el nombre del búfer correspondientemente. <code class="docutils literal notranslate"><span class="pre">set-visited-file-name</span></code> no guarda el búfer en el nuevo archivo visitado; sólo altera los registros dentro de Emacs en caso de que los guardes más tarde. También marca el búfer como modificado para que <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code> en ese búfer se guarde.</p>
<p>Si quiere marcar el búfer como visitado en un archivo diferente y guardarlo inmediatamente, use <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-w</span></code> (<code class="docutils literal notranslate"><span class="pre">write-file</span></code>). Esto es equivalente a <code class="docutils literal notranslate"><span class="pre">set-visited-file-name</span></code> seguido de <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code>, excepto que <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-w</span></code> pide confirmación si el archivo existe. <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code> utilizado en un búfer que no está visitando un archivo tiene el mismo efecto que <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-w</span></code>; es decir, lee un nombre de archivo, marca el búfer como visitando ese archivo y lo guarda allí. El nombre de archivo por defecto en un búfer que no está visitando un fichero se hace combinando el nombre del búfer con el directorio por defecto del búfer (ver <strong>Nombres de Archivos</strong>).
Si el nuevo nombre de archivo implica un modo principal, entonces <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-w</span></code> cambia a ese modo principal, en la mayoría de los casos. El comando <code class="docutils literal notranslate"><span class="pre">set-visited-file-name</span></code> también hace esto. Ver <strong>Elección de Modos de Archivo</strong>.</p>
<p>Si Emacs está a punto de guardar un archivo y ve que la fecha de la última versión en disco no coincide con lo que Emacs leyó o escribió por última vez, le notifica este hecho, porque probablemente indica un problema causado por la edición simultánea y requiere su atención inmediata. Ver <strong>Edición Simultánea</strong>.</p>
</section>
<section id="archivos-de-copia-de-seguridad">
<h3>19.3.2 Archivos de Copia de Seguridad<a class="headerlink" href="#archivos-de-copia-de-seguridad" title="Link to this heading"></a></h3>
<p>En la mayoría de los sistemas operativos, reescribir un archivo destruye automáticamente todo registro de lo que el archivo solía contener. Por lo tanto, guardar un archivo desde Emacs se elimina el contenido antiguo del archivo, o lo haría, excepto que el Editor copia cuidadosamente el contenido antiguo a otro archivo, llamado archivo de <em>copia de seguridad</em>, antes de guardarlo.</p>
<p>Emacs hace una copia de seguridad de un archivo sólo la primera vez que éste se guarda desde un buffer. No importa cuántas veces guarde posteriormente ese archivo, su copia de seguridad permanecerá inalterada. Sin embargo, si elimina el búfer y vuelve a visitar el archivo, se creará un nuevo archivo de copia de seguridad.</p>
<p>Para la mayoría de los archivos, la variable <code class="docutils literal notranslate"><span class="pre">make-backup-files</span></code> determina si se hacen archivos de copia de seguridad. En la mayoría de los sistemas operativos, su valor por defecto es <code class="docutils literal notranslate"><span class="pre">t</span></code>, para que Emacs escriba archivos de copia de seguridad.</p>
<p>Para archivos gestionados por un sistema de control de versiones (ver <strong>Control de Versiones</strong>), la variable <code class="docutils literal notranslate"><span class="pre">vc-make-backup-files</span></code> determina si se hacen copias de seguridad de los archivos. Por defecto es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, ya que los archivos de copia de seguridad son redundantes cuando se almacenan todas las versiones anteriores en un sistema de control de versiones. Ver <strong>Opciones Generales</strong>.</p>
<p>A su elección, Emacs puede mantener una única copia de seguridad para cada archivo, o hacer una serie de copias de seguridad numeradas para cada archivo que edite. Ver <strong>Copias de Seguridad Únicas o Numeradas</strong>.</p>
<p>El valor por defecto de la variable <code class="docutils literal notranslate"><span class="pre">backup-enable-predicate</span></code> evita que se escriban archivos de copia de seguridad para archivos en los directorios usados para archivos temporales, especificados por <code class="docutils literal notranslate"><span class="pre">temporary-file-directory</span></code> o <code class="docutils literal notranslate"><span class="pre">small-temporary-file-directory</span></code>.</p>
<p>Puede decirle explícitamente a Emacs que haga otro archivo de copia de seguridad a partir de un búfer, aunque ese búfer se haya guardado antes. Si guarda el buffer con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-x</span> <span class="pre">C-s</span></code>), la versión así guardada se convertirá en un archivo de copia de seguridad si guarda el búfer de nuevo. <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-u</span> <span class="pre">C-x</span> <span class="pre">C-s</span></code> guarda el búfer, pero primero convierte el contenido del archivo anterior en una nueva copia de seguridad. <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-u</span> <span class="pre">C-u</span> <span class="pre">C-x</span> <span class="pre">C-s</span></code> lleva a cabo ambas cosas: hace una copia de seguridad de los contenidos anteriores, y se dispone a hacer otra de los contenidos recién guardados si guarda de nuevo.</p>
<p>Puede personalizar la variable <code class="docutils literal notranslate"><span class="pre">backup-directory-alist</span></code> para especificar que los archivos que coinciden con ciertos patrones deben ser respaldados en directorios específicos. Un uso típico es añadir un elemento (<code class="docutils literal notranslate"><span class="pre">&quot;.&quot;</span> <span class="pre">.</span> <span class="pre">dir</span></code>) para hacer todas las copias de seguridad en el directorio con nombre absoluto dir. Emacs modifica los nombres de los archivos de copia de seguridad para evitar conflictos entre archivos con los mismos nombres originados en directorios diferentes. Alternativamente, añadiendo, (<code class="docutils literal notranslate"><span class="pre">&quot;.&quot;</span> <span class="pre">.</span> <span class="pre">&quot;.~&quot;</span></code>) haría las copias de seguridad en el subdirectorio invisible <code class="docutils literal notranslate"><span class="pre">.~</span></code> del directorio del archivo original. Si es necesario, Emacs crea el directorio para hacer la copia de seguridad.</p>
<section id="copias-de-seguridad-simples-o-numeradas">
<h4>19.3.2.1 Copias de Seguridad Simples o Numeradas<a class="headerlink" href="#copias-de-seguridad-simples-o-numeradas" title="Link to this heading"></a></h4>
<p>Cuando Emacs crea un archivo de copia de seguridad, su nombre se construye normalmente añadiendo <code class="docutils literal notranslate"><span class="pre">~</span></code> al nombre del archivo que se está editando; así, el archivo de <em>copia de seguridad</em> para <code class="docutils literal notranslate"><span class="pre">eval.c</span></code> sería <code class="docutils literal notranslate"><span class="pre">eval.c~</span></code>.</p>
<p>Si el control de acceso impide a Emacs escribir archivos de copia de seguridad con los nombres habituales, escriba el archivo de copia de seguridad como <code class="docutils literal notranslate"><span class="pre">~/.emacs.d/%backup%~</span></code>. Sólo puede existir un archivo de este tipo, por lo que sólo está disponible la copia de seguridad más reciente.</p>
<p>Emacs también puede hacer archivos de copia de seguridad numerados. Los nombres de archivos de copia de seguridad numerados contienen <code class="docutils literal notranslate"><span class="pre">.~</span></code>, el número, y otro <code class="docutils literal notranslate"><span class="pre">~</span></code> después del nombre del archivo original. Así, los archivos de copia de seguridad de <code class="docutils literal notranslate"><span class="pre">eval.c</span></code> se llamarían <code class="docutils literal notranslate"><span class="pre">eval.c.~1~</span></code>, <code class="docutils literal notranslate"><span class="pre">eval.c.~2~</span></code>, y así sucesivamente, hasta nombres como <code class="docutils literal notranslate"><span class="pre">eval.c.~259~</span></code> y más allá.</p>
<p>La variable <code class="docutils literal notranslate"><span class="pre">version-control</span></code> determina si se hacen archivos de copia de seguridad individuales o múltiples archivos de copia de seguridad numerados. Sus valores posibles son:</p>
<p><code class="docutils literal notranslate"><span class="pre">nil</span></code></p>
<blockquote>
<div><p>Crea copias de seguridad numeradas para los archivos que ya tienen copias de seguridad numeradas. En caso contrario, crea copias de seguridad individuales. Esta es la opción por
defecto.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">t</span></code></p>
<blockquote>
<div><p>Crea copias de seguridad numeradas.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">never</span></code></p>
<blockquote>
<div><p>Nunca haga copias de seguridad numeradas; sólo copias individuales.</p>
</div></blockquote>
<p>La forma habitual de establecer esta variable es globalmente, a través de su archivo init o del búfer de personalización. Sin embargo, puede configuar <code class="docutils literal notranslate"><span class="pre">version-control</span></code> localmente en un búfer individual para controlar la realización de copias de seguridad del archivo de ese búfer (consulte <strong>Variables Locales</strong>). Algunos modos, como el modo Rmail, establecen esta variable. También puede hacer que Emacs establezca el control de versiones localmente cada vez que visite un archivo dado (vea <strong>Variables Locales en Archivos</strong>).</p>
<p>Si establece la variable de entorno <code class="docutils literal notranslate"><span class="pre">VERSION_CONTROL</span></code>, para indicar a varias utilidades GNU qué hacer con los archivos de copia de seguridad, Emacs también obedece a la variable de entorno estableciendo la variable Lisp <code class="docutils literal notranslate"><span class="pre">version-control</span></code> en consecuencia al inicio. Si el valor de la variable de entorno es <code class="docutils literal notranslate"><span class="pre">t</span></code> o <code class="docutils literal notranslate"><span class="pre">numbered</span></code>, entonces <code class="docutils literal notranslate"><span class="pre">version-control</span></code> se convierte en <code class="docutils literal notranslate"><span class="pre">t</span></code>; si el valor es <code class="docutils literal notranslate"><span class="pre">nil</span></code> o <code class="docutils literal notranslate"><span class="pre">existing</span></code>, entonces <code class="docutils literal notranslate"><span class="pre">version-control</span></code> se convierte en <code class="docutils literal notranslate"><span class="pre">nil</span></code>; si es <code class="docutils literal notranslate"><span class="pre">never</span></code> o <code class="docutils literal notranslate"><span class="pre">simple</span></code>, entonces <code class="docutils literal notranslate"><span class="pre">version-control</span></code> se convierte en <code class="docutils literal notranslate"><span class="pre">never</span></code>.</p>
<p>Si establece la variable <code class="docutils literal notranslate"><span class="pre">make-backup-file-name-function</span></code> a una función Lisp adecuada, puede anular la forma habitual en que Emac construye los nombres de los archivos de copia de seguridad.</p>
</section>
<section id="borrado-automatico-de-copias-de-seguridad">
<h4>19.3.2.2 Borrado Automático de Copias de Seguridad<a class="headerlink" href="#borrado-automatico-de-copias-de-seguridad" title="Link to this heading"></a></h4>
<p>Para evitar un consumo excesivo de espacio en disco, Emacs puede borrar automáticamente las versiones numeradas de las copias de seguridad. Generalmente mantiene tanto las primeras como las últimas copias de seguridad, borrando todas las que se encuentran entre ellas. Esto ocurre cada vez que se hace una nueva copia de seguridad.</p>
<p>Las dos variables <code class="docutils literal notranslate"><span class="pre">kept-old-versions</span></code> y <code class="docutils literal notranslate"><span class="pre">kept-new-versions</span></code> controlan este borrado. Sus valores son, respectivamente, el número de copias de seguridad más antiguas (con el número más bajo) y el número de copias más nuevas (con el número más alto) que se deben conservar, cada vez que se hace una nueva copia de seguridad. Las copias de seguridad intermedias (excluidas las más antiguas y las más recientes) son las versiones intermedias sobrantes: esas copias de seguridad se eliminan. Los valores de estas variables se utilizan cuando llega el momento de eliminar las versiones sobrantes, justo después de realizar una nueva versión de copia de seguridad; la copia de seguridad recién realizada se incluye en el recuento de versiones nuevas conservadas. Por defecto, ambas variables son 2.</p>
<p>Si <code class="docutils literal notranslate"><span class="pre">delete-old-versions</span></code> es <code class="docutils literal notranslate"><span class="pre">t</span></code>, Emacs borra los archivos de copia de seguridad sobrantes silenciosamente. Si es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, el valor por defecto, Emacs le pregunta si debería borrar el exceso de versiones de copia de seguridad. Si tiene cualquier otro valor, entonces Emacs nunca borra automáticamente las copias de seguridad.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">.</span></code> (Punto) de Dired también puede usarse para borrar versiones antiguas. Ver <strong>Marcar Varios Archivos a la Vez</strong>.</p>
</section>
<section id="copiar-vs-renombrar">
<h4>19.3.2.3 Copiar vs. Renombrar<a class="headerlink" href="#copiar-vs-renombrar" title="Link to this heading"></a></h4>
<p>Los archivos de copia de seguridad se pueden crear copiando el archivo antiguo o renombrándolo. Esto supone una diferencia cuando el archivo antiguo tiene varios nombres (enlaces duros). Si se cambia el nombre del archivo antiguo al archivo de copia de seguridad, los nombres alternativos se convierten en nombres para el archivo de copia de seguridad. Si, por el contrario, se copia el archivo antiguo, los nombres alternativos seguirán siendo los nombres del archivo que se está editando, y el contenido al que se acceda con esos nombres será el nuevo contenido.</p>
<p>El método de creación de un archivo de copia de seguridad también puede afectar al propietario y al grupo del archivo. Si se utiliza la copia, éstos no cambian. Si se usa renombrar, Usted se convierte en el propietario del archivo, y el grupo del archivo se convierte en el predeterminado (diferentes sistemas operativos tienen diferentes valores predeterminados para el grupo).</p>
<p>La elección entre renombrar o copiar se lleva a cabo del siguiente modo:</p>
<blockquote>
<div><ul>
<li><p>Si la variable <code class="docutils literal notranslate"><span class="pre">backup-by-copying</span></code> no es nula (por defecto es nula), se utiliza la copia.</p></li>
<li><p>En caso contrario, si la variable <code class="docutils literal notranslate"><span class="pre">backup-by-copying-when-linked</span></code> no es nula (por defecto es nula) y el archivo tiene varios nombres, se utilizará la copia.</p></li>
<li><p>En caso contrario, si la variable <code class="docutils literal notranslate"><span class="pre">backup-by-copying-when-mismatch</span></code> es distinta de <code class="docutils literal notranslate"><span class="pre">nil</span></code> (por defecto es <code class="docutils literal notranslate"><span class="pre">t</span></code>), y renombrar cambiaría el propietario o grupo del archivo, usa
copiar.</p>
<p>Si cambia <code class="docutils literal notranslate"><span class="pre">backup-by-copying-when-mismatch</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>, Emacs comprueba el user-id numérico del propietario del archivo y el group-id numérico del grupo del archivo.</p>
</li>
<li><p>Si cualquiera de ellos no es mayor que <code class="docutils literal notranslate"><span class="pre">backup-by-copying-when-privileged-mismatch</span></code>, se comporta como si <code class="docutils literal notranslate"><span class="pre">backup-by-copying-when-mismatch</span></code> no fuera nulo.</p></li>
<li><p>De lo contrario, renombrar es la opción por defecto.</p></li>
</ul>
</div></blockquote>
<p>Cuando un archivo se gestiona con un sistema de control de versiones (ver <strong>Control de Versiones</strong>), Emacs normalmente no hace copias de seguridad de la forma habitual para ese archivo. Pero <em>commiting</em> (también conocido como <em>check in</em> (regostro de entrada), ver <strong>Conceptos de Control de Versiones</strong>) nuevas versiones de archivos es similar en algunos aspectos a hacer copias de seguridad. Una desafortunada similitud es que estas operaciones normalmente rompen enlaces duros, desconectando el nombre de archivo que visitó de cualquier nombre alternativo para el mismo archivo. Esto no tiene nada que ver con Emacs, lo hace el sistema de control de versiones.</p>
</section>
</section>
<section id="personalizar-el-guardado-de-archivos">
<h3>19.3.3 Personalizar el Guardado de Archivos<a class="headerlink" href="#personalizar-el-guardado-de-archivos" title="Link to this heading"></a></h3>
<p>Si el valor de la variable <code class="docutils literal notranslate"><span class="pre">require-final-newline</span></code> es <code class="docutils literal notranslate"><span class="pre">t</span></code>, al guardar o escribir un archivo se pone silenciosamente una nueva línea al final si aún no hay una. Si el valor es <code class="docutils literal notranslate"><span class="pre">visit</span></code>, Emacs añade una nueva línea al final de cualquier archivo que no la tenga, justo después de visitar el archivo. (Esto marca el búfer como modificado, y se puede deshacer.) Si el valor es <code class="docutils literal notranslate"><span class="pre">visit-save</span></code>, Emacs añade esas nuevas líneas tanto al visitar como al guardar. Si el valor es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, Emacs deja el final del archivo sin cambios; cualquier otro valor que no sea <code class="docutils literal notranslate"><span class="pre">nil</span></code> significa que Emacs le pregunta si quiere añadir una nueva línea. El valor por defecto es <code class="docutils literal notranslate"><span class="pre">nil</span></code>.</p>
<p>Algunos modos principales están diseñados para tipos específicos de archivos que siempre deben terminar en nuevas líneas. Estos modos principales establecen la variable <code class="docutils literal notranslate"><span class="pre">require-final-newline</span></code> al valor de <code class="docutils literal notranslate"><span class="pre">mode-require-final-newline</span></code>, que por defecto es <code class="docutils literal notranslate"><span class="pre">t</span></code>. Estableciendo esta última variable, puede controlar cómo estos modos manejan las nuevas líneas finales.</p>
<p>Si esta opción no es nula y está visitando un archivo a través de un enlace simbólico, Emacs romperá el enlace simbólico al guardar el búfer, y escribirá el búfer en un archivo con el mismo nombre que el enlace simbólico, si el valor de <code class="docutils literal notranslate"><span class="pre">file-precious-flag</span></code> no es nulo (vea <strong>Guardar Búferes</strong> en Manual de Referencia de Emacs Lisp). Si quiere que Emacs guarde el búfer en el archivo al que apunta el enlace simbólico (preservando así el enlace) en estos casos, personalice la variable <code class="docutils literal notranslate"><span class="pre">file-preserve-symlinks-on-save</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code>.</p>
<p>Normalmente, cuando un programa escribe un archivo, el sistema operativo almacena brevemente los datos del archivo en la memoria principal antes de transferirlos al disco. Esto puede mejorar enormemente el rendimiento; por ejemplo, cuando se ejecuta en ordenadores portátiles, puede evitar un giro del disco cada vez que se escribe un archivo. Sin embargo, se corre el riesgo de perder datos si el sistema operativo se bloquea antes de transferir la caché al disco.</p>
<p>Para reducir este riesgo, Emacs puede invocar la llamada al sistema <code class="docutils literal notranslate"><span class="pre">fsync</span></code> después de guardar un archivo. El uso de <code class="docutils literal notranslate"><span class="pre">fsync</span></code> no elimina el riesgo de pérdida de datos, en parte porque muchos sistemas no lo implementan correctamente, y en parte porque el procedimiento de guardado de archivos de Emacs normalmente depende también de actualizaciones de directorio que podrían no sobrevivir a una caída incluso si este funciona correctamente.</p>
<p>La variable <code class="docutils literal notranslate"><span class="pre">write-region-inhibit-fsync</span></code> controla si Emacs invoca <code class="docutils literal notranslate"><span class="pre">fsync</span></code> después de guardar un archivo. El valor por defecto de la variable es <code class="docutils literal notranslate"><span class="pre">nil</span></code> cuando Emacs es interactivo, y <code class="docutils literal notranslate"><span class="pre">t</span></code> cuando Emacs se ejecuta en modo batch (ver <strong>Modo Batch</strong>).</p>
<p>Emacs nunca usa <code class="docutils literal notranslate"><span class="pre">fsync</span></code> cuando escribe archivos auto-guardados, ya que de todas formas estos archivos pueden perder datos.</p>
</section>
<section id="proteccion-contra-la-edicion-simultanea">
<h3>19.3.4 Protección contra la Edición Simultánea<a class="headerlink" href="#proteccion-contra-la-edicion-simultanea" title="Link to this heading"></a></h3>
<p>La edición simultánea se produce cuando dos Usuarios visitan el mismo archivo, ambos realizan cambios y los guardan. Si no se informa a nadie de que esto está ocurriendo, cualquiera de ellos que guarde primero se encontrará más tarde con que sus cambios se han perdido.</p>
<p>En algunos sistemas, Emacs se da cuenta inmediatamente cuando el segundo Usuario empieza a cambiar el archivo, e inmediatamente emite un aviso. En todos los sistemas, Emacs comprueba 25cuando guarda el archivo, y avisa si está a punto de sobrescribir los cambios de otro Usuario. Puede evitar la pérdida del trabajo del otro Participante tomando las medidas de corrección adecuada en lugar de guardar el archivo.</p>
<p>Cuando se hace la primera modificación en un búfer de Emacs que está visitando un archivo, éste registra que el archivo está bloqueado por Usted. (Lo hace creando un enlace simbólico <a class="footnote-reference brackets" href="#id2" id="id1" role="doc-noteref"><span class="fn-bracket">[</span>7<span class="fn-bracket">]</span></a> especialmente nombrado con contenidos especiales en el mismo directorio. Ver <strong>Bloqueo de Archivos</strong> en el Manual Lisp, para más detalles). Emacs elimina el bloqueo cuando guarda los ncambios. La idea es que el archivo esté bloqueado siempre que un búfer de Emacs que lo visite tenga cambios sin guardar.</p>
<p>Puede evitar la creación de archivos de bloqueo estableciendo la variable <code class="docutils literal notranslate"><span class="pre">create-lockfiles</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>. <strong>Precaución</strong>: al hacerlo perderá las ventajas que proporciona esta función. También puede controlar dónde se escriben los archivos de bloqueo utilizando la variable <code class="docutils literal notranslate"><span class="pre">lock-file-name-transforms</span></code>.</p>
<p>Si empieza a modificar el búfer mientras el archivo visitado está bloqueado por otra Persona, esto constituye una colisión. Cuando Emacs detecta una colisión, le pregunta qué hacer, llamando a la función Lisp <code class="docutils literal notranslate"><span class="pre">ask-user-about-lock</span></code>. Puede redefinir esta función para personalizarla. La definición estándar de esta función le hace una pregunta y acepta tres posibles respuestas:</p>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">s</span></code></dt><dd><p>Recupera el bloqueo. Quien ya estaba modificando el archivo lo pierde y lo adquiere Ud.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">p</span></code></dt><dd><p>Procede. Sigue adelante y edita el archivo a pesar de que esté bloqueado por otra persona.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">q</span></code></dt><dd><p>Cancela. Esto provoca un error (archivo bloqueado), y el contenido del búfer permanece inalterado: la modificación que intentaba hacer realmente no tiene lugar.</p>
</dd>
</dl>
<p>Si Emacs o el sistema operativo se bloquean, pueden quedar archivos de bloqueo obsoletos, por lo que ocasionalmente puede recibir advertencias sobre colisiones no válidas. Cuando determine que la colisión es espuria, simplemente use <code class="docutils literal notranslate"><span class="pre">p</span></code> para decirle a Emacs que siga adelante de todas formas.</p>
<p>Tenga en cuenta que el bloqueo funciona en base al nombre del archivo; si un archivo tiene varios nombres, Emacs no impide que dos Usuarios lo editen simultáneamente con nombres diferentes.</p>
<p>En algunos casos no se puede escribir un archivo de bloqueo, por ejemplo, si Emacs carece de los permisos del sistema o no puede crear archivos de bloqueo por alguna otra razón. En estos casos, Emacs todavía puede detectar la colisión cuando se intenta guardar un archivo, comprobando la fecha de última modificación del archivo. Si el archivo ha cambiado desde la última vez que Emacs lo visitó o guardó, eso implica que se han hecho cambios de alguna otra forma, y se perderán si Emacs procede a guardarlo. A continuación, el Editor muestra un mensaje de advertencia y pide confirmación antes de guardar; responda <code class="docutils literal notranslate"><span class="pre">yes</span></code> (sí) para guardar, y <code class="docutils literal notranslate"><span class="pre">no</span></code> o <code class="docutils literal notranslate"><span class="pre">C-g</span></code> para cancelar el guardado.</p>
<p>Una forma de comparar el búfer con su archivo es el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff-buffer-with-file</span></code>. Véase <strong>Comparación de Archivos</strong>.</p>
<p>Puede evitar la creación de archivos de bloqueo remotos estableciendo la variable <code class="docutils literal notranslate"><span class="pre">remote-file-name-inhibit-locks</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code>.</p>
<p>El modo menor <code class="docutils literal notranslate"><span class="pre">lock-file-mode</span></code>, llamado interactivamente, cambia el valor local de <code class="docutils literal notranslate"><span class="pre">create-lockfiles</span></code> en el búfer actual.</p>
<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">7</a><span class="fn-bracket">]</span></span>
<p>Si su sistema de archivos no admite enlaces simbólicos, se usa un archivo normal.</p>
</aside>
</aside>
</section>
<section id="archivos-sombra">
<h3>19.3.5 Archivos Sombra<a class="headerlink" href="#archivos-sombra" title="Link to this heading"></a></h3>
<p>Puede mantener copias de seguridad <em>idénticas</em> de ciertos archivos en más de un lugar, posiblemente en diferentes máquinas. Para hacer esto, primero debe configurar un <em>grupo de archivos sombra</em>, que es un conjunto de archivos con nombres idénticos compartidos entre una lista de sitios. El grupo de archivos es permanente y se aplica a futuras sesiones de Emacs, así como a la actual. Una vez configurado el grupo, cada vez que salga de Emacs, éste copiará el archivo que haya editado a los demás archivos de su grupo. También puede hacer la copia sin salir de Emacs, tecleando <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">shadow-copy-files</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-copy-files</span></code>).</p>
<p>Un <em>cluster sombra</em> (shadow cluster) es un conjunto de hosts que comparten directorios, de forma que copiar a o desde uno de ellos es suficiente para actualizar el archivo en todos ellos. Cada shadow cluster tiene un nombre, y especifica la dirección de red de un host primario (al que copiamos los archivos), y una expresión regular que coincide con los nombres de host de todos los demás hosts del cluster. Puede definir un shadow cluster con <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-define-cluster</span></code>.</p>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">shadow-initialize</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-initialize</span></code>)</p>
<blockquote>
<div><p>Configura el seguimiento de archivos.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">shadow-define-literal-group</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-define-literal-group</span></code>)</p>
<blockquote>
<div><p>Declara un único archivo para compartir entre sitios.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">shadow-define-regexp-group</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-define-regexp-group</span></code>)</p>
<blockquote>
<div><p>Hace que todos los archivos que coincidan con cada uno de un grupo de archivos sean compartidos entre hosts.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">shadow-define-cluster</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>nombre</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-define-cluster</span> <span class="pre">RET</span></code> <em>nombre</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Define un nombre de clúster de archivos sombra.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">shadow-copy-files</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-copy-files</span></code>)</p>
<blockquote>
<div><p>Copia todos los archivos sombra pendientes.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">shadow-cancel</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-cancel</span></code>)</p>
<blockquote>
<div><p>Cancela la instrucción de ocultar algunos archivos.</p>
</div></blockquote>
<p>Para configurar un grupo de archivos sombra, use <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-define-literal-group</span></code> o <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-define-regexp-group</span></code>. Consulte sus cadenas de documentación para más información.</p>
<p>Antes de copiar un archivo a sus <em>sombras</em> (o <em>copias idénticas</em>), Emacs pide confirmación. Puede responder «no» para evitar la copia de este archivo, por esta vez. Si desea cancelar el <em>copiado de sombras</em> (shadowing) permanentemente para un determinado archivo, use <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">shadow-cancel</span></code> para eliminar o cambiar el grupo de archivos sombra.</p>
<p>El shadowing de archivos no está disponible en MS Windows.</p>
</section>
<section id="actualizacion-automatica-de-marcas-de-tiempo">
<h3>19.3.6 Actualización Automática de Marcas de Tiempo<a class="headerlink" href="#actualizacion-automatica-de-marcas-de-tiempo" title="Link to this heading"></a></h3>
<p>Puede colocar una marca de tiempo en un archivo para que se actualice automáticamente cada vez que edite y guarde el archivo. La marca de tiempo debe estar en las primeras ocho líneas del archivo, y debe insertarla de la siguiente manera:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Time</span><span class="o">-</span><span class="n">stamp</span><span class="p">:</span> <span class="o">&lt;&gt;</span>
</pre></div>
</div>
<p>o de esta otra forma:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Time</span><span class="o">-</span><span class="n">stamp</span><span class="p">:</span> <span class="s2">&quot; &quot;</span>
</pre></div>
</div>
<p>A continuación, añada la función <code class="docutils literal notranslate"><span class="pre">time-stamp</span></code> al gancho <code class="docutils literal notranslate"><span class="pre">before-save-hook</span></code> (véase <strong>Ganchos</strong>). Cuando guarde el archivo, esta función actualizará automáticamente la marca de tiempo con la fecha y hora actuales. También puede usar el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">time-stamp</span></code> para actualizar la marca de tiempo manualmente. Por defecto, la marca de tiempo se formatea de acuerdo con su configuración regional (consulte <strong>Variables de Entorno</strong>) y zona horaria (consulte <strong>Hora del Día</strong> en el Manual de Referencia de Emacs Lisp). Para personalizaciones, vea el grupo Personalizar Marca de Tiempo.</p>
</section>
</section>
<section id="revertir-un-bufer">
<h2>19.4 Revertir un Búfer<a class="headerlink" href="#revertir-un-bufer" title="Link to this heading"></a></h2>
<p>Si ha hecho cambios extensos en un búfer que visita un archivo y luego cambia de opinión, puede revertir los cambios y volver a la versión guardada del archivo. Para ello, teclee <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">x</kbd><kbd class="kbd docutils literal notranslate">g</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">x</span> <span class="pre">g</span></code>). Como revertir involuntariamente podría hacer perder mucho trabajo, Emacs pide confirmación antes de volver a modificar ese búfer.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">revert-búfer</span></code> intenta posicionar el punto de tal manera que, si el archivo fue editado sólo ligeramente, estará aproximadamente en la misma parte del texto que antes. Pero si ha realizado cambios importantes, el punto puede acabar en una ubicación totalmente diferente.</p>
<p>Revertir marca el búfer como no modificado. Sin embargo, añade los cambios revertidos como una única modificación al historial de deshacer del búfer (véase <strong>Deshacer</strong>). Así, después de revertir, puede teclear <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">/</kbd> (<code class="docutils literal notranslate"><span class="pre">C-/</span></code>) o sus alias para recuperar los cambios revertidos, si cambia de opinión.</p>
<p>Para revertir un búfer de forma más conservadora, puede usar el comando <code class="docutils literal notranslate"><span class="pre">revert-buffer-with-fine-grain</span></code>. Este comando actúa como <code class="docutils literal notranslate"><span class="pre">revert-buffer</span></code>, pero intenta ser lo menos destructivo posible, haciendo un esfuerzo por preservar todos los marcadores, propiedades y superposiciones del búfer. Dado que revertir de esta forma puede ser muy lento cuando se ha realizado un gran número de cambios, puede modificar la variable <code class="docutils literal notranslate"><span class="pre">revert-buffer-with-fine-grain-max-seconds</span></code> para especificar una cantidad máxima de segundos que debe tardar la sustitución del contenido del búfer de esta forma. Tenga en cuenta que no se garantiza que la ejecución completa de <code class="docutils literal notranslate"><span class="pre">revert-buffer-with-fine-grain</span></code> no tarde más que esto.</p>
<p>Algunos tipos de búferes que no están asociados a archivos, como los búferes Dired, también pueden revertirse. Para ellos, revertir significa recalcular su contenido. Los búferes creados explícitamente con <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">b</span></code> no pueden revertirse; <code class="docutils literal notranslate"><span class="pre">revert-buffer</span></code> informa de un error si se intenta.</p>
<p>Cuando edita un archivo que cambia automática y frecuentemente, por ejemplo, un registro de salida de un proceso que continúa ejecutándose- puede ser útil para Emacs revertir el archivo sin preguntarle. Para solicitar este comportamiento, establezca la variable <code class="docutils literal notranslate"><span class="pre">revert-without-query</span></code> en una lista de expresiones regulares. Cuando un nombre de archivo coincide con una de estas expresiones regulares, <code class="docutils literal notranslate"><span class="pre">find-file</span></code> y <code class="docutils literal notranslate"><span class="pre">revert-buffer</span></code> lo revertirán automáticamente si ha cambiado, siempre que el propio búfer no se modifique. (Si ha editado el texto, sería un error descartar sus cambios).</p>
<p>La combinación de teclas <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">x</kbd><kbd class="kbd docutils literal notranslate">g</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">x</span> <span class="pre">g</span></code>) está vinculada al comando <code class="docutils literal notranslate"><span class="pre">revert-buffer-quick</span></code>. Es como el comando <code class="docutils literal notranslate"><span class="pre">revert-búfer</span></code>, pero da menos indicaciones. A diferencia de <code class="docutils literal notranslate"><span class="pre">revert-buffer</span></code>, no preguntará si el búfer actual visita un archivo, y el búfer no se modifica. También respeta la opción de Usuario <code class="docutils literal notranslate"><span class="pre">revert-buffer-quick-short-answers</span></code>. Si esta opción no es nula, usa una consulta <code class="docutils literal notranslate"><span class="pre">y</span></code>/<code class="docutils literal notranslate"><span class="pre">n</span></code> más corta en lugar de una consulta sí/no más larga.</p>
<p>También puede decirle a Emacs que revierta los búferes automáticamente cuando sus archivos visitados cambien en el disco; vea <strong>Auto Revert: Manteniendo los Búferes Actualizados Automáticamente</strong>.</p>
</section>
<section id="reversion-automatica-mantener-los-buferes-actualizados-automaticamente">
<h2>19.5 Reversión Automática: Mantener los Búferes Actualizados Automáticamente<a class="headerlink" href="#reversion-automatica-mantener-los-buferes-actualizados-automaticamente" title="Link to this heading"></a></h2>
<p>Un búfer puede desincronizarse con respecto a su archivo visitado en disco si ese archivo es modificado por otro programa. Para mantenerlo actualizado, puede activar el modo Auto Revert escribiendo <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">auto-revert-mode</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">auto-revert-mode</span></code>). Esto revierte automáticamente el búfer cuando su archivo visitado cambia en el disco. Para hacer lo mismo con todos los búferes de archivos, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">global-auto-revert-mode</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">global-auto-revert-mode</span></code>) para activar el modo de Reversión Automática Global.</p>
<p>La reversión automática no revertirá un búfer si tiene cambios sin guardar, o si su archivo en el disco se borra o cambia de nombre.</p>
<p>Uno de los usos del modo Auto Revert es «seguir» un archivo, como un registro del sistema, para que los cambios realizados en ese archivo por otros programas se muestren continuamente. Para ello, basta con mover el punto al final del búfer, y permanecerá allí mientras cambia el contenido del archivo. Sin embargo, si está seguro de que el archivo sólo cambiará creciendo al final, use en su lugar el modo Cola de Reversión Automática (<code class="docutils literal notranslate"><span class="pre">auto-revert-tail-mode</span></code>). Es más eficiente para esto. El modo Auto Revert Tail también funciona para archivos remotos.</p>
<p>Cuando un búfer es auto-revertido, se genera un mensaje. Esto puede suprimirse estableciendo <code class="docutils literal notranslate"><span class="pre">auto-revert-verbose</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>.</p>
<p>Los modos de auto-reversión no comprueban ni revierten archivos remotos, porque eso suele ser demasiado lento. Este comportamiento puede cambiarse estableciendo la variable <code class="docutils literal notranslate"><span class="pre">auto-revert-remote-files</span></code> a no-<code class="docutils literal notranslate"><span class="pre">nil</span></code>.</p>
<p>Por defecto, el modo Auto Revert funciona usando <em>notificaciones de archivos</em>, mediante las cuales los cambios en el sistema de archivos son reportados a Emacs por el sistema operativo. Puede desactivar el uso de notificaciones de archivos personalizando la variable <code class="docutils literal notranslate"><span class="pre">auto-revert-use-notify</span></code> a un valor nulo, entonces Emacs comprobará los cambios en los archivos mediante sondeo cada cinco segundos. Puede cambiar el intervalo de sondeo a través de la variable <code class="docutils literal notranslate"><span class="pre">auto-revert-interval</span></code>.</p>
<p>No todos los sistemas admiten notificaciones de archivos; en los casos en que no se admitan, la opción <code class="docutils literal notranslate"><span class="pre">auto-revert-use-notify</span></code> será nula por defecto.</p>
<p>Por defecto, el Auto Revert mode (modo de Reversión Automática) sondeará periódicamente los archivos en busca de cambios, incluso cuando se utilicen las notificaciones de archivos. El sondeo es innecesario en muchos casos, y desactivarlo puede ahorrar energía al confiar sólo en las notificaciones. Para ello, establezca la variable <code class="docutils literal notranslate"><span class="pre">auto-revert-avoid-polling</span></code> a no nulo. Sin embargo, la notificación es ineficaz en ciertos sistemas de archivos; principalmente en sistemas de archivos de red en máquinas tipo Unix, donde los archivos pueden ser alterados desde otras máquinas. Para estos sistemas de archivo, puede ser necesario el sondeo. Para forzar el sondeo cuando <code class="docutils literal notranslate"><span class="pre">auto-revert-avoid-polling</span></code> no es nulo, establezca <code class="docutils literal notranslate"><span class="pre">auto-revert-notify-exclude-dir-regexp</span></code> para que coincida con los archivos que deben ser excluidos del uso de la notificación.</p>
<p>En los búferes de Dired (vea <strong>Dired, el Editor de Directorios</strong>), el modo Auto Revert refresca el búfer cuando se crea o borra un archivo en el directorio del búfer.</p>
<p>Vea <strong>Deshacer Acciones de Control de Versiones</strong>, para comandos para revertir a versiones anteriores de archivos bajo control de versiones. Vea <strong>Control de Versiones y la Línea de Modo</strong>, para las peculiaridades de la Reversión Automática cuando se visitan archivos bajo control de versiones.</p>
<section id="reversion-automatica-de-buferes-que-no-son-de-archivo">
<h3>19.5.1 Reversión Automática de Búferes que no son de Archivo<a class="headerlink" href="#reversion-automatica-de-buferes-que-no-son-de-archivo" title="Link to this heading"></a></h3>
<p>El Global Auto Revert Mode (Modo de Reversión Automática Global) normalmente sólo revierte los búferes de archivo. Hay dos maneras de revertir automáticamente ciertos búferes que no son de archivo: activando el Modo de Reversión Automática en esos búferes (usando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">auto-revert-mode</span></code>); y estableciendo <code class="docutils literal notranslate"><span class="pre">global-auto-revert-non-file-buffers</span></code> a un valor no nulo. Esta última opción activa la reversión automática para todos los tipos de búferes para los que está implementada (listados en el menú inferior).</p>
<p>Al igual que los búferes de archivo, los búferes que no son de archivo normalmente no deberían revertirse mientras se está trabajando en ellos, o mientras contienen información que podría perderse tras la reversión. Por lo tanto, no se revierten si se modifican. Esto puede resultar complicado, ya que decidir cuándo un búfer que no es de archivo debe marcarse como modificado suele ser más difícil que en el caso de los búferes de archivo.</p>
<p>Otro detalle delicado es que, por razones de eficiencia, la reversión automática a menudo no intenta detectar todos los cambios posibles en el búfer, sino sólo los cambios importantes o fáciles de detectar. Por lo tanto, habilitar la reversión automática para un búfer que no sea de archivos no siempre garantiza que toda la información del búfer esté actualizada, y no hace necesariamente inútiles las reversiones manuales.</p>
<p>En el otro extremo, algunos búferes se revierten automáticamente según el tiempo definido en <code class="docutils literal notranslate"><span class="pre">auto-revert-interval</span></code> (intervalo de auto-reversión). (En este caso, la reversión automática no imprime ningún mensaje durante la reversión, incluso cuando <code class="docutils literal notranslate"><span class="pre">auto-revert-verbose</span></code> no es nulo.</p>
<p>Algunos búferes que no son archivos pueden actualizarse de forma fiable mediante la notificación de archivos en su directorio por defecto; los búferes Dired son un ejemplo. El modo principal puede indicar esto estableciendo <code class="docutils literal notranslate"><span class="pre">buffer-auto-revert-by-notification</span></code> a un valor no nulo en ese búfer, permitiendo que Auto Revert evite el sondeo periódico. Dicha notificación no incluye los cambios en los archivos de ese directorio, sólo en el directorio en sí.</p>
<p>Los detalles dependen de los tipos concretos de búferes y se explican en las secciones correspondientes.</p>
<section id="reversion-automatica-del-menu-de-buferes">
<h4>19.5.1.1 Reversión Automática del Menú de Búferes<a class="headerlink" href="#reversion-automatica-del-menu-de-buferes" title="Link to this heading"></a></h4>
<p>Si la auto-reversión de búferes que no son archivos está activada, el Menú de Búferes (ver <strong>Operando en Varios Búferes</strong>) se revierte automáticamente cada intervalo de auto-reversión de segundos, haya o no necesidad de ello. (Probablemente se tardaría más en comprobar si hay necesidad que en revertir realmente).</p>
<p>Si el menú de búferes se marca inapropiadamente como modificado, simplemente reviertalo manualmente usando <code class="docutils literal notranslate"><span class="pre">g</span></code> y la auto-reversión se reanudará. Sin embargo, si marcó ciertos búferes para ser borrados o para ser mostrados, tiene que tener cuidado, porque revertir borra todas las marcas. El hecho de que al añadir marcas se establezca la bandera de modificado del búfer impide que la reversión automática borre dichas marcas.</p>
</section>
<section id="reversion-automatica-de-buferes-dired">
<h4>19.5.1.2 Reversión Automática de Búferes Dired<a class="headerlink" href="#reversion-automatica-de-buferes-dired" title="Link to this heading"></a></h4>
<p>Los búferes antiguos sólo se auto-revierten cuando cambia la lista de archivos del directorio principal del búfer (por ejemplo, cuando se añade o elimina un nuevo archivo). No se auto-revierten cuando cambia la información sobre un archivo en particular (por ejemplo, cuando cambia el tamaño) o cuando cambian los subdirectorios insertados. Para estar seguro de que <em>toda</em> la información listada está actualizada, es necesario revertir manualmente usando <code class="docutils literal notranslate"><span class="pre">g</span></code>, <em>incluso</em> si la auto-reversión está activada en el búfer Dired. A veces, puede dar la impresión de que modificar o guardar archivos listados en el directorio principal provoca la auto-reversión. Esto se debe a que hacer cambios en un archivo, o guardarlo, muy a menudo provoca cambios en el propio directorio; por ejemplo, a través de archivos de copia de seguridad o archivos de autoguardado. Sin embargo, esto no está garantizado.</p>
<p>Si el buffer Dired está marcado como modificado y no hay cambios que quiera proteger, entonces la mayoría de las veces puede hacer que la auto-reversión se reanude revirtiendo manualmente
el buffer usando <code class="docutils literal notranslate"><span class="pre">g</span></code>. Hay una excepción. Si marca archivos, puede revertir el buffer de forma segura. Esto no borrará las banderas o marcas (a menos que el archivo marcado haya sido
borrado, por supuesto). Sin embargo, el buffer permanecerá modificado, incluso después de revertir, y la auto-reversión no se reanudará. Esto se debe a que, si marca archivos, es posible
que esté trabajando en el buffer y no quiera que éste cambie sin previo aviso. Si quiere que la auto-reversión se reanude en presencia de marcas y banderas, marque el buffer como no
modificado usando <code class="docutils literal notranslate"><span class="pre">M-~</span></code>. Sin embargo, si añade, borra o cambia marcas o banderas, volverá a marcarlo como modificado.</p>
<p>Los búferes remotos Dired no son actualmente auto-revertidos. Tampoco lo son los buffers Dired para los que se usaron comodines del shell o argumentos de archivo para listar sólo algunos
de los archivos. Los buffers <code class="docutils literal notranslate"><span class="pre">*Find*</span></code> y <code class="docutils literal notranslate"><span class="pre">*Locate*</span></code> tampoco se auto-revierten.</p>
<p>Tenga en cuenta que la auto-reversión de los buffers Dired puede no funcionar satisfactoriamente en algunos sistemas.</p>
</section>
</section>
</section>
<section id="guardado-automatico-proteccion-frente-a-desastres">
<h2>19.6 Guardado Automático: Protección Frente a Desastres<a class="headerlink" href="#guardado-automatico-proteccion-frente-a-desastres" title="Link to this heading"></a></h2>
<p>De vez en cuando, Emacs guarda automáticamente cada archivo visitado en un archivo separado, sin alterar el archivo que realmente usa. Esto se llama auto-guardado. Evita que se pierda más que una cantidad limitada de trabajo si el sistema se bloquea.</p>
<p>Cuando Emacs determina que es el momento del auto-guardado, considera cada búfer, y cada uno es auto-guardado si el auto-guardado está habilitado para él y ha sido cambiado desde la última vez que fue auto-guardado. Cuando la variable <code class="docutils literal notranslate"><span class="pre">auto-save-no-message</span></code> está en nil (por defecto), el mensaje <code class="docutils literal notranslate"><span class="pre">Auto-saving...</span></code> (Auto guardando…) se muestra en el área de eco durante el auto-guardado, si algún archivo es realmente auto-guardado; para desactivar estos mensajes, personalice la variable a un valor no nil. Los errores que se producen durante el autoguardado se capturan para que no interfieran con la ejecución de los comandos que ha estado escribiendo.</p>
<section id="autoguardar-archivos">
<h3>19.6.1 Autoguardar Archivos<a class="headerlink" href="#autoguardar-archivos" title="Link to this heading"></a></h3>
<p>El auto-guardado normalmente no guarda en los archivos que visitó, porque puede ser muy indeseable guardar un cambio que no quería hacer permanente. En su lugar, este procedimiento se realiza en un archivo diferente llamado <em>archivo de auto-guardado</em>, y el archivo visitado se cambia sólo cuando Usted solicita guardar explícitamente (como con <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code>).</p>
<p>Normalmente, el nombre del archivo de autoguardado se hace añadiendo <code class="docutils literal notranslate"><span class="pre">#</span></code> al principio y al final del nombre del archivo visitado. Así, un búfer que visita el archivo <code class="docutils literal notranslate"><span class="pre">foo.c</span></code> se autoguarda en un archivo <code class="docutils literal notranslate"><span class="pre">#foo.c#</span></code>. La mayoría de los búferes que no visitan archivos se autoguardan sólo si Usted lo solicita explícitamente; cuando se autoguardan, el nombre del archivo autoguardado se hace añadiendo <code class="docutils literal notranslate"><span class="pre">#</span></code> al principio y al final del nombre del búfer, y luego añadiendo dígitos y letras al final para que sea único. Por ejemplo, el búfer <code class="docutils literal notranslate"><span class="pre">*mail*</span></code> en el que escribe los mensajes que va a enviar puede guardarse automáticamente en un archivo llamado <code class="docutils literal notranslate"><span class="pre">#*mail*#704juu</span></code>. Los nombres de archivo de auto-guardado se hacen así a menos que reprograme partes de Emacs para hacer algo diferente (las funciones <code class="docutils literal notranslate"><span class="pre">make-auto-save-file-name</span></code> y <code class="docutils literal notranslate"><span class="pre">auto-save-file-name-p</span></code>). El nombre de archivo a usar para auto-guardado en un búfer se calcula cuando se activa el auto-guardado en ese búfer.</p>
<p>La variable <code class="docutils literal notranslate"><span class="pre">auto-save-file-name-transforms</span></code> permite un cierto grado de control sobre el nombre del archivo de autoguardado. Permite especificar una serie de expresiones regulares y sustituciones para transformar el nombre del archivo de autoguardado. El valor predeterminado coloca los archivos de autoguardado para archivos remotos (véase <strong>Archivos Remotos</strong>) en el directorio de archivos temporales de la máquina local.</p>
<p>Cuando borra una parte sustancial del texto en un búfer grande, el autoguardado se desactiva temporalmente en ese búfer. Esto se debe a que si ha borrado el texto sin querer, puede que el archivo de autoguardado le resulte más útil si contiene el texto borrado. Para volver a activar el guardado automático después de que esto ocurra, guarde el búfer con <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code>, o utilice el modo de guardado automático <code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">1</span> <span class="pre">M-x</span></code>.</p>
<p>Si desea que el autoguardado se realice en el archivo visitado en lugar de en un archivo de autoguardado separado, active el modo menor global <code class="docutils literal notranslate"><span class="pre">auto-save-visited-mode</span></code>. En este modo, el autoguardado es idéntico al guardado explícito. Tenga en cuenta que este modo es ortogonal al modo de autoguardado descrito anteriormente; puede activar ambos al mismo tiempo. Sin embargo, si el modo de autoguardado está activo en algún búfer y la variable obsoleta <code class="docutils literal notranslate"><span class="pre">auto-save-visited-file-name</span></code> tiene un valor no nulo, ese búfer no se verá afectado por <code class="docutils literal notranslate"><span class="pre">auto-save-visited-mode</span></code>.</p>
<p>Puede utilizar la variable <code class="docutils literal notranslate"><span class="pre">auto-save-visited-interval</span></code> para personalizar el intervalo entre operaciones de auto-guardado en <code class="docutils literal notranslate"><span class="pre">auto-save-visited-mode</span></code>; por defecto es de cinco segundos. <code class="docutils literal notranslate"><span class="pre">auto-save-interval</span></code> y <code class="docutils literal notranslate"><span class="pre">auto-save-timeout</span></code> no tienen efecto sobre <code class="docutils literal notranslate"><span class="pre">auto-save-visited-mode</span></code>. Vea <strong>Controlando el Auto-guardado</strong>, para más detalles sobre estas variables.</p>
<p>El archivo de auto-guardado de un búfer se borra cuando guarda el búfer en su archivo visitado. (Cambiar el nombre del archivo visitado con <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-w</span></code> o <code class="docutils literal notranslate"><span class="pre">set-visited-file-name</span></code> renombra cualquier archivo autoguardado para que vaya con el nuevo nombre visitado.</p>
<p>Matar un búfer, por defecto, no elimina el archivo de autoguardado del búfer. Si <code class="docutils literal notranslate"><span class="pre">kill-buffer-delete-auto-save-files</span></code> no es nulo, matar un búfer que tiene un archivo de autoguardado hará que Emacs pregunte al Usuario si el archivo de autoguardado debe ser borrado. (Esto se inhibe si <code class="docutils literal notranslate"><span class="pre">delete-auto-save-files</span></code> es <code class="docutils literal notranslate"><span class="pre">nil</span></code>).</p>
</section>
<section id="control-del-autoguardado">
<h3>19.6.2. Control del Autoguardado<a class="headerlink" href="#control-del-autoguardado" title="Link to this heading"></a></h3>
<p>Cada vez que visita un archivo, se activa el autoguardado para el búfer de ese archivo si la variable <code class="docutils literal notranslate"><span class="pre">auto-save-default</span></code> es distinta de <code class="docutils literal notranslate"><span class="pre">nil</span></code> (pero no en modo por lotes; vea <strong>Opciones Iniciales</strong>). El valor predeterminado de esta variable es <code class="docutils literal notranslate"><span class="pre">t</span></code>, por lo que el autoguardado es la práctica habitual para los búferes que visitan archivos. Para activar el autoguardado en el búfer actual, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">save-mode</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">auto-save-mode</span></code>). El modo de auto-guardado actúa como un modo menor local del búfer (ver <strong>Modos Menores</strong>).</p>
<p>Emacs auto-guarda periódicamente basándose en cuántos caracteres ha tecleado desde el último auto-guardado. La variable <code class="docutils literal notranslate"><span class="pre">auto-save-interval</span></code> especifica cuántos caracteres hay entre auto-guardados. Por defecto, es 300. Emacs no acepta valores demasiado pequeños: si personaliza <code class="docutils literal notranslate"><span class="pre">auto-save-interval</span></code> a un valor inferior a 20, Emacs se comportará como si el valor fuera 20.</p>
<p>El autoguardado también tiene lugar cuando deja de teclear durante un rato. Por defecto, lo hace después de 30 segundos de inactividad (en este momento, Emacs también puede realizar la recolección de basura; ver <strong>Recolección de Basura</strong> en el Manual de Referencia de Emacs Lisp). Para cambiar este intervalo, personalice la variable <code class="docutils literal notranslate"><span class="pre">auto-save-timeout</span></code>. El periodo de tiempo real es más largo si el búfer actual es largo; esto es una heurística que pretende mantenerse fuera de su camino cuando está editando búferes largos, en los que el auto-guardado toma una cantidad apreciable de tiempo. El auto-guardado durante periodos de inactividad consigue dos cosas: primero, se asegura de que todo su trabajo se guarda si se aleja de la terminal durante un tiempo; segundo, puede evitar algún auto-guardado mientras está escribiendo.</p>
<p>Cuando el modo auto-guardado-visitado (<code class="docutils literal notranslate"><span class="pre">auto-save-visited-mode</span></code>) está activado, Emacs auto-guardará los búferes de archivos visitados después de cinco segundos de inactividad. Puede personalizar la variable <code class="docutils literal notranslate"><span class="pre">auto-save-visited-interval</span></code> para cambiar el intervalo de tiempo de inactividad.</p>
<p>Emacs también auto-guarda cada vez que recibe un error fatal. Esto incluye matar el trabajo de Emacs con un comando del shell como <code class="docutils literal notranslate"><span class="pre">kill</span> <span class="pre">%emacs</span></code>, o desconectar una línea telefónica o una conexión de red.</p>
<p>Puede realizar un auto-guardado explícitamente con el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">do-auto-save</span></code>.</p>
</section>
<section id="recuperacion-de-datos-de-autoguardados">
<h3>19.6.3 Recuperación de Datos de Autoguardados<a class="headerlink" href="#recuperacion-de-datos-de-autoguardados" title="Link to this heading"></a></h3>
<p>Puede utilizar el contenido de un archivo de autoguardado para recuperarse de una pérdida de datos con el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">recover-file</span> <span class="pre">RET</span></code> <em>archivo</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>. Esto visita el <em>archivo</em> y luego (después de su confirmación) restaura el contenido de su archivo de autoguardado <code class="docutils literal notranslate"><span class="pre">#archivo#</span></code>. A continuación, puede guardar con <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-s</span></code> para poner el texto recuperado en el propio archivo. Por ejemplo, para recuperar el archivo <code class="docutils literal notranslate"><span class="pre">foo.c</span></code> del archivo autoguardado <code class="docutils literal notranslate"><span class="pre">#foo.c#</span></code>, haga:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">M</span><span class="o">-</span><span class="n">x</span> <span class="n">recover</span><span class="o">-</span><span class="n">file</span> <span class="n">RET</span> <span class="n">foo</span><span class="o">.</span><span class="n">c</span> <span class="n">RET</span>
<span class="n">yes</span> <span class="n">RET</span>
<span class="n">C</span><span class="o">-</span><span class="n">x</span> <span class="n">C</span><span class="o">-</span><span class="n">s</span>
</pre></div>
</div>
<p>Antes de pedir confirmación, <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">recover-file</span></code> muestra un listado de directorios que describe el archivo especificado y el archivo de autoguardado, para que pueda comparar sus tamaños y fechas. Si el archivo de autoguardado es más antiguo, <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">recover-file</span></code> no ofrece leerlo.</p>
<p>Si Emacs o el ordenador se bloquean, puede recuperar todos los archivos que estaba editando desde sus archivos de autoguardado con el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">recover-session</span></code>. Esto le muestra primero una lista de sesiones interrumpidas grabadas. Mueva el puntero hasta la que elija y escriba <code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-c</span></code>.</p>
<p>A continuación, <code class="docutils literal notranslate"><span class="pre">recover-session</span></code> pregunta por cada uno de los archivos que se estaban editando durante esa sesión, preguntando si desea recuperar ese archivo. Si la respuesta es <code class="docutils literal notranslate"><span class="pre">y</span></code> (si), se llama a <code class="docutils literal notranslate"><span class="pre">recover-file</span></code>, que funciona de forma normal. Muestra las fechas del archivo original y de su archivo de autoguardado, y vuelve a preguntar si se desea recuperar ese archivo.</p>
<p>Cuando <code class="docutils literal notranslate"><span class="pre">recover-session</span></code> termina, los archivos que haya elegido recuperar están presentes en los búferes de Emacs. A continuación, debe guardarlos. Sólo esto -guardarlos- actualiza los propios archivos.</p>
<p>Emacs registra información sobre sesiones interrumpidas en archivos llamados <code class="docutils literal notranslate"><span class="pre">.saves-pid-hostname~</span></code> en el directorio <code class="docutils literal notranslate"><span class="pre">~/.emacs.d/auto-save-list/</span></code>. Este directorio está determinado por la variable <code class="docutils literal notranslate"><span class="pre">auto-save-list-file-prefix</span></code>. Si establece <code class="docutils literal notranslate"><span class="pre">auto-save-list-file-prefix</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>, las sesiones no se registran para su recuperación.</p>
</section>
</section>
<section id="alias-de-nombres-de-archivo">
<h2>19.7 Alias de Nombres de Archivo<a class="headerlink" href="#alias-de-nombres-de-archivo" title="Link to this heading"></a></h2>
<p>Tanto los enlaces simbólicos como los enlaces duros permiten que varios nombres de archivo se refieran al mismo archivo. Los enlaces duros son nombres alternativos que se refieren directamente al archivo; todos los nombres son igualmente válidos, y no hay ninguno de preferencia. Por el contrario, un enlace simbólico es una especie de alias definido: cuando <code class="docutils literal notranslate"><span class="pre">foo</span></code> es un enlace simbólico a <code class="docutils literal notranslate"><span class="pre">bar</span></code>, puede utilizar cualquiera de los dos nombres para referirse al archivo, pero <code class="docutils literal notranslate"><span class="pre">bar</span></code> es el nombre real, mientras que <code class="docutils literal notranslate"><span class="pre">foo</span></code> es sólo un alias. Los casos más complejos se dan cuando los enlaces simbólicos apuntan a directorios.</p>
<p>Normalmente, si consulta un archivo que Emacs ya está visitando con un nombre diferente, muestra un mensaje en el área de eco y utiliza el búfer existente visitando ese archivo. Esto puede ocurrir en sistemas que soportan enlaces duros o simbólicos, o si usa un nombre de archivo largo en un sistema que trunca nombres de archivo largos, o en un sistema de archivos que no distingue mayúsculas de minúsculas. Puede suprimir el mensaje asignando a la variable <code class="docutils literal notranslate"><span class="pre">find-file-suppress-same-file-warnings</span></code> un valor distinto de cero. Puede desactivar completamente esta función estableciendo la variable <code class="docutils literal notranslate"><span class="pre">find-file-existing-other-name</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>: entonces, si visita el mismo archivo con dos nombres diferentes, obtendrá un búfer distinto para cada nombre de archivo.</p>
<p>Si la variable <code class="docutils literal notranslate"><span class="pre">find-file-visit-truename</span></code> es distinta de <code class="docutils literal notranslate"><span class="pre">nil</span></code>, entonces el nombre de archivo registrado para un búfer es el nombre verdadero del archivo (obtenido reemplazando todos los enlaces simbólicos por sus nombres de destino), en lugar del nombre que especifique. La configuración de <code class="docutils literal notranslate"><span class="pre">find-file-visit-truename</span></code> también implica el efecto de <code class="docutils literal notranslate"><span class="pre">find-file-existing-other-name</span></code>.</p>
<p>A veces, se accede normalmente a un directorio a través de un enlace simbólico, y podría querer que Emacs mostrara preferentemente su nombre enlazado. Para ello, personalice <code class="docutils literal notranslate"><span class="pre">directory-abbrev-alist</span></code>. Cada elemento de esta lista debe tener la forma (<code class="docutils literal notranslate"><span class="pre">de</span> <span class="pre">.</span> <span class="pre">a</span></code>), lo que significa sustituir <em>de</em> por <em>a</em> siempre que aparezca de en un nombre de directorio. La cadena <em>de</em> es una expresión regular (véase <strong>Sintaxis de Expresiones Regulares</strong>). Se compara con nombres de directorio anclados en el primer carácter, y debe empezar por <code class="docutils literal notranslate"><span class="pre">\`</span></code> (para soportar nombres de directorio con nuevas líneas incrustadas, lo que anularía <code class="docutils literal notranslate"><span class="pre">^</span></code>). La cadena <em>a</em> debe ser un nombre de directorio absoluto ordinario que apunte al mismo directorio. No use <code class="docutils literal notranslate"><span class="pre">~</span></code> para representar un directorio personal en la cadena <em>de</em>; Emacs realiza estas sustituciones por separado. Aquí hay un ejemplo, de un sistema en el que <code class="docutils literal notranslate"><span class="pre">/home/fsf</span></code> se accede normalmente a través de un enlace simbólico llamado <code class="docutils literal notranslate"><span class="pre">/fsf</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">((</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">`/home/fsf&quot;</span> <span class="o">.</span> <span class="s2">&quot;/fsf&quot;</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="directorios-de-archivos">
<h2>19.8 Directorios de Archivos<a class="headerlink" href="#directorios-de-archivos" title="Link to this heading"></a></h2>
<p>El sistema de archivos agrupa los archivos en <em>directorios</em>. Un <em>listado de directorios</em> es una lista de todos los archivos de un directorio. Emacs proporciona comandos para crear y borrar directorios, y para hacer listados de directorios en formato breve (sólo nombres de archivos) y en formato detallado (tamaños, fechas y otros atributos incluidos). Emacs también incluye una característica de navegador de directorios llamada Dired, que puede invocar con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">d</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">d</span></code>); vea <strong>Dired, el Editor de Directorios</strong>.</p>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd> <em>directorio-o-patrón</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-d</span></code> <em>directorio-o-patrón</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Muestra un breve listado de directorios (<code class="docutils literal notranslate"><span class="pre">list-directory</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd> (<code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-x</span> <span class="pre">C-d</span></code> <em>directorio-o-patrón</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Muestra un listado detallado de directorios.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">make-directory</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>nombredir</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">make-directory</span> <span class="pre">RET</span></code> <em>nombredir</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Crea un nuevo directorio llamado <em>nombredir</em>.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">delete-directory</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>nombredir</em> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">delete-directory</span> <span class="pre">RET</span></code> <em>nombredir</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Borra el directorio llamado <em>nombredir</em>. Si no está vacío, se le preguntará si desea eliminarlo de forma recursiva.</p>
</div></blockquote>
<p>El comando para mostrar un listado de directorios es <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-d</span></code> (<code class="docutils literal notranslate"><span class="pre">list-directory</span></code>). Lee utilizando el minibuffer un nombre de archivo que puede ser un directorio a listar o un patrón que contenga comodines para los archivos a listar. Por ejemplo,</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">C</span><span class="o">-</span><span class="n">x</span> <span class="n">C</span><span class="o">-</span><span class="n">d</span> <span class="o">/</span><span class="n">u2</span><span class="o">/</span><span class="n">emacs</span><span class="o">/</span><span class="n">etc</span> <span class="n">RET</span>
</pre></div>
</div>
<p>lista todos los archivos del directorio <code class="docutils literal notranslate"><span class="pre">/u2/emacs/etc</span></code>. He aquí un ejemplo de especificación de un patrón de nombres de archivo:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">C</span><span class="o">-</span><span class="n">x</span> <span class="n">C</span><span class="o">-</span><span class="n">d</span> <span class="o">/</span><span class="n">u2</span><span class="o">/</span><span class="n">emacs</span><span class="o">/</span><span class="n">src</span><span class="o">/*.</span><span class="n">c</span> <span class="n">RET</span>
</pre></div>
</div>
<p>Normalmente, <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-d</span></code> muestra un breve listado de directorios que sólo contiene los nombres de los archivos. Un argumento numérico (independientemente del valor) le indica que haga un listado detallado que incluya tamaños, fechas y propietarios (como <code class="docutils literal notranslate"><span class="pre">ls</span> <span class="pre">-l</span></code>).</p>
<p>El texto de un listado de directorios se obtiene principalmente ejecutando <code class="docutils literal notranslate"><span class="pre">ls</span></code> en un proceso inferior. Dos variables de Emacs controlan las opciones pasadas a <code class="docutils literal notranslate"><span class="pre">ls</span></code>: <code class="docutils literal notranslate"><span class="pre">list-directory-brief-switches</span></code> es una cadena que da las opciones a usar en listados breves (<code class="docutils literal notranslate"><span class="pre">&quot;-CF&quot;</span></code> por defecto), y <code class="docutils literal notranslate"><span class="pre">list-directory-verbose-switches</span></code> es una cadena que da las opciones a usar en un listado detallado (<code class="docutils literal notranslate"><span class="pre">&quot;-l&quot;</span></code> por defecto).</p>
<p>En los listados detallados de directorios, Emacs añade información sobre la cantidad de espacio libre en el disco que contiene el directorio.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">delete-directory</span></code> pregunta por el nombre de un directorio usando el minibuffer, y borra el directorio si está vacío. Si el directorio no está vacío, se le preguntará si desea borrarlo recursivamente. En los sistemas que disponen de la función «Papelera» (o «Papelera de reciclaje»), puede hacer que este comando mueva el directorio especificado a la Papelera en lugar de borrarlo directamente, cambiando la variable <code class="docutils literal notranslate"><span class="pre">delete-by-moving-to-trash</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code>. Consulte <strong>Operaciones Varias con Archivos</strong>, para obtener más información sobre el uso de la Papelera.</p>
</section>
<section id="comparacion-de-archivos">
<h2>19.9 Comparación de Archivos<a class="headerlink" href="#comparacion-de-archivos" title="Link to this heading"></a></h2>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff</span></code> pregunta por dos nombres de archivo, usando el minibúfer, y muestra las diferencias entre los dos archivos en un búfer llamado <code class="docutils literal notranslate"><span class="pre">*diff*</span></code>. Esto funciona ejecutando el programa <code class="docutils literal notranslate"><span class="pre">diff</span></code>, usando opciones tomadas de la variable <code class="docutils literal notranslate"><span class="pre">diff-switches</span></code>. El valor de <code class="docutils literal notranslate"><span class="pre">diff-switches</span></code> debe ser una cadena; el valor por defecto es <code class="docutils literal notranslate"><span class="pre">&quot;-u&quot;</span></code> para especificar un <code class="docutils literal notranslate"><span class="pre">diff</span></code> de contexto unificado. Vea <strong>Diff</strong> en Comparar y Fusionar Archivos, para más información sobre el programa <code class="docutils literal notranslate"><span class="pre">diff</span></code>.</p>
<p>La salida del comando <code class="docutils literal notranslate"><span class="pre">diff</span></code> se muestra usando un modo principal llamado modo Diff. Vea <strong>Modo Diff</strong>.</p>
<p>Una alternativa (mucho más sofisticada) es <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">ediff</span></code> (ver <strong>Ediff</strong> en El Manual de Ediff).</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff-backup</span></code> compara un archivo especificado con su copia de seguridad más reciente. Si especifica el nombre de un archivo de copia de seguridad, <code class="docutils literal notranslate"><span class="pre">diff-backup</span></code> lo compara con el archivo fuente del que es una copia de seguridad. En todos los demás aspectos, se comporta como <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff</span></code>.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff-buffer-with-file</span></code> compara un búfer especificado con su archivo correspondiente. Esto muestra los cambios que se harían en el archivo si se guarda el búfer.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff-buffers</span></code> compara el contenido de dos búferes especificados.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">compare-windows</span></code> compara el texto en la ventana actual con el de la ventana que era la ventana seleccionada antes de que Usted seleccionara la actual. (Para más información sobre ventanas en Emacs, vea <strong>Ventanas Múltiples</strong>.) La comparación comienza en el punto en cada ventana, después de empujar cada valor inicial del punto en el anillo de marcas (vea <strong>El Anillo de Marcas</strong>) en su respectivo búfer. Luego se mueve el punto hacia adelante en cada ventana, un carácter a la vez, hasta que llega a los caracteres que no coinciden. A continuación, el comando finaliza.</p>
<p>Si el punto en las dos ventanas está seguido por texto no coincidente cuando se inicia el comando, <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">compare-windows</span></code> intenta heurísticamente avanzar hasta el texto coincidente en las dos ventanas, y luego sale. Por lo tanto, si utiliza <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">compar-windows</span></code> repetidamente (véase <strong>Repetición de un Comando</strong>), cada vez se salta un rango coincidente o encuentra el inicio de otro.</p>
<p>Con un argumento numérico, <code class="docutils literal notranslate"><span class="pre">compare-windows</span></code> ignora los cambios en los espacios en blanco. Si la variable <code class="docutils literal notranslate"><span class="pre">compare-ignore-case</span></code> es distinta de <code class="docutils literal notranslate"><span class="pre">nil</span></code>, la comparación también ignora las diferencias entre mayúsculas y minúsculas. Si la variable <code class="docutils literal notranslate"><span class="pre">compare-ignore-whitespace</span></code> no es nula, <code class="docutils literal notranslate"><span class="pre">compare-windows</span></code> ignora por defecto los cambios en los espacios en blanco, pero un argumento prefijo lo desactiva para esa única invocación del comando.</p>
<p>Puede usar <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">smerge-mode</span></code> para activar el modo Smerge, un modo menor para editar la salida del programa <code class="docutils literal notranslate"><span class="pre">diff3</span></code>. Esto es típicamente el resultado de una fusión fallida de una actualización del sistema de control de versiones fuera de VC, debido a cambios conflictivos en un archivo. El modo Smerge proporciona comandos para resolver conflictos seleccionando cambios específicos.</p>
<p>Vea <strong>Fusionar Archivos con Emerge</strong>, para la herramienta Emerge, que proporciona una potente interfaz para fusionar archivos.</p>
</section>
<section id="modo-diff">
<h2>19.10 Modo Diff<a class="headerlink" href="#modo-diff" title="Link to this heading"></a></h2>
<p>El modo diff es un modo principal utilizado para la salida de <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff</span></code> y otros comandos similares. Este tipo de salida se llama <em>parche</em>, porque puede pasarse al comando <code class="docutils literal notranslate"><span class="pre">patch</span></code> para aplicar automáticamente los cambios especificados. Para seleccionar el modo diff manualmente, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">diff-mode</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff-mode</span></code>).</p>
<p>Los cambios especificados en un parche se agrupan en <em>hunks</em>, que son trozos, bloques, segmentos o elementos contiguos de texto que contienen una o más líneas modificadas. Los trozos también suelen incluir líneas sin cambios para proporcionar contexto a los cambios. Cada trozo va precedido de una <em>cabecera de bloque</em>, que especifica los números de línea antiguos y nuevos en los que se producen los cambios del mismo. El modo Diff resalta cada cabecera de trozo, para distinguirla del contenido real de este.</p>
<p>El primer bloque de un parche va precedido de una cabecera de archivo, que muestra los nombres de las versiones nueva y antigua del archivo, y sus marcas de tiempo. Si un parche muestra cambios para más de un archivo, cada archivo tiene una cabecera de este tipo antes del primer trozo de los cambios de ese archivo.</p>
<p>Puede editar un búfer en modo Diff como cualquier otro búfer. (Si es de sólo lectura, necesita hacerlo escribible primero; vea <strong>Operaciones Varias con Búferes</strong>). Siempre que edite un trozo, el modo Diff intenta corregir automáticamente los números de línea en las cabeceras del trozo, para asegurarse de que el parche sigue siendo correcto, y aún podría ser aplicado por parche. Para desactivar la corrección automática del número de línea, cambie la variable <code class="docutils literal notranslate"><span class="pre">diff-update-on-the-fly</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>.</p>
<p>El modo diff hace que los hunks sean tratados como mensajes de error del compilador por <code class="docutils literal notranslate"><span class="pre">M-g</span> <span class="pre">M-n</span></code> y otros comandos que manejan mensajes de error (vea <strong>Modo de Compilación</strong>). Así, puede usar los comandos del modo de compilación para visitar las ubicaciones de código fuente correspondientes.</p>
<p>Además, el modo Diff proporciona los siguientes comandos para navegar, manipular y aplicar partes de parches:</p>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">n</kbd> (<code class="docutils literal notranslate"><span class="pre">M-n</span></code>)</p>
<blockquote>
<div><p>Avanza al siguiente <code class="docutils literal notranslate"><span class="pre">hunk-start</span></code> (segmento-de-inicio) (<code class="docutils literal notranslate"><span class="pre">diff-hunk-next</span></code>). Con el argumento prefijo <em>n</em>, avanza al <em>n</em>èsimo bloque (hunk) siguiente.</p>
<p>Por defecto, el modo Diff refina los elementos (hunks) intermedios a medida que Emacs los muestra, resaltando sus cambios con mejor granularidad. Alternativamente, si establece
<code class="docutils literal notranslate"><span class="pre">diff-refine</span></code> a la navegación por símbolos, el modo Diff sólo refina el bloque (hunk) al que se mueve con este comando o con <code class="docutils literal notranslate"><span class="pre">diff-hunk-prev</span></code>.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">p</kbd> (<code class="docutils literal notranslate"><span class="pre">M-p</span></code>)</p>
<blockquote>
<div><p>Se mueve al inicio de bloque anterior (<code class="docutils literal notranslate"><span class="pre">diff-hunk-prev</span></code>). Con el argumento de prefijo <em>n</em>, retrocede al <em>n</em>ésimo trozo anterior. Al igual que <code class="docutils literal notranslate"><span class="pre">M-n</span></code>, este comando refina el
segmento (hunk) al que se desplaza si establece <code class="docutils literal notranslate"><span class="pre">diff-refine</span></code> en el símbolo de navegación.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt:</kbd>-<kbd class="kbd docutils literal notranslate">}</kbd> (<code class="docutils literal notranslate"><span class="pre">M-}</span></code>)</p>
<blockquote>
<div><p>Avanza al inicio del siguiente archivo, en un parche de varios archivos (<code class="docutils literal notranslate"><span class="pre">diff-file-next</span></code>). Con el argumento prefijo <em>n</em>, avanza hasta el inicio del <em>n</em>ésimo archivo siguiente.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Atl</kbd>-<kbd class="kbd docutils literal notranslate">{</kbd> (<code class="docutils literal notranslate"><span class="pre">M-{</span></code>)</p>
<blockquote>
<div><p>Se desplaza al inicio del archivo anterior, en un parche de varios archivos (<code class="docutils literal notranslate"><span class="pre">diff-file-prev</span></code>). Con el argumento prefijo <em>n</em>, retrocede al inicio del <em>n</em>ésimo archivo anterior.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">k</kbd> (<code class="docutils literal notranslate"><span class="pre">M-k</span></code>)</p>
<blockquote>
<div><p>Mata al trozo (hunk) en el punto (<code class="docutils literal notranslate"><span class="pre">diff-hunk-kill</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">K</kbd> (<code class="docutils literal notranslate"><span class="pre">M-K</span></code>)</p>
<blockquote>
<div><p>En un parche de varios archivos, mata la parte del archivo actual. (<code class="docutils literal notranslate"><span class="pre">diff-file-kill</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">a</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-a</span></code>)</p>
<blockquote>
<div><p>Aplica este fragmento (hunk) a su archivo de destino (<code class="docutils literal notranslate"><span class="pre">diff-apply-hunk</span></code>). Con un argumento prefijo <code class="docutils literal notranslate"><span class="pre">C-u</span></code>, revierte este trozo, es decir, aplica la inversa del trozo, que cambia
la versión «nueva» por la versión «antigua». Si <code class="docutils literal notranslate"><span class="pre">diff-jump-to-old-file</span></code> no es nulo, aplica el fragmento a la versión «antigua» del archivo.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">b</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-b</span></code>)</p>
<blockquote>
<div><p>Resalta los cambios del trozo (hunk) en el punto con una granularidad más fina (<code class="docutils literal notranslate"><span class="pre">diff-refine-hunk</span></code>). Esto le permite ver exactamente qué partes de cada línea cambiada fueron
realmente cambiadas.</p>
<p>Por defecto, el modo Diff refina los «hunks» tal y como Emacs los muestra, así que puede que encuentre útil este comando si personaliza <code class="docutils literal notranslate"><span class="pre">diff-refine</span></code> a un valor no predeterminado.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-c</span></code>)</p>
<blockquote>
<div><p>Va al archivo fuente y a la línea correspondiente a este bloque (hunk) (<code class="docutils literal notranslate"><span class="pre">diff-goto-source</span></code>). Por defecto, salta a la versión «nueva» del archivo, la que aparece primero en la
cabecera del archivo. Con un argumento prefijo, salta a la versión «antigua» en su lugar. Si <code class="docutils literal notranslate"><span class="pre">diff-jump-to-old-file</span></code> no es nulo, este comando salta por defecto al archivo
«antiguo», y el significado del argumento prefijo se invierte. Si el argumento prefijo es un número mayor que 8 (por ejemplo, si escribe <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd>
<kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-u</span> <span class="pre">C-c</span> <span class="pre">C-c</span></code>)), este comando también establece <code class="docutils literal notranslate"><span class="pre">diff-jump-to-old-file</span></code> para la siguiente invocación. Si el archivo fuente está bajo control de versiones (véase <strong>Control de Versiones</strong>), esto salta al archivo de trabajo por defecto. Con un argumento prefijo, salta a la revisión «antigua» del archivo (vea <strong>Examinar y Comparar Revisiones Antiguas</strong>), cuando el punto está en la línea antigua, o de otro modo salta a la revisión «nueva».</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl:</kbd>-<kbd class="kbd docutils literal notranslate">Ctrl</kbd>-:kbd:`` (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-e</span></code>)</p>
<blockquote>
<div><p>Inicia una sesión Ediff con el parche (<code class="docutils literal notranslate"><span class="pre">diff-ediff-patch</span></code>). Consulte <strong>Ediff</strong> en El manual de Ediff.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">n</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-n</span></code>)</p>
<blockquote>
<div><p>Restringe la vista al bloque actual (<code class="docutils literal notranslate"><span class="pre">diff-restrict-view</span></code>). Véase <strong>Estrechamiento</strong>. Con un argumento de prefijo, restringe la vista al archivo actual de un parche de varios
archivos. Para volver a ampliar, usar <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">n</span> <span class="pre">w</span></code> ( widen, ampliar).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-r</span></code>)</p>
<blockquote>
<div><p>Invierte la dirección de comparación para todo el búfer (<code class="docutils literal notranslate"><span class="pre">diff-reverse-direction</span></code>). Con un argumento prefijo, invierte la dirección sólo dentro de la región actual (véase <strong>La
Marca y la Región</strong>). Invertir la dirección significa cambiar los bloques (hunks) y las cabeceras de inicio de archivo para producir un parche que cambiaría la versión «nueva» por la
«antigua».</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-s</span></code>)</p>
<blockquote>
<div><p>Divide el bloque (hunk) en el punto (<code class="docutils literal notranslate"><span class="pre">diff-split-hunk</span></code>) en dos bloques separados. Esto inserta una cabecera de bloque y modifica la cabecera del bloque actual. Este comando es útil
para editar parches manualmente, y sólo funciona con el <em>formato diff unificado</em> producido por las opciones <code class="docutils literal notranslate"><span class="pre">-u</span></code> o <code class="docutils literal notranslate"><span class="pre">--unified</span></code> del programa diff. Si necesita dividir un bloque en
el <em>formato de contexto diff</em> producido por las opciones <code class="docutils literal notranslate"><span class="pre">-c</span></code> o <code class="docutils literal notranslate"><span class="pre">--context</span></code> de diff, primero convierta el búfer al formato diff unificado con <code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-u</span></code>.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-d</span></code>)</p>
<blockquote>
<div><p>Convierte todo el búfer al <em>formato diff</em> de contexto (<code class="docutils literal notranslate"><span class="pre">diff-unified-&gt;context</span></code>). Con un argumento prefijo, convierte sólo los trozos (hunks) dentro de la región.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-u</span></code>)</p>
<blockquote>
<div><p>Convierte todo el búfer a <em>formato diff unificado</em> (<code class="docutils literal notranslate"><span class="pre">diff-context-&gt;unified</span></code>). Con un argumento de prefijo, convierte el formato unificado al formato de contexto. Cuando la marca
está activa, solo convierte los fragmentos dentro de la región.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrt</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-l</span></code>)</p>
<blockquote>
<div><p>Vuelve a generar el segmento (hunk) actual (<code class="docutils literal notranslate"><span class="pre">diff-refresh-hunk</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-w</span></code>)</p>
<blockquote>
<div><p>Vuelve a generar el bloque (hunk) actual, sin tener en cuenta los cambios en los espacios en blanco (<code class="docutils literal notranslate"><span class="pre">diff-ignore-whitespace-hunk</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">4</kbd> <kbd class="kbd docutils literal notranslate">A</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span> <span class="pre">A</span></code>)</p>
<blockquote>
<div><p>Genera una entrada ChangeLog, como hace <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span> <span class="pre">a</span></code> (ver <strong>Registros de Cambios</strong>), para cada uno de los bloques (<code class="docutils literal notranslate"><span class="pre">diff-add-change-log-entries-other-window</span></code>). Esto crea un
esqueleto del registro de cambios que puede rellenar más tarde con las descripciones reales de los cambios. El propio <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span> <span class="pre">a</span></code> en modo Diff opera en nombre del archivo del bloque
actual, pero obtiene el nombre de la función del propio parche. Esto es útil para hacer entradas de registro para las funciones que son eliminadas por el parche.</p>
</div></blockquote>
<p>Los parches a veces incluyen espacios en blanco al final de las líneas modificadas, como un cambio involuntario y no deseado. Hay dos formas de solucionar este problema. En primer lugar, si activa el modo de espacios en blanco en un búfer de Diff (vea <strong>Espacios en Blanco Inútiles</strong>), automáticamente resaltará los espacios en blanco al final de las líneas modificadas. En segundo lugar, puede usar el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">diff-delete-trailing-whitespace</span></code>, que busca los espacios en blanco en las líneas modificadas por el parche, y los elimina tanto en el parche como en los archivos fuente parcheados. Este comando no guarda las modificaciones que realiza, por lo que puede decidir si desea guardar los cambios (la lista de archivos modificados se muestra en el área de eco). Con un argumento prefijo, intenta modificar los archivos fuente originales («antiguos») en lugar de los archivos fuente parcheados («nuevos»).</p>
<p>Si <code class="docutils literal notranslate"><span class="pre">diff-font-lock-syntax</span></code> es distinto de <code class="docutils literal notranslate"><span class="pre">nil</span></code>, los fragmentos del código fuente en los «hunks» se resaltan según el modo principal apropiado.</p>
</section>
<section id="copiar-nombrar-y-renombrar-archivos">
<h2>19.11 Copiar, Nombrar y Renombrar Archivos<a class="headerlink" href="#copiar-nombrar-y-renombrar-archivos" title="Link to this heading"></a></h2>
<p>Emacs tiene varios comandos para copiar, nombrar y renombrar archivos. Todos ellos leen dos nombres de archivo, <em>antiguo</em> (<em>anterior</em> o <em>destino</em>) y <em>nuevo</em>, usando el minibúfer, y luego copian o ajustan el nombre de un archivo en consecuencia; no aceptan nombres de archivo comodín.</p>
<p>En todos estos comandos, si el argumento <em>nuevo</em> es sólo un nombre de directorio (véase <strong>Nombres de Directorio</strong> en el Manual de Referencia de Emacs Lisp), el verdadero nombre nuevo está en ese directorio, con el mismo componente no-directorio que <em>anterior</em>. Por ejemplo, el comando <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">rename-file</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>~/foo</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>~/tmp/foo</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">rename-file</span> <span class="pre">RET</span></code> <em>~/foo</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code> <em>/tmp/foo</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>) renombra <em>~/foo</em> a <em>/tmp/foo</em>. En GNU y otros sistemas POSIX, los nombres de directorio terminan en <code class="docutils literal notranslate"><span class="pre">/</span></code>.</p>
<p>Todos estos comandos piden confirmación cuando <em>nuevo</em> nombre de archivo ya existe.</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">copy-file</span></code> copia el contenido del archivo <em>anterior</em> en el archivo <em>nuevo</em>.</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">copy-directory</span></code> copia directorios, de forma similar al comando de shell <code class="docutils literal notranslate"><span class="pre">cp</span> <span class="pre">-r</span></code>. Si <em>nuevo</em> es un nombre de directorio, crea una copia del directorio <em>anterior</em> y la coloca en <em>nuevo</em>. En caso contrario, copia todo el contenido del directorio <em>anterior</em> en uno <em>nuevo</em>. Si <code class="docutils literal notranslate"><span class="pre">copy-directory-create-symlink</span></code> es distinto de <code class="docutils literal notranslate"><span class="pre">nil</span></code> y <em>antiguo</em> es un enlace simbólico, este comando copiará el enlace simbólico. Si es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, este comando seguirá el enlace y copiará el contenido en su lugar. (Esta es la opción por defecto).</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">rename-file</span></code> renombra al archivo <em>antiguo</em> como <em>nuevo</em>. Si nombre de archivo <em>nuevo</em> ya existe, debe confirmar con <code class="docutils literal notranslate"><span class="pre">yes</span></code> (si) o no se llevará a cabo el renombrado; esto se debe a que el renombramiento hace que se pierda el significado <em>anterior</em> del nombre <em>nuevo</em>. Si <em>antiguo</em> y <em>nuevo</em> están en sistemas de archivos diferentes, el archivo <em>antiguo</em> se copia y se borra.</p>
<p>Si un archivo está bajo control de versiones (véase <strong>Control de Versiones</strong>), deberá renombrarlo usando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">vc-rename-file</span></code> en lugar de <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">rename-file</span></code>. Consulte <strong>Borrar y Renombrar Archivos Controlados por Versión</strong>.</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">add-name-to-file</span></code> añade un nombre adicional a un archivo existente sin eliminar nombre <em>anterior</em>. El archivo de nombre <em>nuevo</em> se crea como un enlace duro al archivo existente. El fichero de nombre <em>nuevo</em> debe pertenecer al mismo sistema de ficheros que el archivo a renombrar. En MS-Windows, este comando sólo funciona si el archivo reside en un sistema de archivos NTFS. En MS-DOS, y algunos tipos de sistemas remotos, funciona copiando el archivo.</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">make-symbolic-link</span></code> crea un enlace simbólico llamado <em>nuevo</em>, que apunta al archivo <em>anterior</em>. El efecto es que los futuros intentos de abrir el archivo <em>nuevo</em> se referirán al archivo que se llame <em>destino</em> en el momento de la apertura, o se producirá un error si el nombre <em>destino</em> no existe en ese momento. Este comando no expande el argumento <em>destino</em>, por lo que permite especificar un nombre relativo como <em>destino</em> del enlace. Sin embargo, este comando expande el <code class="docutils literal notranslate"><span class="pre">~</span></code> inicial en <em>destino</em> para que pueda especificar fácilmente directorios de inicio, y elimina el <code class="docutils literal notranslate"><span class="pre">/:</span></code> inicial para que pueda especificar nombres relativos que comiencen con <code class="docutils literal notranslate"><span class="pre">~</span></code> o <code class="docutils literal notranslate"><span class="pre">/:</span></code> literales. Véase <strong>Nombres de Archivos Entrecomillados</strong>. En MS-Windows, este comando sólo funciona en MS Windows Vista y versiones posteriores. Cuando <em>nuevo</em> es remoto, funciona dependiendo del tipo de sistema.</p>
</section>
<section id="operaciones-varias-con-archivos">
<h2>19.12 Operaciones Varias con Archivos<a class="headerlink" href="#operaciones-varias-con-archivos" title="Link to this heading"></a></h2>
<p>Emacs tiene comandos para realizar muchas otras operaciones con archivos. Todos operan sobre un fichero; no aceptan nombres de archivo comodín.</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">delete-file</span></code> solicita un archivo y lo borra. Si está borrando muchos archivos en un directorio, puede ser más conveniente usar Dired en lugar de delete-file. Consulte Borrado de archivos con Dired.</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">move-file-to-trash</span></code> mueve un archivo a la <em>Papelera</em> del sistema (o <em>Papelera de Reciclaje</em>). Se trata de una función disponible en la mayoría de los sistemas operativos; los archivos que se mueven a la Papelera pueden recuperarse más tarde si cambia de opinión. (La forma de restaurar los archivos de la papelera depende del sistema).</p>
<p>Por defecto, los comandos de borrado de Emacs <em>no</em> utilizan la Papelera. Para usar la Papelera (cuando esté disponible) para los comandos comunes de borrado, cambie la variable <code class="docutils literal notranslate"><span class="pre">delete-by-moving-to-trash</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code>. Esto afecta a los comandos <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">delete-file</span></code> y <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">delete-directory</span></code> (ver <strong>Directorios de Archivos</strong>), así como a los comandos de borrado en Dired (ver <strong>Borrado de Archivos con Dired</strong>). Suministrar un argumento prefijo a <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">delete-file</span></code> o <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">delete-directory</span></code> hace que se borren directamente, en lugar de usar la Papelera, independientemente de <code class="docutils literal notranslate"><span class="pre">delete-by-moving-to-trash</span></code>.</p>
<p>Si tiene configurado <code class="docutils literal notranslate"><span class="pre">delete-by-moving-to-trash</span></code>, y quiere borrar archivos manualmente en Emacs desde el directorio Trash, usar comandos como <code class="docutils literal notranslate"><span class="pre">D</span></code> (<code class="docutils literal notranslate"><span class="pre">dired-do-delete</span></code>) no funciona
bien en este directorio (sólo le dará un nuevo nombre al archivo, pero no borrará nada). Si desea poder hacer esto, debe crear un archivo <code class="docutils literal notranslate"><span class="pre">.dir-locals.el</span></code> que contenga algo como lo siguiente en el directorio Papelera:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">((</span><span class="n">dired</span><span class="o">-</span><span class="n">mode</span> <span class="o">.</span> <span class="p">((</span><span class="n">delete</span><span class="o">-</span><span class="n">by</span><span class="o">-</span><span class="n">moving</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">trash</span> <span class="o">.</span> <span class="n">nil</span><span class="p">))))</span>
</pre></div>
</div>
<p>Tenga en cuenta, sin embargo, que si usa el comando del sistema «vaciar papelera», es probable que también borre este archivo <code class="docutils literal notranslate"><span class="pre">.dir-locals.el</span></code>, por lo que esto sólo debería hacerse si borra archivos del directorio Papelera manualmente.</p>
<p>Si un archivo está bajo control de versiones (vea <strong>Control de Versiones</strong>), debería borrarlo usando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">vc-delete-file</span></code> en lugar de <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">delete-file</span></code>. Consulte <strong>Borrar y Renombrar Archivos Controlados por Sistema de Control de Versiones</strong>.</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">insert-file</span></code> (también <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">i</span></code>) inserta una copia del contenido del archivo especificado en el búfer actual en el punto, dejando el punto sin cambios antes del contenido. La posición después del contenido insertado se añade al anillo de marcas, sin activar la marca (véase <strong>El Anillo de Marcas</strong>).</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">insert-file-literally</span></code> es como <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">insert-file</span></code>, excepto que el archivo se inserta literalmente: se trata como una secuencia de caracteres ASCII sin codificación especial ni conversión, de forma similar al comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">find-file-literally</span></code> (ver <strong>Visitar Archivos</strong>).</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">write-región</span></code> es el comando inverso de <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">insert-file</span></code>; copia el contenido de la región en el archivo especificado. <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">append-to-file</span></code> añade el texto de la región al final del archivo especificado. Véase <strong>Acumular Texto</strong>. La variable <code class="docutils literal notranslate"><span class="pre">write-region-inhibit-fsync</span></code> se aplica a estos comandos, así como al guardado de archivos; véase <strong>Personalización del Guardado de Archivos</strong>.</p>
<p><code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">set-file-modes</span></code> lee un nombre de archivo seguido de un <em>modo de archivo</em> y aplica ese modo de archivo al archivo especificado. Los modos de archivo, también llamados <em>permisos de archivo</em>, determinan si un archivo puede leerse, escribirse o ejecutarse, y quién puede hacerlo. Este comando lee los modos de archivo usando el mismo formato simbólico u octal aceptado por el comando chmod; por ejemplo, <code class="docutils literal notranslate"><span class="pre">u+x</span></code> significa añadir permiso de ejecución para el Usuario propietario del archivo. No tiene efecto en sistemas operativos que no soportan modos de archivo. <code class="docutils literal notranslate"><span class="pre">chmod</span></code> es un alias de conveniencia para esta función.</p>
</section>
<section id="acceso-a-archivos-comprimidos">
<h2>19.13. Acceso a Archivos Comprimidos<a class="headerlink" href="#acceso-a-archivos-comprimidos" title="Link to this heading"></a></h2>
<p>Emacs descomprime automáticamente los archivos comprimidos cuando los visita, y los recomprime automáticamente si los modifica y guarda. Emacs reconoce los archivos comprimidos por sus nombres. Los nombres de archivo que terminan en <code class="docutils literal notranslate"><span class="pre">.gz</span></code> indican un archivo comprimido con <code class="docutils literal notranslate"><span class="pre">gzip</span></code>. Otras terminaciones indican otros programas de compresión.</p>
<p>La descompresión y compresión automáticas se aplican a todas las operaciones en las que Emacs usa el contenido de un archivo. Esto incluye visitarlo, guardarlo, insertar su contenido en un búfer, cargarlo y compilarlo en bytes.</p>
<p>Para desactivar esta función, escriba el comando <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">auto-compression-mode</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">auto-compression-mode</span></code>). Puede desactivarla permanentemente personalizando la variable <code class="docutils literal notranslate"><span class="pre">auto-compression-mode</span></code>.</p>
</section>
<section id="archivos-de-archivos">
<h2>19.14 Archivos de Archivos<a class="headerlink" href="#archivos-de-archivos" title="Link to this heading"></a></h2>
<p>Un fichero cuyo nombre termina en <code class="docutils literal notranslate"><span class="pre">.tar</span></code> es normalmente un <em>archivo</em> hecho por el programa <code class="docutils literal notranslate"><span class="pre">tar</span></code>. Emacs visualiza estos archivos en un modo especial llamado modo Tar que proporciona una lista de contenidos similar a Dired (ver <strong>Dired, el Editor de Directorios</strong>). Puede moverse por la lista como lo haría en Dired, y visitar los subarchivos contenidos en el archivo. Sin embargo, no todos los comandos de Dired están disponibles en modo Tar.</p>
<p>Si el modo de compresión automática está activado (ver <strong>Acceso a Archivos Comprimidos</strong>), entonces el modo Tar se usa también para archivos comprimidos -archivos con extensiones <code class="docutils literal notranslate"><span class="pre">.tgz</span></code>, <code class="docutils literal notranslate"><span class="pre">.tar.Z</span></code> y <code class="docutils literal notranslate"><span class="pre">.tar.gz</span></code>.</p>
<p>Las teclas <kbd class="kbd docutils literal notranslate">e</kbd> (<code class="docutils literal notranslate"><span class="pre">e</span></code>), <kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">f</span></code>) y <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>) extraen un archivo componente a su propio búfer. Puede editarlo allí y, si guarda el búfer, la versión editada sustituirá a la del búfer Tar. Hacer clic con el ratón sobre el nombre del archivo en el búfer Tar hace lo mismo. v extrae un archivo a un búfer en modo Visualizar (ver <strong>Modo Visualizar</strong>). o extrae el archivo y lo muestra en otra ventana, de forma que pueda editar el archivo y operar en el archivo simultáneamente.</p>
<p>La tecla <kbd class="kbd docutils literal notranslate">I</kbd> (<code class="docutils literal notranslate"><span class="pre">I</span></code>) añade un nuevo archivo (normal) al archivo. El archivo está inicialmente vacío, pero puede editarse fácilmente usando los comandos anteriores. El comando inserta el nuevo archivo antes que el actual, de modo que usarlo en la primera línea del búfer Tar hace que el nuevo archivo sea el primero del archivo, y usarlo al final del búfer hace que sea el último.</p>
<p><kbd class="kbd docutils literal notranslate">d</kbd> (<code class="docutils literal notranslate"><span class="pre">d</span></code>) marca un archivo para que se borre cuando más tarde use <kbd class="kbd docutils literal notranslate">x</kbd> (<code class="docutils literal notranslate"><span class="pre">x</span></code>), y <kbd class="kbd docutils literal notranslate">u</kbd> (<code class="docutils literal notranslate"><span class="pre">u</span></code>) desmarca un archivo, como en Dired. <kbd class="kbd docutils literal notranslate">C</kbd> (<code class="docutils literal notranslate"><span class="pre">C</span></code>) copia un archivo del archivo al disco y <kbd class="kbd docutils literal notranslate">R</kbd> (<code class="docutils literal notranslate"><span class="pre">R</span></code>) renombra un archivo dentro del archivo. <kbd class="kbd docutils literal notranslate">g</kbd> (<code class="docutils literal notranslate"><span class="pre">g</span></code>) revierte el búfer del archivo al disco. Las teclas <kbd class="kbd docutils literal notranslate">M</kbd> (<code class="docutils literal notranslate"><span class="pre">M</span></code>), <kbd class="kbd docutils literal notranslate">G</kbd> (<code class="docutils literal notranslate"><span class="pre">G</span></code>) y <kbd class="kbd docutils literal notranslate">O</kbd> (<code class="docutils literal notranslate"><span class="pre">O</span></code>) cambian los bits de permiso, el grupo y el propietario del archivo, respectivamente.</p>
<p>Al guardar el búfer Tar se escribe una nueva versión del archivo en el disco con los cambios realizados en los componentes.</p>
<p>No necesita el programa <code class="docutils literal notranslate"><span class="pre">tar</span></code> para usar el modo Tar: Emacs lee los archivos directamente. Sin embargo, para acceder a archivos comprimidos se necesita el programa de descompresión adecuado.</p>
<p>Se usa un modo de archivo separado pero similar para los archivos <code class="docutils literal notranslate"><span class="pre">arc</span></code>, <code class="docutils literal notranslate"><span class="pre">jar</span></code>, <code class="docutils literal notranslate"><span class="pre">lzh</span></code>, <code class="docutils literal notranslate"><span class="pre">zip</span></code>, <code class="docutils literal notranslate"><span class="pre">rar</span></code>, <code class="docutils literal notranslate"><span class="pre">7z</span></code> y <code class="docutils literal notranslate"><span class="pre">zoo</span></code>, así como para los archivos exe que son ejecutables autoextraíbles.</p>
<p>Las combinaciones de teclas del modo Archivo son similares a las del modo Tar, con la adición de la tecla <kbd class="kbd docutils literal notranslate">m</kbd> (<code class="docutils literal notranslate"><span class="pre">m</span></code>), que marca un archivo para operaciones posteriores, y <code class="docutils literal notranslate"><span class="pre">M-DEL</span></code>, que desmarca todos los archivos marcados. Además, la tecla a activa la visualización de información detallada del archivo, para aquellos tipos de archivo en los que no cabe en una sola línea. Operaciones como renombrar un subarchivo, o cambiar su modo o propietario, sólo están soportadas para algunos de los formatos de archivo.</p>
<p>A diferencia del modo Tar, el modo Archivo ejecuta los programas de archivado para descomprimir y volver a empaquetar los archivos. Sin embargo, no necesita estos programas para ver la tabla de contenidos del archivo, sólo para extraer o manipular los subarchivos del archivo. Los detalles de los nombres de los programas y sus opciones se pueden configurar en el grupo de personalización <code class="docutils literal notranslate"><span class="pre">Archive</span></code> (ver <strong>Grupos de Personalización</strong>).</p>
</section>
<section id="archivos-remotos">
<h2>19.15 Archivos Remotos<a class="headerlink" href="#archivos-remotos" title="Link to this heading"></a></h2>
<p>Puede hacer referencia a archivos de otras máquinas usando una sintaxis especial de nombres de archivo:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">method</span><span class="p">:</span><span class="n">host</span><span class="p">:</span><span class="n">nombrearchivo</span>
<span class="o">/</span><span class="n">method</span><span class="p">:</span><span class="n">usuario</span><span class="nd">@host</span><span class="p">:</span><span class="n">nombrearchivo</span>
<span class="o">/</span><span class="n">method</span><span class="p">:</span><span class="n">usuario</span><span class="nd">@host</span><span class="c1">#port:nombrearchivo</span>
</pre></div>
</div>
<p>Para llevar a cabo esta petición, Emacs usa un programa de inicio de sesión remoto como <code class="docutils literal notranslate"><span class="pre">ssh</span></code>. Siempre debe especificar en el nombre del archivo qué método usar-por ejemplo, <code class="docutils literal notranslate"><span class="pre">/ssh:usuario&#64;host:nombredearchivo</span></code> usa <code class="docutils literal notranslate"><span class="pre">ssh</span></code>. Cuando se especifica el pseudo-método <code class="docutils literal notranslate"><span class="pre">-</span></code> en el nombre del archivo, Emacs elige el método de la siguiente manera:</p>
<blockquote>
<div><ol class="arabic simple">
<li><p>Si el nombre de host empieza por <code class="docutils literal notranslate"><span class="pre">ftp.</span></code> (con punto), Emacs usa FTP.</p></li>
<li><p>Si el nombre de Usuario es <code class="docutils literal notranslate"><span class="pre">ftp</span></code> o <code class="docutils literal notranslate"><span class="pre">anonymous</span></code>, Emacs usa FTP.</p></li>
<li><p>Si la variable <code class="docutils literal notranslate"><span class="pre">tramp-default-method</span></code> es <code class="docutils literal notranslate"><span class="pre">ftp</span></code>, Emacs usa FTP.</p></li>
<li><p>Si <code class="docutils literal notranslate"><span class="pre">ssh-agent</span></code> se está ejecutando, Emacs usa <code class="docutils literal notranslate"><span class="pre">scp</span></code>.</p></li>
<li><p>Si no, Emacs usa <code class="docutils literal notranslate"><span class="pre">ssh</span></code>.</p></li>
</ol>
</div></blockquote>
<p>Puede desactivar completamente la función de nombre de archivo remoto estableciendo la variable <code class="docutils literal notranslate"><span class="pre">tramp-mode</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>. Puede desactivar la función en casos individuales entrecomillando el nombre de archivo con <code class="docutils literal notranslate"><span class="pre">/:</span></code> (consulte <strong>Nombres de Archivos Entrecomillados</strong>).</p>
<p>El acceso remoto a archivos a través de FTP se gestiona mediante el paquete Ange-FTP, que se documenta a continuación. El acceso remoto a archivos a través de otros métodos es gestionado por el paquete Tramp, que tiene su propio manual. Ver <strong>El Manual de Tramp</strong>.</p>
<p>Cuando se usa el paquete Ange-FTP, Emacs entra a través de FTP usando el nombre <em>Usuario</em>, si se especifica en el nombre del archivo remoto. Si no especifica Usuario, Emacs inicia la sesión usando su nombre de Usuario en el sistema local; pero si establece la variable <code class="docutils literal notranslate"><span class="pre">ange-ftp-default-user</span></code> a una cadena, se usará esa cadena en su lugar. Al iniciar sesión, Emacs también puede pedir una contraseña.</p>
<p>Por razones de rendimiento, Emacs no hace por defecto copias de seguridad de los archivos a los que se accede por FTP. Para hacerlo, cambie la variable <code class="docutils literal notranslate"><span class="pre">ange-ftp-make-backup-files</span></code> a un valor no nulo.</p>
<p>Por defecto, los archivos de autoguardado para archivos remotos se realizan en el directorio de archivos temporales de la máquina local, tal y como especifica la variable <code class="docutils literal notranslate"><span class="pre">auto-save-file-name-transforms</span></code>. Véase <strong>Autoguardar Archivos</strong>.</p>
<p>Para visitar archivos accesibles por FTP anónimo, se usan nombres de Usuario especiales <code class="docutils literal notranslate"><span class="pre">anonymous</span></code> o <code class="docutils literal notranslate"><span class="pre">ftp</span></code>. Las contraseñas para estos nombres de Usuario se tratan de forma especial. La variable <code class="docutils literal notranslate"><span class="pre">ange-ftp-generate-anonymous-password</span></code> controla lo que ocurre: si el valor de esta variable es una cadena, entonces esa cadena se usa como contraseña; si no es nula (por defecto), entonces se usa el valor de <code class="docutils literal notranslate"><span class="pre">user-mail-address</span></code>; si es nula, Emacs le pide una contraseña como siempre (vea <strong>Ingreso de Contraseñas</strong>).</p>
<p>A veces puede que no pueda acceder a los archivos de una máquina remota porque un cortafuegos intermedio bloquea la conexión por razones de seguridad. Si puede conectarse a una máquina pasarela desde la que se pueda acceder a los archivos de destino, y cuyo servidor FTP admita las funciones de pasarela, puede seguir usando nombres de archivo remotos; todo lo que tiene que hacer es especificar el nombre de la máquina pasarela configurando la variable <code class="docutils literal notranslate"><span class="pre">ange-ftp-gateway-host</span></code>, y configurar <code class="docutils literal notranslate"><span class="pre">ange-ftp-smart-gateway</span></code> como <code class="docutils literal notranslate"><span class="pre">t</span></code>. De lo contrario, puede hacer que funcionen los nombres de archivo remotos, pero el procedimiento es complejo. Puede leer las instrucciones escribiendo <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">finder-commentary</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <code class="docutils literal notranslate"><span class="pre">ange-ftp</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">finder-commentary</span> <span class="pre">RET</span> <span class="pre">ange-ftp</span> <span class="pre">RET</span></code>).</p>
</section>
<section id="nombres-de-archivos-entrecomillados">
<h2>19.16 Nombres de Archivos Entrecomillados<a class="headerlink" href="#nombres-de-archivos-entrecomillados" title="Link to this heading"></a></h2>
<p>Puede <em>entrecomillar</em> un nombre de archivo absoluto para evitar que los caracteres especiales y la sintaxis que contenga tengan sus efectos especiales. La forma de hacerlo es añadir <code class="docutils literal notranslate"><span class="pre">/:</span></code> al principio.</p>
<p>Por ejemplo, puede entrecomillar un nombre de archivo local que parezca remoto para evitar que se trate como un nombre de archivo remoto. Así, si tiene un directorio llamado <code class="docutils literal notranslate"><span class="pre">/foo:</span></code> y un archivo llamado <code class="docutils literal notranslate"><span class="pre">bar</span></code> en él, puede referirse a ese archivo en Emacs como <code class="docutils literal notranslate"><span class="pre">/:/foo:/bar</span></code>.</p>
<p>Si sólo quiere citar caracteres especiales en la parte local de un nombre de archivo remoto, puede citar sólo la parte local. <code class="docutils literal notranslate"><span class="pre">/ssh:baz:/:/foo:/bar</span></code> se refiere al archivo <code class="docutils literal notranslate"><span class="pre">bar</span></code> del directorio <code class="docutils literal notranslate"><span class="pre">/foo:</span></code> en el host <code class="docutils literal notranslate"><span class="pre">baz</span></code>.</p>
<p><code class="docutils literal notranslate"><span class="pre">/:</span></code> también puede evitar que <code class="docutils literal notranslate"><span class="pre">~</span></code> sea tratado como un carácter especial para el directorio personal de un Usuario. Por ejemplo, <code class="docutils literal notranslate"><span class="pre">/:/tmp/~hack</span></code> se refiere a un archivo cuyo nombre es <code class="docutils literal notranslate"><span class="pre">~hack</span></code> en el directorio <code class="docutils literal notranslate"><span class="pre">/tmp</span></code>.</p>
<p>Citar con <code class="docutils literal notranslate"><span class="pre">/:</span></code> es también una forma de introducir en el minibúfer un nombre de archivo que contenga <code class="docutils literal notranslate"><span class="pre">$</span></code>. Para que esto funcione, el <code class="docutils literal notranslate"><span class="pre">/:</span></code> debe estar al principio del contenido del minibúfer. (También puede duplicar cada <code class="docutils literal notranslate"><span class="pre">$</span></code>; consulte <strong>Nombres de Archivo con $</strong></p>
<p>También puede entrecomillar caracteres comodín con <code class="docutils literal notranslate"><span class="pre">/:</span></code>, para visitas. Por ejemplo, <code class="docutils literal notranslate"><span class="pre">/:/tmp/foo*bar</span></code> visita el archivo <code class="docutils literal notranslate"><span class="pre">/tmp/foo*bar</span></code>.</p>
<p>Otro método para obtener el mismo resultado es introducir <code class="docutils literal notranslate"><span class="pre">/tmp/foo[*]bar</span></code>, que es una especificación comodín que sólo coincide con <code class="docutils literal notranslate"><span class="pre">/tmp/foo*bar</span></code>. Sin embargo, en muchos casos no es necesario entrecomillar los caracteres comodín porque incluso sin entrecomillar dan el resultado correcto. Por ejemplo, si el único nombre de archivo de /tmp que empieza por <code class="docutils literal notranslate"><span class="pre">foo</span></code> y termina por <code class="docutils literal notranslate"><span class="pre">bar</span></code> es <code class="docutils literal notranslate"><span class="pre">foo*bar</span></code>, al especificar <code class="docutils literal notranslate"><span class="pre">/tmp/foo*bar</span></code> sólo se visitará <code class="docutils literal notranslate"><span class="pre">/tmp/foo*bar</span></code>.</p>
</section>
<section id="cache-de-nombres-de-archivo">
<h2>19.17 Caché de Nombres de Archivo<a class="headerlink" href="#cache-de-nombres-de-archivo" title="Link to this heading"></a></h2>
<p>Puede usar la <em>caché de nombres de archivo</em> para facilitar la localización de un archivo por su nombre, sin tener que recordar exactamente dónde se encuentra. Al escribir un nombre de archivo en el minibúfer, <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">TAB</kbd> (<code class="docutils literal notranslate"><span class="pre">C-TAB</span></code>, <code class="docutils literal notranslate"><span class="pre">file-cache-minibuffer-complete</span></code>) lo completa usando la caché de nombres de archivo. Si repite <code class="docutils literal notranslate"><span class="pre">C-TAB</span></code>, eso hace un ciclo a través de las posibles terminaciones de lo que había tecleado originalmente. (Sin embargo, tenga en cuenta que el carácter <code class="docutils literal notranslate"><span class="pre">C-TAB</span></code> no se puede teclear en la mayoría de los terminales de texto).</p>
<p>La caché de nombres de archivo no se llena automáticamente. En su lugar, Usted carga los nombres de archivo en la caché usando estos comandos:</p>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">file-cache-add-directory</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>directorio</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">file-cache-add-directory</span> <span class="pre">RET</span></code> <em>directorio</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Añade cada nombre de archivo del <em>directorio</em> a la caché de nombres de archivo.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">file-cache-add-directory-using-find</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>directorio</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">file-cache-add-directory-using-find</span> <span class="pre">RET</span></code> <em>directorio</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Añade cada nombre de archivo del <em>directorio</em> y todos sus subdirectorios anidados a la caché de nombres de archivo.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">file-cache-add-directory-using-locate</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>directorio</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">file-cache-add-directory-using-locate</span> <span class="pre">RET</span></code> <em>directorio</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Añade cada nombre de archivo del <em>directorio</em> y todos sus subdirectorios anidados a la caché de nombres de archivo, usando <code class="docutils literal notranslate"><span class="pre">locate</span></code> para encontrarlos a todos.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">file-cache-add-directory</span></code> <em>variable</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd>
| (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">file-cache-add-directory-list</span> <span class="pre">RET</span></code> <em>variable</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Añade cada nombre de archivo de cada <em>directorio</em> enumerado en variable a la caché de nombres de archivo. <em>variable</em> ser una variable Lisp cuyo valor sea una lista de directorios,
como <code class="docutils literal notranslate"><span class="pre">load-path</span></code>.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">file-cache-clear-cache</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">file-cache-clear-cache</span> <span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Borra la caché; es decir, elimina todos los nombres de archivo de la misma.</p>
</div></blockquote>
<p>La caché de nombres de archivo no es persistente: se guarda y mantiene sólo mientras dura la sesión de Emacs. Puede ver el contenido de la caché con el comando <code class="docutils literal notranslate"><span class="pre">file-cache-display</span></code>.</p>
</section>
<section id="funciones-utiles-para-encontrar-archivos">
<h2>19.18 Funciones Útiles para Encontrar Archivos<a class="headerlink" href="#funciones-utiles-para-encontrar-archivos" title="Link to this heading"></a></h2>
<p>En esta sección, presentamos algunas facilidades convenientes para encontrar archivos abiertos recientemente, leyendo nombres de archivos desde un búfer.</p>
<p>Si habilita el modo recentf, con <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">recentf-mode</span></code>, Emacs mantiene una lista de archivos abiertos recientemente. Para abrir un archivo de esta lista, use el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">recentf-open</span></code>. Cuando este modo está activado, el menú <code class="docutils literal notranslate"><span class="pre">File</span></code> (Archivo) incluirá un submenú que puede usar para visitar uno de estos archivos. <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">recentf-save-list</span></code> guarda la lista <code class="docutils literal notranslate"><span class="pre">recentf</span></code> actual en un archivo, y <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">recentf-edit-list</span></code> la edita.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">ffap</span></code> generaliza <code class="docutils literal notranslate"><span class="pre">find-file</span></code> con heurísticas por defecto más potentes (véase <strong>Encontrar Archivos y URLs en el Punto</strong>), a menudo basadas en el texto en el punto. El modo de finalización parcial ofrece otras características que amplían <code class="docutils literal notranslate"><span class="pre">find-file</span></code>, que pueden usarse con <code class="docutils literal notranslate"><span class="pre">ffap</span></code>. Consulte <strong>Opciones de Completado</strong>.</p>
</section>
<section id="visualizacion-de-archivos-de-imagen">
<h2>19.19 Visualización de Archivos de Imagen<a class="headerlink" href="#visualizacion-de-archivos-de-imagen" title="Link to this heading"></a></h2>
<p>Al visitar archivos de imagen se selecciona automáticamente el modo Imagen (Image mode). En este modo principal, puede teclear <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-c</span></code>, <code class="docutils literal notranslate"><span class="pre">image-toggle-display</span></code>) para alternar entre mostrar el archivo como una imagen en el búfer de Emacs, y mostrar su representación de texto en bruto (o byte en bruto). Además, puede escribir (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-x</span></code>, <code class="docutils literal notranslate"><span class="pre">image-toggle-hex-display</span></code>) para alternar entre mostrar el archivo como una imagen en el búfer de Emacs y mostrarlo en representación hexadecimal. Mostrar el archivo como una imagen sólo funciona si Emacs está compilado con soporte para mostrar este tipo de imágenes.</p>
<p>Si la imagen mostrada es más ancha o más alta que la ventana en la que se muestra, las teclas habituales de movimiento de puntos (<kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">C-f</span></code>), <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">p</kbd>, <code class="docutils literal notranslate"><span class="pre">C-p</span></code> etc.) hacen que se muestren diferentes partes de la imagen. Sin embargo, por defecto las imágenes se redimensionan automáticamente para ajustarse a la ventana, por lo que esto sólo es necesario si se personaliza el comportamiento por defecto usando las opciones <code class="docutils literal notranslate"><span class="pre">image-auto-resize</span></code> e <code class="docutils literal notranslate"><span class="pre">image-auto-resize-on-window-resize</span></code>.</p>
<p>Para redimensionar la imagen manualmente puede usar el comando <code class="docutils literal notranslate"><span class="pre">image-transform-fit-to-window</span></code> enlazado a <kbd class="kbd docutils literal notranslate">s</kbd><kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">s</span> <span class="pre">w</span></code>) que ajusta la imagen tanto a la altura como a la anchura de la ventana. Para escalar la imagen a un porcentaje de su tamaño original, use el comando <code class="docutils literal notranslate"><span class="pre">image-transform-set-percent</span></code> enlazado a <kbd class="kbd docutils literal notranslate">s</kbd><kbd class="kbd docutils literal notranslate">p</kbd> (<code class="docutils literal notranslate"><span class="pre">s</span> <span class="pre">p</span></code>). Para escalar la imagen especificando un factor de escala, use el comando <code class="docutils literal notranslate"><span class="pre">image-transform-set-scale</span></code> enlazado a <kbd class="kbd docutils literal notranslate">s</kbd><kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">s</span> <span class="pre">s</span></code>). Para restablecer todas las transformaciones al estado inicial, use <code class="docutils literal notranslate"><span class="pre">image-transform-reset-to-initial</span></code> enlazado a <kbd class="kbd docutils literal notranslate">s</kbd><kbd class="kbd docutils literal notranslate">0</kbd> (<code class="docutils literal notranslate"><span class="pre">s</span> <span class="pre">0</span></code>), o <code class="docutils literal notranslate"><span class="pre">image-transform-reset-to-original</span></code> enlazado a <kbd class="kbd docutils literal notranslate">s</kbd><kbd class="kbd docutils literal notranslate">o</kbd> (<code class="docutils literal notranslate"><span class="pre">s</span> <span class="pre">o</span></code>).</p>
<p>Puede pulsar <kbd class="kbd docutils literal notranslate">n</kbd> (<code class="docutils literal notranslate"><span class="pre">n</span></code>, <code class="docutils literal notranslate"><span class="pre">image-next-file</span></code>) y <kbd class="kbd docutils literal notranslate">p</kbd> (<code class="docutils literal notranslate"><span class="pre">p</span></code>, <code class="docutils literal notranslate"><span class="pre">image-previous-file</span></code>) para visitar el siguiente archivo de imagen y el archivo de imagen anterior en el mismo directorio, respectivamente. Estos comandos consultarán el búfer del directorio «padre» para determinar cuál es el archivo de imagen siguiente/anterior. Estos comandos también funcionan al abrir un archivo desde archivos de archivo (como archivos <code class="docutils literal notranslate"><span class="pre">zip</span></code> o <code class="docutils literal notranslate"><span class="pre">tar</span></code>), y consultarán en su lugar el búfer de modo de archivo. Si no se puede encontrar ni un archivo ni un búfer «padre», se abrirá un búfer «padre».</p>
<p>Al examinar imágenes, a veces es conveniente poder marcar los archivos para procesarlos posteriormente (por ejemplo, si desea seleccionar un grupo de imágenes para copiarlas en otro lugar). El comando <kbd class="kbd docutils literal notranslate">m</kbd> (<code class="docutils literal notranslate"><span class="pre">m</span></code>, <code class="docutils literal notranslate"><span class="pre">image-mode-mark-file</span></code>) marcará el archivo actual en cualquier búfer(es) Dired que muestre el directorio del archivo actual. Si no hay ningún búfer abierto, el directorio se abre en uno nuevo. Para desmarcar archivos, use el comando <kbd class="kbd docutils literal notranslate">u</kbd> (<code class="docutils literal notranslate"><span class="pre">u</span></code>, <code class="docutils literal notranslate"><span class="pre">image-mode-mark-file</span></code>). Por último, si sólo desea copiar el nombre del archivo del búfer actual en el anillo de muertes, puede usar el comando <kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">w</span></code>, <code class="docutils literal notranslate"><span class="pre">image-mode-copy-file-name-as-kill</span></code>).</p>
<p>Si la imagen se puede animar, el comando <code class="docutils literal notranslate"><span class="pre">RET</span></code> (<code class="docutils literal notranslate"><span class="pre">image-toggle-animation</span></code>) inicia o detiene la animación. La animación se reproduce una vez, a menos que la opción <code class="docutils literal notranslate"><span class="pre">image-animate-loop</span></code> no sea nula. Con <kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">f</span></code>, <code class="docutils literal notranslate"><span class="pre">image-next-frame</span></code>) y <kbd class="kbd docutils literal notranslate">b</kbd> (<code class="docutils literal notranslate"><span class="pre">image-previous-frame</span></code>) puede recorrer los distintos marcos. Ambos comandos aceptan un prefijo numérico para recorrer varios marcos a la vez. Puede ir a un marco específico con <kbd class="kbd docutils literal notranslate">F</kbd> (<code class="docutils literal notranslate"><span class="pre">F</span></code>, <code class="docutils literal notranslate"><span class="pre">image-goto-frame</span></code>). Los marcos se indexan a partir de 1. Si escribe <kbd class="kbd docutils literal notranslate">a</kbd><kbd class="kbd docutils literal notranslate">+</kbd> (<code class="docutils literal notranslate"><span class="pre">a</span> <span class="pre">+</span></code>, <code class="docutils literal notranslate"><span class="pre">image-increase-speed</span></code>) aumenta la velocidad de la animación, <kbd class="kbd docutils literal notranslate">a</kbd>-<kbd class="kbd docutils literal notranslate">-</kbd> (<code class="docutils literal notranslate"><span class="pre">a</span> <span class="pre">-</span></code>, <code class="docutils literal notranslate"><span class="pre">image-decrease-speed</span></code>) la disminuye y <kbd class="kbd docutils literal notranslate">a</kbd><kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">a</span> <span class="pre">r</span></code>, <code class="docutils literal notranslate"><span class="pre">image-reverse-speed</span></code>) la invierte. El comando <kbd class="kbd docutils literal notranslate">a</kbd><kbd class="kbd docutils literal notranslate">0</kbd> (<code class="docutils literal notranslate"><span class="pre">a</span> <span class="pre">0</span></code>, <code class="docutils literal notranslate"><span class="pre">image-reset-speed</span></code>) restablece la velocidad al valor original.</p>
<p>Además de las combinaciones de teclas anteriores, que son específicas del modo Imagen, las imágenes mostradas en cualquier búfer de Emacs tienen combinaciones de teclas especiales cuando el punto está en la imagen o dentro de ella:</p>
<p><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">+</kbd> (<code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">+</span></code>)</p>
<blockquote>
<div><p>Aumenta el tamaño de la imagen (<code class="docutils literal notranslate"><span class="pre">image-increase-size</span></code>) en un 20%. El argumento numérico prefijo controla el incremento; el valor de <em>n</em> significa multiplicar el tamaño por el factor
<code class="docutils literal notranslate"><span class="pre">1</span> <span class="pre">+</span> <span class="pre">n</span> <span class="pre">/</span> <span class="pre">10</span></code>, por lo que <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">5</kbd><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">+</kbd> (<code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">5</span> <span class="pre">i</span> <span class="pre">+</span></code>) significa aumentar el tamaño en un 50%.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">-</kbd> (<code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">-</span></code>)</p>
<blockquote>
<div><p>Disminuye el tamaño de la imagen (<code class="docutils literal notranslate"><span class="pre">image-increase-size</span></code>) en un 20%. El argumento numérico prefijo controla el decremento; el valor de <em>n</em> significa multiplicar el tamaño por el
factor de <code class="docutils literal notranslate"><span class="pre">1</span> <span class="pre">-</span> <span class="pre">n</span> <span class="pre">/</span> <span class="pre">10</span></code>, por lo que <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">3</kbd><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">-</kbd> (<code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">3</span> <span class="pre">i</span> <span class="pre">-</span></code>) significa disminuir el tamaño en un 30%.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">r</span></code>)</p>
<blockquote>
<div><p>Gira la imagen 90º en el sentido de las agujas del reloj (<code class="docutils literal notranslate"><span class="pre">image-rotate</span></code>). Con el argumento prefijo, rota 90 grados en sentido contrario a las agujas del reloj. Tenga en cuenta
que este comando no está disponible para imágenes cortadas.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">h</kbd> (<code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">h</span></code>)</p>
<blockquote>
<div><p>Gira la imagen horizontalmente (<code class="docutils literal notranslate"><span class="pre">image-flip-horizontally</span></code>). Esto presenta la imagen como si se reflejara en un espejo vertical. Tenga en cuenta que este comando no está disponible
para imágenes cortadas.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">v</kbd> (<code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">v</span></code>)</p>
<blockquote>
<div><p>Gira la imagen verticalmente (<code class="docutils literal notranslate"><span class="pre">image-flip-vertically</span></code>). Esto presenta la imagen como si se reflejara en un espejo horizontal. Tenga en cuenta que este comando no está disponible
para imágenes cortadas.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">o</kbd> (<code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">o</span></code>)</p>
<blockquote>
<div><p>Guardar la imagen en un archivo (<code class="docutils literal notranslate"><span class="pre">image-save</span></code>). Este comando le pide el nombre del archivo para guardar la imagen.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">c</span></code>)</p>
<blockquote>
<div><p>Recorta la imagen (<code class="docutils literal notranslate"><span class="pre">image-crop</span></code>). Este comando sólo está disponible si su sistema tiene instalado un programa externo que pueda usarse para recortar y cortar imágenes; la opción
de Usuario <code class="docutils literal notranslate"><span class="pre">image-crop-crop-command</span></code> determina qué programa usar, y por defecto usa el programa de conversión de ImageMagick. El comando muestra la imagen con un marco rectangular
superpuesto, y le permite usar el ratón para mover y redimensionar el marco. Escriba <kbd class="kbd docutils literal notranslate">m</kbd> (<code class="docutils literal notranslate"><span class="pre">m</span></code>) para que los movimientos del ratón muevan el marco en lugar de
redimensionarlo; escriba <kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">s</span></code>) para mover un marco cuadrado en su lugar. Cuando esté satisfecho con la posición y el tamaño del marco de recorte, escriba <kbd class="kbd docutils literal notranslate">RETURN</kbd>
(<code class="docutils literal notranslate"><span class="pre">RET</span></code>) para recortar la parte que está debajo del marco; o <kbd class="kbd docutils literal notranslate">q</kbd> (<code class="docutils literal notranslate"><span class="pre">q</span></code>) para salir sin recortar. Puede guardar la imagen recortada usando <code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">o</span></code> o <code class="docutils literal notranslate"><span class="pre">M-x</span>
<span class="pre">imagen-guardar</span></code>.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">i</kbd><kbd class="kbd docutils literal notranslate">x</kbd> (<code class="docutils literal notranslate"><span class="pre">i</span> <span class="pre">x</span></code>)</p>
<blockquote>
<div><p>Corta un rectángulo de la imagen (<code class="docutils literal notranslate"><span class="pre">image-cut</span></code>). Funciona igual que <code class="docutils literal notranslate"><span class="pre">image-crop</span></code> (y también requiere un programa externo, definido por la variable <code class="docutils literal notranslate"><span class="pre">image-crop-cut-command</span></code>,
para realizar el corte de la imagen), pero en lugar de recortar la imagen, elimina la parte dentro del marco y rellena esa parte con el color especificado por <code class="docutils literal notranslate"><span class="pre">image-cut-color</span></code>.
Con el argumento prefijo, el comando pregunta por el color a usar.</p>
</div></blockquote>
<p>Los comandos de tamaño y rotación son «repetitivos», lo que significa que puede seguir ajustando la imagen sin usar el prefijo <code class="docutils literal notranslate"><span class="pre">i</span></code>.</p>
<p>Si Emacs fue compilado con soporte para la librería ImageMagick, puede usarla para renderizar una amplia variedad de imágenes. La variable <code class="docutils literal notranslate"><span class="pre">imagemagick-enabled-types</span></code> lista los tipos de imagen que Emacs puede renderizar usando ImageMagick; cada elemento de la lista debe ser un nombre interno de ImageMagick para un tipo de imagen, como un símbolo o una cadena equivalente (por ejemplo, <code class="docutils literal notranslate"><span class="pre">BMP</span></code> para imágenes <code class="docutils literal notranslate"><span class="pre">.bmp</span></code>). Para habilitar ImageMagick para todos los tipos de imagen posibles, cambie <code class="docutils literal notranslate"><span class="pre">imagemagick-enabled-types</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code>. La variable <code class="docutils literal notranslate"><span class="pre">imagemagick-types-inhibit</span></code> lista los tipos de imagen que nunca deberían ser renderizados usando ImageMagick, independientemente del valor de <code class="docutils literal notranslate"><span class="pre">imagemagick-enabled-types</span></code> (la lista por defecto incluye tipos como <code class="docutils literal notranslate"><span class="pre">C</span></code> y <code class="docutils literal notranslate"><span class="pre">HTML</span></code>, que ImageMagick puede renderizar como imagen pero Emacs no). Para desactivar ImageMagick completamente, cambie <code class="docutils literal notranslate"><span class="pre">imagemagick-types-inhibit</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code>.</p>
<p>Si Emacs no tiene soporte nativo para el formato de imagen en cuestión, y la variable <code class="docutils literal notranslate"><span class="pre">image-use-external-converter</span></code> es no-<code class="docutils literal notranslate"><span class="pre">nil</span></code>, Emacs intentará determinar si existen utilidades externas que puedan utilizarse para transformar la imagen en cuestión a PNG antes de mostrarla. GraphicsMagick, ImageMagick y ffmpeg están actualmente soportados para la conversión de imágenes.</p>
<p>Además, puede que desee añadir manejadores especiales para determinados formatos de imagen. Éstos pueden añadirse con la función <code class="docutils literal notranslate"><span class="pre">image-converter-add-handler</span></code>. Por ejemplo, para permitir la visualización de archivos Krita como imágenes simples, Usted podría escribir algo como:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">image</span><span class="o">-</span><span class="n">converter</span><span class="o">-</span><span class="n">add</span><span class="o">-</span><span class="n">handler</span>
<span class="s2">&quot;kra&quot;</span>
<span class="p">(</span><span class="k">lambda</span> <span class="p">(</span><span class="n">file</span> <span class="n">data</span><span class="o">-</span><span class="n">p</span><span class="p">)</span>
<span class="p">(</span><span class="k">if</span> <span class="n">data</span><span class="o">-</span><span class="n">p</span>
<span class="p">(</span><span class="n">error</span> <span class="s2">&quot;Can&#39;t decode non-files&quot;</span><span class="p">)</span>
<span class="p">(</span><span class="n">call</span><span class="o">-</span><span class="n">process</span> <span class="s2">&quot;unzip&quot;</span> <span class="n">nil</span> <span class="n">t</span> <span class="n">nil</span>
<span class="s2">&quot;-qq&quot;</span> <span class="s2">&quot;-c&quot;</span> <span class="s2">&quot;-x&quot;</span> <span class="n">file</span> <span class="s2">&quot;mergedimage.png&quot;</span><span class="p">))))</span>
</pre></div>
</div>
<p>La función toma dos parámetros, donde el primero es un sufijo de nombre de archivo, y el segundo es una función para hacer la «conversión». Esta función toma dos parámetros, donde el primero es el nombre del archivo o una cadena con los datos, y el segundo dice si el primer parámetro son datos o no, y debe dar salida a una imagen en formato <code class="docutils literal notranslate"><span class="pre">image-convert-to-format</span></code> (<code class="docutils literal notranslate"><span class="pre">image-convert-to-format</span></code>) en el búfer actual.</p>
<p>El paquete Image-Dired también puede usarse para ver imágenes como miniaturas. Vea <strong>Visualización de Miniaturas de Imágenes en Dired</strong>.</p>
</section>
<section id="conjunto-de-archivos">
<h2>19.20 Conjunto de Archivos<a class="headerlink" href="#conjunto-de-archivos" title="Link to this heading"></a></h2>
<p>Si edita regularmente un determinado grupo de ficheros, puede definirlos como un <em>conjunto de archivos</em> (fileset). Esto le permite realizar ciertas operaciones, como visitar, <code class="docutils literal notranslate"><span class="pre">query-replace</span></code> (consultar-reemplazar), y comandos shell en todos ellos a la vez. Para usar conjuntos de archivos, primero debe añadir la expresión (<code class="docutils literal notranslate"><span class="pre">filesets-init</span></code>) a su archivo de inicio (vea <strong>El Archivo de Inicialización de Emacs</strong>). Esto añade un submenú <code class="docutils literal notranslate"><span class="pre">Filesets</span></code> al menú <code class="docutils literal notranslate"><span class="pre">File</span></code> de la barra de menú.</p>
<p>La forma más sencilla de definir un conjunt de archivos es añadiéndole archivos de uno en uno. Para añadir un archivo a este conjunto de archivos, visite el archivo y escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">filesets-add-buffer</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>nombre</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">filesets-add-buffer</span> <span class="pre">RET</span></code> <em>nombre</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>). Si no hay ningún nombre de fileset, se crea uno nuevo, que inicialmente sólo contiene el archivo actual. El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">filesets-remove-buffer</span></code> elimina el archivo actual de un conjunto de ficheros.</p>
<p>También puede editar la lista de conjuntos de archivos directamente, con <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">filesets-edit</span></code> (o eligiendo <code class="docutils literal notranslate"><span class="pre">Edit</span> <span class="pre">Filesets</span></code> (Editar <strong>Conjuntos de Archivos</strong>) en el menú <code class="docutils literal notranslate"><span class="pre">Filesets</span></code> (Conjuntos de Archivos)). La edición se realiza en un búfer de personalización (véase <strong>Interfaz de Personalización Fácil</strong>). Normalmente, un conjunto de archivos es una simple lista de archivos, pero también puede definir un conjunto de archivos como una expresión regular que coincida con nombres de archivo. Algunos ejemplos de estos conjuntos de ficheros más complicados se muestran en el búfer Personalizar. Recuerde seleccionar <code class="docutils literal notranslate"><span class="pre">Save</span> <span class="pre">for</span> <span class="pre">future</span> <span class="pre">sessions</span></code> (Guardar para futuras sesiones) si quiere usar los mismos conjuntos de archivos en futuras sesiones de Emacs.</p>
<p>Puede usar el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">filesets-open</span></code> para visitar todos los archivos de un fileset, y <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">filesets-close</span></code> para cerrarlos. Use <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">filesets-run-cmd</span></code> para ejecutar un comando de shell en todos los archivos de un fileset. Estos comandos también están disponibles en el menú <code class="docutils literal notranslate"><span class="pre">Filesets</span></code>, donde cada conjunto de archivos existente está representado por un submenú.</p>
<p><strong>Véase Control de Versiones</strong>, para un concepto diferente de los conjuntos de archivos: grupos de archivos organizados para operaciones de control de versiones. Los conjuntos de archivos de este tipo no tienen nombre, y no permanecen a través de las sesiones de Emacs.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="18_MacrosDeTeclado.html" class="btn btn-neutral float-left" title="18 Macros de Teclado" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="20_UsarVariosBuferes.html" class="btn btn-neutral float-right" title="20 Uso de Varios Búferes" 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>