Compare commits

...

2 Commits

Author SHA1 Message Date
tanomarcelo 3b3900487a magit; sphinx GNU/Emacs 29.1
Confirmación (commit) tanomarcelo-git
2024-02-14 23:24:08 -03:00
tanomarcelo b44e28d05c magit; sphinx GNU/Emacs 29.1
Confirmación (commit) tanomarcelo-git
2024-02-14 11:04:28 -03:00
41 changed files with 4761 additions and 115 deletions

Binary file not shown.

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -79,6 +79,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -86,6 +86,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -90,6 +90,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -85,6 +85,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -82,6 +82,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -97,6 +97,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -83,6 +83,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -107,6 +107,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>
@ -422,7 +428,7 @@ efecto. Ver <strong>Sugerencias sobre Herramientas</strong>.</p>
<p>Para obtener una descripción rápida de un icono, use el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">describe-icon</span></code>.</p>
</section>
<section id="escala-de-texto">
<h2>15.12 Escala de Texto<a class="headerlink" href="#escala-de-texto" title="Link to this heading"></a></h2>
<span id="id1"></span><h2>15.12 Escala de Texto<a class="headerlink" href="#escala-de-texto" title="Link to this heading"></a></h2>
<p>Para aumentar el tamaño de fuente de la cara por defecto en el buffer actual, 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">+</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-+</span></code>) o <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">e</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-=</span></code>). Para disminuirlo, 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">-</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C--</span></code>). Para restablecer el tamaño de fuente predeterminado (global), 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">x</kbd> <kbd class="kbd docutils literal notranslate">0</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-0</span></code>). Todas estas teclas están vinculadas al mismo comando, ajuste de escala de texto, que se basa en la última tecla pulsada para determinar qué acción realizar y ajusta el tamaño de la fuente en consecuencia cambiando la altura de la cara por defecto.</p>
<p>La mayoría de las caras no tienen un ajuste explícito del atributo <code class="docutils literal notranslate"><span class="pre">:height</span></code> por lo que heredan la altura de la cara por defecto. Estas caras también se escalan con los comandos anteriores.</p>
<p>Las caras distintas de la predeterminada que tienen un ajuste explícito del atributo <code class="docutils literal notranslate"><span class="pre">:height</span></code> no se ven afectadas por estos cambios de tamaño de fuente. La cara de la línea de cabecera es una excepción: se escalará incluso si tiene un ajuste explícito del atributo <code class="docutils literal notranslate"><span class="pre">:height</span></code>.</p>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -102,6 +102,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -79,6 +79,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -82,6 +82,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -120,6 +120,12 @@
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>
@ -165,7 +171,7 @@
<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>
<span id="id1"></span><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>
@ -398,7 +404,7 @@ copiar.</p>
<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>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="#id3" id="id2" 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">
@ -416,8 +422,8 @@ copiar.</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>
<aside class="footnote brackets" id="id3" role="doc-footnote">
<span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id2">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>
@ -847,7 +853,7 @@ como <code class="docutils literal notranslate"><span class="pre">load-path</spa
<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">
<span id="id3"></span><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>
<span id="id4"></span><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>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -87,6 +87,12 @@
</li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>
@ -419,7 +425,7 @@ esa función al gancho en el búfer base y luego hacer que la función opere en
<p>El modo Icomplete y el modo Fido muestran por defecto las posibles terminaciones en la misma línea que el prompt. Para mostrar los candidatos a completado verticalmente bajo el prompt, 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">icomplete-vertical-mode</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">icomplete-vertical-mode</span></code>), o personalice la variable <code class="docutils literal notranslate"><span class="pre">icomplete-vertical-mode</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code> (ver <strong>Interfaz de Personalización Fácil</strong>).</p>
</section>
<section id="personalizacion-de-los-menus-del-bufer">
<h3>20.7.3 Personalización de los Menús del Búfer<a class="headerlink" href="#personalizacion-de-los-menus-del-bufer" title="Link to this heading"></a></h3>
<span id="id1"></span><h3>20.7.3 Personalización de los Menús del Búfer<a class="headerlink" href="#personalizacion-de-los-menus-del-bufer" title="Link to this heading"></a></h3>
<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">bs-show</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">bs-show</span></code>)</p>
<blockquote>
<div><p>Crea una lista de búferes similar a la lista de búferes de <code class="docutils literal notranslate"><span class="pre">M-x</span></code> pero personalizable.</p>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -87,6 +87,12 @@
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>
@ -125,7 +131,7 @@
<p>Cada ventana tiene su propia línea de modo, que muestra el nombre del búfer, el estado de modificación y los modos mayor y menor del búfer que se muestra en la ventana. La línea de modo de la ventana seleccionada aparece en un color diferente. Véase <strong>La Línea de Modo</strong>, para más detalles.</p>
</section>
<section id="dividir-ventanas">
<h2>21.2 Dividir Ventanas<a class="headerlink" href="#dividir-ventanas" title="Link to this heading"></a></h2>
<span id="id2"></span><h2>21.2 Dividir Ventanas<a class="headerlink" href="#dividir-ventanas" 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">2</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">2</span></code>)</p>
<blockquote>
<div><p>Divide la ventana seleccionada en dos, una encima de la otra (<code class="docutils literal notranslate"><span class="pre">split-window-below</span></code>, dividir-ventana-abajo).</p>
@ -175,7 +181,7 @@ punto en ella.</p>
<p>Si establece <code class="docutils literal notranslate"><span class="pre">mouse-autoselect-window</span></code> a un valor no nulo, al mover el ratón sobre una ventana diferente se selecciona esa ventana. Esta función está desactivada por defecto.</p>
</section>
<section id="visualizacion-en-otra-ventana">
<h2>21.4 Visualización en Otra Ventana<a class="headerlink" href="#visualizacion-en-otra-ventana" title="Link to this heading"></a></h2>
<span id="id3"></span><h2>21.4 Visualización en Otra Ventana<a class="headerlink" href="#visualizacion-en-otra-ventana" title="Link to this heading"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span></code> es una tecla prefijo para una variedad de comandos que cambian a un búfer en una ventana diferente-ya sea otra ventana existente, o una nueva ventana creada dividiendo la ventana seleccionada. Ver Cómo Funciona display-buffer, para saber cómo Emacs elige o crea la ventana a usar.</p>
<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">b</kbd> <em>nombrebúfer</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span> <span class="pre">b</span></code> <em>nombrebúfer</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
@ -271,12 +277,12 @@ se muestre en otra ventana.</p>
<h2>21.6. Mostrar un Búfer en una Ventana<a class="headerlink" href="#mostrar-un-bufer-en-una-ventana" title="Link to this heading"></a></h2>
<p>Es una operación común de Emacs mostrar o hacer aparecer algún búfer en respuesta a un comando del Usuario. Hay varias maneras diferentes en que los comandos hacen esto.</p>
<p>Muchos comandos, como <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>), por defecto muestran el búfer «ocupando» la ventana seleccionada, esperando que la atención del Usuario se desvíe a ese búfer.</p>
<p>Algunos comandos tratan de mostrar de forma inteligente, intentando no ocupar la ventana seleccionada, por ejemplo, separando una nueva ventana y mostrando allí el búfer deseado. Estos comandos, que incluyen varios comandos de ayuda (ver <strong>Ayuda</strong>), funcionan llamando internamente a <code class="docutils literal notranslate"><span class="pre">display-búfer</span></code>. Ver <a class="reference internal" href="#id2"><span class="std std-ref">21.6.1 Cómo Funciona display-buffer</span></a> Cómo Funciona display-búfer, para más detalles.</p>
<p>Algunos comandos tratan de mostrar de forma inteligente, intentando no ocupar la ventana seleccionada, por ejemplo, separando una nueva ventana y mostrando allí el búfer deseado. Estos comandos, que incluyen varios comandos de ayuda (ver <strong>Ayuda</strong>), funcionan llamando internamente a <code class="docutils literal notranslate"><span class="pre">display-búfer</span></code>. Ver <a class="reference internal" href="#id4"><span class="std std-ref">21.6.1 Cómo Funciona display-buffer</span></a> Cómo Funciona display-búfer, para más detalles.</p>
<p>Otros comandos hacen lo mismo que <code class="docutils literal notranslate"><span class="pre">display-buffer</span></code>, y además seleccionan la ventana de visualización para que pueda empezar a editar su búfer. El comando <code class="docutils literal notranslate"><span class="pre">M-g</span> <span class="pre">M-n</span></code> (<code class="docutils literal notranslate"><span class="pre">next-error</span></code>) es un ejemplo (ver <strong>Modo de Compilación</strong>). Tales comandos funcionan llamando internamente a la función <code class="docutils literal notranslate"><span class="pre">pop-to-búfer</span></code>. Ver <strong>Cambiar a un Búfer en una Ventana</strong> en el Manual de Referencia de Emacs Lisp.</p>
<p>Los comandos con nombres que terminan en <code class="docutils literal notranslate"><span class="pre">other-window</span></code> se comportan como <code class="docutils literal notranslate"><span class="pre">display-buffer</span></code>, excepto que nunca se muestran en la ventana seleccionada. Varios de estos comandos están enlazados en la tecla de prefijo <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">4</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span></code>) (ver <strong>Visualizar en Otra Ventana</strong>).</p>
<p>Los comandos cuyos nombres terminan en <code class="docutils literal notranslate"><span class="pre">other-frame</span></code> se comportan como <code class="docutils literal notranslate"><span class="pre">display-buffer</span></code>, salvo que (i) nunca se muestran en la ventana seleccionada y (ii) prefieren crear un nuevo marco o usar una ventana en otro marco para mostrar el búfer deseado. Varios de estos comandos están vinculados a la tecla de prefijo <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">5</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span></code>).</p>
<section id="como-funciona-display-buffer">
<span id="id2"></span><h3>21.6.1 Cómo Funciona display-buffer<a class="headerlink" href="#como-funciona-display-buffer" title="Link to this heading"></a></h3>
<span id="id4"></span><h3>21.6.1 Cómo Funciona display-buffer<a class="headerlink" href="#como-funciona-display-buffer" title="Link to this heading"></a></h3>
<p>El comando <code class="docutils literal notranslate"><span class="pre">display-buffer</span></code> (así como los comandos que lo llaman internamente) elige una ventana para mostrar siguiendo los pasos que se dan a continuación. Véase <strong>Elegir una Ventana para Mostrar un Búfer</strong> en El Manual de Referencia de Emacs Lisp, para más detalles sobre cómo alterar esta secuencia de pasos.</p>
<blockquote>
<div><ul>

View File

@ -22,6 +22,7 @@
<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="23 Soporte de Juego de Caracteres Internacional" href="23_SoporteJuegoCaracIntern.html" />
<link rel="prev" title="21 Varias Ventanas" href="21_VariasVentanas.html" />
</head>
@ -37,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
@ -96,6 +97,12 @@
<li class="toctree-l2"><a class="reference internal" href="#uso-del-raton-en-terminales-de-texto">22.22 Uso del Ratón en Terminales de Texto</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>
@ -127,7 +134,7 @@
<p>Cuando Emacs se inicia en una pantalla gráfica, por ejemplo, en el sistema X Window, ocupa una región de pantalla gráfica a nivel de sistema. En este manual, llamamos a esto <em>marco</em>, reservando la palabra «ventana» para la parte del marco usada para mostrar un búfer. Un marco contiene inicialmente una ventana, pero puede subdividirse en múltiples ventanas (ver <a class="reference internal" href="21_VariasVentanas.html#id1"><span class="std std-ref">21 Varias Ventanas</span></a>). Normalmente, un marco también contiene una barra de menús, una barra de herramientas y un área de eco.</p>
<p>También puede crear marcos adicionales (véase <a class="reference internal" href="#id2"><span class="std std-ref">22.6 Creación de Marcos</span></a> Creación de Marcos). Todos los marcos creados en la misma sesión de Emacs tienen acceso a los mismos búferes subyacentes y otros datos. Por ejemplo, si un búfer está siendo mostrado en más de un marco, cualquier cambio hecho en él en un marco se muestra inmediatamente en los otros marcos también.</p>
<p>Tecleando <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">c</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-c</span></code>) se cierran todos los marcos de la pantalla actual, y finaliza la sesión Emacs si no tiene marcos abiertos en ninguna otra pantalla (ver <a class="reference internal" href="../07_SalirDeEmacs.html#id1"><span class="std std-ref">7 Cómo Salir de Emacs</span></a> Salir de Emacs). Para cerrar sólo el marco seleccionado, teclee <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">0</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">0</span></code>, cero, no o).</p>
<p>Este capítulo describe las características de Emacs específicas de las pantallas gráficas (particularmente los comandos del ratón), y las características para gestionar múltiples marcos. En terminales de texto, muchas de estas características no están disponibles. Sin embargo, todavía es posible crear múltiples marcos en terminales de texto; tales marcos se muestran de uno en uno, llenando toda la pantalla del terminal (ver <a class="reference internal" href="#id7"><span class="std std-ref">22.21 Terminales sin Ventana</span></a> Terminales Sin Ventana). También es posible usar el ratón en algunos terminales de texto (véase <a class="reference internal" href="12_LaMarca-y-LaRegion.html#id4"><span class="std std-ref">12.2 Comandos para Marcar Objetos Textuales</span></a> Uso del Ratón en Terminales de Texto, para hacerlo en sistemas GNU y Unix; y véase <strong>Uso del Ratón en MS-DOS</strong>, para hacerlo en MS-DOS). Todos los terminales de texto admiten menús.</p>
<p>Este capítulo describe las características de Emacs específicas de las pantallas gráficas (particularmente los comandos del ratón), y las características para gestionar múltiples marcos. En terminales de texto, muchas de estas características no están disponibles. Sin embargo, todavía es posible crear múltiples marcos en terminales de texto; tales marcos se muestran de uno en uno, llenando toda la pantalla del terminal (ver <a class="reference internal" href="#id9"><span class="std std-ref">22.21 Terminales sin Ventana</span></a> Terminales Sin Ventana). También es posible usar el ratón en algunos terminales de texto (véase <a class="reference internal" href="12_LaMarca-y-LaRegion.html#id4"><span class="std std-ref">12.2 Comandos para Marcar Objetos Textuales</span></a> Uso del Ratón en Terminales de Texto, para hacerlo en sistemas GNU y Unix; y véase <strong>Uso del Ratón en MS-DOS</strong>, para hacerlo en MS-DOS). Todos los terminales de texto admiten menús.</p>
<section id="comandos-del-raton-para-edicion">
<h2>22.1 Comandos del Ratón para Edición<a class="headerlink" href="#comandos-del-raton-para-edicion" title="Link to this heading"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">ratón-1</span></code></p>
@ -179,103 +186,137 @@ pulse <code class="docutils literal notranslate"><span class="pre">ratón-3</spa
<p>Algunos ratones tienen una «rueda» que puede usarse para desplazarse. Emacs soporta el desplazamiento de ventanas con la rueda del ratón, por defecto, en la mayoría de las pantallas gráficas. Para activar esta función, use <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">mouse-wheel-mode</span></code>. Las variables <code class="docutils literal notranslate"><span class="pre">mouse-wheel-follow-mouse</span></code> y <code class="docutils literal notranslate"><span class="pre">mouse-wheel-scroll-amount</span></code> determinan dónde y cuánto se desplazan los búferes. La variable <code class="docutils literal notranslate"><span class="pre">mouse-wheel-progressive-speed</span></code> determina si la velocidad de desplazamiento está vinculada a la rapidez con la que se mueve la rueda. Este modo también permite aumentar o disminuir el tamaño de la fuente, por defecto vinculado al desplazamiento con el modificador <kbd class="kbd docutils literal notranslate">Ctrl</kbd> (<code class="docutils literal notranslate"><span class="pre">Ctrl</span></code>). Cuando este modo está activado, la rueda del ratón produce eventos especiales como <code class="docutils literal notranslate"><span class="pre">wheel-up</span></code> (rueda-arriba) y <code class="docutils literal notranslate"><span class="pre">wheel-down</span></code> (rueda-abajo). (Algunos sistemas antiguos los reportan como <code class="docutils literal notranslate"><span class="pre">ratón-4</span></code> y <code class="docutils literal notranslate"><span class="pre">ratón-5</span></code>) Si el ratón tiene una rueda de desplazamiento horizontal, también produce eventos <code class="docutils literal notranslate"><span class="pre">wheel-left</span></code> (rueda-izquierda) y <code class="docutils literal notranslate"><span class="pre">wheel-right</span></code> (rueda-derecha).</p>
<p>Emacs también soporta el desplazamiento horizontal con el modificador <kbd class="kbd docutils literal notranslate">Shift</kbd>. Escribiendo un prefijo numérico arg (e.g., <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">5</kbd> (<code class="docutils literal notranslate"><span class="pre">M-5</span></code>)) antes de iniciar el desplazamiento horizontal cambia su valor de paso definido por la opción de Usuario <code class="docutils literal notranslate"><span class="pre">mouse-wheel-scroll-amount-horizontal</span></code>.</p>
<p>Si la rueda del ratón se puede inclinar, o si el panel táctil lo permite, también puede activar el desplazamiento horizontal personalizando la variable <code class="docutils literal notranslate"><span class="pre">mouse-wheel-tilt-scroll</span></code> con un valor distinto de cero. Por defecto, al inclinar la rueda del ratón, la vista de la ventana se desplaza horizontalmente en la dirección de la inclinación: por ejemplo, si se inclina hacia la derecha, la ventana se desplaza hacia la derecha, de modo que el texto que aparece en la ventana se desplaza horizontalmente hacia la izquierda. Si desea invertir la dirección del desplazamiento horizontal, personalice la variable <code class="docutils literal notranslate"><span class="pre">mouse-wheel-flip-direction</span></code> a un valor no nulo.</p>
<p>Cuando el puntero del ratón está sobre una imagen en el modo Imagen, véase <a class="reference internal" href="19_ManejoArchivos.html#id3"><span class="std std-ref">19.19 Visualización de Archivos de Imagen</span></a>, el desplazamiento de la rueda del ratón con el modificador <kbd class="kbd docutils literal notranslate">Ctrl</kbd> escala la imagen bajo el puntero del ratón, y el desplazamiento de la rueda del ratón con el modificador Mayús desplaza la imagen horizontalmente.</p>
<p>Cuando el puntero del ratón está sobre una imagen en el modo Imagen, véase <a class="reference internal" href="19_ManejoArchivos.html#id4"><span class="std std-ref">19.19 Visualización de Archivos de Imagen</span></a>, el desplazamiento de la rueda del ratón con el modificador <kbd class="kbd docutils literal notranslate">Ctrl</kbd> escala la imagen bajo el puntero del ratón, y el desplazamiento de la rueda del ratón con el modificador Mayús desplaza la imagen horizontalmente.</p>
</section>
<section id="comandos-de-raton-para-palabras-y-lineas">
<span id="id1"></span><h2>22.2 Comandos de Ratón para Palabras y Líneas<a class="headerlink" href="#comandos-de-raton-para-palabras-y-lineas" title="Link to this heading"></a></h2>
<p>Estas variantes de mouse-1 seleccionan palabras o líneas enteras a la vez. Emacs activa la región alrededor del texto seleccionado, que también se copia en el anillo de muertes.</p>
<dl>
<dt>doble-clic-ratón-1</dt><dd><p>Selecciona el texto que rodea a la palabra o carácter sobre el que se hace clic.</p>
<p>Estas variantes de <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> seleccionan palabras o líneas enteras a la vez. Emacs activa la región alrededor del texto seleccionado, que también se copia en el anillo de muertes.</p>
<p><code class="docutils literal notranslate"><span class="pre">doble-clic-ratón-1</span></code></p>
<blockquote>
<div><p>Selecciona el texto que rodea a la palabra o carácter sobre el que se hace clic.</p>
<p>El doble clic sobre un carácter con sintaxis de símbolo (como el guión bajo, en modo C) selecciona el símbolo que rodea a ese carácter. Al hacer doble clic en un carácter con sintaxis
de paréntesis abierto o cerrado, se selecciona la agrupación parentética que inicia o termina dicho carácter. Doble clic sobre un carácter con sintaxis de delimitador de cadena (como
una comilla simple o doble en C) selecciona la constante de la cadena (Emacs usa heurística para averiguar si ese carácter es el principio o el final de la misma).</p>
<p>Haciendo doble clic al principio de una agrupación parentética o al principio de un delimitador de cadena se mueve el punto al final de la región, desplazando la pantalla del búfer
hacia delante si es necesario para mostrar la nueva ubicación del punto. Si se hace doble clic al final de una agrupación parentética o de un delimitador de cadena final, el punto se
mantiene por defecto al final de la región, por lo que el principio de la región no será visible si se encuentra por encima de la parte superior de la ventana; si se establece la
opción de Usuario mouse-select-region-move-to-beginning (seleccionar región con el ratón: mover al principio) a un valor distinto de cero, el punto se moverá al principio de la región,
desplazando la pantalla hacia atrás si es necesario.</p>
</dd>
<dt>doble-clic-ratón-1-arrastrar</dt><dd><p>Selecciona el texto que arrastres, en unidades de palabras enteras.</p>
</dd>
<dt>triple-clic-ratón-1</dt><dd><p>Seleccione la línea en la que hace clic.</p>
</dd>
<dt>tripe-clic-ratón-1-arrastrar</dt><dd><p>Selecciona el texto que arrastres, en unidades de líneas enteras.</p>
</dd>
</dl>
opción de Usuario <code class="docutils literal notranslate"><span class="pre">mouse-select-region-move-to-beginning</span></code> (seleccionar región con el ratón-mover al principio) a un valor distinto de cero, el punto se moverá al principio de la
región, desplazando la pantalla hacia atrás si es necesario.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">doble-clic-ratón-1-arrastrar</span></code></p>
<blockquote>
<div><p>Selecciona el texto que arrastres, en unidades de palabras enteras.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">triple-clic-ratón-1</span></code></p>
<blockquote>
<div><p>Seleccione la línea en la que hace clic.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">tripe-clic-ratón-1-arrastrar</span></code></p>
<blockquote>
<div><p>Selecciona el texto que arrastra, en unidades de líneas enteras.</p>
</div></blockquote>
</section>
<section id="seguir-referencias-con-el-raton">
<h2>22.3 Seguir Referencias con el Ratón<a class="headerlink" href="#seguir-referencias-con-el-raton" title="Link to this heading"></a></h2>
<p>Algunos búferes de Emacs incluyen botones, o hipervínculos: fragmentos de texto que realizan alguna acción (por ejemplo, seguir una referencia) cuando se activan (por ejemplo, pulsando sobre ellos). Normalmente, el texto de un botón se resalta visualmente: aparece subrayado o se dibuja un recuadro a su alrededor. Si pasa el ratón por encima de un botón, la forma del cursor cambia y el botón se ilumina. Si cambia la variable mouse-highlight a nil, Emacs desactiva este resaltado.</p>
<p>Puede activar un botón moviendo el puntero sobre él y escribiendo RET, o pulsando con el ratón-1 o ratón-2 sobre el botón. Por ejemplo, en un búfer Dired, cada nombre de archivo es un botón; activarlo hace que Emacs visite ese archivo (ver Dired, el Editor de Directorios). En un búfer <em>Compilation</em>, cada mensaje de error es un botón, y al activarlo se visita el código fuente de ese error (ver Ejecutar Compilaciones en Emacs).</p>
<p>Aunque pulsar con ratón-1 sobre un botón normalmente activa el botón, si mantiene pulsado el botón del ratón durante un periodo de tiempo antes de soltarlo (concretamente, durante más de 450 milisegundos), entonces Emacs mueve el punto donde ha pulsado, sin activar el botón. De esta forma, puede utilizar el ratón para mover el punto sobre un botón sin activarlo. Arrastrar el ratón sobre o hacia un botón tiene su comportamiento habitual de fijar la región, y no activa el botón.</p>
<p>Puede cambiar cómo se aplica mouse-1 a los botones personalizando la variable mouse-1-click-follows-link. Si el valor es un entero positivo, esto determina cuánto tiempo necesita mantener pulsado el botón del ratón, en milisegundos, para cancelar la activación del botón; el valor por defecto es 450, como se describe en el párrafo anterior. Si el valor es nil, mouse-1 sólo fija el punto donde se hizo clic, y no activa los botones. Si el valor es doble, los clics dobles activan los botones, pero los clics simples sólo fijan el punto.</p>
<p>Normalmente, mouse-1 en un botón activa el botón incluso si está en una ventana no seleccionada. Si cambia la variable mouse-1-click-in-non-selected-windows a nil, mouse-1 sobre un botón en una ventana no seleccionada mueve el punto a la posición del clic y selecciona esa ventana, sin activar el botón.</p>
<p>Algunos búferes de Emacs incluyen <em>botones</em>, o <em>hipervínculos</em>: fragmentos de texto que realizan alguna acción (por ejemplo, seguir una referencia) cuando se activan (por ejemplo, pulsando sobre ellos). Normalmente, el texto de un botón se resalta visualmente: aparece subrayado o se dibuja un recuadro a su alrededor. Si pasa el ratón por encima de un botón, la forma del cursor cambia y el botón se ilumina. Si cambia la variable <code class="docutils literal notranslate"><span class="pre">mouse-highlight</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>, Emacs desactiva este resaltado.</p>
<p>Puede activar un botón moviendo el puntero sobre él y escribiendo <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>), o pulsando con <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> o <code class="docutils literal notranslate"><span class="pre">ratón-2</span></code> sobre el botón. Por ejemplo, en un búfer Dired, cada nombre de archivo es un botón; activarlo hace que Emacs visite ese archivo (ver <strong>Dired, el Editor de Directorios</strong>). En un búfer <code class="docutils literal notranslate"><span class="pre">*Compilation*</span></code>, cada mensaje de error es un botón, y al activarlo se visita el código fuente de ese error (ver <strong>Ejecutar Compilaciones en Emacs</strong>).</p>
<p>Aunque pulsar con <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> sobre un botón normalmente activa el botón, si mantiene pulsado el botón del ratón durante un periodo de tiempo antes de soltarlo (concretamente, durante más de 450 milisegundos), entonces Emacs mueve el punto donde ha pulsado, sin activar el botón. De esta forma, puede utilizar el ratón para mover el punto sobre un botón sin activarlo. Arrastrar el ratón sobre o hacia un botón tiene su comportamiento habitual de fijar la región, y no activa el botón.</p>
<p>Puede cambiar cómo se aplica <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> a los botones personalizando la variable <code class="docutils literal notranslate"><span class="pre">mouse-1-click-follows-link</span></code>. Si el valor es un entero positivo, esto determina cuánto tiempo necesita mantener pulsado el botón del ratón, en milisegundos, para cancelar la activación del botón; el valor por defecto es 450, como se describe en el párrafo anterior. Si el valor es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> sólo fija el punto donde se hizo clic, y no activa los botones. Si el valor es <code class="docutils literal notranslate"><span class="pre">double</span></code>, los clics dobles activan los botones, pero los clics simples sólo fijan el punto.</p>
<p>Normalmente, <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> en un botón activa el botón incluso si está en una ventana no seleccionada. Si cambia la variable <code class="docutils literal notranslate"><span class="pre">mouse-1-click-in-non-selected-windows</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>, <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> sobre un botón en una ventana no seleccionada mueve el punto a la posición del clic y selecciona esa ventana, sin activar el botón.</p>
</section>
<section id="clics-de-raton-para-menus">
<h2>22.4 Clics de Ratón para Menús<a class="headerlink" href="#clics-de-raton-para-menus" title="Link to this heading"></a></h2>
<p>Varias pulsaciones del ratón con los modificadores Ctrl y SHIFT hacen aparecer menús.</p>
<dl>
<dt>C-ratón-1</dt><dd><p>Este menú sirve para seleccionar un búfer.</p>
<p>El modo menor global MSB («mouse select buffer», selección de búfer con el ratón) hace que este menú sea más inteligente y personalizable. Véase Personalización de los Menús de Búfer.</p>
</dd>
<dt>C-ratón-2</dt><dd><p>Este menú contiene entradas para examinar las caras y otras propiedades del texto, así como para ajustarlas (esto último es útil sobre todo al editar texto enriquecido; véase Texto
Enriquecido).</p>
</dd>
<dt>C-ratón-3</dt><dd><p>Este menú es específico de cada modo. En la mayoría de los modos, si el modo Barra de menús está activado, este menú tiene los mismos elementos que todos los menús de la barra de
<p><code class="docutils literal notranslate"><span class="pre">C-ratón-1</span></code></p>
<blockquote>
<div><p>Este menú sirve para seleccionar un búfer.</p>
<p>El modo menor global MSB («mouse select buffer», selección de búfer con el ratón) hace que este menú sea más inteligente y personalizable. Véase <a class="reference internal" href="20_UsarVariosBuferes.html#id1"><span class="std std-ref">20.7.3 Personalización de los Menús del Búfer</span></a>.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">C-ratón-2</span></code></p>
<blockquote>
<div><p>Este menú contiene entradas para examinar las caras y otras propiedades del texto, así como para ajustarlas (esto último es útil sobre todo al editar texto enriquecido; véase <strong>Texto
Enriquecido</strong>).</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">C-ratón-3</span></code></p>
<blockquote>
<div><p>Este menú es específico de cada modo. En la mayoría de los modos, si el modo Barra de menús está activado, este menú tiene los mismos elementos que todos los menús de la barra de
menús específicos de cada modo juntos. Algunos modos pueden especificar un menú diferente para este botón. Si el modo Barra de menús está desactivado, este menú contiene todos los
elementos que estarían presentes en la barra de menús -no sólo los específicos de cada modo- para que pueda acceder a ellos sin tener que mostrar dicha barra.</p>
</dd>
<dt>Shift-ratón-1</dt><dd><p>Este menú sirve para cambiar la cara por defecto dentro del búfer de la ventana. Véase Escala de Texto.</p>
</dd>
</dl>
<p>Muchas aplicaciones GUI usan mouse-3 para mostrar menús contextuales: menús que proporcionan acceso a varios ajustes y acciones pertinentes para la localización y el contexto del clic del ratón. Si prefiere esto en Emacs a la función por defecto de mouse-3, que está ligada al comando mouse-save-then-kill (ver Comandos del Ratón para Editar), puede activar el modo menor context-menu-mode. Entonces Emacs mostrará menús contextuales cuando pulse ratón-3. El contenido exacto de estos menús contextuales depende del modo mayor actual y del contenido del búfer alrededor del lugar donde pulsa el ratón. Para personalizar los contenidos del menú contextual, puede usar la variable context-menu-functions (ver Convenciones del Modo Mayor en el Manual de Referencia de Emacs Lisp). También puede invocar el menú contextual pulsando S-F10.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">Shift-ratón-1</span></code></p>
<blockquote>
<div><p>Este menú sirve para cambiar la cara por defecto dentro del búfer de la ventana. Véase Escala de Texto.</p>
</div></blockquote>
<p>Muchas aplicaciones GUI usan <code class="docutils literal notranslate"><span class="pre">mouse-3</span></code> para mostrar menús contextuales: menús que proporcionan acceso a varios ajustes y acciones pertinentes para la localización y el contexto del clic del ratón. Si prefiere esto en Emacs a la función por defecto de <code class="docutils literal notranslate"><span class="pre">mouse-3</span></code>, que está ligada al comando <code class="docutils literal notranslate"><span class="pre">mouse-save-then-kill</span></code> (ver <a class="reference internal" href="15_ControlDisplay.html#id1"><span class="std std-ref">15.12 Escala de Texto</span></a>), puede activar el modo menor <code class="docutils literal notranslate"><span class="pre">context-menu-mode</span></code>. Entonces Emacs mostrará menús contextuales cuando pulse <code class="docutils literal notranslate"><span class="pre">ratón-3</span></code>. El contenido exacto de estos menús contextuales depende del modo mayor actual y del contenido del búfer alrededor del lugar donde pulsa el ratón. Para personalizar los contenidos del menú contextual, puede usar la variable <code class="docutils literal notranslate"><span class="pre">context-menu-functions</span></code> (ver <strong>Convenciones del Modo Mayor</strong> en el Manual de Referencia de Emacs Lisp). También puede invocar el menú contextual pulsando <kbd class="kbd docutils literal notranslate">Shift</kbd>-<kbd class="kbd docutils literal notranslate">F10</kbd> (<code class="docutils literal notranslate"><span class="pre">S-F10</span></code>).</p>
</section>
<section id="comandos-del-raton-en-la-linea-de-modo">
<h2>22.5 Comandos del Ratón en la Línea de Modo<a class="headerlink" href="#comandos-del-raton-en-la-linea-de-modo" title="Link to this heading"></a></h2>
<p>Puede usar los clics del ratón en las líneas de modo de ventana para seleccionar y manipularlas.</p>
<p>Algunas áreas de la línea de modo, como el nombre del búfer y los nombres de los modos mayor y menor, tienen sus propios enlaces especiales del ratón. Estas áreas se resaltan cuando se mantiene el ratón sobre ellas, y se mostrará información sobre los enlaces especiales (ver Información sobre Herramientas). Los comandos de esta sección no se aplican en esas áreas.</p>
<dl class="simple">
<dt>ratón-1</dt><dd><p>ratón-1 sobre una línea de modo selecciona la ventana a la que pertenece. Arrastrando el ratón-1 sobre la línea de modo, puede moverla, cambiando así la altura de las ventanas por
<p>Algunas áreas de la línea de modo, como el nombre del búfer y los nombres de los modos mayor y menor, tienen sus propios enlaces especiales del ratón. Estas áreas se resaltan cuando se mantiene el ratón sobre ellas, y se mostrará información sobre los enlaces especiales (ver <a class="reference internal" href="#id8"><span class="std std-ref">22.19 Información sobre Herramientas (Tooltips)</span></a>). Los comandos de esta sección no se aplican en esas áreas.</p>
<p><code class="docutils literal notranslate"><span class="pre">ratón-1</span></code></p>
<blockquote>
<div><p><code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> sobre una línea de modo selecciona la ventana a la que pertenece. Arrastrando <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> sobre la línea de modo, puede moverla, cambiando así la altura de las ventanas por
encima y por debajo. Al cambiar la altura con el ratón de esta manera nunca se borran ventanas, sólo se niega a hacer cualquier ventana más pequeña que la altura mínima.</p>
</dd>
<dt>ratón-2</dt><dd><p>ratón-2 en una línea de modo expande esa ventana para llenar su marco.</p>
</dd>
<dt>ratón-3</dt><dd><p>ratón-3 sobre una línea de modo borra la ventana a la que pertenece. Si el marco sólo tiene una ventana, no hace nada.</p>
</dd>
<dt>C-ratón-2</dt><dd><p>C-ratón-2 en una línea de modo divide esa ventana, produciendo dos ventanas una al lado de la otra con el límite pasando por la posición del clic (ver Dividir Ventanas).</p>
</dd>
</dl>
<p>Además, haciendo clic y arrastrando el ratón-1 en el divisor entre dos líneas de modo contiguas, puede mover el límite vertical a la izquierda o a la derecha.</p>
<p>Tenga en cuenta que el cambio de tamaño de las ventanas se ve afectado por el valor de window-resize-pixelwise, véase Dividir Ventanas.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">ratón-2</span></code></p>
<blockquote>
<div><p><code class="docutils literal notranslate"><span class="pre">ratón-2</span></code> en una línea de modo expande esa ventana para llenar su marco.</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">ratón-3</span></code></p>
<blockquote>
<div><p><code class="docutils literal notranslate"><span class="pre">ratón-3</span></code> sobre una línea de modo borra la ventana a la que pertenece. Si el marco sólo tiene una ventana, no hace nada.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<code class="docutils literal notranslate"><span class="pre">ratón-2</span></code> (<code class="docutils literal notranslate"><span class="pre">C-ratón-2</span></code>)</p>
<blockquote>
<div><p><code class="docutils literal notranslate"><span class="pre">C-ratón-2</span></code> en una línea de modo divide esa ventana, produciendo dos ventanas una al lado de la otra con el límite pasando por la posición del clic (ver <a class="reference internal" href="21_VariasVentanas.html#id2"><span class="std std-ref">21.2 Dividir Ventanas</span></a>).</p>
</div></blockquote>
<p>Además, haciendo clic y arrastrando <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> en el divisor entre dos líneas de modo contiguas, puede mover el límite vertical a la izquierda o a la derecha.</p>
<p>Tenga en cuenta que el cambio de tamaño de las ventanas se ve afectado por el valor de <code class="docutils literal notranslate"><span class="pre">window-resize-pixelwise</span></code>, véase <a class="reference internal" href="21_VariasVentanas.html#id2"><span class="std std-ref">21.2 Dividir Ventanas</span></a>.</p>
</section>
<section id="creacion-de-marcos">
<span id="id2"></span><h2>22.6 Creación de Marcos<a class="headerlink" href="#creacion-de-marcos" title="Link to this heading"></a></h2>
<p>La tecla de prefijo C-x 5 es análoga a C-x 4. Mientras que cada comando C-x 4 abre un búfer en una ventana diferente del marco seleccionado (véase Visualización en otra Ventana), los comandos C-x 5 usan un marco diferente. Si un marco existente visible o iconificado (también conocido como «minimizado», ver Visibilidad de Marcos en el Manual de Referencia de Emacs Lisp) ya muestra el búfer solicitado, ese marco es levantado y deiconificado («des-minimizado»); de lo contrario, un nuevo marco es creado en el terminal de visualización actual.</p>
<p>Los distintos comandos C-x 5 difieren en cómo encuentran o crean el búfer a seleccionar:</p>
<dl class="simple">
<dt>C-x 5 2</dt><dd><p>Crea un nuevo marco usando los parámetros por defecto del marco (comando make-frame).</p>
</dd>
<dt>C-x 5 c</dt><dd><p>Crea un nuevo marco usando la configuración de la ventana y los parámetros del marco actual (clone-frame).</p>
</dd>
<dt>C-x 5 b nombrebúfer RET</dt><dd><p>Selecciona el nombre del búfer en otro marco. Esto ejecuta switch-to-buffer-other-frame.</p>
</dd>
<dt>C-x 5 f nombrearchivo RET</dt><dd><p>Visita el archivo nombre-archivo y selecciona su búfer en otro marco. Esto ejecuta find-file-other-frame (buscar-archivo-otro-marco). Véase Visitar Archivos.</p>
</dd>
<dt>C-x 5 d directorio RET</dt><dd><p>Selecciona un búfer Dired para el directorio en otro marco. Esto ejecuta dired-other-frame (directorio-otro-marco). Véase Dired, el Editor de Directorios.</p>
</dd>
<dt>C-x 5 m</dt><dd><p>Comienza a redactar un mensaje de correo en otro marco. Esto ejecuta compose-mail-other-frame (componer-correo-otro-marco). Es la variante para otro marco de C-x m. Véase Enviar
Correo.</p>
</dd>
<dt>C-x 5 .</dt><dd><p>Encuentra la definición de un identificador en otro marco. Esto ejecuta xref-find-definitions-other-frame, la variante de marcos múltiples de M-.. Véase Buscar Referencias de
Identificadores.</p>
</dd>
<dt>C-x 5 r nombrearchivo RET</dt><dd><p>Visita el archivo nombre de archivo de sólo lectura, y selecciona su búfer en otro marco. Esto ejecuta find-file-read-only-other-frame. Véase Visitar Archivos.</p>
</dd>
<dt>C-x 5 5</dt><dd><p>Un comando prefijo más general que afecta al búfer mostrado por el siguiente comando invocado inmediatamente después de este comando prefijo (other-frame-prefix). Solicita que el
<p>La tecla de prefijo <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">5</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span></code>) es análoga a <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">4</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span></code>). Mientras que cada comando <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">4</span></code> abre un búfer en una ventana diferente del marco seleccionado (véase <a class="reference internal" href="21_VariasVentanas.html#id3"><span class="std std-ref">21.4 Visualización en Otra Ventana</span></a>), los comandos <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span></code> usan un marco diferente. Si un marco existente visible o iconificado (también conocido como «minimizado», ver <strong>Visibilidad de Marcos</strong> en el Manual de Referencia de Emacs Lisp) ya muestra el búfer solicitado, ese marco es levantado y deiconificado («des-minimizado»); de lo contrario, un nuevo marco es creado en el terminal de visualización actual.</p>
<p>Los distintos comandos <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span></code> difieren en cómo encuentran o crean el búfer a seleccionar:</p>
<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">2</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">2</span></code>)</p>
<blockquote>
<div><p>Crea un nuevo marco usando los parámetros por defecto del marco (<code class="docutils literal notranslate"><span class="pre">make-frame-command</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">5</kbd><kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">c</span></code>)</p>
<blockquote>
<div><p>Crea un nuevo marco usando la configuración de la ventana y los parámetros del marco actual (<code class="docutils literal notranslate"><span class="pre">clone-frame</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">5</kbd><kbd class="kbd docutils literal notranslate">b</kbd> <em>nombrebúfer</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">b</span></code> <em>nombrebúfer</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Selecciona el búfer <em>nombrebúfer</em> en otro marco. Esto ejecuta <code class="docutils literal notranslate"><span class="pre">switch-to-buffer-other-frame</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">5</kbd><kbd class="kbd docutils literal notranslate">f</kbd> <em>nombrearchivo</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">f</span></code> <em>nombrearchivo</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Visita el archivo <em>nombrearchivo</em> y selecciona su búfer en otro marco. Esto ejecuta <code class="docutils literal notranslate"><span class="pre">find-file-other-frame</span></code> (buscar-archivo-otro-marco). Véase <a class="reference internal" href="19_ManejoArchivos.html#id1"><span class="std std-ref">19.2 Visitar Archivos</span></a>.</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">d</kbd> <em>directorio</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">d</span></code> <em>directorio</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Selecciona un búfer Dired para el <em>directorio</em> en otro marco. Esto ejecuta <code class="docutils literal notranslate"><span class="pre">dired-other-frame</span></code> (directorio-otro-marco). Véase <strong>Dired, el Editor de Directorios</strong>.</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">m</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">m</span></code>)</p>
<blockquote>
<div><p>Comienza a redactar un mensaje de correo en otro marco. Esto ejecuta <code class="docutils literal notranslate"><span class="pre">compose-mail-other-frame</span></code> (componer-correo-otro-marco). Es la variante para otro marco de <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">m</span></code>. Véase
<strong>Enviar Correo</strong>.</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">.</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">.</span></code>)</p>
<blockquote>
<div><p>Encuentra la definición de un identificador en otro marco. Esto ejecuta <code class="docutils literal notranslate"><span class="pre">xref-find-definitions-other-frame</span></code>, la variante de marcos múltiples de <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>). Véase
<strong>Buscar Referencias de Identificadores</strong>.</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">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">r</span></code> <em>nombrearchivo</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Visita el archivo <em>nombrearchivo</em> de sólo lectura, y selecciona su búfer en otro marco. Esto ejecuta <code class="docutils literal notranslate"><span class="pre">find-file-read-only-other-frame</span></code>. Véase <a class="reference internal" href="19_ManejoArchivos.html#id1"><span class="std std-ref">19.2 Visitar Archivos</span></a>.</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">5</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">5</span> <span class="pre">5</span></code>)</p>
<blockquote>
<div><p>Un comando prefijo más general que afecta al búfer mostrado por el siguiente comando invocado inmediatamente después de este comando prefijo (<code class="docutils literal notranslate"><span class="pre">other-frame-prefix</span></code>). Solicita que el
búfer del siguiente comando se muestre en otro marco.</p>
</dd>
</dl>
<p>Puede controlar la apariencia y el comportamiento de los marcos recién creados especificando parámetros de marco. Consulte Parámetros de Marcos.</p>
</div></blockquote>
<p>Puede controlar la apariencia y el comportamiento de los marcos recién creados especificando parámetros de marco. Consulte <a class="reference internal" href="#id7"><span class="std std-ref">22.11 Parámetros de Marco</span></a>.</p>
</section>
<section id="comandos-de-marco">
<h2>22.7 Comandos de Marco<a class="headerlink" href="#comandos-de-marco" title="Link to this heading"></a></h2>
@ -480,7 +521,7 @@ xlsfonts -fn “<em>-</em>-<em>-</em>-<em>-</em>-<em>-</em>-<em>-</em>-<em>-c</e
</dl>
</section>
<section id="parametros-de-marco">
<h2>22.11 Parámetros de Marco<a class="headerlink" href="#parametros-de-marco" title="Link to this heading"></a></h2>
<span id="id7"></span><h2>22.11 Parámetros de Marco<a class="headerlink" href="#parametros-de-marco" title="Link to this heading"></a></h2>
<p>Puede controlar la apariencia y el comportamiento por defecto de todos los marcos especificando una lista por defecto de parámetros de marco en la variable default-frame-alist. Su valor debe ser una lista de entradas, cada una especificando un nombre de parámetro y un valor para ese parámetro. Estas entradas tienen efecto cada vez que Emacs crea un nuevo marco, incluyendo el marco inicial.</p>
<p>Por ejemplo, puede añadir las siguientes líneas a su archivo init (vea El archivo de Inicialización de Emacs) para establecer la anchura del marco por defecto a 90 columnas de caracteres, la altura del marco por defecto a 40 filas de caracteres, y la fuente por defecto a “Monospace-10”:</p>
<blockquote>
@ -634,7 +675,7 @@ mueve n posiciones a la izquierda.</p>
<p>Cuando Emacs se compila con soporte GTK+, usa el diálogo selector de archivos GTK+. Emacs añade un botón adicional a este diálogo, que puede usar para activar o desactivar la visualización de archivos ocultos (archivos que empiezan por un punto) en ese diálogo. Si desea que este botón esté activado por defecto, cambie la variable x-gtk-show-hidden-files a t. Además, Emacs añade texto de ayuda al diálogo selector de archivos GTK+; para desactivar este texto de ayuda, cambie la variable x-gtk-file-dialog-help-text a nil.</p>
</section>
<section id="informacion-sobre-herramientas-tooltips">
<h2>22.19 Información sobre Herramientas (Tooltips)<a class="headerlink" href="#informacion-sobre-herramientas-tooltips" title="Link to this heading"></a></h2>
<span id="id8"></span><h2>22.19 Información sobre Herramientas (Tooltips)<a class="headerlink" href="#informacion-sobre-herramientas-tooltips" title="Link to this heading"></a></h2>
<p>Los tooltips son pequeños marcos especiales que muestran información de texto en la posición actual del ratón. Se activan cuando hay una pausa en el movimiento del ratón sobre algún fragmento significativo de texto en una ventana, o la línea de modo, o alguna otra parte del marco de Emacs como un botón de la barra de herramientas o un elemento de menú.</p>
<p>Puede alternar el uso de tooltips con el comando M-x tooltip-mode. Cuando el modo Tooltip está desactivado, el texto de ayuda se muestra en el área de eco en su lugar. Para controlar el uso de información sobre herramientas al inicio, personalice la variable tooltip-mode.</p>
<p>Las siguientes variables proporcionan opciones de personalización para la visualización de información sobre herramientas:</p>
@ -689,14 +730,14 @@ desplazado.</p>
<p>También puede usar el comando M-x mouse-avoidance-mode para activar el modo. Siempre que el modo Mouse Avoidance mueve el ratón, también levanta el marco.</p>
</section>
<section id="terminales-sin-ventana">
<span id="id7"></span><h2>22.21 Terminales sin Ventana<a class="headerlink" href="#terminales-sin-ventana" title="Link to this heading"></a></h2>
<span id="id9"></span><h2>22.21 Terminales sin Ventana<a class="headerlink" href="#terminales-sin-ventana" title="Link to this heading"></a></h2>
<p>En un terminal de texto, Emacs sólo puede mostrar un marco Emacs a la vez. Sin embargo, aún puede crear múltiples marcos Emacs, y cambiar entre ellos. Cambiar de marco en estos terminales es muy parecido a cambiar entre diferentes configuraciones de ventana.</p>
<p>Puede usar C-x 5 2 para crear un nuevo marco y cambiar a él; use C-x 5 o para recorrer los marcos existentes; use C-x 5 0 para borrar el marco actual.</p>
<p>Cada marco tiene un número para distinguirlo. Si su terminal sólo puede mostrar un marco a la vez, el número n del marco seleccionado aparece cerca del principio de la línea de modo, en la forma “Fn”.</p>
<p>Fn” es, de hecho, el nombre inicial del marco. Si lo desea, puede dar nombres más significativos a los marcos, y puede seleccionar un marco por su nombre. Use el comando M-x set-frame-name RET nombre RET para especificar un nuevo nombre para el marco seleccionado, y use M-x select-frame-by-name RET nombre RET para seleccionar un marco según su nombre. El nombre que especifique aparecerá en la línea de modo cuando se seleccione el marco.</p>
</section>
<section id="uso-del-raton-en-terminales-de-texto">
<span id="id8"></span><h2>22.22 Uso del Ratón en Terminales de Texto<a class="headerlink" href="#uso-del-raton-en-terminales-de-texto" title="Link to this heading"></a></h2>
<span id="id10"></span><h2>22.22 Uso del Ratón en Terminales de Texto<a class="headerlink" href="#uso-del-raton-en-terminales-de-texto" title="Link to this heading"></a></h2>
<p>Algunos terminales de texto soportan clics de ratón en la ventana del terminal.</p>
<p>En un emulador de terminal compatible con xterm, puede usar M-x xterm-mouse-mode para dar a Emacs control sobre usos simples del ratón - básicamente, sólo se soportan clics simples no modificados. Las nuevas versiones de xterm también soportan el seguimiento del ratón. La funcionalidad normal del ratón xterm para este tipo de clics sigue estando disponible manteniendo pulsada la tecla SHIFT al pulsar el botón del ratón. El modo Ratón de xterm es un modo menor global (ver Modos Menores). Repitiendo el comando se desactiva de nuevo el modo.</p>
<p>En la consola en GNU/Linux, puede usar M-x gpm-mouse-mode para habilitar el soporte de ratón. Debe tener el servidor gpm instalado y funcionando en su sistema para que esto funcione. Tenga en cuenta que cuando este modo está activado, no puede usar el ratón para transferir texto entre Emacs y otros programas que usen GPM. Esto se debe a limitaciones en GPM y el kernel de Linux.</p>
@ -709,6 +750,7 @@ desplazado.</p>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="21_VariasVentanas.html" class="btn btn-neutral float-left" title="21 Varias Ventanas" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="23_SoporteJuegoCaracIntern.html" class="btn btn-neutral float-right" title="23 Soporte de Juego de Caracteres Internacional" accesskey="n" rel="next">Siguiente <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -0,0 +1,759 @@
<!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>23 Soporte de Juego de Caracteres Internacional &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="24 Modos Mayores y Menores" href="24_ModosMayores-Y-Menores.html" />
<link rel="prev" title="22 Marcos y Pantallas Gráficas" href="22_MarcosPantallasGraf.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.16
</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"><a class="reference internal" href="19_ManejoArchivos.html">19 Manejo de Archivos</a></li>
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">23 Soporte de Juego de Caracteres Internacional</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#introduccion-a-los-juegos-de-caracteres-internacionales">23.1 Introducción a los Juegos de Caracteres Internacionales</a></li>
<li class="toctree-l2"><a class="reference internal" href="#entornos-de-lenguaje">23.2 Entornos de Lenguaje</a></li>
<li class="toctree-l2"><a class="reference internal" href="#metodos-de-entrada">23.3 Métodos de Entrada</a></li>
<li class="toctree-l2"><a class="reference internal" href="#seleccion-de-un-metodo-de-entrada">23.4 Selección de un Método de Entrada</a></li>
<li class="toctree-l2"><a class="reference internal" href="#sistemas-de-codificacion">23.5 Sistemas de Codificación</a></li>
<li class="toctree-l2"><a class="reference internal" href="#reconocimiento-de-sistemas-de-codificacion">23.6. Reconocimiento de Sistemas de Codificación</a></li>
<li class="toctree-l2"><a class="reference internal" href="#especificar-el-sistema-de-codificacion-de-un-archivo">23.7 Especificar el Sistema de Codificación de un Archivo</a></li>
<li class="toctree-l2"><a class="reference internal" href="#eleccion-de-sistemas-de-codificacion-para-la-salida">23.8. Elección de Sistemas de Codificación para la Salida</a></li>
<li class="toctree-l2"><a class="reference internal" href="#especificar-un-sistema-de-codificacion-para-el-texto-de-un-archivo">23.9 Especificar un Sistema de Codificación para el Texto de un Archivo</a></li>
<li class="toctree-l2"><a class="reference internal" href="#sistemas-de-codificacion-para-la-comunicacion-interprocesos">23.10 Sistemas de Codificación para la Comunicación Interprocesos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#sistemas-de-codificacion-de-nombres-de-archivos">23.11 Sistemas de Codificación de Nombres de Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#sistemas-de-codificacion-para-la-entrada-de-teclado-x">23.12. Sistemas de Codificación para la Entrada de Teclado X</a></li>
<li class="toctree-l2"><a class="reference internal" href="#sistemas-de-codificacion-para-e-s-de-terminal">23.13 Sistemas de Codificación para E/S de Terminal</a></li>
<li class="toctree-l2"><a class="reference internal" href="#juegos-de-fuentes">23.14 Juegos de fuentes</a></li>
<li class="toctree-l2"><a class="reference internal" href="#definir-juegos-de-fuentes">23.15. Definir Juegos de Fuentes</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modificar-juegos-de-fuentes">23.16 Modificar Juegos de Fuentes</a></li>
<li class="toctree-l2"><a class="reference internal" href="#caracteres-no-visualizables">23.17 Caracteres no Visualizables</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modo-de-edicion-unibyte">23.18 Modo de Edición Unibyte</a></li>
<li class="toctree-l2"><a class="reference internal" href="#juegos-de-caracteres">23.19 Juegos de Caracteres</a></li>
<li class="toctree-l2"><a class="reference internal" href="#edicion-bidireccional">23.20 Edición Bidireccional</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</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">23 Soporte de Juego de Caracteres Internacional</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/CapConSecciones/23_SoporteJuegoCaracIntern.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="soporte-de-juego-de-caracteres-internacional">
<h1>23 Soporte de Juego de Caracteres Internacional<a class="headerlink" href="#soporte-de-juego-de-caracteres-internacional" title="Link to this heading"></a></h1>
<p>Emacs soporta una amplia variedad de juegos de caracteres internacionales, incluyendo las variantes europea y vietnamita del alfabeto latino, así como los alfabetos árabe, brahmánico (para lenguas como el bengalí, el hindi y el tailandés), cirílico, etíope, georgiano, griego, han (para chino y japonés), hangul (para coreano), hebreo e IPA. Emacs también admite varias codificaciones de estos caracteres que usan otros programas internacionalizados, como procesadores de texto y programas de correo.</p>
<p>Emacs permite editar texto con caracteres internacionales soportando todas las actividades relacionadas:</p>
<blockquote>
<div><ul class="simple">
<li><p>Puede visitar archivos con caracteres no ASCII, guardar texto no ASCII y pasar texto no ASCII entre Emacs y los programas que invoca (como compiladores, correctores ortográficos y</p></li>
</ul>
<p>programas de correo). Configurar su entorno de lenguaje (vea Entornos de Lenguaje) se encarga de configurar los sistemas de codificación y otras opciones para un lenguaje o cultura
específicos. Alternativamente, puede especificar cómo Emacs debe codificar o decodificar el texto para cada comando; vea Especificando un Sistema de Codificación para Texto de Archivo.</p>
<ul class="simple">
<li><p>Puede mostrar caracteres no ASCII codificados por los distintos scripts. Esto funciona usando las fuentes apropiadas en las pantallas gráficas (vea Definiendo Conjuntos de Fuentes),</p></li>
</ul>
<p>y enviando códigos especiales a las pantallas de texto (vea Sistemas de Codificación para E/S de Terminal). Si algunos caracteres no se visualizan correctamente, consulte Caracteres no
visualizables, donde se describen los posibles problemas y se explica cómo solucionarlos.</p>
<ul class="simple">
<li><p>Los caracteres de escrituras cuyo orden natural del texto es de derecha a izquierda se reordenan para su visualización (véase Edición Bidireccional). Estas escrituras incluyen el</p></li>
</ul>
<p>árabe, el hebreo, el siríaco, el thaana y algunas otras.</p>
<ul class="simple">
<li><p>Puede insertar caracteres no ASCII o buscarlos. Para ello, puede especificar un método de entrada de Emacs (ver Seleccionar un Método de Entrada) adecuado para su idioma, o usar el</p></li>
</ul>
<p>método de entrada por defecto configurado cuando elige su entorno de idioma. Si su teclado puede generar caracteres no ASCII, puede seleccionar un sistema de codificación de teclado
apropiado (vea Sistemas de Codificación para E/S de Terminal), y Emacs aceptará esos caracteres. En pantallas gráficas, los sistemas modernos normalmente proporcionan sus métodos de
entrada nativos, y los caracteres Latin-1 también pueden ser introducidos usando el prefijo C-x 8, ver Modo de Edición Unibyte.</p>
<p>Con el Sistema X Window, su configuración regional debería estar ajustada a un valor apropiado para asegurarse de que Emacs interpreta la entrada de teclado correctamente; vea
Configuraciones Regionales, y Sistemas de Codificación para Entrada de Teclado X.</p>
</div></blockquote>
<p>El resto de este capítulo describe estas cuestiones en detalle.</p>
<section id="introduccion-a-los-juegos-de-caracteres-internacionales">
<h2>23.1 Introducción a los Juegos de Caracteres Internacionales<a class="headerlink" href="#introduccion-a-los-juegos-de-caracteres-internacionales" title="Link to this heading"></a></h2>
<p>Los Usuarios de juegos de caracteres y scripts internacionales han establecido muchos sistemas de codificación más o menos estándar para almacenar archivos. Estos sistemas de codificación son típicamente multibyte, lo que significa que se usan secuencias de dos o más bytes para representar caracteres individuales no ASCII.</p>
<p>Internamente, Emacs usa su propia codificación de caracteres multibyte, que es un superconjunto del estándar Unicode. Esta codificación interna permite mezclar caracteres de casi todas las escrituras conocidas en un único búfer o cadena. Emacs traduce entre la codificación de caracteres multibyte y otros sistemas de codificación cuando lee y escribe archivos, y cuando intercambia datos con subprocesos.</p>
<p>El comando C-h h (view-hello-file) muestra el archivo etc/HELLO, que ilustra varios scripts mostrando cómo decir «hola» en muchos idiomas. Si algunos caracteres no pueden mostrarse en su terminal, aparecen como “?” o como recuadros huecos (consulte Caracteres no Mostrables).</p>
<p>Los teclados, incluso en los países donde se usan estos juegos de caracteres, no suelen tener teclas para todos los caracteres que contienen. Puede usar C-x 8 RET (insertar carácter) para insertar caracteres que su teclado no admite. Véase Insertar Texto. Existen abreviaturas para algunos caracteres comunes; por ejemplo, puede insertar una comilla simple izquierda “ tecleando C-x 8 [, o en el modo de Comillas Eléctricas, normalmente tecleando simplemente <a href="#id1"><span class="problematic" id="id2">`</span></a>. Vea Comillas. Emacs también soporta varios métodos de entrada, típicamente uno para cada script o lenguaje, que hacen más fácil teclear caracteres en el script. Ver Métodos de Entrada.</p>
<p>La tecla de prefijo C-x RET se usa para comandos relacionados con caracteres multibyte, sistemas de codificación y métodos de entrada.</p>
<p>El comando C-x = (what-cursor-position) muestra información sobre el carácter en el punto. Además de la posición del carácter, que se describió en Información sobre la posición del cursor, este comando muestra cómo está codificado el carácter. Por ejemplo, muestra la siguiente línea en el área de eco para el carácter “c”:</p>
<blockquote>
<div><p>Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53</p>
</div></blockquote>
<p>Los cuatro valores después de “Char:” describen el carácter que sigue al punto, primero mostrándolo y luego dando su código de carácter en decimal, octal y hexadecimal. Para un carácter multibyte no ASCII, éstos van seguidos de “archivo” y de la representación del carácter, en hexadecimal, en el sistema de codificación del búfer, si dicho sistema de codificación codifica el carácter de forma segura y con un solo byte (véase Sistemas de Codificación). Si la codificación del carácter es mayor que un byte, Emacs muestra “archivo …”.</p>
<p>En raras ocasiones, Emacs encuentra bytes crudos: bytes simples cuyos valores están en el rango de 128 (0200 octal) a 255 (0377 octal), que Emacs no puede interpretar como parte de una codificación conocida de algún carácter no ASCII. Tales bytes brutos se tratan como si pertenecieran a un juego de caracteres especial de ocho bits; Emacs los muestra como códigos octales escapados (esto puede personalizarse; véase Personalización de la Visualización). En este caso, C-x = muestra “raw-byte” en lugar de “archivo”. Además, C-x = muestra los códigos de carácter de los bytes raw como si estuvieran en el rango #x3FFF80..#x3FFFFF, que es donde Emacs los mapea para distinguirlos de los caracteres Unicode en el rango #x0080..#x00FF.</p>
<p>Con un argumento prefijo (C-u C-x =), este comando llama adicionalmente al comando describe-char, que muestra una descripción detallada del carácter:</p>
<blockquote>
<div><ul class="simple">
<li><p>El nombre del juego de caracteres, y los códigos que identifican al carácter dentro de ese juego de caracteres; los caracteres ASCII se identifican como pertenecientes al juego de</p></li>
</ul>
<p>caracteres ascii.</p>
<ul class="simple">
<li><p>La escritura, sintaxis y categorías del carácter.</p></li>
<li><p>Qué teclas hay que teclear para introducir el carácter en el método de entrada actual (si admite el carácter).</p></li>
<li><p>La codificación del carácter, tanto internamente en el búfer, como externamente si guardas el búfer en un archivo.</p></li>
<li><p>Si está ejecutando Emacs en una pantalla gráfica, el nombre de la fuente y el código del glifo para el carácter. Si está ejecutando Emacs en un terminal de texto, el(los) código(s)</p></li>
</ul>
<p>enviado(s) al terminal.</p>
<ul class="simple">
<li><p>Si el carácter se compuso en pantalla con alguno de los caracteres siguientes para formar uno o más grupos de grafemas, la información de composición: los glifos de la fuente si el</p></li>
</ul>
<p>marco está en una pantalla gráfica, y los caracteres que se compusieron.</p>
<ul class="simple">
<li><p>Las propiedades de texto del carácter (ver Propiedades de Texto en el Manual de Referencia de Emacs Lisp), incluyendo cualquier cara no predeterminada usada para mostrar el carácter,</p></li>
</ul>
<p>y cualquier superposición que lo contenga (ver Superposiciones en el mismo manual).</p>
</div></blockquote>
<p>He aquí un ejemplo, con algunas líneas plegadas para que quepan en este manual:</p>
<blockquote>
<div><blockquote>
<div><blockquote>
<div><p>position: 1 of 1 (0%), column: 0</p>
</div></blockquote>
<p>character: ê (displayed as ê) (codepoint 234, #o352, #xea)</p>
</div></blockquote>
<p>preferred charset: unicode (Unicode (ISO10646))</p>
</div></blockquote>
<dl>
<dt>code point in charset: 0xEA</dt><dd><blockquote>
<div><blockquote>
<div><blockquote>
<div><p>script: latin
syntax: w which means: word</p>
</div></blockquote>
<dl class="simple">
<dt>category: .:Base, L:Left-to-right (strong), c:Chinese,</dt><dd><p>j:Japanese, l:Latin, v:Viet</p>
</dd>
<dt>to input: type «C-x 8 RET ea» or</dt><dd><p>«C-x 8 RET LATIN SMALL LETTER E WITH CIRCUMFLEX»</p>
</dd>
</dl>
</div></blockquote>
<dl class="simple">
<dt>buffer code: #xC3 #xAA</dt><dd><dl class="simple">
<dt>file code: #xC3 #xAA (encoded by coding system utf-8-unix)</dt><dd><p>display: by this font (glyph code)</p>
</dd>
</dl>
</dd>
</dl>
</div></blockquote>
<dl class="simple">
<dt>xft:-PfEd-DejaVu Sans Mono-normal-normal-</dt><dd><p>normal-<em>-15-</em>-<em>-</em>-m-0-iso10646-1 (#xAC)</p>
</dd>
</dl>
</dd>
<dt>Character code properties: customize what to show</dt><dd><p>name: LATIN SMALL LETTER E WITH CIRCUMFLEX
old-name: LATIN SMALL LETTER E CIRCUMFLEX
general-category: Ll (Letter, Lowercase)
decomposition: (101 770) (“e” “^”)</p>
</dd>
<dt>posición: 1 de 1 (0%), columna: 0</dt><dd><blockquote>
<div><p>carácter: ê (visualizado como ê) (codepoint 234, #o352, #xea)</p>
</div></blockquote>
<p>juego de caracteres preferido: unicode (Unicode (ISO10646))</p>
</dd>
<dt>punto de código en charset: 0xEA</dt><dd><blockquote>
<div><blockquote>
<div><blockquote>
<div><p>escritura: latín
sintaxis: w que significa: palabra</p>
</div></blockquote>
<dl class="simple">
<dt>categoría: .:Base, L:Izquierda a derecha (fuerte), c:Chino,</dt><dd><p>j:japonés, l:latín, v:vietnamita</p>
</dd>
<dt>para introducir: escriba «C-x 8 RET ea» o</dt><dd><p>«C-x 8 RET LETRA PEQUEÑA LATINA E CON CIRCUMFLEX»</p>
</dd>
</dl>
</div></blockquote>
<dl class="simple">
<dt>código de búfer: #xC3 #xAA</dt><dd><dl class="simple">
<dt>código archivo: #xC3 #xAA (codificado por el sistema de codificación utf-8-unix)</dt><dd><p>visualización: por esta fuente (código de glifo)</p>
</dd>
</dl>
</dd>
</dl>
</div></blockquote>
<dl class="simple">
<dt>xft:-PfEd-DejaVu Sans Mono-normal-normal-</dt><dd><p>normal-<em>-15-</em>-<em>-</em>-m-0-iso10646-1 (#xAC)</p>
</dd>
</dl>
</dd>
<dt>Propiedades del código de caracteres: personalice qué mostrar</dt><dd><p>nombre: LETRA PEQUEÑA LATINA E CON CIRCUMFLEX
old-name: LETRA PEQUEÑA LATINA E CON CIRCUMFLEX
categoría-general Ll (letra, minúscula)
descomposición: (101 770) (“e” “^”)</p>
</dd>
</dl>
</section>
<section id="entornos-de-lenguaje">
<h2>23.2 Entornos de Lenguaje<a class="headerlink" href="#entornos-de-lenguaje" title="Link to this heading"></a></h2>
<p>Todos los conjuntos de caracteres soportados están admitidos en los búferes de Emacs siempre que estén habilitados los caracteres multibyte; no es necesario seleccionar un idioma en particular para mostrar sus caracteres. Sin embargo, es importante seleccionar un entorno de idioma para establecer varios valores por defecto. A grandes rasgos, el entorno de idioma representa una elección de escritura preferida más que una elección de idioma.</p>
<p>El entorno de idioma controla qué sistemas de codificación reconocer al leer texto (véase Reconocer Sistemas de Codificación). Esto se aplica a archivos, correo entrante y cualquier otro texto que leas en Emacs. También puede especificar el sistema de codificación por defecto que puede usar cuando crea un archivo. Cada entorno de lenguaje también especifica un método de entrada por defecto.</p>
<p>Para seleccionar un entorno de idioma, personalice current-language-environment o use el comando M-x set-language-environment. No hace ninguna diferencia qué búfer es el actual cuando use este comando, porque los efectos se aplican globalmente a la sesión de Emacs. Vea la variable language-info-alist para la lista de entornos de lenguaje soportados, y use el comando C-h L lang-env RET (describe-language-environment) para más información sobre el entorno de lenguaje lang-env. Los entornos de idioma admitidos son:</p>
<blockquote>
<div><p>ASCII, Arabic, Belarusian, Bengali, Brazilian Portuguese, Bulgarian, Burmese, Cham, Chinese-BIG5, Chinese-CNS, Chinese-EUC-TW, Chinese-GB, Chinese-GB18030, Chinese-GBK, Croatian,
Cyrillic-ALT, Cyrillic-ISO, Cyrillic-KOI8, Czech, Devanagari, Dutch, English, Esperanto, Ethiopic, French, Georgian, German, Greek, Gujarati, Hebrew, IPA, Italian, Japanese, Kannada,
Khmer, Korean, Lao, Latin-1, Latin-2, Latin-3, Latin-4, Latin-5, Latin-6, Latin-7, Latin-8, Latin-9, Latvian, Lithuanian, Malayalam, Oriya, Persian, Polish, Punjabi, Romanian,
Russian, Sinhala, Slovak, Slovenian, Spanish, Swedish, TaiViet, Tajik, Tamil, Telugu, Thai, Tibetan, Turkish, UTF-8, Ukrainian, Vietnamese, Welsh, and Windows-1255.</p>
</div></blockquote>
<p>Para mostrar la(s) secuencia(s) de comandos usada(s) por su entorno lingüístico en una pantalla gráfica, necesita tener fuentes adecuadas. Vea Fontsets, para más detalles sobre cómo configurar sus fuentes.</p>
<p>Algunos sistemas operativos le permiten especificar la configuración regional del juego de caracteres que está usando configurando las variables de entorno de configuración regional LC_ALL, LC_CTYPE o LANG. (Si se establece más de una de ellas, la primera que no esté vacía especifica su configuración regional para este propósito). Durante el arranque, Emacs busca el nombre de tu locale en la tabla de alias de locale del sistema, compara su nombre canónico con las entradas en el valor de las variables locale-charset-language-names y locale-language-names (la primera anula a la segunda), y selecciona el entorno de lenguaje correspondiente si encuentra una coincidencia. También ajusta la tabla de visualización y el sistema de codificación del terminal, el sistema de codificación de la configuración regional, el sistema de codificación preferido según sea necesario para la configuración regional y, por último pero no menos importante, la forma en que Emacs decodifica los caracteres no ASCII enviados por el teclado.</p>
<p>Si modifica las variables de entorno LC_ALL, LC_CTYPE, o LANG mientras ejecuta Emacs (usando M-x setenv), puede que quiera invocar el comando set-locale-environment después para reajustar el entorno de lenguaje desde la nueva localización.</p>
<p>La función set-locale-environment normalmente usa el sistema de codificación preferido establecido por el entorno del lenguaje para decodificar los mensajes del sistema. Pero si su localización coincide con una entrada de la variable locale-preferred-coding-systems, Emacs usa el sistema de codificación correspondiente. Por ejemplo, si la localización “ja_JP.PCK” coincide con japanese-shift-jis en locale-preferred-coding-systems, Emacs usa esa codificación aunque normalmente use utf-8.</p>
<p>Puede anular el entorno de idioma elegido al arrancar usando explícitamente el comando set-language-environment, o personalizando current-language-environment en su archivo init.</p>
<p>Para mostrar información sobre los efectos de un determinado entorno de idioma lang-env, use el comando C-h L lang-env RET (describe-language-environment). Esto le indica para qué lenguajes es útil este entorno de lenguaje, y enumera los juegos de caracteres, sistemas de codificación y métodos de entrada que van con él. También muestra algunos ejemplos de texto para ilustrar los scripts usados en este entorno de lenguaje. Si da una entrada vacía para lang-env, este comando describe el entorno de lenguaje elegido.</p>
<p>Puede personalizar cualquier entorno de idioma con el hook normal set-language-environment-hook. El comando set-language-environment ejecuta ese hook (gancho) después de configurar el nuevo entorno de idioma. Las funciones del gancho pueden comprobar un entorno de idioma específico comprobando la variable current-language-environment. Este gancho es donde debe poner los ajustes no predeterminados para entornos de idioma específicos, como los sistemas de codificación para la entrada de teclado y la salida de terminal, el método de entrada predeterminado, etc.</p>
<p>Antes de empezar a configurar el nuevo entorno de idioma, set-language-environment ejecuta primero el gancho exit-language-environment-hook. Este gancho es útil para deshacer las personalizaciones que se hicieron con set-language-environment-hook. Por ejemplo, si ha configurado un enlace especial para una tecla en un entorno de idioma específico usando set-language-environment-hook, debería ejecutar exit-language-environment-hook para restaurar el enlace normal para esa tecla.</p>
</section>
<section id="metodos-de-entrada">
<h2>23.3 Métodos de Entrada<a class="headerlink" href="#metodos-de-entrada" title="Link to this heading"></a></h2>
<p>Un método de entrada es un tipo de conversión de caracteres diseñado específicamente para la entrada interactiva. Esta sección describe los métodos de entrada que vienen con Emacs; para los métodos de entrada nativos proporcionados por el SO subyacente, vea Modo de Edición Unibyte.</p>
<p>En Emacs, normalmente cada lenguaje tiene su propio método de entrada; a veces varios lenguajes que usan los mismos caracteres pueden compartir un método de entrada. Algunos lenguajes soportan varios métodos de entrada.</p>
<p>El tipo más simple de método de entrada funciona mapeando letras ASCII en otro alfabeto; esto le permite usar otro alfabeto en lugar de ASCII. Los métodos de entrada griego y ruso funcionan de este modo.</p>
<p>Una técnica más potente es la composición: convertir secuencias de caracteres en una sola letra. Muchos métodos de entrada europeos usan la composición para producir una sola letra no ASCII a partir de una secuencia formada por una letra seguida de caracteres acentuados (o viceversa). Por ejemplo, algunos métodos convierten la secuencia o ^ en una sola letra acentuada. Estos métodos de entrada no tienen comandos especiales propios; lo único que hacen es componer secuencias de caracteres de imprenta.</p>
<p>Los métodos de entrada de caracteres silábicos suelen usar el mapeo seguido de la composición. Es el caso del tailandés y el coreano. En primer lugar, las letras se convierten en símbolos de determinados sonidos o marcas tonales y, a continuación, las secuencias que forman una sílaba completa se convierten en un signo silábico.</p>
<p>El chino y el japonés requieren métodos más complejos. En los métodos de entrada chinos, primero se introduce la grafía fonética de una palabra china (en el método de entrada chinese-py, entre otros), o una secuencia de porciones del carácter (métodos de entrada chinese-4corner y chinese-sw, entre otros). Una secuencia de entrada suele corresponder a muchos caracteres chinos posibles. El Usuario selecciona el que le interesa usando teclas como C-f, C-b, C-n, C-p (o las teclas de flecha) y dígitos, que tienen un significado especial en esta situación.</p>
<p>Los caracteres posibles están dispuestos conceptualmente en varias filas, cada una de las cuales contiene hasta 10 alternativas. Normalmente, Emacs muestra sólo una fila cada vez, en el área de eco; (i/j) aparece al principio, para indicar que ésta es la fila ith de un total de j filas. Teclee C-n o C-p para mostrar la fila siguiente o la anterior.</p>
<p>Teclee C-f y C-b para avanzar y retroceder entre las alternativas de la fila actual. Al hacer esto, Emacs resalta la alternativa actual con un color especial; teclee C-SPC para seleccionar la alternativa actual y usarla como entrada. Las alternativas de la fila también están numeradas; el número aparece antes de la alternativa. Al teclear un número se selecciona la alternativa asociada de la fila actual y se usa como entrada.</p>
<p>TAB en estos métodos de entrada en chino muestra un búfer con todos los caracteres posibles a la vez; si se pulsa con ratón-2 sobre uno de ellos, se selecciona esa alternativa. Las teclas C-f, C-b, C-n, C-p y los dígitos siguen funcionando como de costumbre, pero realizan el resaltado en el búfer que muestra los caracteres posibles, en lugar de hacerlo en el área de eco.</p>
<p>Para introducir caracteres según el método de transliteración pīnyīn en su lugar, use el método de entrada chino-sisheng. Se trata de un método basado en la composición, en el que, por ejemplo, pi1 da como resultado “pī”.</p>
<p>En los métodos de entrada japoneses, primero se introduce una palabra entera usando la ortografía fonética; después, una vez que la palabra está en el búfer, Emacs la convierte en uno o más caracteres usando un gran diccionario. Una ortografía fonética corresponde a varias palabras japonesas diferentes; para seleccionar una de ellas, use C-n y C-p para recorrer las alternativas.</p>
<p>A veces resulta útil interrumpir el procesamiento del método de entrada para que los caracteres que acaba de introducir no se combinen con los caracteres siguientes. Por ejemplo, en el método de entrada latin-1-postfix, la secuencia o ^ se combina para formar una «o» con acento. ¿Qué ocurre si desea introducirlos como caracteres separados?</p>
<p>Una forma es escribir el acento dos veces; se trata de una función especial para introducir la letra y el acento por separado. Por ejemplo, o ^ ^ le da los dos caracteres “o^”. Otra forma es escribir otra letra después de la o -algo que no se combine con ella- y borrarla inmediatamente. Por ejemplo, puede escribir o o DEL ^ para obtener “o” y “^” por separado. Otro método, más general pero no tan fácil de escribir, es usar C-C-entre dos caracteres para impedir que se combinen. Este es el comando C-(toggle-input-method) usado dos veces. Véase Seleccionar un Método de Entrada.</p>
<p>C-C-es especialmente útil dentro de una búsqueda incremental, porque deja de esperar a que se combinen más caracteres y empieza a buscar lo que ya ha introducido.</p>
<p>Para saber cómo introducir el carácter después del punto usando el método de entrada actual, escriba C-u C-x =. Véase Información sobre la Posición del Cursor.</p>
<p>Las variables input-method-highlight-flag y input-method-verbose-flag controlan cómo los métodos de entrada explican lo que está sucediendo. Si input-method-highlight-flag no es nulo, la secuencia parcial se resalta en el búfer (para la mayoría de los métodos de entrada-algunos desactivan esta característica). Si input-method-verbose-flag es no-nil, la lista de posibles caracteres a escribir a continuación se muestra en el área de eco (pero no cuando se está en el minibúfer).</p>
<p>Puede modificar el funcionamiento de un método de entrada realizando los cambios en una función que añada a la variable hook quail-activate-hook. Véase Ganchos. Por ejemplo, puede redefinir algunas de las teclas del método de entrada definiendo las combinaciones de teclas en el mapa de teclas devuelto por la función quail-translation-keymap, usando define-key. Véase Redefinición de Teclas en el Archivo de Inicio.</p>
<p>Los métodos de entrada se inhiben cuando el texto del búfer es de sólo lectura por algún motivo. De este modo, las combinaciones de teclas de un solo carácter funcionan en modos que hacen que el texto del búfer o partes de él sean de sólo lectura, como el modo de sólo lectura y el modo de imagen, incluso cuando un método de entrada está activo.</p>
<p>Otra forma de escribir caracteres que no se encuentran en el teclado es usar C-x 8 RET (insertar carácter) para insertar un único carácter basándose en su nombre Unicode o punto de código; consulte Insertar texto.</p>
<p>Existen comandos especializados para insertar Emoji, que se pueden encontrar en el mapa de teclas C-x 8 e. C-x 8 e e (emoji-insert) le permitirá navegar por las diferentes categorías de Emoji y elegir una. C-x 8 e l (emoji-list) abrirá un nuevo búfer y listará todos los Emoji; pulsando (o usando RET) sobre un carácter emoji lo insertará en el búfer actual. Finalmente, C-x 8 e s (emoji-search) te permitirá buscar Emoji basados en sus nombres.</p>
<p>describe-char muestra mucha información sobre el carácter/glifo en cuestión (incluidos los emojis). A veces es útil obtener una descripción rápida del nombre, y puedes usar el comando C-x 8 e d (emoji-describe) para hacerlo. Está pensado principalmente para ayudarte a distinguir entre diferentes variantes de Emoji (que pueden parecerse mucho), pero también le dirá los nombres de caracteres que no son Emoji.</p>
</section>
<section id="seleccion-de-un-metodo-de-entrada">
<h2>23.4 Selección de un Método de Entrada<a class="headerlink" href="#seleccion-de-un-metodo-de-entrada" title="Link to this heading"></a></h2>
<dl class="simple">
<dt>C-</dt><dd><p>Activar o desactivar el uso del método de entrada seleccionado (toggle-input-method).</p>
</dd>
<dt>C-x RET C-method RET</dt><dd><p>Selecciona un nuevo método de entrada para el búfer actual (set-input-method).</p>
</dd>
<dt>C-x method RET</dt><dd><p>Activa temporalmente el método de entrada transitoria seleccionado ; se desactivará automáticamente tras insertar un solo carácter (activate-transient-input-method).</p>
</dd>
</dl>
<p>C-h I method RET
C-h C-method RET</p>
<blockquote>
<div><p>Describe el método de entrada (describe-input-method). Por defecto, describe el método de entrada actual (si existe). Esta descripción debería darle todos los detalles de cómo usar
cualquier método de entrada en particular.</p>
</div></blockquote>
<dl class="simple">
<dt>M-x list-input-methods</dt><dd><p>Muestra una lista de todos los métodos de entrada admitidos.</p>
</dd>
</dl>
<p>Para elegir un método de entrada para el búfer actual, use C-x RET C-(set-input-method). Este comando lee el nombre del método de entrada del minibúfer; el nombre normalmente empieza por el entorno de lenguaje con el que se va a usar. La variable current-input-method registra qué método de entrada está seleccionado.</p>
<p>Los métodos de entrada usan varias secuencias de caracteres ASCII para representar caracteres no ASCII. A veces es útil desactivar temporalmente el método de entrada. Para ello, escriba C-(toggle-input-method). Para volver a activar el método de entrada, escriba C-de nuevo.</p>
<p>Si teclea C-y aún no ha seleccionado un método de entrada, se le pedirá que especifique uno. Esto tiene el mismo efecto que usar C-x RET C-para especificar un método de entrada.</p>
<p>Cuando se invoca con un argumento numérico, como en C-u C-, toggle-input-method siempre le pregunta por un método de entrada, sugiriendo el seleccionado más recientemente como predeterminado.</p>
<p>Seleccionar un entorno de lenguaje especifica un método de entrada por defecto para usar en varios búferes. Cuando tiene un método de entrada por defecto, puede seleccionarlo en el búfer actual tecleando C-. La variable default-input-method especifica el método de entrada por defecto (nil significa que no hay ninguno).</p>
<p>En algunos entornos de lenguaje, que soportan varios métodos de entrada diferentes, puede que quiera usar un método de entrada diferente del elegido por defecto por set-language-environment. Si lo desea, puede ordenar a Emacs que seleccione un método de entrada por defecto diferente para un determinado entorno de lenguaje, usando set-language-environment-hook (ver set-language-environment-hook). Por ejemplo:</p>
<blockquote>
<div><dl>
<dt>(defun my-chinese-setup ()</dt><dd><p>«Set up my private Chinese environment.»
(if (equal current-language-environment «Chinese-GB»)</p>
<blockquote>
<div><p>(setq default-input-method «chinese-tonepy»)))</p>
</div></blockquote>
</dd>
</dl>
<p>(add-hook “set-language-environment-hook “my-chinese-setup)</p>
</div></blockquote>
<p>Esto establece que el método de entrada por defecto sea chinese-tonepy siempre que elijas un entorno de lenguaje Chinese-GB.</p>
<p>Puede ordenar a Emacs que active un determinado método de entrada automáticamente. Por ejemplo:</p>
<blockquote>
<div><dl class="simple">
<dt>(add-hook “text-mode-hook</dt><dd><p>(lambda () (set-input-method «german-prefix»)))</p>
</dd>
</dl>
</div></blockquote>
<p>Esto activa automáticamente el método de entrada prefijo-alemán en el modo Texto.</p>
<p>Algunos métodos de entrada para scripts alfabéticos funcionan (en efecto) remapeando el teclado para emular varias distribuciones de teclado comúnmente usadas para esos scripts. La forma correcta de realizar esta reasignación depende de la distribución real de su teclado. Para especificar la distribución de tu teclado, usa el comando M-x quail-set-keyboard-layout.</p>
<p>Puede usar el comando M-x quail-show-key para mostrar qué tecla (o secuencia de teclas) debe teclear para introducir el carácter siguiente al punto, usando la distribución de teclado seleccionada. El comando C-u C-x = también muestra esa información, además de otra información sobre el carácter.</p>
<p>M-x list-input-methods muestra una lista de todos los métodos de entrada soportados. La lista ofrece información sobre cada método de entrada, incluida la cadena que lo representa en la línea de modo.</p>
<p>A veces puede ser conveniente activar un método de entrada de forma transitoria, para insertar un solo carácter. Tecleando C-x (activar-método-de-entrada-transitorio) habilitará temporalmente un método de entrada, le permitirá insertar un solo carácter usando las reglas del método de entrada, y luego deshabilitará automáticamente el método de entrada. Si aún no se ha seleccionado ningún método de entrada transitorio, C-x le pedirá un método de entrada; las siguientes invocaciones de este comando activarán el método de entrada transitorio seleccionado. Para seleccionar otro método de entrada de transitorios, escriba C-u C-x . Puede seleccionar un método transitorio que sea diferente del método de entrada que seleccionó usando C-u C-.</p>
</section>
<section id="sistemas-de-codificacion">
<h2>23.5 Sistemas de Codificación<a class="headerlink" href="#sistemas-de-codificacion" title="Link to this heading"></a></h2>
<p>Usuarios de varios lenguajes han establecido muchos sistemas de codificación más o menos estándar para representarlos. Emacs no usa estos sistemas de codificación internamente; en su lugar, convierte de varios sistemas de codificación a su propio sistema cuando lee datos, y convierte el sistema de codificación interno a otros sistemas de codificación cuando escribe datos. La conversión es posible al leer o escribir archivos, al enviar o recibir desde el terminal, y al intercambiar datos con subprocesos.</p>
<p>Emacs asigna un nombre a cada sistema de codificación. La mayoría de los sistemas de codificación se usan para un idioma, y el nombre del sistema de codificación empieza con el nombre del idioma. Algunos sistemas de codificación se usan para varios idiomas; sus nombres suelen empezar por “iso”. También existen sistemas de codificación especiales, como no-conversion, raw-text y emacs-internal.</p>
<p>Una clase especial de sistemas de codificación, conocidos colectivamente como codepages, está diseñada para soportar texto codificado por software MS-Windows y MS-DOS. Los nombres de estos sistemas de codificación son cpnnnn, donde nnnn es un número de 3 ó 4 dígitos de la página de codificación. Puede usar estas codificaciones como cualquier otro sistema de codificación; por ejemplo, para visitar un archivo codificado en la página 850, escriba C-x RET c cp850 RET C-x C-f nombrearchivo RET.</p>
<p>Además de convertir varias representaciones de caracteres no ASCII, un sistema de codificación puede realizar la conversión de final de línea. Emacs maneja tres convenciones diferentes para separar líneas en un archivo: nueva línea (Unix), retorno de carro seguido de salto de línea (DOS) y sólo retorno de carro (Mac).</p>
<dl class="simple">
<dt>C-h C codificación RET</dt><dd><p>Describe la codificación del sistema de codificación (describe-coding-system).</p>
</dd>
<dt>C-h C RET</dt><dd><p>Describe los sistemas de codificación que se están usando en este momento (describe-coding-system).</p>
</dd>
<dt>M-x list-codificación-systems</dt><dd><p>Muestra una lista de todos los sistemas de codificación compatibles.</p>
</dd>
</dl>
<p>El comando C-h C (describe-coding-system) muestra información sobre sistemas de codificación particulares, incluyendo la conversión de final de línea especificada por esos sistemas de codificación. Puede especificar un nombre de sistema de codificación como argumento; alternativamente, con un argumento vacío, describe los sistemas de codificación actualmente seleccionados para varios propósitos, tanto en el búfer actual como por defecto, y la lista de prioridades para reconocer sistemas de codificación (ver Reconocimiento de Sistemas de Codificación).</p>
<p>Para mostrar una lista de todos los sistemas de codificación soportados, escriba M-x list-coding-systems. La lista ofrece información sobre cada sistema de codificación, incluida la letra que lo representa en la línea de modo (véase La Línea de Modo).</p>
<p>Cada uno de los sistemas de codificación que aparecen en esta lista -excepto no-conversion, que significa sin conversión de ningún tipo- especifica cómo y si convertir los caracteres de impresión, pero deja que la elección de la conversión de final de línea se decida en función del contenido de cada archivo. Por ejemplo, si el archivo parece usar la secuencia de retorno de carro y salto de línea para separar líneas, se usará la conversión de fin de línea DOS.</p>
<p>Cada uno de los sistemas de codificación enumerados tiene tres variantes, que especifican exactamente qué hacer para la conversión de fin de línea:</p>
<dl class="simple">
<dt>…-unix</dt><dd><p>No haga ninguna conversión de final de línea; asuma que el archivo usa newline para separar líneas. (Esta es la convención normalmente usada en sistemas Unix y GNU, y macOS).</p>
</dd>
<dt>…-dos</dt><dd><p>Suponga que el archivo usa el retorno de carro seguido del salto de línea para separar las líneas y haga la conversión correspondiente. (Esta es la convención que se usa normalmente
en los sistemas Microsoft.9)</p>
</dd>
<dt>…-mac</dt><dd><p>Asuma que el archivo usa el retorno de carro para separar líneas, y haga la conversión apropiada. (Esta era la convención usada en el Mac OS clásico).</p>
</dd>
</dl>
<p>Estas variantes de los sistemas de codificación se omiten de la lista de sistemas de codificación para abreviar, ya que son totalmente predecibles. Por ejemplo, el sistema de codificación iso-latin-1 tiene variantes iso-latin-1-unix, iso-latin-1-dos e iso-latin-1-mac.</p>
<p>Los sistemas de codificación unix, dos y mac son alias de undecided-unix, undecided-dos y undecided-mac, respectivamente. Estos sistemas de codificación sólo especifican la conversión de final de línea, y dejan que la conversión del código de caracteres se deduzca del propio texto.</p>
<p>El sistema de codificación raw-text es bueno para un archivo que es principalmente texto ASCII, pero puede contener valores de bytes por encima de 127 que no están destinados a codificar caracteres no ASCII. Con raw-text, Emacs copia esos valores de byte sin cambiarlos, y pone enable-multibyte-characters a nil en el búfer actual para que se interpreten correctamente. raw-text maneja la conversión de final de línea de la forma habitual, basándose en los datos encontrados, y tiene las tres variantes habituales para especificar el tipo de conversión de final de línea a usar.</p>
<p>Por el contrario, el sistema de codificación sin conversión no especifica ninguna conversión de código de caracteres: ninguna para valores de bytes no ASCII y ninguna para finales de línea. Esto es útil para leer o escribir archivos binarios, archivos tar y otros archivos que deben examinarse textualmente. También establece enable-multibyte-characters a nil.</p>
<p>La forma más sencilla de editar un archivo sin ningún tipo de conversión es con el comando M-x find-file-literally. Esto usa no-conversion, y también suprime otras características de Emacs que podrían convertir el contenido del archivo antes de que lo vea. Ver Visitando archivos.</p>
<p>El sistema de codificación emacs-internal (o utf-8-emacs, que es equivalente) significa que el archivo contiene caracteres no ASCII almacenados con la codificación interna de Emacs. Este sistema de codificación maneja la conversión de final de línea basándose en los datos encontrados, y tiene las tres variantes habituales para especificar el tipo de conversión de final de línea.</p>
<ol class="arabic simple" start="9">
<li><p>También se especifica para cuerpos MIME “text/<a href="#id3"><span class="problematic" id="id4">*</span></a>” y en otros contextos de transporte de red. Es diferente del formato record-start/record-end de la sintaxis de referencia SGML, que Emacs no soporta directamente.</p></li>
</ol>
</section>
<section id="reconocimiento-de-sistemas-de-codificacion">
<h2>23.6. Reconocimiento de Sistemas de Codificación<a class="headerlink" href="#reconocimiento-de-sistemas-de-codificacion" title="Link to this heading"></a></h2>
<p>Siempre que Emacs lee un trozo de texto dado, intenta reconocer qué sistema de codificación usar. Esto se aplica a archivos que se leen, salidas de subprocesos, texto de selecciones X, etc. Emacs puede seleccionar el sistema de codificación correcto automáticamente la mayoría de las veces, una vez que hayas especificado tus preferencias.</p>
<p>Algunos sistemas de codificación pueden reconocerse o distinguirse por las secuencias de bytes que aparecen en los datos. Sin embargo, hay sistemas de codificación que no pueden distinguirse, ni siquiera potencialmente. Por ejemplo, no hay forma de distinguir entre Latin-1 y Latin-2; usan los mismos valores de byte con diferentes significados.</p>
<p>Emacs maneja esta situación mediante una lista prioritaria de sistemas de codificación. Siempre que Emacs lee un archivo, si no se especifica el sistema de codificación a usar, Emacs comprueba los datos contra cada sistema de codificación, empezando por el primero en prioridad y bajando por la lista, hasta que encuentra un sistema de codificación que se ajusta a los datos. Entonces convierte el contenido del archivo asumiendo que está representado en este sistema de codificación.</p>
<p>La lista de prioridades de los sistemas de codificación depende del entorno lingüístico seleccionado (véase Entornos de Lenguaje). Por ejemplo, si usa el francés, probablemente querrá que Emacs prefiera el latín-1 al latín-2; si usa el checo, probablemente querrá que se prefiera el latín-2. Esta es una de las razones para especificar un entorno de lenguaje.</p>
<p>Sin embargo, puede alterar la lista de prioridades del sistema de codificación en detalle con el comando M-x prefer-coding-system. Este comando lee el nombre de un sistema de codificación del minibúfer y lo añade al principio de la lista de prioridades, de modo que se prefiere a todos los demás. Si usa este comando varias veces, cada vez que lo use añadirá un elemento al principio de la lista de prioridades.</p>
<p>Si usa un sistema de codificación que especifica el tipo de conversión de final de línea, como iso-8859-1-dos, lo que esto significa es que Emacs debería intentar reconocer iso-8859-1 con prioridad, y debería usar la conversión de final de línea DOS cuando reconozca iso-8859-1.</p>
<p>A veces un nombre de archivo indica qué sistema de codificación usar para el archivo. La variable file-coding-system-alist especifica esta correspondencia. Existe una función especial modify-coding-system-alist para añadir elementos a esta lista. Por ejemplo, para leer y escribir todos los archivos “.txt” usando el sistema de codificación chinese-iso-8bit, puede ejecutar esta expresión Lisp:</p>
<blockquote>
<div><p>(modify-coding-system-alist “file «\.txt\”» “chinese-iso-8bit)</p>
</div></blockquote>
<p>El primer argumento debe ser archivo, el segundo argumento debe ser una expresión regular que determine a qué archivos se aplica esto, y el tercer argumento dice qué sistema de codificación usar para estos archivos.</p>
<p>Emacs reconoce qué tipo de conversión de fin de línea usar basándose en el contenido del archivo: si sólo ve retornos de carro, o sólo retornos de carro seguidos de secuencias de salto de línea, entonces elige la conversión de fin de línea en consecuencia. Puede inhibir el uso automático de la conversión de fin de línea estableciendo la variable inhibit-eol-conversion en no nil. Si lo hace, los archivos estilo DOS se mostrarán con los caracteres “^M” visibles en el búfer; algunas personas prefieren esto a la más sutil indicación de tipo de fin de línea “(DOS)” cerca del borde izquierdo de la línea de modo (véase eol-mnemonic).</p>
<p>Por defecto, la detección automática del sistema de codificación es sensible a las secuencias de escape. Si Emacs ve una secuencia de caracteres que comienza con un carácter de escape, y la secuencia es válida como un código ISO-2022, eso le dice a Emacs que use una de las codificaciones ISO-2022 para decodificar el archivo.</p>
<p>Sin embargo, puede haber casos en los que desee leer secuencias de escape en un archivo tal cual. En tal caso, puede establecer la variable inhibit-iso-escape-detection a no nil. Entonces la detección de código ignora cualquier secuencia de escape, y nunca usa una codificación ISO-2022. El resultado es que todas las secuencias de escape se hacen visibles en el búfer.</p>
<p>El valor por defecto de inhibit-iso-escape-detection es nil. Le recomendamos que no lo cambie permanentemente, sólo para una operación específica. Esto se debe a que algunos archivos fuente de Emacs Lisp en la distribución de Emacs contienen caracteres no ASCII codificados en el sistema de codificación iso-2022-7bit, y no serán decodificados correctamente cuando visites esos archivos si suprimes la detección de secuencias de escape.</p>
<p>Las variables auto-coding-alist y auto-coding-regexp-alist son la forma más potente de especificar el sistema de codificación para ciertos patrones de nombres de archivo, o para archivos que contengan ciertos patrones, respectivamente. Estas variables incluso anulan las etiquetas “-<em>-coding:-</em>-” del propio archivo (véase Especificación del Sistema de Codificación de un Archivo). Por ejemplo, Emacs usa auto-coding-alist para ficheros tar y de archivo, para evitar que se confunda con una etiqueta “-<em>-coding:-</em>-” en un miembro del archivo y piense que se aplica al fichero de archivo como un todo.</p>
<p>Otra forma de especificar un sistema de codificación es con la variable auto-coding-functions. Por ejemplo, una de las funciones de codificación automática incorporadas detecta la codificación de los archivos XML. A diferencia de las dos anteriores, esta variable no anula ninguna etiqueta “-<em>-coding:-</em>-“.</p>
</section>
<section id="especificar-el-sistema-de-codificacion-de-un-archivo">
<h2>23.7 Especificar el Sistema de Codificación de un Archivo<a class="headerlink" href="#especificar-el-sistema-de-codificacion-de-un-archivo" title="Link to this heading"></a></h2>
<p>Si Emacs reconoce la codificación de un archivo incorrectamente, puede releer el archivo usando el sistema de codificación correcto con C-x RET r (revert-búfer-with-coding-system). Este comando pregunta por el sistema de codificación a usar. Para ver qué sistema de codificación usó Emacs para decodificar el archivo, mira la letra mnemotécnica del sistema de codificación cerca del borde izquierdo de la línea de modo (ver La línea de Modo), o teclea C-h C (describe-coding-system).</p>
<p>Puede especificar el sistema de codificación para un archivo en particular en el propio archivo, usando la construcción “-<em>-…-</em>-” al principio, o una lista de variables locales al final (vea Variables locales en archivos). Esto se hace definiendo un valor para la «variable» llamada codificación. Emacs no tiene realmente una variable codificación; en lugar de establecer una variable, esto usa el sistema de codificación especificado para el archivo. Por ejemplo, “-<em>-mode: C; coding: latin-1; -</em>-” especifica usar el sistema de codificación Latin-1, así como el modo C. Cuando se especifica la codificación explícitamente en el archivo, se anula la lista de sistemas de codificación del archivo.</p>
</section>
<section id="eleccion-de-sistemas-de-codificacion-para-la-salida">
<h2>23.8. Elección de Sistemas de Codificación para la Salida<a class="headerlink" href="#eleccion-de-sistemas-de-codificacion-para-la-salida" title="Link to this heading"></a></h2>
<p>Una vez que Emacs ha elegido un sistema de codificación para un búfer, almacena ese sistema de codificación en buffer-file-coding-system. Esto lo convierte en el predeterminado para las operaciones que escriben desde este búfer a un archivo, como save-buffer y write-region. Puede especificar un sistema de codificación diferente para la salida de archivos desde el búfer usando set-buffer-file-coding-system (vea Especificando un Sistema de Codificación para Texto de Archivo).</p>
<p>Puede insertar cualquier carácter que Emacs soporte en cualquier búfer de Emacs, pero la mayoría de los sistemas de codificación sólo pueden manejar un subconjunto de estos caracteres. Por lo tanto, es posible que los caracteres que inserte no puedan ser codificados con el sistema de codificación que se usará para guardar el búfer. Por ejemplo, podría visitar un archivo de texto en polaco, codificado en iso-8859-2, y añadirle algunas palabras en ruso. Cuando guarde ese búfer, Emacs no podrá usar el valor actual de buffer-file-coding-system, porque los caracteres que añadió no pueden ser codificados por ese sistema de codificación.</p>
<p>Cuando ocurre esto, Emacs prueba el sistema de codificación más preferido (establecido por M-x prefer-coding-system o M-x set-language-environment). Si ese sistema de codificación puede codificar con seguridad todos los caracteres del búfer, Emacs lo usa, y almacena su valor en buffer-file-coding-system. Si no, Emacs muestra una lista de sistemas de codificación adecuados para codificar el contenido del búfer, y le pide que elija uno de esos sistemas de codificación.</p>
<p>Si inserta los caracteres inadecuados en un mensaje de correo, Emacs se comporta de forma un poco diferente. Adicionalmente comprueba si el sistema de codificación más preferido está recomendado para usar en mensajes MIME; si no es así, le informa de este hecho y le pregunta por otro sistema de codificación. Esto se hace para que no envíe inadvertidamente un mensaje codificado de forma que el software de correo de su destinatario tenga dificultades para descodificarlo. (Todavía puede usar un sistema de codificación inadecuado si introduce su nombre en la pregunta).</p>
<p>Cuando envías un mensaje de correo (ver Enviando Correo), Emacs tiene cuatro maneras diferentes de determinar el sistema de codificación a usar para codificar el texto del mensaje. Primero prueba con el valor propio del búfer de sistema de codificación del archivo del búfer, si no es nulo. En segundo lugar, usa el valor de sendmail-coding-system, si no es nulo. En tercer lugar, usa el valor de default-sendmail-coding-system. Si estos tres valores son nulos, Emacs codifica el correo saliente usando el sistema de codificación por defecto para archivos nuevos (es decir, el valor por defecto de buffer-file-coding-system), que es controlado por la elección del entorno de lenguaje.</p>
</section>
<section id="especificar-un-sistema-de-codificacion-para-el-texto-de-un-archivo">
<h2>23.9 Especificar un Sistema de Codificación para el Texto de un Archivo<a class="headerlink" href="#especificar-un-sistema-de-codificacion-para-el-texto-de-un-archivo" title="Link to this heading"></a></h2>
<p>En los casos en los que Emacs no elige automáticamente el sistema de codificación adecuado para el contenido de un archivo, puede usar estos comandos para especificar uno:</p>
<dl class="simple">
<dt>C-x RET f codificación RET</dt><dd><p>Usa la codificación del sistema para guardar o volver a visitar el archivo en el búfer actual (set-buffer-file-coding-system).</p>
</dd>
<dt>C-x RET c coding RET</dt><dd><p>Especifica la codificación del sistema de codificación para el comando inmediatamente siguiente (universal-coding-system-argument).</p>
</dd>
<dt>C-x RET r coding RET</dt><dd><p>Revierte el archivo actual usando el sistema de codificación (revert-búfer-with-coding-system).</p>
</dd>
<dt>M-x recode-region RET right RET wrong RET</dt><dd><p>Convierte una región que se descodificó usando un sistema de codificación incorrecto, descodificándola y usando en su lugar el sistema de codificación correcto.</p>
</dd>
</dl>
<p>El comando C-x RET f (set-buffer-file-coding-system) establece el sistema de codificación de archivos para el búfer actual (es decir, el sistema de codificación que se usará al guardar o revertir el archivo). El sistema de codificación se especifica usando el minibúfer. También puede invocar este comando haciendo clic con el ratón-3 en el indicador del sistema de codificación en la línea de modo (véase La línea de Modo).</p>
<p>Si especifica un sistema de codificación que no puede manejar todos los caracteres del búfer, Emacs le advertirá sobre los caracteres problemáticos, y le pedirá que elija otro sistema de codificación, cuando intente guardar el búfer (vea Elegir Sistemas de Codificación para la Salida).</p>
<p>También puede usar este comando para especificar la conversión de final de línea (vea conversión de final de línea) para codificar el búfer actual. Por ejemplo, C-x RET f dos RET hará que Emacs guarde el texto del búfer actual con retorno de carro estilo DOS seguido de finales de línea con salto de línea.</p>
<p>Otra forma de especificar el sistema de codificación de un archivo es cuando se visita el archivo. Primero use el comando C-x RET c (universal-coding-system-argument); este comando usa el minibúfer para leer un nombre de sistema de codificación. Después de salir del minibúfer, el sistema de codificación especificado se usa para el comando inmediatamente siguiente.</p>
<p>Así, por ejemplo, si el comando inmediatamente siguiente es C-x C-f, lee el archivo usando ese sistema de codificación (y registra el sistema de codificación para cuando guarde el archivo más tarde). O si el comando inmediatamente siguiente es C-x C-w, escribe el archivo usando ese sistema de codificación. Cuando se especifica el sistema de codificación para guardar de esta manera, en lugar de con C-x RET f, no hay advertencia si el búfer contiene caracteres que el sistema de codificación no puede manejar.</p>
<p>Otros comandos de archivo afectados por un sistema de codificación especificado son C-x i y C-x C-v, así como las variantes para otras ventanas de C-x C-f. C-x RET c también afecta a los comandos que inician subprocesos, incluyendo M-x shell (ver Ejecutar Comandos Shell desde Emacs). Si el comando inmediatamente siguiente no usa el sistema de codificación, entonces C-x RET c finalmente no tiene efecto.</p>
<p>Una forma sencilla de visitar un archivo sin conversión es con el comando M-x find-file-literally. Véase Visitar Archivos.</p>
<p>El valor por defecto de la variable buffer-file-coding-system especifica la elección del sistema de codificación que se puede usar cuando se crea un nuevo archivo. Se aplica cuando se encuentra un nuevo archivo, y cuando se puede crear un búfer y luego guardarlo en un archivo. Seleccionar un entorno de lenguaje típicamente establece esta variable a una buena elección de sistema de codificación por defecto para ese entorno de lenguaje.</p>
<p>Si visita un archivo con un sistema de codificación incorrecto, puede corregirlo con C-x RET r (revert-búfer-with-coding-system). Esto visita el archivo actual de nuevo, usando un sistema de codificación que usted especifique.</p>
<p>Si un trozo de texto ya ha sido insertado en un búfer usando un sistema de codificación incorrecto, puede rehacer la decodificación del mismo usando M-x recode-region. Esta opción le preguntará cuál es el sistema de codificación correcto y, a continuación, cuál es el sistema de codificación incorrecto que se ha usado, y realizará la conversión. Primero codifica la región usando el sistema de codificación incorrecto, y luego la decodifica de nuevo usando el sistema de codificación correcto.</p>
</section>
<section id="sistemas-de-codificacion-para-la-comunicacion-interprocesos">
<h2>23.10 Sistemas de Codificación para la Comunicación Interprocesos<a class="headerlink" href="#sistemas-de-codificacion-para-la-comunicacion-interprocesos" title="Link to this heading"></a></h2>
<p>Esta sección explica cómo especificar sistemas de codificación para usar en la comunicación con otros procesos.</p>
<dl class="simple">
<dt>C-x RET x coding RET</dt><dd><p>Usa la codificación del sistema para transferir selecciones a y desde otras aplicaciones gráficas (set-selection-coding-system).</p>
</dd>
<dt>C-x RET X coding RET</dt><dd><p>Usa la codificación del sistema para transferir una selección-la siguiente-hacia o desde otra aplicación gráfica (set-next-selection-coding-system).</p>
</dd>
<dt>C-x RET p input-coding RET output-coding RET</dt><dd><p>Usa los sistemas de codificación input-coding y output-coding para la entrada y salida del subproceso en el búfer actual (set-buffer-process-coding-system).</p>
</dd>
</dl>
<p>El comando C-x RET x (set-selection-coding-system) especifica el sistema de codificación para enviar el texto seleccionado a otras aplicaciones de ventanas, y para recibir el texto de las selecciones realizadas en otras aplicaciones. Este comando se aplica a todas las selecciones posteriores, hasta que se anula usando el comando de nuevo. El comando C-x RET X (set-next-selection-coding-system) especifica el sistema de codificación para la siguiente selección hecha en Emacs o leída por Emacs.</p>
<p>La variable x-select-request-type especifica el tipo de datos a solicitar al sistema X Window para recibir selecciones de texto de otras aplicaciones. Si el valor es nil (por defecto), Emacs intenta UTF8_STRING y COMPOUND_TEXT, en este orden, y usa varios heurísticos para elegir el más apropiado de los dos resultados; si ninguno de ellos tiene éxito, Emacs vuelve a STRING. Si el valor de x-select-request-type es uno de los símbolos COMPOUND_TEXT, UTF8_STRING, STRING, o TEXT, Emacs usa sólo ese tipo de petición. Si el valor es una lista de algunos de estos símbolos, Emacs intenta sólo los tipos de petición de la lista, en orden, hasta que uno de ellos tiene éxito, o hasta que la lista se agota.</p>
<p>El comando C-x RET p (set-buffer-process-coding-system) especifica el sistema de codificación para la entrada y salida a un subproceso. Este comando se aplica al búfer actual; normalmente, cada subproceso tiene su propio búfer, por lo que puede usar este comando para especificar la traducción hacia y desde un subproceso concreto dando el comando en el búfer correspondiente.</p>
<p>También puede usar C-x RET c (universal-coding-system-argument) justo antes del comando que ejecuta o inicia un subproceso, para especificar el sistema de codificación para comunicarse con ese subproceso. Véase Especificación de un sistema de codificación para texto de archivo.</p>
<p>El valor predeterminado para la traducción de la entrada y salida del proceso depende del entorno lingüístico actual.</p>
<p>La variable locale-coding-system especifica un sistema de codificación a usar cuando se codifican y decodifican cadenas del sistema tales como mensajes de error del sistema y formatos format-time-string y marcas de tiempo. Ese sistema de codificación también puede usarse para decodificar entradas de teclado no ASCII en el sistema X Window y también se usará para codificar el texto enviado a la salida estándar y a los flujos de error en el modo por lotes. Debe elegir un sistema de codificación que sea compatible con la representación de texto del sistema subyacente, que normalmente se especifica mediante una de las variables de entorno LC_ALL, LC_CTYPE y LANG. (La primera, en el orden especificado anteriormente, cuyo valor no esté vacío es la que determina la representación de texto).</p>
</section>
<section id="sistemas-de-codificacion-de-nombres-de-archivos">
<h2>23.11 Sistemas de Codificación de Nombres de Archivos<a class="headerlink" href="#sistemas-de-codificacion-de-nombres-de-archivos" title="Link to this heading"></a></h2>
<dl class="simple">
<dt>C-x RET F coding RET</dt><dd><p>Usa el sistema de codificación para codificar y descodificar nombres de archivo (set-file-name-coding-system).</p>
</dd>
</dl>
<p>El comando C-x RET F (set-file-name-coding-system) especifica un sistema de codificación a usar para codificar los nombres de archivo. No tiene ningún efecto sobre la lectura y escritura del contenido de los archivos.</p>
<p>De hecho, todo lo que hace este comando es establecer el valor de la variable file-name-coding-system (nombre-de-archivo-sistema-de-codificación). Si establece la variable a un nombre de sistema de codificación (como un símbolo Lisp o una cadena), Emacs codifica los nombres de archivo usando ese sistema de codificación para todas las operaciones de archivo. Esto hace posible usar caracteres no ASCII en los nombres de archivo-o, al menos, aquellos caracteres no ASCII que el sistema de codificación especificado puede codificar.</p>
<p>Si file-name-coding-system es nil, Emacs usa un sistema de codificación por defecto determinado por el entorno de lenguaje seleccionado, y almacenado en la variable default-file-name-coding-system (normalmente UTF-8).</p>
<p>Cuando Emacs se ejecuta en versiones de MS-Windows descendientes de la familia NT (Windows 2000, XP y todas las versiones posteriores), el valor de file-name-coding-system se ignora en gran medida, ya que Emacs usa por defecto APIs que permiten pasar nombres de archivo Unicode directamente. Por el contrario, en Windows 9X, los nombres de archivo se codifican usando file-name-coding-system, que debe establecerse a la codepage (ver codepage) pertinente para la configuración regional actual del sistema. El valor de la variable w32-unicode-filenames controla si Emacs usa las APIs Unicode cuando llama a funciones del SO que aceptan nombres de archivo. Esta variable es establecida por el código de inicio a nil en Windows 9X, y a t en versiones más recientes de MS-Windows.</p>
<p>Advertencia: si cambia el sistema de codificación de nombres de archivo (o el entorno de lenguaje) en medio de una sesión de Emacs, pueden producirse problemas si ya ha visitado archivos cuyos nombres se codificaron usando el sistema de codificación anterior y no pueden codificarse (o se codifican de forma diferente) bajo el nuevo sistema de codificación. Si intenta guardar uno de estos búferes con el nombre de archivo visitado, es posible que al guardar se use un nombre de archivo incorrecto o que se produzca un error. En tal caso, use C-x C-w para especificar un nuevo nombre de archivo para ese búfer.</p>
<p>Si se produce un error al codificar un nombre de archivo, use el comando M-x recode-file-name para cambiar el sistema de codificación del nombre de archivo. Este comando solicita un nombre de archivo existente, su antiguo sistema de codificación y el sistema de codificación al que desea convertirlo.</p>
</section>
<section id="sistemas-de-codificacion-para-la-entrada-de-teclado-x">
<h2>23.12. Sistemas de Codificación para la Entrada de Teclado X<a class="headerlink" href="#sistemas-de-codificacion-para-la-entrada-de-teclado-x" title="Link to this heading"></a></h2>
<p>Los métodos de entrada bajo el sistema X Window especifican sus propios sistemas de codificación que deben usarse para decodificar la entrada del teclado. Por defecto, Emacs determina el sistema de codificación usado para cada método de entrada automáticamente al establecer la conexión con el servidor del método de entrada, y usa ese sistema de codificación específico para decodificar la entrada del teclado. Sin embargo, esa determinación puede fallar a veces; en esa situación, se usa en su lugar el sistema de codificación locale (ver Sistemas de Codificación para la Comunicación entre Procesos).</p>
<p>Si el método de entrada no anuncia correctamente el sistema de codificación que usa para codificar el texto, entonces el sistema de codificación usado por Emacs para decodificar el texto de los métodos de entrada debe ser especificado manualmente. El valor de la variable x-input-coding-system, cuando se establece en un símbolo, se usa incondicionalmente como el sistema de codificación usado para decodificar la entrada del teclado desde los métodos de entrada.</p>
</section>
<section id="sistemas-de-codificacion-para-e-s-de-terminal">
<h2>23.13 Sistemas de Codificación para E/S de Terminal<a class="headerlink" href="#sistemas-de-codificacion-para-e-s-de-terminal" title="Link to this heading"></a></h2>
<dl class="simple">
<dt>C-x RET t coding RET</dt><dd><p>Usa la codificación del sistema para la salida del terminal (set-terminal-coding-system).</p>
</dd>
<dt>C-x RET k coding RET</dt><dd><p>Usa la codificación del sistema para la entrada del teclado (set-keyboard-coding-system).</p>
</dd>
</dl>
<p>El comando C-x RET t (set-terminal-coding-system) especifica el sistema de codificación para la salida del terminal. Si especifica un código de caracteres para la salida del terminal, todos los caracteres emitidos al terminal se traducen a ese sistema de codificación.</p>
<p>Esta función es útil para algunos terminales de sólo caracteres construidos para soportar idiomas o conjuntos de caracteres específicos, por ejemplo, terminales europeos que soportan uno de los conjuntos de caracteres latinos ISO. Es necesario especificar el sistema de codificación del terminal cuando se usa texto multibyte, para que Emacs sepa qué caracteres puede manejar realmente el terminal.</p>
<p>Por defecto, la salida al terminal no se traduce en absoluto, a menos que Emacs pueda deducir el sistema de codificación apropiado de tu tipo de terminal o de tu especificación de localización (ver Entornos de Lenguaje).</p>
<p>El comando C-x RET k (set-keyboard-coding-system), o la variable keyboard-coding-system, especifica el sistema de codificación para la entrada del teclado. La traducción del código de caracteres de la entrada del teclado es útil para terminales con teclas que envían caracteres gráficos no ASCII, por ejemplo, algunos terminales diseñados para ISO Latin-1 o subconjuntos de ésta.</p>
<p>Por defecto, la entrada del teclado se traduce en función de la configuración regional del sistema. Si su terminal no admite realmente la codificación implícita en su configuración regional (por ejemplo, si descubre que inserta un carácter no ASCII al escribir M-i), deberá establecer keyboard-coding-system en nil para desactivar la codificación. Para ello, escriba</p>
<blockquote>
<div><p>(set-keyboard-coding-system nil)</p>
</div></blockquote>
<p>en su archivo init.</p>
<p>Establecer keyboard-coding-system no tiene efecto en MS-Windows, excepto en sistemas Windows 9X antiguos, en cuyo caso la codificación debe coincidir con la actual codepage de la consola de MS-Windows, que puede cambiarse llamando a w32-set-console-codepage.</p>
<p>Existe una similitud entre usar una traducción del sistema de codificación para la entrada del teclado, y usar un método de entrada: ambos definen secuencias de entrada del teclado que se traducen en caracteres individuales. Sin embargo, los métodos de entrada están diseñados para usarlos de forma interactiva por humanos, y las secuencias que se traducen suelen ser secuencias de caracteres de impresión ASCII. Los sistemas de codificación suelen traducir secuencias de caracteres no gráficos.</p>
</section>
<section id="juegos-de-fuentes">
<h2>23.14 Juegos de fuentes<a class="headerlink" href="#juegos-de-fuentes" title="Link to this heading"></a></h2>
<p>Una fuente normalmente define formas para un único alfabeto o script. Por lo tanto, mostrar todo el rango de scripts que Emacs soporta requiere una colección de muchas fuentes. En Emacs, tal colección se llama conjunto de fuentes. Un conjunto de fuentes está definido por una lista de especificaciones de fuentes, cada una asignada para manejar un rango de códigos de caracteres, y puede recurrir a otro conjunto de fuentes para caracteres que no están cubiertos por las fuentes que especifica.</p>
<p>Cada fontset tiene un nombre, como una fuente. Sin embargo, mientras que las fuentes se almacenan en el sistema y los nombres de las fuentes disponibles los define el sistema, los conjuntos de fuentes se definen dentro del propio Emacs. Una vez que ha definido un fontset, puede usarlo dentro de Emacs especificando su nombre, en cualquier lugar donde podría usar una sola fuente. Por supuesto, los conjuntos de fuentes de Emacs pueden usar sólo las fuentes que soporta tu sistema. Si algunos caracteres aparecen en la pantalla como cajas vacías o códigos hexadecimales, esto significa que el juego de fuentes que se está usando para ellos no tiene un tipo de letra para esos caracteres. En este caso, o si los caracteres se muestran, pero no tan bien como le gustaría, puede que necesite instalar fuentes adicionales o modificar el juego de fuentes para usar fuentes específicas ya instaladas en su sistema (ver más abajo). Su sistema operativo puede tener fuentes opcionales que puede instalar; o puede instalar el paquete GNU Intlfonts, que incluye fuentes para la mayoría de los scripts soportados.10</p>
<p>Emacs crea automáticamente tres conjuntos de fuentes: el estándar, el de inicio y el predeterminado. El juego de fuentes por defecto es el más probable que tenga fuentes para una amplia variedad de caracteres no ASCII, y es la opción por defecto para los otros dos juegos de fuentes, y si estableces una fuente por defecto en lugar de un juego de fuentes. Sin embargo, no especifica los nombres de las familias de fuentes, por lo que los resultados pueden ser algo aleatorios si se usa directamente. Puede especificar un juego de fuentes concreto iniciando Emacs con la opción “-fn”. Por ejemplo,</p>
<blockquote>
<div><p>emacs -fn fontset-standard</p>
</div></blockquote>
<p>También puede especificar un conjunto de fuentes con el recurso “Font” (ver Opciones y Recursos X).</p>
<p>Si no se especifica un conjunto de fuentes para usar, Emacs usa una fuente ASCII, con “fontset-default” como alternativa para los caracteres que la fuente no cubre. El conjunto de fuentes estándar sólo se usa si se solicita explícitamente, a pesar de su nombre.</p>
<p>Para mostrar la información sobre un conjunto de fuentes específico, use el comando M-x describe-fontset. Este comando pide un nombre de juego de fuentes, por defecto el usado por el marco actual, y entonces muestra todos los subjuegos de caracteres y las fuentes asignadas a ellos en ese juego de fuentes. Para ver qué fuentes está usando Emacs en una sesión iniciada sin un juego de fuentes específico (que es lo que ocurre normalmente), escriba fontset-default RET en el prompt, o simplemente RET para describir el juego de fuentes usado por el marco actual.</p>
<p>Un juego de fuentes no especifica necesariamente una fuente para cada código de carácter. Si un juego de fuentes no especifica ninguna fuente para un carácter determinado, o si especifica una fuente que no existe en su sistema, no podrá mostrar ese carácter correctamente. En su lugar, mostrará el carácter como un código hexadecimal, un espacio en blanco o un recuadro vacío. (Ver Caracteres sin glifo, para más detalles.) O un fontset puede especificar una fuente para algún rango de caracteres, pero puede que no te guste su apariencia visual. Si esto ocurre, es posible que desee modificar su conjunto de fuentes; consulte Modificación de Conjuntos de Fuentes, para saber cómo hacerlo.</p>
<ol class="arabic simple" start="10">
<li><p>Si ejecuta Emacs en X, puede que necesite informar al servidor X sobre la ubicación de las fuentes recién instaladas con comandos como:</p></li>
</ol>
<blockquote>
<div><p>xset fp+ /usr/local/share/emacs/fonts
xset fp rehash</p>
</div></blockquote>
</section>
<section id="definir-juegos-de-fuentes">
<h2>23.15. Definir Juegos de Fuentes<a class="headerlink" href="#definir-juegos-de-fuentes" title="Link to this heading"></a></h2>
<p>Cuando se ejecuta en X, Emacs crea automáticamente un juego de fuentes estándar de acuerdo con el valor de standard-fontset-spec. El nombre de este juego de fuentes es</p>
<blockquote>
<div><p>-<em>-fixed-medium-r-normal-</em>-16-<em>-</em>-<em>-</em>-<a href="#id5"><span class="problematic" id="id6">*</span></a>-fontset-standard</p>
</div></blockquote>
<p>o simplemente “fontset-standard” para abreviar.</p>
<p>En GNUstep y macOS, el conjunto de fuentes estándar se crea usando el valor de ns-standard-fontset-spec, y en MS Windows se crea usando el valor de w32-standard-fontset-spec.</p>
<p>Las variantes negrita, cursiva y negrita-cursiva del conjunto de fuentes estándar se crean automáticamente. Sus nombres tienen “bold” en lugar de “medium”, o “i” en lugar de “r”, o ambos.</p>
<p>Emacs genera un juego de fuentes automáticamente, basado en cualquier fuente ASCII por defecto que especifiques con el recurso “Font” o el argumento “-fn”, o la fuente por defecto que Emacs encontró cuando se inició. Este es el conjunto de fuentes de inicio y su nombre es fontset-startup. Emacs genera este juego de fuentes reemplazando el campo charset_registry por “fontset”, y reemplazando el campo charset_encoding por “startup”, y luego usando la cadena resultante para especificar un juego de fuentes.</p>
<p>Por ejemplo, si inicia Emacs con una fuente de esta forma,</p>
<blockquote>
<div><p>emacs -fn «<em>courier-medium-r-normal14-140-</em>-iso8859-1»</p>
</div></blockquote>
<p>Emacs genera el siguiente juego de fuentes y lo usa para el marco inicial de la ventana X:</p>
<blockquote>
<div><p>-<em>-courier-medium-r-normal-</em>-14-140-<em>-</em>-<em>-</em>-fontset-startup</p>
</div></blockquote>
<p>El conjunto de fuentes de inicio usará la fuente que especifique, o una variante con un registro y codificación diferentes, para todos los caracteres soportados por esa fuente, y recurrirá a “fontset-default” para otros caracteres.</p>
<p>Con el recurso X “Emacs.Font”, puede especificar un nombre de conjunto de fuentes igual que un nombre de fuente real. Pero tenga cuidado de no especificar un nombre de conjunto de fuentes en un recurso comodín como “Emacs*Font”-esa especificación comodín coincide con varios otros recursos, como los menús, y los menús no pueden manejar conjuntos de fuentes. Ver Opciones y Recursos X.</p>
<p>Puede especificar conjuntos de fuentes adicionales usando recursos X llamados “Fontset-n”, donde n es un número entero empezando por 0. El valor del recurso debe tener esta forma:</p>
<blockquote>
<div><p>fontpattern, [charset:font]…</p>
</div></blockquote>
<p>donde fontpattern debe tener la forma de un nombre de fuente X estándar (véase el ejemplo anterior de fontset-startup), excepto los dos últimos campos. Deben tener la forma “fontset-alias”.</p>
<p>Cada conjunto de fuentes tiene dos nombres, uno largo y otro corto. El nombre largo es fontpattern. El nombre corto es “fontset-alias”, los 2 últimos campos del nombre largo (por ejemplo, “fontset-startup” para el fontset creado automáticamente al iniciarse). Puede referirse al conjunto de fuentes por cualquiera de los dos nombres.</p>
<p>La construcción “charset:font” especifica qué fuente usar (en este conjunto de fuentes) para un conjunto de caracteres en particular. Aquí, charset es el nombre de un conjunto de caracteres, y font es la fuente a usar para ese conjunto de caracteres. Puede usar esta construcción cualquier número de veces al definir un juego de fuentes.</p>
<p>Para los otros juegos de caracteres, Emacs elige una fuente basándose en fontpattern. Reemplaza “fontset-alias” con valores que describen el juego de caracteres. Para la fuente de caracteres ASCII, “fontset-alias” se sustituye por “ISO8859-1”.</p>
<p>Además, cuando varios campos consecutivos son comodines, Emacs los colapsa en un único comodín. Esto se hace para evitar usar fuentes autoescaladas. Las fuentes hechas escalando fuentes más grandes no son útiles para editar, y escalar una fuente más pequeña tampoco es útil, porque es mejor usar la fuente más pequeña en su propio tamaño, que es lo que hace Emacs.</p>
<p>Así, si fontpattern es</p>
<blockquote>
<div><p>-<em>-fixed-medium-r-normal-</em>-24-<em>-</em>-<em>-</em>-<a href="#id7"><span class="problematic" id="id8">*</span></a>-fontset-24</p>
</div></blockquote>
<p>la especificación de la fuente para los caracteres ASCII sería la siguiente:</p>
<blockquote>
<div><p>-<em>-fixed-medium-r-normal-</em>-24-<a href="#id9"><span class="problematic" id="id10">*</span></a>-ISO8859-1</p>
</div></blockquote>
<p>y la especificación de la fuente para los caracteres chinos GB2312 sería ésta:</p>
<blockquote>
<div><p>-<em>-fixed-medium-r-normal-</em>-24-<em>-gb2312</em>-*</p>
</div></blockquote>
<p>Es posible que no tenga ninguna fuente china que coincida con la especificación de fuentes anterior. La mayoría de las distribuciones X sólo incluyen fuentes chinas que tienen “song ti” o “fangsong ti” en el campo de familia. En tal caso, “Fontset-n” puede especificarse como:</p>
<blockquote>
<div><dl class="simple">
<dt>Emacs.Fontset-0: -<em>-fixed-medium-r-normal-</em>-24-<em>-</em>-<em>-</em>-<a href="#id11"><span class="problematic" id="id12">*</span></a>-fontset-24,</dt><dd><p>chinese-gb2312:-<em>-</em>-medium-r-normal-<em>-24-</em>-gb2312*-*</p>
</dd>
</dl>
</div></blockquote>
<p>Entonces, las especificaciones de fuentes para todos los caracteres excepto el chino GB2312 tienen “fixed” en el campo family, y la especificación de fuentes para los caracteres chinos GB2312 tiene un comodín “*” en el campo family.</p>
<p>La función que procesa el valor del recurso fontset para crear el conjunto de fuentes se llama create-fontset-from-fontset-spec. También puede llamar a esta función explícitamente para crear un conjunto de fuentes.</p>
<p>Consulte Fuentes, para obtener más información sobre la denominación de fuentes.</p>
</section>
<section id="modificar-juegos-de-fuentes">
<h2>23.16 Modificar Juegos de Fuentes<a class="headerlink" href="#modificar-juegos-de-fuentes" title="Link to this heading"></a></h2>
<p>No siempre se pueden crear conjuntos de fuentes desde cero. Si sólo se requieren cambios menores, puede ser más fácil modificar un conjunto de fuentes existente, normalmente “fontset-default”. Modificar “fontset-default” también afectará a otros conjuntos de fuentes que lo usen como fallback, por lo que puede ser una forma efectiva de arreglar problemas con las fuentes que Emacs elige para un script en particular.</p>
<p>Los conjuntos de fuentes pueden modificarse usando la función set-fontset-font, especificando un carácter, un conjunto de caracteres, un script, o un rango de caracteres para modificar la fuente, y una especificación de fuente para la fuente a usar. Algunos ejemplos son:</p>
<blockquote>
<div><p>;; Prefer a big5 font for han characters.
(set-fontset-font «fontset-default»</p>
<blockquote>
<div><dl class="simple">
<dt>“han (font-spec :registry «big5»)</dt><dd><p>nil “prepend)</p>
</dd>
</dl>
</div></blockquote>
<p>;; Use MyPrivateFont for the Unicode private use area.
(set-fontset-font «fontset-default» “(#xe000 . #xf8ff)</p>
<blockquote>
<div><p>«MyPrivateFont»)</p>
</div></blockquote>
<p>;; Use Liberation Mono for latin-3 charset.
(set-fontset-font «fontset-default» “iso-8859-3</p>
<blockquote>
<div><p>«Liberation Mono»)</p>
</div></blockquote>
<p>;; Use DejaVu Sans Mono as a fallback in fontset-startup
;; before resorting to fontset-default.
(set-fontset-font «fontset-startup» nil «DejaVu Sans Mono»</p>
<blockquote>
<div><p>nil “append)</p>
</div></blockquote>
<p>;; Se prefiere una fuente big5 para los caracteres han.
(set-fontset-font «fontset-default»</p>
<blockquote>
<div><p>han (font-spec :registry «big5»)
nil “prepend)</p>
</div></blockquote>
<p>;; Usar MyPrivateFont para el área de uso privado Unicode.
(set-fontset-font «fontset-default» “(#xe000 . #xf8ff)</p>
<blockquote>
<div><p>«MyPrivateFont»)</p>
</div></blockquote>
<p>;; Usar Liberation Mono para el juego de caracteres latin-3.
(set-fontset-font «fontset-default» “iso-8859-3</p>
<blockquote>
<div><p>«Liberation Mono»)</p>
</div></blockquote>
<p>;; Usar DejaVu Sans Mono como alternativa en fontset-startup
;; antes de recurrir a fontset-default.
(set-fontset-font «fontset-startup» nil «DejaVu Sans Mono»</p>
<blockquote>
<div><p>nil “append)</p>
</div></blockquote>
</div></blockquote>
<p>Ver Fontsets en GNU Emacs Lisp Reference Manual, para más detalles sobre cómo usar la función set-fontset-font.</p>
<p>Si no conoce el punto-código del carácter o el script al que pertenece, puede preguntar a Emacs. Con el punto en el carácter, teclea C-u C-x = (what-cursor-position), y esta información, junto con mucha más, se mostrará en el búfer <em>Help</em> que Emacs despliega. Ver Información sobre la posición del cursor. Por ejemplo, los caracteres japoneses pertenecen a la escritura “kana”, pero el texto japonés también los mezcla con caracteres chinos, así que lo siguiente usa la escritura “han” para configurar Emacs para usar la fuente “Kochi Gothic” para el texto japonés:</p>
<blockquote>
<div><p>(set-fontset-font «fontset-default» “han «Kochi Gothic»)</p>
</div></blockquote>
<p>(Por comodidad, el script “han” en Emacs está configurado para soportar todos los caracteres chinos, japoneses y coreanos, también conocidos como CJK, no sólo los caracteres chinos).</p>
<p>Para ver la lista de scripts conocidos, consulta la variable script-representative-chars.</p>
<p>Los ajustes del juego de fuentes como los anteriores sólo afectan a los caracteres que la fuente por defecto no soporta, así que si la fuente “Kochi Gothic” cubre caracteres latinos, no se usará para mostrar escrituras latinas, ya que la fuente por defecto usada por Emacs suele cubrir el latín básico.</p>
<p>Algunas fuentes instaladas en tu sistema pueden estar rotas, o producir resultados desagradables para los caracteres para los que se usan, y puede que quiera ordenar a Emacs que las ignore completamente mientras busca una fuente adecuada para mostrar un carácter. Puede hacerlo añadiendo las fuentes problemáticas al valor de la variable face-ignored-fonts, que es una lista. Aquí tiene un ejemplo para poner en su ~/.emacs:</p>
<blockquote>
<div><p>(add-to-list “face-ignored-fonts «Some Bad Font»)</p>
</div></blockquote>
</section>
<section id="caracteres-no-visualizables">
<h2>23.17 Caracteres no Visualizables<a class="headerlink" href="#caracteres-no-visualizables" title="Link to this heading"></a></h2>
<p>Puede haber algunos caracteres no ASCII que su terminal no pueda mostrar. La mayoría de los terminales de texto soportan un único juego de caracteres (usa la variable default-terminal-coding-system para decirle a Emacs cuál es, Coding Systems for Terminal I/O); los caracteres que no pueden ser codificados en ese sistema de codificación se muestran como “?” por defecto.</p>
<p>Las pantallas gráficas pueden mostrar un rango más amplio de caracteres, pero puede que no tenga fuentes instaladas para todos ellos; los caracteres que no tienen fuente aparecen como una caja hueca.</p>
<p>Si usa caracteres Latin-1 pero su terminal no puede mostrar Latin-1, puede hacer que muestre secuencias ASCII mnemotécnicas en su lugar, por ejemplo, “«o” para o-umlaut. Para ello, carga la biblioteca iso-ascii.</p>
<p>Si su terminal puede mostrar Latin-1, puede mostrar caracteres de otros juegos de caracteres europeos usando una mezcla de caracteres Latin-1 equivalentes y mnemónicos ASCII. Para ello, personalice la variable latin1-display. Las secuencias mnemotécnicas ASCII corresponden en su mayoría a las de los métodos de entrada de prefijos.</p>
</section>
<section id="modo-de-edicion-unibyte">
<h2>23.18 Modo de Edición Unibyte<a class="headerlink" href="#modo-de-edicion-unibyte" title="Link to this heading"></a></h2>
<p>Los juegos de caracteres ISO 8859 Latin-n definen códigos de caracteres en el rango 0240 a 0377 octal (160 a 255 decimal) para manejar las letras acentuadas y la puntuación que necesitan varios idiomas europeos (y algunos no europeos). Tenga en cuenta que Emacs considera los bytes con códigos en este rango como bytes brutos, no como caracteres, incluso en un búfer de unibyte, es decir, si desactiva los caracteres multibyte. Sin embargo, Emacs puede seguir manejando estos códigos de caracteres como si pertenecieran a uno de los conjuntos de caracteres de byte único a la vez. Para especificar cuál de estos códigos usar, invoque M-x set-language-environment y especifique un entorno de lenguaje adecuado como “Latin-n”. Ver Deshabilitar Caracteres Multibyte en el Manual de Referencia de GNU Emacs Lisp.</p>
<p>Emacs también puede mostrar bytes en el rango de 160 a 255 como caracteres legibles, siempre que el terminal o fuente en uso los soporte. Esto funciona automáticamente. En una pantalla gráfica, Emacs también puede mostrar caracteres de un byte a través de conjuntos de fuentes, en efecto mostrando los caracteres multibyte equivalentes según el entorno de lenguaje actual. Para solicitar esto, establece la variable unibyte-display-via-language-environment a un valor no nulo. Tenga en cuenta que esto sólo afecta a cómo se muestran estos bytes, pero no cambia el hecho fundamental de que Emacs los trata como bytes en bruto, no como caracteres.</p>
<p>Si su terminal no soporta la visualización del juego de caracteres Latin-1, Emacs puede mostrar estos caracteres como secuencias ASCII que al menos le dan una idea clara de lo que son los caracteres. Para ello, cargue la biblioteca iso-ascii. Podrían implementarse bibliotecas similares para otros conjuntos de caracteres Latin-n, pero no se ha hecho hasta ahora.</p>
<p>Normalmente los caracteres no ISO-8859 (códigos decimales entre 128 y 159 inclusive) se muestran como escapes octales. Puede cambiar esto para las versiones extendidas no estándar de los juegos de caracteres ISO-8859 usando la función standard-display-8bit de la biblioteca disp-table.</p>
<p>Hay dos formas de introducir caracteres no ASCII de un solo byte:</p>
<blockquote>
<div><ul class="simple">
<li><p>Puede usar un método de entrada para el entorno lingüístico seleccionado. Véase Métodos de Entrada. Cuando se usa un método de entrada en un búfer unibyte, el carácter no ASCII que</p></li>
</ul>
<p>se especifica con él se convierte a unibyte.</p>
<ul class="simple">
<li><p>Si su teclado puede generar códigos de caracteres 128 (decimal) y superiores, que representan caracteres no ASCII, puede escribir directamente esos códigos de caracteres.</p></li>
</ul>
<p>En una pantalla gráfica, no debería tener que hacer nada especial para usar estas teclas; simplemente deberían funcionar. En un terminal de texto, debe usar el comando M-x
set-keyboard-coding-system o personalizar la variable keyboard-coding-system para especificar qué sistema de codificación usa su teclado (consulte Sistemas de Codificación para E/S de
Terminal). Activar esta característica probablemente le obligará a usar ESC para escribir caracteres Meta; sin embargo, en un terminal de consola o en un emulador de terminal como
xterm, puede hacer que Meta se convierta en ESC y seguir siendo capaz de escribir caracteres de 8 bits presentes directamente en el teclado o usando las teclas Compose o AltGr. Ver
Tipos de Entrada de Usuario.</p>
<p>Muchos sistemas modernos proporcionan métodos de entrada nativos para muchos lenguajes cuyos caracteres no tienen teclas de teclado asignadas. Si Emacs fue construido con soporte para
estos métodos de entrada nativos, puede activar tal método de entrada y escribir los caracteres que soportan. Cómo activar y usar estos métodos de entrada depende del sistema y del
método de entrada, y no se describirá aquí; consulte la documentación de su sistema. Aquí describimos algunas facilidades de Emacs para controlar el uso de los métodos de entrada
nativos.</p>
<p>En Emacs construido con el kit de herramientas GTK, la variable x-gtk-use-native-input controla si Emacs debe recibir caracteres producidos por los métodos de entrada GTK. Si el valor
es nil, por defecto, Emacs usa los métodos de entrada X (XIM), en caso contrario usa los métodos de entrada GTK. El recurso useXIM X controla si usar XIM, y el recurso inputStyle X
controla la visualización en X del texto de previsualización generado por los métodos de entrada nativos; ver Tabla de recursos X para Emacs.</p>
<p>En MS-Windows, Emacs soporta métodos de entrada nativos proporcionados por IMM, el Gestor de Métodos de Entrada, pero eso puede desactivarse si es necesario; ver Uso del Teclado en
MS-Windows.</p>
<ul class="simple">
<li><p>Puede usar la tecla C-x 8 como prefijo de caracteres de composición para introducir caracteres latinos-1 no ASCII y otros caracteres de impresión. C-x 8 sirve para la inserción</p></li>
</ul>
<p>(tanto en el minibúfer como en otros búferes), para la búsqueda y en cualquier otro contexto en el que se permita una secuencia de teclas.
C-x 8 funciona cargando la biblioteca iso-transl. Una vez cargada esa biblioteca, la tecla modificadora Alt, si el teclado dispone de ella, sirve para lo mismo que C-x 8: usar Alt
junto con un carácter acentuado para modificar la letra siguiente. Además, si el teclado dispone de teclas para los caracteres de acento muerto Latin-1, también se definen para
componer con el carácter siguiente, una vez cargado iso-transl.</p>
<p>Usar C-x 8 C-h para listar todas las traducciones C-x 8 disponibles.</p>
</div></blockquote>
</section>
<section id="juegos-de-caracteres">
<h2>23.19 Juegos de Caracteres<a class="headerlink" href="#juegos-de-caracteres" title="Link to this heading"></a></h2>
<p>En Emacs, charset es la abreviatura de «juego de caracteres». Emacs soporta los juegos de caracteres más populares (como ascii, iso-8859-1, cp1250, big5 y unicode), además de algunos juegos de caracteres propios (como emacs, unicode-bmp y eight-bit). Todos los caracteres soportados pertenecen a uno o más conjuntos de caracteres.</p>
<p>Emacs normalmente hace lo correcto con respecto a los charsets, de modo que no tiene que preocuparse por ellos. Sin embargo, a veces es útil conocer algunos de los detalles subyacentes sobre los juegos de caracteres.</p>
<p>Un ejemplo es la selección de fuentes (véase Fuentes). Cada entorno de lenguaje (ver Entornos de Lenguaje) define una lista de prioridades para los distintos conjuntos de caracteres. Cuando se busca una fuente, Emacs inicialmente intenta encontrar una que pueda mostrar los conjuntos de caracteres de mayor prioridad. Por ejemplo, en el entorno de idioma japonés, el conjunto de caracteres japanese-jisx0208 tiene la prioridad más alta, por lo que Emacs intenta usar una fuente cuya propiedad de registro sea “JISX0208.1983-0”.</p>
<p>Hay dos comandos que se pueden usar para obtener información sobre los juegos de caracteres. El comando M-x list-charset-chars pide un nombre de juego de caracteres y muestra todos los caracteres de ese juego. El comando M-x describe-character-set pide un nombre de juego de caracteres, y muestra información sobre ese juego, incluyendo su representación interna dentro de Emacs.</p>
<p>M-x list-character-sets muestra una lista de todos los juegos de caracteres soportados. La lista proporciona los nombres de los juegos de caracteres e información adicional para identificar cada juego; para más detalles, consulte el Registro Internacional ISO de Juegos de Caracteres Codificados para Usar con Secuencias de Escape (ISO-IR) mantenido por la Sociedad de Procesamiento de la Información de Japón/Comisión de Estándares de Tecnología de la Información de Japón (IPSJ/ITSCJ). En esta lista, los conjuntos de caracteres se dividen en dos categorías: los conjuntos de caracteres normales aparecen en primer lugar, seguidos de los conjuntos de caracteres suplementarios. Un juego de caracteres suplementario es aquel que se usa para definir otro juego de caracteres (como padre o subconjunto), o para proporcionar compatibilidad con versiones anteriores de Emacs.</p>
<p>Para averiguar a qué juego de caracteres pertenece un carácter en el búfer, pon punto delante de él y teclea C-u C-x = (ver Introducción a los Juegos de Caracteres Internacionales).</p>
</section>
<section id="edicion-bidireccional">
<h2>23.20 Edición Bidireccional<a class="headerlink" href="#edicion-bidireccional" title="Link to this heading"></a></h2>
<p>Emacs soporta la edición de texto escrito en alfabetos, como el árabe, el farsi y el hebreo, cuyo orden natural del texto horizontal es de derecha a izquierda. Sin embargo, los dígitos y el texto latino incrustado en estos alfabetos se muestran de izquierda a derecha. Tampoco es infrecuente que haya pequeñas porciones de texto en árabe o hebreo incrustadas en un documento que, por lo demás, es latino; por ejemplo, como comentarios y cadenas en el archivo fuente de un programa. Por estas razones, el texto que usa estos alfabetos es bidireccional: una mezcla de caracteres de izquierda a derecha y de derecha a izquierda.</p>
<p>Esta sección describe las facilidades y opciones proporcionadas por Emacs para editar texto bidireccional.</p>
<p>Emacs almacena el texto de derecha a izquierda y bidireccional en el llamado orden lógico (o de lectura): la posición del búfer o cadena del primer carácter que se lee precede a la del siguiente carácter. El reordenamiento del texto bidireccional en el orden visual se produce en el momento de la visualización. Como resultado, las posiciones de los caracteres ya no aumentan monotónicamente con sus posiciones en pantalla. Emacs implementa el Algoritmo Bidireccional Unicode (UBA) descrito en el Anexo #9 del Estándar Unicode, para la reordenación del texto bidireccional en pantalla. Se desvía del UBA sólo en cómo se muestran las líneas de continuación cuando la dirección del texto es opuesta a la dirección del párrafo base, por ejemplo, cuando una línea larga de texto en inglés aparece en un párrafo de derecha a izquierda.</p>
<p>La variable local del búfer bidi-display-reordering controla si el texto del búfer se reordena para su visualización. Si su valor no es nulo, Emacs reordena los caracteres que tienen direccionalidad de derecha a izquierda cuando se muestran. El valor por defecto es t.</p>
<p>Cada párrafo de texto bidireccional puede tener su propia dirección base, de derecha a izquierda o de izquierda a derecha. El texto de los párrafos de izquierda a derecha comienza en la pantalla en el margen izquierdo de la ventana y se trunca o continúa cuando alcanza el margen derecho. Por el contrario, el texto de los párrafos de derecha a izquierda se muestra comenzando en el margen derecho y se continúa o trunca en el margen izquierdo. Por defecto, los límites de los párrafos son líneas vacías, es decir, líneas formadas enteramente por caracteres de espacio en blanco. Para cambiar esto, puede personalizar las dos variables bidi-paragraph-start-re y bidi-paragraph-separate-re, cuyos valores deben ser expresiones regulares (cadenas); por ejemplo, para que una sola nueva línea inicie un nuevo párrafo, establezca ambas variables a «^». Estas dos variables son locales al búfer (ver Variables Locales).</p>
<p>Emacs determina la dirección base de cada párrafo dinámicamente, basándose en el texto al principio del párrafo. Sin embargo, a veces un búfer puede necesitar forzar una cierta dirección base para sus párrafos. La variable bidi-paragraph-direction, si no es nula, desactiva la determinación dinámica de la dirección base, y en su lugar fuerza a todos los párrafos del búfer a tener la dirección especificada por su valor buffer-local. El valor puede ser de derecha a izquierda o de izquierda a derecha. Cualquier otro valor se interpreta como nil.</p>
<p>Alternativamente, puede controlar la dirección base de un párrafo insertando caracteres especiales de formato delante del párrafo. El carácter especial RIGHT-TO-LEFT MARK (MARCA DE DERECHA A IZQUIERDA), o RLM, fuerza la dirección de derecha a izquierda en el párrafo siguiente, mientras que LEFT-TO-RIGHT MARK (MARCA DE IZQUIERDA A DERECHA), o LRM, fuerza la dirección de izquierda a derecha. (Puede usar C-x 8 RET para insertar estos caracteres.) En una sesión GUI, los caracteres LRM y RLM se muestran como caracteres en blanco muy finos; en terminales de texto se muestran como espacios en blanco.</p>
<p>Debido a que los caracteres son reordenados para su visualización, los comandos de Emacs que operan en el orden lógico o en tramos de posiciones del búfer pueden producir efectos inusuales. Por ejemplo, los comandos C-f y C-b mueven el punto en el orden lógico, por lo que el cursor a veces saltará cuando el punto atraviese texto bidireccional reordenado. Del mismo modo, una región resaltada que cubra un rango contiguo de posiciones de caracteres puede parecer discontinua si la región abarca texto reordenado. Esto es normal y similar al comportamiento de otros programas que soportan texto bidireccional.</p>
<p>Los comandos de movimiento del cursor vinculados a las teclas de flecha, como IZQUIERDA y C-DERECHA, son sensibles a la dirección base del párrafo actual. En un párrafo de izquierda a derecha, los comandos ligados a DERECHA con o sin modificadores se mueven hacia delante a través del texto del búfer, pero en un párrafo de derecha a izquierda se mueven hacia atrás. Esto refleja el hecho de que en un párrafo de derecha a izquierda las posiciones del búfer aumentan predominantemente al desplazarse hacia la izquierda en la pantalla.</p>
<p>Cuando se sale de un párrafo, el significado de las teclas de flecha puede cambiar si la dirección base del párrafo anterior o del siguiente es diferente de la del párrafo del que se ha salido. Cuando esto ocurra, deberá ajustar la tecla de flecha que pulse a la nueva dirección base.</p>
<p>Por defecto, IZQUIERDA y DERECHA se mueven en el orden lógico, pero si visual-order-cursor-movement es no nulo, estos comandos se mueven al carácter que está, correspondientemente, a la izquierda o a la derecha de la posición actual de la pantalla, moviéndose a la línea de pantalla siguiente o anterior según corresponda. Ten en cuenta que esto podría mover el punto a muchas posiciones de búfer, dependiendo del contexto bidireccional circundante.</p>
<p>El texto bidireccional a veces usa caracteres de formato especiales para afectar a la reordenación del texto en pantalla. Los caracteres LRM y RLM, mencionados anteriormente, son dos de ellos, pero hay más. Se muestran por defecto como glifos de espacio fino en los marcos GUI, y como espacios simples en los marcos de modo texto. Si quiere conocer estos caracteres de control especiales, para que su efecto en la visualización no sea una sorpresa, puede activar el modo de visualización sin glifos (vea Cómo se Visualiza el Texto). Este modo menor hará que estos caracteres de formato se muestren como siglas dentro de un pequeño recuadro, de modo que destaquen en pantalla y su efecto sea más fácil de entender.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="22_MarcosPantallasGraf.html" class="btn btn-neutral float-left" title="22 Marcos y Pantallas Gráficas" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="24_ModosMayores-Y-Menores.html" class="btn btn-neutral float-right" title="24 Modos Mayores y Menores" accesskey="n" rel="next">Siguiente <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -0,0 +1,299 @@
<!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>24 Modos Mayores y Menores &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="25 Indentación" href="25_Indentacion.html" />
<link rel="prev" title="23 Soporte de Juego de Caracteres Internacional" href="23_SoporteJuegoCaracIntern.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.16
</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"><a class="reference internal" href="19_ManejoArchivos.html">19 Manejo de Archivos</a></li>
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">24 Modos Mayores y Menores</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#modos-principales">24.1 Modos Principales</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modos-menores">24.2 Modos Menores</a></li>
<li class="toctree-l2"><a class="reference internal" href="#eleccion-de-los-modos-de-archivo">24.3 Elección de los Modos de Archivo</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</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">24 Modos Mayores y Menores</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/CapConSecciones/24_ModosMayores-Y-Menores.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="modos-mayores-y-menores">
<h1>24 Modos Mayores y Menores<a class="headerlink" href="#modos-mayores-y-menores" title="Link to this heading"></a></h1>
<p>Emacs contiene muchos modos de edición que alteran su comportamiento básico de forma útil. Se dividen en modos mayores y modos menores.</p>
<p>Los modos principales proporcionan facilidades especializadas para trabajar con un tipo de archivo en particular, como un fichero fuente C (ver Edición de Programas), o un tipo particular de búfer no-fichero, como un búfer de shell (ver Ejecución de Comandos de Shell desde Emacs). Los modos principales son mutuamente excluyentes; cada búfer tiene uno y sólo un modo principal en cualquier momento.</p>
<p>Los modos menores son características opcionales que puedes activar o desactivar, no necesariamente específicas de un tipo de archivo o búfer. Por ejemplo, el modo Relleno automático (Auto Fill mode) es un modo secundario en el que SPC interrumpe las líneas entre palabras a medida que escribe (consulte Auto Fill Mode). Los modos secundarios son independientes entre sí y del modo principal seleccionado.</p>
<section id="modos-principales">
<h2>24.1 Modos Principales<a class="headerlink" href="#modos-principales" title="Link to this heading"></a></h2>
<p>Cada búfer posee un modo principal, que determina el comportamiento de edición de Emacs mientras ese búfer está activo. La línea de modo normalmente muestra el nombre del modo principal actual, entre paréntesis (ver La línea de Modo).</p>
<p>El modo principal menos especializado se llama modo fundamental. Este modo no tiene redefiniciones específicas de modo o ajustes de variables, de modo que cada comando de Emacs se comporta de la manera más general, y cada variable de opción de Usuario está en su estado por defecto.</p>
<p>Para editar texto de un tipo específico que Emacs conoce, como código Lisp o texto en inglés, se suele usar un modo principal más especializado, como el modo Lisp o el modo Texto. La mayoría de los modos principales se dividen en tres grandes grupos. El primer grupo contiene modos para texto normal, ya sea simple o con marcas. Incluye el modo Texto, el modo HTML, el modo SGML, el modo TeX y el modo Esquema. El segundo grupo contiene modos para lenguajes de programación específicos. Entre ellos están el modo Lisp (que tiene varias variantes), el modo C, el modo Fortran y otros. El tercer grupo consiste en modos principales que no están asociados directamente con archivos; se usan en búferes creados para propósitos específicos por Emacs. Los ejemplos incluyen el modo Dired para búferes hechos por Dired (ver Dired, el Editor de Directorios), el modo Message para búferes hechos por C-x m (ver Enviando Correo), y el modo Shell para búferes usados para comunicarse con un proceso shell inferior (ver Subshell Interactivo).</p>
<p>Normalmente, el modo principal es establecido automáticamente por Emacs, cuando visita por primera vez un archivo o crea un búfer (vea Eligiendo Modos de Archivo). Puede seleccionar explícitamente un nuevo modo principal usando un comando M-x. Toma el nombre del modo y añade -mode para obtener el nombre del comando para seleccionar ese modo (e.g., M-x lisp-mode entra en modo Lisp). Dado que cada búfer tiene exactamente un modo principal, no hay forma de «desactivar» un modo principal; en su lugar, debe cambiar a uno diferente.</p>
<p>El valor de la variable búfer-local major-mode es un símbolo con el mismo nombre que la orden major mode (por ejemplo, lisp-mode). Esta variable se establece automáticamente; no debe cambiarla Usted mismo.</p>
<p>El valor por defecto de major-mode determina el modo mayor a usar para archivos que no especifican un modo mayor, y para nuevos búferes creados con C-x b. Normalmente, este valor por defecto es el símbolo fundamental-mode, que especifica el modo Fundamental. Puede cambiar este valor por defecto a través de la interfaz de personalización (vea Interfaz de Personalización Fácil), o añadiendo una línea como esta a su archivo init (vea El Archivo de Inicialización de Emacs):</p>
<blockquote>
<div><p>(setq-default major-mode “text-mode)</p>
</div></blockquote>
<p>Si el valor por defecto de major-mode es nil, el modo mayor se toma del búfer previamente actual.</p>
<p>Los modos principales especializados a menudo cambian el significado de ciertas teclas para hacer algo más adecuado para el modo. Por ejemplo, los modos de lenguaje de programación vinculan TAB para sangrar la línea actual de acuerdo con las reglas del lenguaje (ver Sangría). Las teclas que suelen cambiarse son TAB, DEL y C-j. Muchos modos también definen comandos especiales propios, normalmente ligados a secuencias de teclas cuyo prefijo es C-c (ver Teclas). Los modos principales también pueden alterar las opciones y variables del Usuario; por ejemplo, los modos de lenguaje de programación suelen establecer un valor local en el búfer para la variable comment-start, que determina cómo se delimitan los comentarios del código fuente (véase Manipulación de Comentarios).</p>
<p>Para ver la documentación del modo principal actual, incluida una lista de sus combinaciones de teclas, escriba C-h m (describir-modo). Consulte Otros Comandos de Ayuda.</p>
<p>Cada modo principal, aparte del modo Fundamental, define un hook (gancho) de modo, una lista personalizable de funciones Lisp que se ejecutarán cada vez que se active el modo en un búfer. Para obtener más información sobre ganchos, consulte Ganchos. Cada hook de modo recibe el nombre de su modo principal, por ejemplo, el modo Fortran tiene fortran-mode-hook. Además, todos los modos principales basados en texto ejecutan text-mode-hook, y muchos modos de lenguaje de programación 11 (incluyendo todos los distribuidos con Emacs) ejecutan prog-mode-hook, antes de ejecutar sus propios hooks de modo. Las funciones gancho pueden mirar el valor de la variable major-mode para ver en qué modo se está entrando realmente.</p>
<p>Los ganchos de modo se usan comúnmente para habilitar modos menores (vea Modos Menores). Por ejemplo, puede poner las siguientes líneas en su archivo init para habilitar el modo menor Flyspell en todos los modos mayores basados en texto (vea Comprobación y Corrección de Ortografía), y el modo menor ElDoc en el modo Emacs Lisp (vea Búsqueda de Documentación en Lenguajes de Programación):</p>
<blockquote>
<div><p>(add-hook “text-mode-hook “flyspell-mode)
(add-hook “emacs-lisp-mode-hook “eldoc-mode)</p>
</div></blockquote>
<ol class="arabic simple" start="11">
<li><p>Más concretamente, los modos «derivados» de prog-mode (véase Modos Derivados en el Manual de Referencia de Emacs Lisp).</p></li>
</ol>
</section>
<section id="modos-menores">
<h2>24.2 Modos Menores<a class="headerlink" href="#modos-menores" title="Link to this heading"></a></h2>
<p>Un modo menor es un modo de edición opcional que altera el comportamiento de Emacs de alguna manera bien definida. A diferencia de los modos mayores, cualquier número de modos menores puede estar activo en cualquier momento. Algunos modos menores son locales al búfer, y pueden activarse (habilitarse) en ciertos búferes y desactivarse (deshabilitarse) en otros. Otros modos menores son globales: mientras están activados, afectan a todo lo que hagas en la sesión de Emacs, en todos los búferes. La mayoría de los modos menores están desactivados por defecto, pero unos pocos están activados por defecto.</p>
<p>La mayoría de los modos menores locales al búfer dicen en la línea de modo cuando están habilitados, justo después del indicador de modo mayor. Por ejemplo, “Fill” en la línea de modo significa que el modo Auto Fill está habilitado. Ver La línea de Modo.</p>
<p>Al igual que los modos principales, cada modo secundario está asociado a un comando de modo, cuyo nombre consiste en el nombre del modo seguido de “-mode”. Por ejemplo, el comando de modo para el modo Relleno automático es auto-fill-mode. Pero a diferencia de un comando de modo principal, que simplemente activa el modo, el comando de modo para un modo secundario puede activarlo o desactivarlo:</p>
<blockquote>
<div><ul class="simple">
<li><p>Si invoca el comando mode directamente sin argumento de prefijo (ya sea a través de M-x, o vinculándolo a una tecla y tecleando esa tecla; consulte Personalización de las</p></li>
</ul>
<p>Asignaciones de Teclas), se activa el modo secundario. El modo menor se activa si estaba desactivado, y se desactiva si estaba activado.</p>
<ul class="simple">
<li><p>Si invoca la orden mode con un argumento prefijo, el modo menor se desactiva incondicionalmente si ese argumento es cero o negativo; en caso contrario, se activa incondicionalmente.</p></li>
<li><p>Si el comando mode se invoca a través de Lisp, el modo menor se activa incondicionalmente si el argumento se omite o es nulo. Esto facilita la activación de un modo secundario desde</p></li>
</ul>
<p>el gancho de modo de un modo principal (véase Modos Principales). Un argumento no nil se trata como un argumento prefijo interactivo, como se ha descrito anteriormente.</p>
</div></blockquote>
<p>La mayoría de los modos menores también tienen una variable mode, con el mismo nombre que el comando mode. Su valor es no nil si el modo está habilitado, y nil si está deshabilitado. En general, no debería intentar activar o desactivar el modo cambiando el valor de la variable mode directamente en Lisp; en su lugar, debería ejecutar la orden mode. Sin embargo, al establecer la variable mode a través de la interfaz Customize (véase Interfaz de Personalización Fácil) siempre se habilitará o deshabilitará correctamente el modo, ya que Customize ejecuta automáticamente el comando mode por Usted.</p>
<p>La siguiente es una lista de algunos modos menores locales de búfer:</p>
<blockquote>
<div><ul class="simple">
<li><p>El modo Abbrev amplía automáticamente el texto basándose en definiciones de abreviaturas predefinidas. Consulte Abreviaturas.</p></li>
<li><p>El modo Relleno automático inserta nuevas líneas a medida que escribe para evitar que las líneas se alarguen demasiado. Ver Rellenar Texto.</p></li>
<li><p>El modo Autoguardar guarda el contenido del búfer periódicamente para reducir la cantidad de trabajo que puede perder en caso de fallo. Véase Autoguardado: Protección Contra</p></li>
</ul>
<p>Desastres.</p>
<ul class="simple">
<li><p>El modo Electric Quote convierte automáticamente las comillas. Por ejemplo, entrecomilla el texto escrito <a href="#id1"><span class="problematic" id="id2">`</span></a>así” a texto <a href="#id3"><span class="problematic" id="id4">`</span></a>así”. Puede controlar en qué tipo de texto funciona, y puede</p></li>
</ul>
<p>desactivarlo por completo en búferes individuales. Véase Comillas.</p>
<ul class="simple">
<li><p>El modo enriquecido (enriched mode) permite editar y guardar texto formateado. Véase Texto Enriquecido.</p></li>
<li><p>El modo Flyspell (Flyspell mode) resalta automáticamente las palabras mal escritas. Véase Comprobar y Corregir la Ortografía.</p></li>
<li><p>El modo Font-Lock resalta automáticamente ciertas unidades textuales que se encuentran en los programas. Está activado globalmente por defecto, pero puede desactivarlo en búferes</p></li>
</ul>
<p>individuales. Véase Caras de Texto.</p>
<ul class="simple">
<li><p>El modo Visualizar números de línea (Display Line Numbers mode) es un práctico asistente para la visualización de números de línea (display-line-numbers), que se configura usando el</p></li>
</ul>
<p>valor de display-line-numbers-type. Véase Personalización de la Visualización.</p>
<ul class="simple">
<li><p>El modo menor Outline proporciona facilidades similares al modo mayor llamado Outline mode. Véase Modo Contorno.</p></li>
<li><p>El modo de sobrescritura hace que los caracteres de impresión normales sustituyan al texto existente en lugar de desplazarlo a la derecha. Por ejemplo, si hay un punto delante de la</p></li>
</ul>
<p>«B» de «FOOBAR», en el modo de sobrescritura, si se escribe una «G», se convierte en «FOOGAR», en lugar de producir «FOOGBAR» como de costumbre. En el modo de sobrescritura, el comando
C-q inserta el siguiente carácter, sea cual sea, incluso si es un dígito, lo que le permite insertar un carácter en lugar de sustituir un carácter existente. El comando de modo,
overwrite-mode, está ligado a la tecla Insert.</p>
<ul class="simple">
<li><p>El modo Sobrescritura binaria es una variante del modo Sobrescritura para la edición de archivos binarios; trata las nuevas líneas y los tabuladores como otros caracteres, de modo</p></li>
</ul>
<p>que sobrescriben otros caracteres y pueden ser sobrescritos por ellos. En el modo Sobrescritura binaria, los dígitos después de C-q especifican un código de carácter octal, como es
habitual.</p>
<ul class="simple">
<li><p>El modo Línea visual realiza el ajuste de palabras, haciendo que las líneas largas se ajusten a los límites de palabra. Véase Modo de Línea Visual.</p></li>
</ul>
</div></blockquote>
<p>Y aquí hay algunos modos menores globales útiles:</p>
<blockquote>
<div><ul class="simple">
<li><p>El modo Número de Columna permite mostrar el número de columna actual en la línea de modo. Véase La línea de Modo.</p></li>
<li><p>El modo Borrar Selección hace que la inserción de texto borre primero el texto de la región, si la región está activa. Véase Operar en la Región.</p></li>
<li><p>El modo Icompletar muestra una indicación de las terminaciones disponibles cuando se está en el minibúfer y la terminación está activa. Véase Selección Rápida del Minibúfer.</p></li>
<li><p>El modo Número de línea (Line Number mode) permite mostrar el número de línea actual en la línea de modo. Está activado por defecto. Véase La línea de Modo.</p></li>
<li><p>El modo Barra de Menús proporciona a cada marco una barra de menús. Está activado por defecto. Véase Barras de Menú.</p></li>
<li><p>El modo Barra de Desplazamiento proporciona a cada ventana una barra de desplazamiento. Está activado por defecto, pero la barra de desplazamiento sólo aparece en los terminales</p></li>
</ul>
<p>gráficos. Ver Barras de Desplazamiento.</p>
<ul class="simple">
<li><p>El modo Barra de herramientas (Tool Bar mode) proporciona a cada marco una barra de herramientas. Está activado por defecto, pero la barra de herramientas sólo se muestra en los</p></li>
</ul>
<p>terminales gráficos. Véase Barra de Herramientas.</p>
<ul class="simple">
<li><p>El modo Barra de Pestañas proporciona a cada marco una barra de pestañas. Ver Barra de Pestañas.</p></li>
<li><p>El modo Barra de Pestañas (Tab Line mode) proporciona a cada ventana una barra de pestañas. Véase Barra de Pestañas de Ventana.</p></li>
<li><p>El modo Marca transitoria (Transient Mark mode) resalta la región, y hace que muchos comandos de Emacs operen en la región cuando la marca está activa. Está activado por defecto.</p></li>
</ul>
<p>Véase La marca y la Región.</p>
</div></blockquote>
</section>
<section id="eleccion-de-los-modos-de-archivo">
<h2>24.3 Elección de los Modos de Archivo<a class="headerlink" href="#eleccion-de-los-modos-de-archivo" title="Link to this heading"></a></h2>
<p>Cuando visita un archivo, Emacs elige un modo principal automáticamente. Normalmente, hace la elección basándose en el nombre del archivo, por ejemplo, los archivos cuyos nombres terminan en “.c” se editan normalmente en modo C-pero a veces elige el modo principal basándose en un texto especial en el archivo. Este texto especial también puede usarse para habilitar modos menores locales al búfer.</p>
<p>Este es el procedimiento exacto:</p>
<p>Primero, Emacs comprueba si el archivo contiene variables de modo local de archivo. Ver Variables Locales en Archivos. Si hay una variable local de archivo que especifica un modo mayor, entonces Emacs usa ese modo mayor, ignorando todos los demás criterios. Hay varios métodos para especificar un modo principal usando una variable local de archivo; el más simple es poner el nombre del modo en la primera línea no en blanco, precedida y seguida por “-<a href="#id5"><span class="problematic" id="id6">*</span></a>-”. También puede aparecer otro texto en la línea. Por ejemplo,</p>
<blockquote>
<div><p>; -<em>-Lisp-</em>-</p>
</div></blockquote>
<p>le dice a Emacs que use el modo Lisp. Observe cómo se usa el punto y coma para que Lisp trate esta línea como un comentario. De forma equivalente, podría escribir</p>
<blockquote>
<div><p>; -<em>- mode: Lisp;-</em>-</p>
</div></blockquote>
<p>También puede usar variables locales de archivo para especificar modos menores locales de búfer, usando especificaciones eval. Por ejemplo, esta primera línea no en blanco pone el búfer en modo Lisp y activa el modo Auto-Fill:</p>
<blockquote>
<div><p>; -<em>- mode: Lisp; eval: (auto-fill-mode 1); -</em>-</p>
</div></blockquote>
<p>Tenga en cuenta, sin embargo, que normalmente es inapropiado activar los modos menores de esta forma, ya que la mayoría de ellos representan preferencias individuales del Usuario. Si personalmente quiere usar un modo menor para un tipo de archivo en particular, es mejor activar el modo menor a través de un hook de modo mayor (ver Modos Mayores).</p>
<p>En segundo lugar, Emacs comprueba si la extensión del archivo coincide con una entrada de cualquier lista de modos automáticos local del directorio. Estas se encuentran usando la herramienta .dir-locals.el (ver Variables Locales Por-Directorio).</p>
<p>En tercer lugar, si no hay ninguna variable de archivo que especifique un modo principal, Emacs comprueba si el contenido del archivo empieza por “#!”. Si es así, eso indica que el archivo puede servir como un comando de shell ejecutable, que funciona ejecutando un intérprete nombrado en la primera línea del archivo (el resto del archivo se usa como entrada para el intérprete). Por lo tanto, Emacs intenta usar el nombre del intérprete para elegir un modo. Por ejemplo, un archivo que comienza con “#!/usr/bin/perl” se abre en modo Perl. La variable interpreter-mode-alist especifica la correspondencia entre los nombres de los programas intérpretes y los modos principales.</p>
<p>Cuando la primera línea empieza con “#!”, normalmente no puede usar la función “-<em>-” en la primera línea, porque el sistema se confundiría al ejecutar el intérprete. Así que Emacs busca “-</em>-” en la segunda línea de tales archivos así como en la primera línea. Lo mismo ocurre con las páginas de manual que empiezan con la cadena mágica “”&quot;” para especificar una lista de preprocesadores troff.</p>
<p>Cuarto, Emacs intenta determinar el modo principal mirando el texto al principio del búfer, basándose en la variable magic-mode-alist. Por defecto, esta variable es nil (una lista vacía), por lo que Emacs se salta este paso; sin embargo, puede personalizarla en su archivo init (vea El archivo de inicialización de Emacs). El valor debe ser una lista de elementos de la forma</p>
<blockquote>
<div><p>(regexp . mode-function)</p>
</div></blockquote>
<p>donde regexp es una expresión regular (ver Sintaxis de Expresiones Regulares), y mode-function es un comando de modo principal. Si el texto al principio del archivo coincide con regexp, Emacs elige el modo principal especificado por mode-function.</p>
<p>Alternativamente, un elemento de magic-mode-alist puede tener la forma</p>
<blockquote>
<div><p>(match-function . mode-function)</p>
</div></blockquote>
<p>donde match-function es una función Lisp que se llama al principio del búfer; si la función devuelve un valor no nulo, Emacs establece el modo principal con mode-function.</p>
<p>Quinto -si Emacs todavía no ha encontrado un modo principal adecuado- mira el nombre del archivo. La correspondencia entre nombres de archivo y modos principales está controlada por la variable auto-mode-alist. Su valor es una lista en la que cada elemento tiene esta forma,</p>
<blockquote>
<div><p>(regexp . mode-function)</p>
</div></blockquote>
<p>o con este formulario,</p>
<blockquote>
<div><p>(regexp mode-function flag)</p>
</div></blockquote>
<p>Por ejemplo, un elemento que normalmente se encuentra en la lista tiene la forma (»\.c\”» . c-mode), y es el responsable de seleccionar el modo C para los archivos cuyos nombres terminan en .c. (Tenga en cuenta que “\” es necesario en la sintaxis Lisp para incluir un “' en la cadena, que debe usarse para suprimir el significado especial de “.” en los regexps).</p>
<p>Si el elemento tiene la forma (regexp mode-function flag) y flag es no nil, entonces después de llamar a mode-function (si es no nil), Emacs descarta el sufijo que coincidió con regexp y busca de nuevo en la lista otra coincidencia. Esta «eliminación recursiva de extensiones» se usa para archivos que tienen múltiples extensiones, y la extensión «externa» oculta la «interna» que realmente especifica el modo correcto. Por ejemplo, los archivos de copia de seguridad y los archivos cifrados con GPG con extensión .gpg usan esta función.</p>
<p>En GNU/Linux y otros sistemas con nombres de archivo que distinguen mayúsculas de minúsculas, Emacs realiza una búsqueda que distingue mayúsculas de minúsculas a través de la lista auto-mode-alist; si esta búsqueda falla, realiza una segunda búsqueda que no distingue mayúsculas de minúsculas a través de la lista alist. Para suprimir la segunda búsqueda, cambie la variable auto-mode-case-fold a nil. En sistemas con nombres de archivo que no distinguen mayúsculas de minúsculas, como Microsoft Windows, Emacs realiza una única búsqueda que no distingue mayúsculas de minúsculas a través de auto-mode-alist.</p>
<p>Finalmente, si Emacs todavía no ha encontrado un modo principal que usar, compara el texto al principio del búfer con la variable magic-fallback-mode-alist. Esta variable funciona como magic-mode-alist, descrita anteriormente, excepto que se consulta sólo después de auto-mode-alist. Por defecto, magic-fallback-mode-alist contiene formularios que comprueban archivos de imagen, archivos HTML/XML/SGML, archivos PostScript y archivos Conf estilo Unix.</p>
<p>Una vez que se encuentra un modo principal, Emacs hace una comprobación final para ver si el modo ha sido remapeado por major-mode-remap-alist, en cuyo caso usa el modo remapeado en su lugar. Esto se usa cuando se pueden usar varios modos principales diferentes para el mismo tipo de archivo, para que pueda especificar qué modo prefiere.</p>
<p>Si ha cambiado el modo principal de un búfer, puede volver al modo principal que Emacs habría elegido automáticamente, tecleando M-x normal-mode. Esta es la misma función que find-file llama para elegir el modo principal. Si el búfer está visitando un archivo, este comando también procesa la línea “-<em>-” del archivo y la lista de variables locales del archivo (si existe). Véase Variables Locales en Archivos. Si el búfer no visita un archivo, el comando procesa sólo la especificación de modo principal, si la hay, en la línea “-</em>-” y en la lista de variables locales del archivo.</p>
<p>Los comandos C-x C-w y set-visited-file-name cambian a un nuevo modo principal si el nuevo nombre de archivo implica un modo (véase Guardar Archivos). (C-x C-s también lo hace, si el búfer no estaba visitando un archivo.) Sin embargo, esto no ocurre si el contenido del búfer especifica un modo principal, y ciertos modos principales especiales no permiten cambiar el modo. Puede desactivar esta función de cambio de modo estableciendo change-major-mode-with-file-name en nil.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="23_SoporteJuegoCaracIntern.html" class="btn btn-neutral float-left" title="23 Soporte de Juego de Caracteres Internacional" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="25_Indentacion.html" class="btn btn-neutral float-right" title="25 Indentación" accesskey="n" rel="next">Siguiente <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -0,0 +1,225 @@
<!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>25 Indentación &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="26 Comandos para Lenguajes Humanos" href="26_ComandsLengsHuma.html" />
<link rel="prev" title="24 Modos Mayores y Menores" href="24_ModosMayores-Y-Menores.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.16
</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"><a class="reference internal" href="19_ManejoArchivos.html">19 Manejo de Archivos</a></li>
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">25 Indentación</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#comandos-de-indentado">25.1 Comandos de Indentado</a></li>
<li class="toctree-l2"><a class="reference internal" href="#paradas-de-tabulacion">25.2 Paradas de Tabulación</a></li>
<li class="toctree-l2"><a class="reference internal" href="#tabulaciones-vs-espacios">25.3 Tabulaciones vs. Espacios</a></li>
<li class="toctree-l2"><a class="reference internal" href="#funciones-practicas-para-la-sangria">25.4 Funciones Prácticas para la Sangría</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</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">25 Indentación</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/CapConSecciones/25_Indentacion.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="indentacion">
<h1>25 Indentación<a class="headerlink" href="#indentacion" title="Link to this heading"></a></h1>
<p>La sangría se refiere a la inserción o ajuste de caracteres de espacio en blanco (caracteres de espacio y/o tabulación) al principio de una línea de texto. Este capítulo documenta los comandos y opciones de sangría que son comunes al modo Texto y modos relacionados, así como a los modos de lenguaje de programación. Consulte Indentación para Programas, para obtener documentación adicional sobre la indentación en los modos de programación.</p>
<p>La forma más sencilla de realizar la sangría es la tecla TAB. En la mayoría de los modos principales, esto ejecuta el comando indent-for-tab-command. (En C y modos relacionados, TAB ejecuta el comando c-indent-line-or-region, que se comporta de forma similar, ver Comandos para la Indentación en C).</p>
<dl class="simple">
<dt>TAB</dt><dd><p>Inserta un espacio en blanco o aplica una sangría (o indentación) a la línea actual según el modo (comando sangría por tabulación). Si la región está activa, indenta todas las líneas
dentro de ella.</p>
</dd>
</dl>
<p>El comportamiento exacto de TAB depende del modo principal. En el modo Texto y modos principales relacionados, TAB normalmente inserta alguna combinación de caracteres de espacio y tabulación para avanzar el punto hasta la siguiente parada de tabulación (véase Paradas de TABulación). Para este propósito, la posición del primer carácter que no sea un espacio en blanco en la línea precedente se trata como un tabulador adicional, por lo que puede usar TAB para alinear el punto con la línea precedente. Si la región está activa (véase Funcionamiento de la Región), TAB actúa de forma especial: sangrará cada línea de la región de forma que su primer carácter que no sea un espacio en blanco se alinee con la línea precedente.</p>
<p>En los modos de programación, TAB aplica una sangría a la línea de código actual de forma que tenga sentido teniendo en cuenta el código de las líneas precedentes. Si la región está activa, todas las líneas de la región tienen esta sangría. Si el punto estaba inicialmente dentro de la sangría de la línea actual, se reposiciona al primer carácter no espacio en blanco de la línea.</p>
<p>Si sólo desea insertar un carácter de tabulación en el búfer, escriba C-q TAB (véase Inserción de Texto).</p>
<section id="comandos-de-indentado">
<h2>25.1 Comandos de Indentado<a class="headerlink" href="#comandos-de-indentado" title="Link to this heading"></a></h2>
<p>Aparte del comando TAB (indent-for-tab-command), Emacs proporciona una variedad de comandos para realizar la sangría de otras maneras.</p>
<dl>
<dt>C-M-o</dt><dd><p>Divide la línea actual en el punto (línea dividida). El texto de la línea posterior al punto se convierte en una nueva línea, con sangría en la misma columna en la que se encuentra el
punto. Este comando primero desplaza el punto por encima de los espacios y tabulaciones. Después, el punto se sitúa antes de la nueva línea insertada.</p>
</dd>
<dt>M-m</dt><dd><p>Se desplaza (hacia delante o hacia atrás) hasta el primer carácter que no sea un espacio en blanco de la línea actual (hacia atrás hasta la sangría). Si no hay caracteres que no sean
espacios en blanco en la línea, se desplaza al final de la línea.</p>
</dd>
<dt>M-i</dt><dd><p>Sangra (o indentna) los espacios en blanco en un punto, hasta el siguiente tabulador (tab to tab-stop). Véase Paradas de Tabulación.</p>
</dd>
<dt>M-x indent-relative</dt><dd><p>Inserta espacios en blanco en el punto, hasta que el punto esté alineado con el primer carácter sin espacio en blanco de la línea anterior (en realidad, la última línea sin espacios en
blanco). Si el punto ya está más a la derecha que eso, ejecute tab-to-tab-stop en su lugar, a menos que se llame con un argumento numérico, en cuyo caso no hace nada.</p>
</dd>
<dt>M-^</dt><dd><p>Une la línea anterior y la actual (delete indentation, eliminar sangría). Une las dos líneas limpiamente, sustituyendo cualquier sangría al principio de la línea actual, junto con el
límite de la línea, por un único espacio.</p>
<p>Como caso especial (útil para código Lisp), el espacio simple se omite si los caracteres a unir son paréntesis consecutivos de apertura y cierre, o si la unión sigue a otra nueva línea.</p>
<p>Si hay un prefijo de relleno, M-^ borra el prefijo de relleno si aparece después de la nueva línea que se borra. Véase El Prefijo de Relleno.</p>
<p>Con un argumento de prefijo, une la línea actual con la siguiente. Si la región está activa y no se da ningún argumento de prefijo, une todas las líneas de la región.</p>
</dd>
<dt>C-M-</dt><dd><p>Indenta todas las líneas de la región, como si hubiera escrito TAB al principio de cada línea (indent-region).</p>
<p>Si se proporciona un argumento numérico, se indentará cada línea de la región hasta ese número de columna.</p>
</dd>
<dt>C-x TAB</dt><dd><p>Indenta todas las líneas que comienzan en la región, moviendo las líneas afectadas como una unidad rígida (indent-rigidly).</p>
<p>Si se ejecuta sin argumento, este comando activa un modo transitorio para ajustar la sangría de las líneas afectadas de forma interactiva. Mientras este modo transitorio está activo,
al teclear IZQUIERDA o DERECHA se aplica una sangría de un espacio hacia la izquierda o hacia la derecha, respectivamente. También puede teclear S-LEFT o S-RIGHT para sangrar hacia la
izquierda o hacia la derecha hasta el siguiente tabulador (véase Paradas de Tabulación). Si se teclea cualquier otra tecla, se desactiva el modo transitorio y se actúa normalmente
sobre esta tecla.</p>
<p>Si se invoca con un argumento prefijo n, este comando avanza las líneas n espacios (sin activar el modo transitorio). Los valores negativos de n sangrar hacia atrás, por lo que puede
eliminar toda la sangría de las líneas de la región usando un argumento negativo grande, como este:</p>
<blockquote>
<div><p>C-u -999 C-x TAB</p>
</div></blockquote>
</dd>
</dl>
</section>
<section id="paradas-de-tabulacion">
<h2>25.2 Paradas de Tabulación<a class="headerlink" href="#paradas-de-tabulacion" title="Link to this heading"></a></h2>
<p>Emacs define ciertos números de columna como tabuladores. Estos son usados como puntos de parada por TAB cuando se insertan espacios en blanco en modo Texto y modos relacionados (ver Indentación), y por comandos como M-i (ver Comandos de Indentación). La variable tab-stop-list controla estas posiciones. El valor por defecto es nil, lo que significa un tabulador cada 8 columnas. El valor también puede ser una lista de números de columna basados en cero (en orden creciente) en los que colocar los tabuladores. Emacs extiende la lista para siempre repitiendo la diferencia entre el último y el penúltimo elemento.</p>
<p>En lugar de personalizar la variable tab-stop-list directamente, una forma conveniente de ver y establecer los tabuladores es mediante el comando M-x edit-tab-stops. Esto cambia a un búfer que contiene una descripción de los ajustes de tabulación, que tiene este aspecto:</p>
<blockquote>
<div><blockquote>
<div><p>: : : : : :</p>
</div></blockquote>
<p>0 1 2 3 4
0123456789012345678901234567890123456789012345678
To install changes, type C-c C-c</p>
</div></blockquote>
<p>La primera línea contiene dos puntos en cada tabulador. Los números de las dos líneas siguientes están presentes sólo para indicar dónde están los dos puntos. Si el valor de tab-stop-list es nulo, como ocurre por defecto, no se muestran dos puntos inicialmente.</p>
<p>Puede editar este búfer para especificar diferentes paradas de tabulación colocando dos puntos en las columnas deseadas. El búfer usa el modo de sobreescritura (ver Modos Menores). Recuerde que Emacs extenderá la lista de paradas de tabulación para siempre repitiendo la diferencia entre las dos últimas paradas explícitas que coloque. Cuando haya terminado, teclee C-c C-c para que los nuevos tabuladores surtan efecto. Normalmente, los nuevos ajustes de tabulación se aplican a todos los búferes. Sin embargo, si ha hecho que la variable tab-stop-list sea local al búfer donde llamó a M-x edit-tab-stops (vea Variables Locales), entonces los nuevos ajustes de tabulación se aplican sólo a ese búfer. Para guardar la configuración de tabuladores para futuras sesiones de Emacs, usa la interfaz Personalizar para guardar el valor de tab-stop-list (ver Interfaz de Personalización Fácil).</p>
<p>Tenga en cuenta que las paradas de tabulación discutidas en esta sección no tienen nada que ver con cómo se muestran los caracteres de tabulación en el búfer. Los caracteres de tabulación siempre se muestran como espacios vacíos que se extienden hasta la siguiente parada de tabulación. Véase Cómo se Muestra el Texto.</p>
</section>
<section id="tabulaciones-vs-espacios">
<h2>25.3 Tabulaciones vs. Espacios<a class="headerlink" href="#tabulaciones-vs-espacios" title="Link to this heading"></a></h2>
<p>Normalmente, los comandos de sangría insertan (o eliminan) la serie más corta posible de caracteres de tabulación y espacio para alinearse con la columna deseada. Los caracteres de tabulación se muestran como un tramo de espacio vacío que se extiende hasta el siguiente tabulador. Por defecto, hay un tabulador por cada columna de ancho de tabulación (8 por defecto). Véase Cómo se Muestra el Texto.</p>
<p>Si lo prefiere, toda la indentación puede hacerse sólo a partir de espacios. Para ello, establezca la variable local del búfer indent-tabs-mode a nil. Consulte Variables Locales, para más información sobre la configuración de variables locales del búfer. Tenga en cuenta, sin embargo, que C-q TAB siempre inserta un carácter de tabulación, independientemente del valor de indent-tabs-mode.</p>
<p>Una razón para establecer indent-tabs-mode a nil es que no todos los editores muestran los caracteres de tabulación de la misma manera. Los Usuarios de Emacs, también, pueden tener diferentes valores personalizados de tab-width. Usando sólo espacios, puede asegurarse de que su archivo tiene siempre el mismo aspecto. Si sólo le importa cómo se ve dentro de Emacs, otra forma de abordar este problema es establecer la variable tab-width en una variable local de archivo (vea Variables Locales en Archivos).</p>
<p>También hay comandos para convertir tabuladores en espacios o viceversa, preservando siempre las columnas de todo el texto que no tenga espacios en blanco. M-x tabify escanea la región en busca de secuencias de espacios, y convierte secuencias de al menos dos espacios en tabuladores si puede hacerse sin cambiar la sangría. M-x untabify cambia todos los tabuladores de la región por el número de espacios apropiado.</p>
</section>
<section id="funciones-practicas-para-la-sangria">
<h2>25.4 Funciones Prácticas para la Sangría<a class="headerlink" href="#funciones-practicas-para-la-sangria" title="Link to this heading"></a></h2>
<p>La variable tab-always-indent modifica el comportamiento del comando TAB (sangría para el comando tab). El valor por defecto, t, proporciona el comportamiento descrito en Sangría. Si cambia el valor por el símbolo complete, TAB intentará primero aplicar la sangría a la línea actual y, si la línea ya estaba sangrada, intentará completar el texto en el punto (véase Completar nombres de símbolos). Si el valor es nil, TAB aplica sangría a la línea actual sólo si el punto está en el margen izquierdo o en la sangría de la línea; en caso contrario, inserta un carácter de tabulación.</p>
<p>Si tab-always-indent es completo, la opción de expandir o sangrar puede personalizarse aún más mediante la variable tab-first-completion. Por ejemplo, si esa variable es eol, sólo completa si el punto está al final de una línea. Vea Modo Específico de Sangría en el Manual de Referencia de Emacs Lisp, para más detalles.</p>
<p>El modo Electric Indent es un modo global menor que automáticamente indenta la línea después de cada RET que escriba. Este modo está activado por defecto. Para activar este modo menor, escriba M-x electric-indent-mode. Para activar este modo en un único búfer, use M-x electric-indent-local-mode.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="24_ModosMayores-Y-Menores.html" class="btn btn-neutral float-left" title="24 Modos Mayores y Menores" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="26_ComandsLengsHuma.html" class="btn btn-neutral float-right" title="26 Comandos para Lenguajes Humanos" 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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,968 @@
<!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>27 Edición de Programas &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="28 Compilar y Probar Programas" href="28_CompProbProg.html" />
<link rel="prev" title="26 Comandos para Lenguajes Humanos" href="26_ComandsLengsHuma.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.16
</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"><a class="reference internal" href="19_ManejoArchivos.html">19 Manejo de Archivos</a></li>
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">27 Edición de Programas</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#modos-principales-para-lenguajes-de-programacion">27.1 Modos Principales para Lenguajes de Programación</a></li>
<li class="toctree-l2"><a class="reference internal" href="#definiciones-de-nivel-superior-o-defuns">27.2 Definiciones de Nivel Superior, o Defuns</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#desplazamiento-por-defuns">27.2.2 Desplazamiento por defuns</a></li>
<li class="toctree-l3"><a class="reference internal" href="#imenu">27.2.3 Imenu</a></li>
<li class="toctree-l3"><a class="reference internal" href="#modo-que-funcion-which-function-mode">27.2.4 Modo Qué función (Which Function Mode)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#indentacion-de-programas">27.3 Indentación de Programas</a></li>
<li class="toctree-l2"><a class="reference internal" href="#comandos-para-la-edicion-con-parentesis">27.4 Comandos para la Edición con Paréntesis</a></li>
<li class="toctree-l2"><a class="reference internal" href="#manipulacion-de-comentarios">27.5. Manipulación de Comentarios</a></li>
<li class="toctree-l2"><a class="reference internal" href="#busqueda-de-documentacion">27.6 Búsqueda de Documentación</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modo-secundario-hideshow">27.7 Modo Secundario Hideshow</a></li>
<li class="toctree-l2"><a class="reference internal" href="#completado-de-nombres-de-simbolos">27.8 Completado de Nombres de Símbolos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#palabras-en-mayusculas-y-minusculas">27.9 Palabras en Mayúsculas y Minúsculas</a></li>
<li class="toctree-l2"><a class="reference internal" href="#semantica">27.10 Semántica</a></li>
<li class="toctree-l2"><a class="reference internal" href="#otras-funciones-utiles-para-editar-programas">27.11 Otras Funciones Útiles para Editar Programas</a></li>
<li class="toctree-l2"><a class="reference internal" href="#c-y-modos-relacionados">27.12 C y Modos Relacionados</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#comandos-de-movimiento-en-modo-c">27.12.1 Comandos de Movimiento en Modo C</a></li>
<li class="toctree-l3"><a class="reference internal" href="#caracteres-c-electricos">27.12.2 Caracteres C Eléctricos</a></li>
<li class="toctree-l3"><a class="reference internal" href="#caracteristica-de-borrado-forzado-en-c">27.12.3. Característica de Borrado Forzado en C</a></li>
<li class="toctree-l3"><a class="reference internal" href="#otros-comandos-para-el-modo-c">27.12.4 Otros comandos para el Modo C</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#modo-asm">27.13 Modo Asm</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modo-fortran">27.14 Modo Fortran</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#comandos-de-movimie">27.14.1 Comandos de Movimie</a></li>
<li class="toctree-l3"><a class="reference internal" href="#indentacion-en-fortran">27.14.2. Indentación en Fortran</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comandos-fortran-de-indentado-y-relleno">27.14.2.1. Comandos Fortran de Indentado y Relleno</a></li>
<li class="toctree-l4"><a class="reference internal" href="#lineas-de-continuacion">27.14.2.2. Líneas de Continuación</a></li>
<li class="toctree-l4"><a class="reference internal" href="#numeros-de-linea">27.14.2.3. Números de Línea</a></li>
<li class="toctree-l4"><a class="reference internal" href="#convenciones-sintacticas">27.14.2.4 Convenciones Sintácticas</a></li>
<li class="toctree-l4"><a class="reference internal" href="#variables-para-el-indentado-en-fortran">27.14.2.5. Variables para el Indentado en Fortran</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#comentarios-en-fortran">27.14.3. Comentarios en Fortran</a></li>
<li class="toctree-l3"><a class="reference internal" href="#relleno-automatico-en-modo-fortran">27.14.4. Relleno Automático en Modo Fortran</a></li>
<li class="toctree-l3"><a class="reference internal" href="#comprobacion-de-columnas-en-fortran">27.14.5. Comprobación de Columnas en Fortran</a></li>
<li class="toctree-l3"><a class="reference internal" href="#abreviaturas-de-palabras-clave-en-fortran">27.14.6. Abreviaturas de Palabras Clave en Fortran</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="28_CompProbProg.html">28 Compilar y Probar Programas</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">27 Edición de Programas</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/CapConSecciones/27_EdDePrograms.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="edicion-de-programas">
<h1>27 Edición de Programas<a class="headerlink" href="#edicion-de-programas" title="Link to this heading"></a></h1>
<blockquote>
<div><ul class="simple">
<li><p>Este capítulo describe las características de Emacs para facilitar la edición de programas. Algunas de las cosas que estas características pueden hacer son:</p></li>
<li><p>Búsqueda o desplazamiento sobre definiciones de nivel superior (véase Definiciones de Nivel Superior, o Defuns).</p></li>
<li><p>Aplicación de las convenciones de sangría habituales del lenguaje (véase Sangría para los Programas).</p></li>
<li><p>Equilibrar paréntesis (ver Comandos para Editar con Paréntesis).</p></li>
<li><p>Insertar, eliminar o alinear comentarios (véase Manipulación de Comentarios).</p></li>
<li><p>Resaltar la sintaxis del programa (véase Modo de Bloqueo de Fuente).</p></li>
</ul>
</div></blockquote>
<section id="modos-principales-para-lenguajes-de-programacion">
<h2>27.1 Modos Principales para Lenguajes de Programación<a class="headerlink" href="#modos-principales-para-lenguajes-de-programacion" title="Link to this heading"></a></h2>
<p>Emacs tiene modos principales especializados (ver Modos Principales) para muchos lenguajes de programación. Un modo de lenguaje de programación normalmente especifica la sintaxis de las expresiones, las reglas habituales de sangría, cómo resaltar la sintaxis del lenguaje y cómo encontrar el principio o el final de la definición de una función. También suele incluir funciones para compilar y depurar programas. El modo principal para cada lenguaje se llama como el lenguaje; por ejemplo, el modo principal para el lenguaje de programación C es c-mode.</p>
<p>Emacs tiene modos de lenguaje de programación para Lisp, Scheme, el lenguaje de expresión DSSSL basado en Scheme, Ada, ASM, AWK, C, C++, C#, Fortran, Icon, IDL (CORBA), IDLWAVE, Java, Javascript, M4, Makefiles, Metafont (compañero de TeX para la creación de fuentes), Modula2, Object Pascal, Objective-C, Octave, Pascal, Perl, Pike, PostScript, Prolog, Python, Ruby, Simula, SQL, Tcl, TypeScript, Verilog y VHDL. Un modo alternativo para Perl se denomina modo CPerl. También hay modos disponibles para los lenguajes de scripting de los shells comunes de GNU y Unix, y archivos “BAT” de MS-DOS/MS-Windows, JSON, archivos maestros DNS, CSS (Cascading Style Sheets), Dockerfiles, archivos CMake, y varios tipos de archivos de configuración.</p>
<p>Idealmente, Emacs debería tener un modo principal para cada lenguaje de programación que quiera editar. Si no tiene un modo para su lenguaje favorito, el modo puede estar implementado en un paquete no distribuido con Emacs (ver Paquetes Emacs Lisp); o puede contribuir con uno.</p>
<p>Si Emacs ha sido compilado con la librería “tree-sitter”, ofrece varios modos de edición opcionales basados en esa librería, que utilizan las capacidades de análisis incremental proporcionadas por “tree-sitter”. Estos modos tienen “-ts-” en sus nombres; por ejemplo c-ts-mode, python-ts-mode, etc.</p>
<p>En la mayoría de los lenguajes de programación, la sangría debe variar de una línea a otra para ilustrar la estructura del programa. Por lo tanto, en la mayoría de los lenguajes de programación, teclear TAB actualiza la sangría de la línea actual (ver Sangría para Programas). Además, DEL suele estar vinculado a backward-delete-char-untabify, que borra hacia atrás tratando cada tabulación como si fuera el número equivalente de espacios, de modo que puede borrar una columna de sangría sin preocuparse de si el espacio en blanco está formado por espacios o tabulaciones.</p>
<p>Al entrar en un modo de lenguaje de programación se ejecutan las funciones personalizadas de Lisp especificadas en la variable hook prog-mode-hook, seguidas de las especificadas en el propio hook de modo del modo (véase Modos Principales). Por ejemplo, al entrar en modo C se ejecutan los ganchos prog-mode-hook y c-mode-hook. Ver Ganchos, para información sobre éstos.</p>
<p>Hay manuales separados disponibles para los modos para Ada (ver Ada Mode en Ada Mode), C/C++/Objective C/Java/Corba IDL/Pike/AWK (ver CC Mode en CC Mode), Octave, VHDL, e IDLWAVE (ver IDLWAVE en IDLWAVE User Manual).</p>
</section>
<section id="definiciones-de-nivel-superior-o-defuns">
<h2>27.2 Definiciones de Nivel Superior, o Defuns<a class="headerlink" href="#definiciones-de-nivel-superior-o-defuns" title="Link to this heading"></a></h2>
<p>En Emacs, una definición mayor en el nivel superior del búfer, como una función, se llama defun. El nombre viene de Lisp, pero en Emacs lo usamos para todos los lenguajes.</p>
<p>27.2.1 Convención del Margen Izquierdo</p>
<p>Muchos modos de lenguaje de programación han asumido tradicionalmente que cualquier paréntesis de apertura o llave que se encuentre en el margen izquierdo es el comienzo de una definición de nivel superior, o defun. Así, por defecto, los comandos que buscan el comienzo de un defun aceptan tal delimitador como significando esa posición.</p>
<p>Si desea anular esta convención, puede hacerlo estableciendo la opción de Usuario open-paren-in-column-0-is-defun-start a nil. Si esta opción es t (por defecto), los comandos que buscan el inicio de un defun se detendrán al abrir paréntesis o llaves en la columna cero que no estén en un comentario o cadena. Cuando es nil, los defuns se encuentran buscando paréntesis o llaves en el nivel más externo. Dado que las rutinas Emacs de bajo nivel ya no dependen de esta convención, normalmente no necesitarás cambiar open-paren-in-column-0-is-defun-start de su valor por defecto.</p>
<section id="desplazamiento-por-defuns">
<h3>27.2.2 Desplazamiento por defuns<a class="headerlink" href="#desplazamiento-por-defuns" title="Link to this heading"></a></h3>
<p>Estos comandos mueven el punto o configuran la región basándose en definiciones principales de nivel superior, también llamadas defuns.</p>
<dl class="simple">
<dt>C-M-a</dt><dd><p>Se mueve al principio del defun actual o precedente (beginning-of-defun).</p>
</dd>
<dt>C-M-e</dt><dd><p>Se mueve al final del defun actual o siguiente (end-of-defun).</p>
</dd>
<dt>C-M-h</dt><dd><p>Coloca una región alrededor de todo el defun actual o siguiente (mark-defun).</p>
</dd>
</dl>
<p>Los comandos para desplazarse al principio y al final de la definición actual son C-M-a (beginning of defun, inicio de la definición) y C-M-e (end of defun, final de la definición). Si repite uno de estos comandos, o usa un argumento numérico positivo, cada repetición se mueve al siguiente defun en la dirección del movimiento.</p>
<p>C-M-a con un argumento negativo -n avanza n veces hasta el siguiente comienzo de una defun. Este no es exactamente el mismo lugar al que se movería C-M-e con argumento n; el final de este defun no suele ser exactamente el mismo lugar que el principio del siguiente defun. (Espacios en blanco, comentarios, y quizás declaraciones pueden separarlos.) Igualmente, C-M-e con un argumento negativo se mueve hacia atrás al final de un defun, que no es exactamente el mismo que C-M-a con un argumento positivo.</p>
<p>Para operar sobre el defun actual, use C-M-h (mark-defun), que coloca la marca al final del defun actual y pone point a su principio. Véase Comandos para Marcar Objetos Textuales. Esta es la forma más fácil de prepararse para matar el defun con el fin de moverlo a un lugar diferente en el archivo. Si el defun está directamente precedido por comentarios (sin líneas en blanco intermedias), también se marcan. Si usa el comando mientras el punto está entre defuns, éste usa el defun siguiente. Si usa el comando mientras la marca ya está activa, extiende el final de la región para incluir un defun más. Con un argumento prefijo, marca tantos defuns o extiende la región el número de defuns apropiado. Con un argumento prefijo negativo, marca defuns en la dirección opuesta y también cambia la dirección de selección para usos posteriores de mark-defun.</p>
<p>En el modo C, C-M-h ejecuta la función c-mark-function, que es casi lo mismo que mark-defun; la diferencia es que retrocede sobre las declaraciones de argumentos, el nombre de la función y el tipo de datos devuelto para que toda la función C esté dentro de la región. Este es un ejemplo de cómo los modos principales ajustan las combinaciones de teclas estándar para que realicen sus funciones estándar de una forma que se adapte mejor a un lenguaje en particular. Otros modos principales pueden reemplazar alguna o todas estas combinaciones de teclas para ese propósito.</p>
<p>Algunos lenguajes de programación admiten defuns anidados, por lo que un defun (como una función o un método o una clase) puede definirse dentro (es decir, como parte del cuerpo) de otro defun. Los comandos descritos anteriormente encuentran por defecto el principio y el final del defun más interno alrededor del punto. Los modos principales basados en la librería tree-sitter proporcionan control de este comportamiento: si la variable treesit-defun-tactic se establece al valor top-level, los comandos defun encontrarán los defuns más externos en su lugar.</p>
</section>
<section id="imenu">
<h3>27.2.3 Imenu<a class="headerlink" href="#imenu" title="Link to this heading"></a></h3>
<p>La función Imenu permite encontrar las definiciones principales de un archivo por su nombre. También es útil en los modos principales del formateador de texto, donde trata cada capítulo, sección, etc., como una definición. (Véase Buscar Referencias de Identificador, para una función más potente que trata varios archivos juntos).</p>
<p>Si teclea M-g i (imenu), lee el nombre de una definición usando el minibúfer, luego mueve el punto a esa definición. Puede usar completar para especificar el nombre; el comando siempre muestra la lista completa de nombres válidos.</p>
<p>Alternativamente, puede vincular el comando imenu a un clic del ratón. Entonces se muestran los menús del ratón para que seleccione un nombre de definición. También puede añadir el índice del búfer a la barra de menús llamando a imenu-add-menubar-index. Si quiere que este elemento de la barra de menús esté disponible para todos los búferes en un determinado modo principal, puede hacerlo añadiendo imenu-add-menubar-index a su hook de modo. Pero si ha hecho eso, tendrá que esperar un poco cada vez que visite un archivo en ese modo, mientras Emacs encuentra todas las definiciones en ese búfer.</p>
<p>Cuando cambia el contenido de un búfer, si añade o borra definiciones, puede actualizar el índice del búfer basándose en el nuevo contenido invocando el elemento “<em>Rescan</em>” del menú. La reexploración se realiza automáticamente si el valor de imenu-auto-rescan es distinto de cero. No es necesario volver a escanear por pequeños cambios en el texto.</p>
<p>imenu-auto-rescan se desactivará en búferes mayores que imenu-auto-rescan-maxout en bytes, y la exploración se detendrá si tarda más de imenu-max-index-time segundos.</p>
<p>Puede personalizar la forma en que se ordenan los menús configurando la variable imenu-sort-function. Por defecto, los nombres se ordenan según aparecen en el búfer; si desea una ordenación alfabética, use el símbolo imenusort-by-name como valor. También puede definir su propia función de comparación escribiendo código Lisp.</p>
<p>Si Eglot está activado para el proyecto del búfer actual (véase Trabajar con proyectos) y el modo principal del búfer actual, Eglot proporciona su propia facilidad para producir el índice del búfer basándose en el análisis del código fuente del programa por parte del servidor de lenguaje que gestiona el búfer actual. Ver Características de Eglot en Eglot: El cliente LSP de Emacs.</p>
<p>Imenu proporciona la información para guiar el modo Which Function (ver Modo Qué Función (Which Function Mode)). El Speedbar también puede usarlo (ver Marcos Speedbar).</p>
</section>
<section id="modo-que-funcion-which-function-mode">
<h3>27.2.4 Modo Qué función (Which Function Mode)<a class="headerlink" href="#modo-que-funcion-which-function-mode" title="Link to this heading"></a></h3>
<p>El modo Which Function es un modo menor global (véase Modos Menores) que muestra el nombre de la función actual en la línea de modo, actualizándolo a medida que se desplaza por el búfer.</p>
<p>Para activar o desactivar el modo Which Function, use el comando M-x which-function-mode. El modo Which Function es un modo global menor. Por defecto, tiene efecto en todos los modos mayores que saben cómo soportarlo (es decir, todos los modos mayores que soportan Imenu). Puede restringirlo a una lista específica de modos principales cambiando el valor de la variable which-func-modes de t (que significa soportar todos los modos principales disponibles) a una lista de nombres de modos principales.</p>
</section>
</section>
<section id="indentacion-de-programas">
<h2>27.3 Indentación de Programas<a class="headerlink" href="#indentacion-de-programas" title="Link to this heading"></a></h2>
<p>La mejor manera de mantener un programa correctamente indentado es usar el Editor para reindentarlo a medida que lo cambia. Emacs tiene comandos para sangrar una sola línea, un número específico de líneas, o todas las líneas dentro de una sola agrupación parentética.</p>
<p>Ver Indentación, para información general sobre la indentación. Esta sección describe las características de sangría específicas de los modos de lenguaje de programación.</p>
<p>Emacs también proporciona un Lisp pretty-printer en el paquete pp, que reformatea objetos Lisp con una sangría de aspecto agradable. Vea pp en el Manual de Referencia de Emacs Lisp.</p>
<p>27.3.1 Comandos Básicos de Indentación de Programas</p>
<dl class="simple">
<dt>TAB</dt><dd><p>Ajusta la indentación de la línea actual (indent-for-tab-command).</p>
</dd>
<dt>RET</dt><dd><p>Inserta una nueva línea, luego ajusta la sangría de la línea siguiente (newline).</p>
</dd>
</dl>
<p>El comando básico de indentación es TAB (indent-for-tab-command), que se documentó en Indentación. En los modos de lenguaje de programación, TAB indenta la línea actual, basándose en la indentación y el contenido sintáctico de las líneas precedentes; si la región está activa, TAB indenta cada línea dentro de la región, no sólo la línea actual.</p>
<p>El comando RET (newline), que se documentó en Insertar Texto, hace lo mismo que C-j seguido de TAB: inserta una nueva línea, luego ajusta la sangría de la línea.</p>
<p>Al indentar una línea que comienza dentro de una agrupación parentética, Emacs normalmente coloca el comienzo de la línea debajo de la línea precedente dentro del grupo, o debajo del texto después del paréntesis. Si manualmente le da a una de estas líneas una sangría no estándar (por ejemplo, por motivos estéticos), las líneas de abajo la seguirán.</p>
<p>Los comandos de sangría para la mayoría de los modos de lenguaje de programación asumen que un paréntesis abierto, un corchete abierto u otro delimitador de apertura en el margen izquierdo es el inicio de una función. Si el código que está editando viola esta suposición-incluso si los delimitadores aparecen en cadenas o comentarios-debe establecer open-paren-in-column-0-is-defun-start a nil para que la sangría funcione correctamente. Véase Convención sobre el Margen Izquierdo.</p>
<p>27.3.2 Indentar Varias Líneas</p>
<p>A veces, puede que quiera indentar varias líneas de código a la vez. Una forma de hacerlo es usar la marca; cuando la marca está activa y la región no está vacía, TAB indenta cada línea de la región. Alternativamente, el comando C-M-(indent-region) indenta cada línea en la región, esté o no activa la marca (ver Comandos de Indentación).</p>
<p>Además, Emacs proporciona los siguientes comandos para sangrar grandes trozos de código:</p>
<dl class="simple">
<dt>C-M-q</dt><dd><p>Reindenta todas las líneas dentro de una agrupación de paréntesis.</p>
</dd>
<dt>C-u TAB</dt><dd><p>Desplaza toda una agrupación parentética rígidamente hacia un lado para que su primera línea tenga la sangría adecuada.</p>
</dd>
<dt>M-x indent-code-rigidly</dt><dd><p>Desplaza todas las líneas de la región rígidamente hacia los lados, pero no alteres las líneas que empiezan dentro de comentarios y cadenas.</p>
</dd>
</dl>
<p>Para volver a sangrar el contenido de una sola agrupación de paréntesis, sitúe el punto antes del comienzo de la agrupación y escriba C-M-q. Esto cambia la sangría relativa dentro de la agrupación, sin afectar a su sangría general (es decir, la sangría de la línea donde comienza la agrupación). La función que ejecuta C-M-q depende del modo principal; es indent-pp-sexp en modo Lisp, c-indent-exp en modo C, etc. Para corregir también la sangría general, escriba TAB primero.</p>
<p>Si le gusta la sangría relativa dentro de una agrupación pero no la sangría de su primera línea, mueva el punto a esa primera línea y escriba C-u TAB. En Lisp, C y algunos otros modos principales, TAB con un argumento numérico modifica la sangría de la línea actual de la forma habitual y, a continuación, modifica la sangría en la misma cantidad de todas las líneas de la agrupación parentética a partir de la línea actual. Es inteligente, sin embargo, y no altera las líneas que empiezan dentro de cadenas. Tampoco altera las líneas del preprocesador C cuando se está en modo C, pero sí modifica la sangría de cualquier línea de continuación que pueda estar adjunta a ellas.</p>
<p>El comando M-x indent-code-rigidly desplaza lateralmente todas las líneas de la región, como hace indent-rigidly (véase Comandos de Indentación). No altera la sangría de las líneas que empiezan dentro de una cadena, a menos que la región también empiece dentro de esa cadena. El argumento prefijo especifica el número de columnas a sangrar.</p>
<p>27.3.3. Personalización de la Indentación Lisp</p>
<p>El patrón de indentación para una expresión Lisp puede depender de la función llamada por la expresión. Para cada función Lisp, puede elegir entre varios patrones predefinidos de sangría, o definir uno arbitrario con un programa Lisp.</p>
<p>El patrón estándar de sangrado es el siguiente: la segunda línea de la expresión se sangra bajo el primer argumento, si éste se encuentra en la misma línea que el comienzo de la expresión; en caso contrario, la segunda línea se sangra bajo el nombre de la función. Cada línea siguiente se sangrará bajo la línea anterior cuya profundidad de anidamiento sea la misma.</p>
<p>Si la variable lisp-indent-offset no es nula, anula el patrón de sangría habitual para la segunda línea de una expresión, de modo que dichas líneas siempre tienen una sangría lisp-indent-offset de más columnas que la lista que las contiene.</p>
<p>Ciertas funciones anulan el patrón estándar. Las funciones cuyos nombres empiezan por def tratan las segundas líneas como el inicio de un cuerpo, sangrando la segunda línea lisp-body-indent columnas adicionales más allá del paréntesis abierto que inicia la expresión.</p>
<p>Puede anular el patrón estándar de varias formas para funciones individuales, según la propiedad lisp-indent-function del nombre de la función. Esto se hace normalmente para definiciones de macros, usando la construcción declare. Véase Definición de Macros en el Manual de Referencia de Emacs Lisp.</p>
<p>En Emacs Lisp, las listas son normalmente sangradas como si fueran formas de tipo función:</p>
<blockquote>
<div><dl class="simple">
<dt>(setq foo “(bar zot</dt><dd><p>gazonk))</p>
</dd>
</dl>
</div></blockquote>
<p>Sin embargo, si se añade un espacio después del paréntesis de apertura, esto le dice a Emacs que es una lista de datos en lugar de un trozo de código, y Emacs lo sangrará así:</p>
<blockquote>
<div><dl class="simple">
<dt>(setq foo “( bar zot</dt><dd><p>gazonk))</p>
</dd>
</dl>
</div></blockquote>
<p>27.3.4 Comandos para la Indentación en C</p>
<p>Estas son las funciones especiales para la sangría en modo C y modos relacionados:</p>
<dl>
<dt>C-c C-q</dt><dd><p>Reindenta la definición de función de nivel superior actual o la declaración de tipo agregado (c-indent-defun en modo CC, c-ts-mode-indent-defun en modo c-ts basado en tree-sitter).</p>
</dd>
<dt>C-M-q</dt><dd><p>Reindenta cada línea de la expresión equilibrada (véase Expresiones con Paréntesis Equilibrados), también conocida como «sexp», que sigue al punto. En modo CC, esto invoca
c-indent-exp; en modo c-ts basado en tree-sitter esto invoca un prog-indent-sexp más general. Un argumento prefijo inhibe los mensajes de advertencia sobre sintaxis no válida.</p>
</dd>
<dt>TAB</dt><dd><p>Vuelve a sangrar la línea actual, la región activa o el bloque que comienza en esta línea (c-indent-line-or-region). Con el argumento prefijo, reentabla rígidamente la expresión
equilibrada que comienza en la línea actual, si la línea actual necesita reentablado.</p>
<p>Si c-tab-always-indent es t, este comando siempre reindentará la línea actual y no hará nada más. Este es el valor por defecto.</p>
<p>Si esa variable es nil, este comando vuelve a sangrar la línea actual sólo si el punto está en el margen izquierdo o en la sangría de la línea; de lo contrario, inserta un tabulador
(o el número equivalente de espacios, si indent-tabs-mode es nil).</p>
<p>Cualquier otro valor (que no sea nil o t) significa que siempre se vuelve a sangrar la línea, y también se inserta un tabulador si está dentro de un comentario o una cadena.</p>
</dd>
</dl>
<p>Para reindentar todo el búfer actual, escriba C-x h C-M-. Primero se selecciona todo el búfer como región y luego se reindenta esa región.</p>
<p>Para reindentar el bloque actual, use C-M-u C-M-q. Esto se desplaza al principio del bloque y luego lo vuelve a indentar.</p>
<p>27.3.5 Personalizar la Indentación en C</p>
<p>El modo C y los modos relacionados usan un mecanismo flexible para personalizar la sangría. El modo C indenta una línea fuente en dos pasos: primero clasifica la línea sintácticamente según su contenido y contexto; segundo, determina el desplazamiento de indentación asociado por su estilo seleccionado con la construcción sintáctica y lo añade a la indentación de la sentencia de anclaje.</p>
<dl class="simple">
<dt>C-c . estilo RET</dt><dd><p>Selecciona un estilo predefinido (c-set-style en modo CC, c-ts-mode-set-style en c-ts-mode basado en tree-sitter).</p>
</dd>
</dl>
<p>Un estilo es una colección designada de personalizaciones que pueden usarse en el modo C y en los modos relacionados. Estilos en El Manual del Modo CC, para una descripción completa. Emacs viene con varios estilos predefinidos, incluyendo gnu, k&amp;r, bsd, stroustrup, linux, python, java, whitesmith, ellemtel, y awk. Algunos de estos estilos están pensados principalmente para un lenguaje, pero cualquiera de ellos puede usarse con cualquiera de los lenguajes soportados por estos modos. Para saber qué aspecto tiene un estilo, selecciónelo y vuelva a aplicar la sangría a parte del código, por ejemplo, escribiendo C-M-q al principio de la definición de una función.</p>
<p>Para elegir un estilo para el búfer actual, use el comando C-c .. Especifique un nombre de estilo como argumento (las mayúsculas y minúsculas no son significativas). Este comando sólo afecta al búfer actual, y sólo afecta a futuras invocaciones de los comandos de sangría; no reajusta el código que ya está en el búfer. Para cambiar la sangría de todo el búfer al nuevo estilo, puede escribir C-x h C-M-.</p>
<p>Cuando use el modo CC, también puede establecer la variable c-default-style para especificar el estilo por defecto para varios modos principales. Su valor debe ser el nombre del estilo (una cadena) o una lista, en la que cada elemento especifica un modo principal y qué estilo de sangría usar para él. Por ejemplo,</p>
<blockquote>
<div><dl class="simple">
<dt>(setq c-default-style</dt><dd><dl class="simple">
<dt>“((java-mode . «java»)</dt><dd><p>(awk-mode . «awk»)
(other . «gnu»)))</p>
</dd>
</dl>
</dd>
</dl>
</div></blockquote>
<p>especifica opciones explícitas para los modos Java y AWK, y el estilo “gnu” por defecto para los otros modos C-like. (Estos ajustes son en realidad los predeterminados.) Esta variable tiene efecto cuando se selecciona uno de los modos principales similares a C; por lo tanto, si especifica un nuevo estilo predeterminado para el modo Java, puede hacer que tenga efecto en un búfer de modo Java existente escribiendo M-x java-mode allí.</p>
<p>Cuando se usa el modo c-ts basado en el árbol-sitter, se puede establecer el estilo de sangría por defecto personalizando la variable c-ts-mode-indent-style.</p>
<p>El estilo gnu especifica el formato recomendado por el Proyecto GNU para C; es el predeterminado, para fomentar el uso de nuestro estilo recomendado.</p>
<p>Vea Conceptos Básicos del Motor de Sangría en el Manual del Modo CC, y Personalización de la Sangría en el Manual del Modo CC, para más información sobre la personalización de la sangría para C y modos relacionados, incluyendo cómo anular partes de un estilo existente y cómo definir sus propios estilos.</p>
<p>Como alternativa a especificar un estilo, puedes decirle a Emacs que adivine un estilo tecleando M-x c-guess en un búfer de código de ejemplo. Luego puede aplicar el estilo adivinado a otros búferes con M-x c-guess-install. Ver Adivinar el Estilo en el Manual del Modo CC, para más detalles.</p>
</section>
<section id="comandos-para-la-edicion-con-parentesis">
<h2>27.4 Comandos para la Edición con Paréntesis<a class="headerlink" href="#comandos-para-la-edicion-con-parentesis" title="Link to this heading"></a></h2>
<p>Esta sección describe los comandos y características que aprovechan la estructura de paréntesis en un programa, o le ayudan a mantenerla equilibrada.</p>
<p>Cuando se habla de estas facilidades, el término «paréntesis» también incluye llaves, corchetes, o cualquier delimitador que se defina para coincidir en pares. El modo principal controla qué delimitadores son significativos, a través de la tabla de sintaxis (véase Tablas de Sintaxis en El Manual de Referencia de Emacs Lisp). En Lisp, sólo cuentan los paréntesis; en C, estos comandos se aplican también a llaves y corchetes.</p>
<p>Puede usar M-x check-parens para encontrar cualquier paréntesis y comillas de cadena no balanceados en el búfer.</p>
<p>27.4.1 Expresiones con Paréntesis Equilibrados</p>
<p>Cada modo de lenguaje de programación tiene su propia definición de una expresión balanceada. Las expresiones balanceadas típicamente incluyen símbolos individuales, números y constantes de cadena, así como trozos de código encerrados en un par de delimitadores coincidentes. Los siguientes comandos tratan con expresiones balanceadas (en Emacs, tales expresiones se denominan internamente sexps14).</p>
<dl class="simple">
<dt>C-M-f</dt><dd><p>Avanza sobre una expresión equilibrada (forward-sexp).</p>
</dd>
<dt>C-M-b</dt><dd><p>Se desplaza hacia atrás sobre una expresión equilibrada (backward-sexp).</p>
</dd>
<dt>C-M-k</dt><dd><p>Mata la expresión equilibrada hacia adelante (kill-sexp).</p>
</dd>
<dt>C-M-t</dt><dd><p>Transpone expresiones (transpose-sexps).</p>
</dd>
</dl>
<p>C-M-&#64;
C-M-SPC</p>
<blockquote>
<div><p>Pone una marca después de la siguiente expresión (mark-sexp).</p>
</div></blockquote>
<p>Para avanzar sobre una expresión equilibrada, use C-M-f (forward-sexp). Si el primer carácter significativo después del punto es un delimitador de apertura (por ejemplo, “(”, “[” o “{” en C), este comando se desplaza más allá del delimitador de cierre correspondiente. Si el carácter comienza un símbolo, una cadena o un número, el comando se desplaza por encima.</p>
<p>El comando C-M-b (backward-sexp) se desplaza hacia atrás sobre una expresión equilibrada, como C-M-f, pero en sentido inverso. Si la expresión va precedida de prefijos (comillas simples, comillas inversas y comas, en Lisp), el comando también se desplaza sobre ellos.</p>
<p>C-M-f o C-M-b con un argumento repite esa operación el número de veces especificado; con un argumento negativo significa moverse en la dirección opuesta. En la mayoría de los modos, estos dos comandos se mueven a través de los comentarios como si fueran espacios en blanco. Tenga en cuenta que sus teclas, C-M-f y C-M-b, son análogas a C-f y C-b, que se mueven por caracteres (véase Cambiar la Ubicación del Punto), y a M-f y M-b, que se mueven por palabras (véase Palabras).</p>
<p>Para eliminar una expresión equilibrada completa, escriba C-M-k (kill-sexp). Esto mata el texto sobre el que se movería C-M-f.</p>
<p>C-M-t (transpose-sexps) cambia las posiciones de la expresión balanceada anterior y la siguiente. Es análogo al comando C-t, que transpone caracteres (véase Transposición de Texto). Un argumento de C-M-t sirve como contador de repeticiones, desplazando la expresión anterior sobre las siguientes. Un argumento negativo desplaza la expresión equilibrada anterior hacia atrás a través de las anteriores. Un argumento de cero, en lugar de no hacer nada, transpone las expresiones equilibradas que terminan en o después del punto y la marca.</p>
<p>Para operar sobre expresiones equilibradas con un comando que actúe sobre la región, escriba C-M-SPC (mark-sexp). Esto establece la marca a la que se movería C-M-f. Mientras la marca está activa, cada llamada sucesiva a este comando extiende la región desplazando la marca una expresión. Los argumentos numéricos positivos o negativos desplazan la marca hacia delante o hacia atrás el número de expresiones especificado. El alias C-M-&#64; es equivalente a C-M-SPC. Consulte Comandos para Marcar Objetos Textuales, para obtener más información sobre éste y otros comandos afines.</p>
<p>En lenguajes que usan operadores infijos, como C, no es posible reconocer todas las expresiones balanceadas porque puede haber múltiples posibilidades en una posición dada. Por ejemplo, el modo C no trata “foo + bar” como una única expresión, aunque sea una expresión C; en su lugar, reconoce “foo” como una expresión y “bar” como otra, con el “+” como signo de puntuación entre ellas. Sin embargo, el modo C reconoce “(foo + bar)” como una única expresión, debido a los paréntesis.</p>
<ol class="arabic simple" start="14">
<li><p>La palabra «sexp» se usa para referirse a una expresión en Lisp.</p></li>
</ol>
<p>27.4.2 Moverse en la Estructura de Paréntesis</p>
<p>Los siguientes comandos se mueven sobre conjuntos delimitados por paréntesis (o cualquier otra cosa que sirva como delimitador en el lenguaje con el que esté trabajando). Ignoran cadenas y comentarios, incluyendo cualquier paréntesis dentro de ellos, y también ignoran paréntesis que estén entrecomillados con un carácter de escape. Estos comandos están pensados principalmente para editar programas, pero pueden ser útiles para editar cualquier texto que contenga paréntesis. Internamente se denominan «órdenes de lista» porque en Lisp estas agrupaciones son listas.</p>
<p>Estos comandos suponen que el punto de partida no está dentro de una cadena o un comentario. Si se invocan desde dentro de una cadena o comentario, los resultados son poco fiables.</p>
<dl class="simple">
<dt>C-M-n</dt><dd><p>Avanza sobre un grupo parentético (forward-list).</p>
</dd>
<dt>C-M-p</dt><dd><p>Se desplaza hacia atrás sobre un grupo parentético (backward-list).</p>
</dd>
<dt>C-M-u</dt><dd><p>Se mueve hacia arriba en la estructura de paréntesis (backward-up-list).</p>
</dd>
<dt>C-M-d</dt><dd><p>Se mueve hacia abajo en la estructura de paréntesis (down-list).</p>
</dd>
</dl>
<p>Los comandos de lista C-M-n (forward-list) y C-M-p (backward-list) avanzan o retroceden sobre una (o n) agrupaciones de paréntesis.</p>
<p>C-M-n y C-M-p intentan permanecer en el mismo nivel de la estructura de paréntesis. Para subir uno (o n) niveles, usar C-M-u (backward-up-list). C-M-u retrocede hasta un delimitador de apertura no coincidente. Un argumento positivo sirve como contador de repeticiones; un argumento negativo invierte la dirección del movimiento, de modo que el comando se mueve hacia adelante y hacia arriba uno o más niveles.</p>
<p>Para moverse hacia abajo en la estructura de paréntesis, use C-M-d (down-list). En modo Lisp, donde “(” es el único delimitador de apertura, esto es casi lo mismo que buscar un “(”. Un argumento especifica el número de niveles a bajar.</p>
<p>27.4.3. Correspondencia de Paréntesis</p>
<p>Emacs tiene un número de características de concordancia de paréntesis, que hacen fácil ver cómo y si los paréntesis (u otros delimitadores) concuerdan.</p>
<p>Cada vez que escribe un carácter autoinsertado que es un delimitador de cierre, Emacs indica brevemente la localización del delimitador de apertura que coincide, siempre que esté en la pantalla. Si no está en la pantalla, Emacs muestra parte del texto cercano en el área de eco. De cualquier forma, puede saber qué agrupación está cerrando. Si el delimitador de apertura y el delimitador de cierre no coinciden -como en “[x)”- se muestra un mensaje de advertencia en el área de eco.</p>
<p>Tres variables controlan la visualización de los paréntesis coincidentes:</p>
<blockquote>
<div><ul class="simple">
<li><p>blink-matching-paren activa o desactiva la función: nil la desactiva, pero el valor por defecto es t para activarla. Ajústelo a jump para que la indicación funcione moviendo</p></li>
</ul>
<p>momentáneamente el cursor al delimitador de apertura coincidente. Establézcalo en jump-offscreen para que el cursor salte, incluso si el delimitador de apertura está fuera de la
pantalla.</p>
<ul class="simple">
<li><p>blink-matching-delay dice cuántos segundos se debe mantener la indicación del delimitador de apertura coincidente. Puede ser un número entero o de coma flotante; el valor por defecto</p></li>
</ul>
<p>es 1.</p>
<ul class="simple">
<li><p>blink-matching-paren-distance especifica cuántos caracteres hay que buscar hacia atrás para encontrar el delimitador de apertura coincidente. Si no se encuentra la coincidencia en</p></li>
</ul>
<p>esa distancia, Emacs deja de buscar y no muestra nada. El valor por defecto es 102400.</p>
</div></blockquote>
<p>El modo Mostrar Paren es un modo menor que proporciona un tipo de concordancia automática más potente. Siempre que el punto esté antes de un delimitador de apertura o después de un delimitador de cierre, se resaltan el delimitador, su delimitador coincidente y, opcionalmente, el texto entre ellos. Para activar el modo Show Paren de forma global, escriba M-x show-paren-mode. Para activarlo sólo en el búfer actual, escriba M-x show-paren-local-mode.</p>
<p>Por defecto, este modo está activado en todos los búferes destinados a la edición, pero no lo está en los búferes que muestran datos. Esto se controla mediante la opción de usuario show-paren-predicate.</p>
<p>Para personalizar el modo, escriba M-x customize-group RET paren-showing. Las opciones personalizables que controlan el funcionamiento de este modo incluyen:</p>
<p>show-paren-highlight-openparen controla si se resalta un paréntesis abierto cuando el punto está justo antes de él, y por lo tanto su posición está marcada por el cursor de todos modos. Por defecto no es nulo (yes).</p>
<p>show-paren-style controla si se resaltan sólo los dos paréntesis, o también el texto entre ellos. Las opciones válidas aquí son parenthesis (paréntesis, mostrar el paréntesis coincidente), expression (expresión, resaltar toda la expresión encerrada por los paréntesis), y mixed (resaltar el paréntesis coincidente si es visible en la ventana, la expresión en caso contrario).</p>
<p>show-paren-when-point-inside-paren, cuando no es nil, hace que se resalte también cuando el punto está dentro del paréntesis. Por defecto es nil.</p>
<p>show-paren-when-point-in-periphery, cuando no es nil, hace que se resalte también cuando el punto está en un espacio en blanco al principio de una línea y hay un paréntesis en la primera o última posición de la línea que no es un espacio en blanco, o cuando el punto está al final de una línea y hay un paréntesis en la última posición de la línea que no es un espacio en blanco.</p>
<p>show-paren-context-when-offscreen, cuando no es nulo, muestra algún contexto en el área de eco cuando point está en un delimitador de cierre y el delimitador de apertura está fuera de la pantalla. El contexto suele ser la línea que contiene el delimitador de apertura, excepto si el delimitador de apertura está en su propia línea, en cuyo caso el contexto incluye la línea anterior que no está en blanco.</p>
<p>El modo Par eléctrico (Electric Pair mode), un modo global menor, permite insertar fácilmente delimitadores coincidentes: paréntesis, llaves, corchetes, etc. Siempre que inserte un delimitador de apertura, se insertará automáticamente el delimitador de cierre correspondiente, dejando un punto entre ambos. Por el contrario, cuando se inserta un delimitador de cierre sobre otro ya existente, no se produce ninguna inserción y simplemente se omite esa posición. Si la región está activa (véase La Marca y la Región), la inserción de un delimitador opera sobre la región: los caracteres de la región se encierran en un par de delimitadores coincidentes, dejando punto después del delimitador que haya escrito.</p>
<p>Estas variables controlan características adicionales del modo Par Eléctrico:</p>
<blockquote>
<div><ul class="simple">
<li><p>electric-pair-preserve-balance, cuando no es nulo, hace que la lógica de pares por defecto equilibre el número de delimitadores de apertura y cierre.</p></li>
<li><p>electric-pair-delete-adjacent-pairs, cuando no es nulo, hace que el espacio entre dos delimitadores adyacentes también elimine automáticamente el delimitador de cierre.</p></li>
<li><p>electric-pair-open-newline-between-pairs, cuando no es nulo, hace que al insertar una nueva línea entre dos pares adyacentes también se abra automáticamente una nueva línea</p></li>
</ul>
<p>adicional después del punto.</p>
<ul class="simple">
<li><p>electric-pair-skip-whitespace, cuando no es nil, hace que el modo menor se salte los espacios en blanco hacia delante antes de decidir si se salta el delimitador de cierre.</p></li>
</ul>
</div></blockquote>
<p>Para activar el modo Par Eléctrico, escriba M-x electric-pair-mode. Para activar el modo en un único búfer, use M-x electric-pair-local-mode.</p>
</section>
<section id="manipulacion-de-comentarios">
<h2>27.5. Manipulación de Comentarios<a class="headerlink" href="#manipulacion-de-comentarios" title="Link to this heading"></a></h2>
<p>Debido a que los comentarios son una parte tan importante de la programación, Emacs proporciona comandos especiales para editar e insertar comentarios. También puede revisar la ortografía de los comentarios con el modo Flyspell Prog (ver Revisar y Corregir la Ortografía).</p>
<p>Algunos modos principales tienen reglas especiales para sangrar diferentes tipos de comentarios. Por ejemplo, en el código Lisp, los comentarios que empiezan con dos puntos y coma tienen sangría como si fueran líneas de código, mientras que los que empiezan con tres puntos y coma se supone que están alineados con el margen izquierdo y se usan a menudo para seccionar. Emacs entiende estas convenciones; por ejemplo, si se escribe TAB en una línea de comentario, el comentario se sangrará a la posición adecuada.</p>
<blockquote>
<div><p>;; Esta función es sólo un ejemplo.
;;; Aquí dos o tres puntos y coma son apropiados.
(defun foo (x)
;;; Y ahora, la primera parte de la función:</p>
<blockquote>
<div><p>;; La siguiente línea añade uno.
(1+ x)) ; Esta línea añade uno.</p>
</div></blockquote>
</div></blockquote>
<p>27.5.1 Comandos de Comentario</p>
<p>Los siguientes comandos actúan sobre los comentarios:</p>
<dl class="simple">
<dt>M-;</dt><dd><p>Inserta o realinea el comentario en la línea actual; si la región está activa, comenta o descomenta la región en su lugar (comment-dwim).</p>
</dd>
<dt>C-x C-;</dt><dd><p>Comenta o descomenta la línea actual (comment-line). Si la región está activa, comenta o descomenta las líneas de la región.</p>
</dd>
<dt>C-u M-;</dt><dd><p>Elimina el comentario de la línea actual (comment-kill).</p>
</dd>
<dt>C-x ;</dt><dd><p>Establece la columna de comentarios (comment-set-column).</p>
</dd>
</dl>
<p>C-M-j
M-j</p>
<blockquote>
<div><p>Como RET seguido de la inserción y alineación de un comentario (default-indent-new-line). Véase Varias Líneas de Comentarios.</p>
</div></blockquote>
<p>M-x comment-region
C-c C-c (in C-like modes)</p>
<blockquote>
<div><p>Añade delimitadores de comentario a todas las líneas de la región.</p>
</div></blockquote>
<p>El comando para crear o alinear un comentario es M-; (comment-dwim). La palabra «dwim» es un acrónimo de «Do What I Mean» (haz lo que quiero decir); indica que este comando puede usar para muchas tareas diferentes relacionadas con los comentarios, dependiendo de la situación en la que lo use.</p>
<p>Cuando una región está activa (véase La Marca y la Región), M-; o bien añade delimitadores de comentario a la región, o bien los elimina. Si cada línea de la región ya es un comentario, descomenta cada una de esas líneas eliminando sus delimitadores de comentario. En caso contrario, añade delimitadores de comentario para encerrar el texto de la región.</p>
<p>Si proporciona un argumento de prefijo a M-; cuando una región está activa, éste especifica el número de delimitadores de comentario que se añadirán o eliminarán. Un argumento positivo n añade n delimitadores, mientras que un argumento negativo -n elimina n delimitadores.</p>
<p>Si la región no está activa y no hay ningún comentario en la línea actual, M-; añade un nuevo comentario a la línea actual. Si la línea está en blanco (es decir, vacía o contiene sólo caracteres de espacio en blanco), el comentario se sangrará a la misma posición a la que TAB sangraría (ver Comandos Básicos de Indentación de Programas). Si la línea no está en blanco, el comentario se coloca después del último carácter de la línea que no contenga espacios en blanco. Emacs intenta colocar el comentario entre las columnas especificadas por las variables comment-column y comment-fill-column (ver Opciones que Controlan los Comentarios), si es posible. Si no, elegirá alguna otra posición adecuada, normalmente separada del texto que no es comentario por al menos un espacio. En cada caso, Emacs coloca el punto después del delimitador inicial del comentario, para que pueda empezar a escribir el texto del comentario inmediatamente.</p>
<p>También puede usar M-; para alinear un comentario existente. Si una línea ya contiene la cadena de inicio de comentario, M-; la realinea a la alineación convencional y mueve el punto después del delimitador de inicio de comentario. Como excepción, los comentarios que comienzan en la columna 0 no se desplazan. Incluso cuando un comentario existente está correctamente alineado, M-; sigue siendo útil para desplazarse directamente al inicio del texto del comentario.</p>
<p>C-x C-; (comment-line) comenta o descomenta líneas completas. Cuando una región está activa (véase La Marca y la Región), C-x C-; comenta o descomenta las líneas de la región. Si la región no está activa, este comando comenta o descomenta el punto de línea en el que se encuentra. Con un argumento prefijo positivo n, actúa sobre n líneas empezando por la actual; con un argumento negativo -n, afecta a n líneas precedentes. Después de invocar este comando con un argumento negativo, las sucesivas invocaciones con un argumento positivo operarán sobre las líneas precedentes como si el argumento estuviera negado.</p>
<p>C-u M-; (comment-dwim con un argumento prefijo) cuando la región no está activa mata cualquier comentario en la línea actual, junto con el espacio en blanco que lo precede. Dado que el comentario se guarda en el anillo de eliminación, puede volver a insertarlo en otra línea desplazándose hasta el final de esa línea, haciendo C-y y, a continuación, M-; para realinear el comentario. Puede conseguir el mismo efecto que C-u M-; escribiendo M-x comment-kill (comment-dwim en realidad llama a comment-kill como subrutina cuando se le da un argumento prefijo). Si se invoca a comment-dwim con un argumento numérico de prefijo, como en C-u n M-;, cuando no hay ninguna región activa, se le dice a comment-kill que elimine los comentarios de n líneas.</p>
<p>El comando M-x comment-region es equivalente a llamar a M-; sobre una región activa, salvo que siempre actúa sobre la región, aunque la marca esté inactiva. En modo C y modos relacionados, este comando está ligado a C-c C-c. El comando M-x uncomment-region descomenta cada línea en la región; un argumento prefijo numérico especifica el número de delimitadores de comentario a eliminar (argumentos negativos especifican el número de delimitadores de comentario a añadir).</p>
<p>Para modos similares a C, puede configurar el efecto exacto de M-; estableciendo las variables c-indent-comment-alist y c-indent-comments-syntactically-p. Por ejemplo, en una línea que termina en una llave de cierre, M-; pone el comentario un espacio después de la llave en lugar de en la columna-comentario. Para más detalles, consulte Comandos de Comentario en el Manual del Modo CC.</p>
<p>27.5.2 Varias Líneas de Comentarios</p>
<p>Si está escribiendo un comentario y desea continuarlo en otra línea, escriba M-j o C-M-j (default-indent-new-line). Esto rompe la línea actual e inserta los delimitadores de comentario y la sangría necesarios para continuar el comentario.</p>
<p>Para lenguajes con delimitadores de comentario de cierre (por ejemplo, “<a href="#id1"><span class="problematic" id="id2">*</span></a>/” en C), el comportamiento exacto de M-j depende del valor de la variable comment-multi-line. Si el valor es nulo, el comando cierra el comentario en la línea anterior e inicia un nuevo comentario en la nueva línea. En caso contrario, abre una nueva línea dentro de los delimitadores de comentario actuales.</p>
<p>Cuando el modo Relleno automático (Auto Fill mode) está activado, pasar la columna de relleno mientras se escribe un comentario también continúa el comentario, del mismo modo que una invocación explícita de M-j.</p>
<p>Para convertir líneas existentes en líneas de comentario, use M-; con la región activa, o use M-x comment-region como se describe en la sección anterior.</p>
<p>Puede configurar el modo C para que cuando escriba una “/” al principio de una línea en un comentario de bloque multilínea, se cierre el comentario. Para ello, active la función de limpieza comment-close-slash. Vea Limpiezas en el Manual del Modo CC.</p>
<p>27.5.3 Opciones que Controlan los Comentarios</p>
<p>Como se mencionó en Comandos de comentario, cuando el comando M-j añade un comentario a una línea, intenta colocar el comentario entre las columnas especificadas por las variables locales del búfer comment-column (columna-comentario) y comment-fill-column (o si es nil, entonces el valor de fill-column, ver Comandos Explícitos de Relleno). Puede establecer el valor local o el valor por defecto de estas variables locales del búfer de la forma habitual (consulte Variables Locales). Alternativamente, puede teclear C-x ; (comment-set-column) para establecer el valor de comment-column en el búfer actual a la columna donde se encuentra actualmente el punto. C-u C-x ; establece la columna de comentario para que coincida con el último comentario antes del punto en el búfer, y luego hace un M-; para alinear el comentario de la línea actual bajo el anterior.</p>
<p>Los comandos de comentario reconocen los comentarios basándose en la expresión regular que es el valor de la variable comment-start-skip. Asegúrese de que esta expresión regular no coincide con la cadena nula. Puede coincidir con más que el delimitador de inicio de comentario en el sentido más estricto de la palabra; por ejemplo, en modo C el valor de la variable podría ser «/\*+[ t]*|//+[ t]*», que coincide con asteriscos y espacios extra después del propio “/<a href="#id3"><span class="problematic" id="id4">*</span></a>”, y acepta también comentarios estilo C++ (“//”). (Observe que “\' es necesario en la sintaxis Lisp para incluir un “' en la cadena, que es necesario para negar a la primera estrella su significado especial en la sintaxis expreg. Véase Barra Invertida en Expresiones Regulares).</p>
<p>Cuando un comando comment crea un nuevo comentario, inserta el valor de comment-start como delimitador de apertura del comentario. También inserta el valor de comment-end después del punto, como delimitador de cierre del comentario. Por ejemplo, en modo Lisp, comment-start es “»;»” y comment-end es «» (la cadena vacía). En modo C, comment-start es «/* « y comment-end es « <a href="#id5"><span class="problematic" id="id6">*</span></a>/».</p>
<p>La variable comment-padding especifica una cadena que los comandos de comentario deben insertar entre el delimitador o delimitadores del comentario y el texto del comentario. El valor por defecto, “» «”, especifica un único espacio. Alternativamente, el valor puede ser un número, que especifica ese número de espacios, o nil, que significa ningún espacio.</p>
<p>La variable comment-multi-line controla cómo M-j y el modo Auto Fill continúan los comentarios en múltiples líneas. Véase Múltiples Líneas de Comentarios.</p>
<p>La variable comment-indent-function debe contener una función que será llamada para calcular la alineación de un comentario recién insertado o para alinear un comentario existente. Se establece de forma diferente en los distintos modos principales. La función se llama sin argumentos, pero con un punto al principio del comentario, o al final de una línea si se va a insertar un nuevo comentario. Debe devolver la columna en la que debe comenzar el comentario. Por ejemplo, la función por defecto basa su decisión en cuántos caracteres de comentario comienzan un comentario existente.</p>
<p>Emacs también intenta alinear los comentarios en líneas adyacentes. Para anular esto, la función puede devolver una cons de dos enteros (posiblemente iguales) para indicar un rango aceptable de sangría.</p>
</section>
<section id="busqueda-de-documentacion">
<h2>27.6 Búsqueda de Documentación<a class="headerlink" href="#busqueda-de-documentacion" title="Link to this heading"></a></h2>
<p>Emacs proporciona varias características que puede usar para buscar la documentación de funciones, variables y comandos que planea usar en su programa.</p>
<p>27.6.1 Búsqueda de Documentación en Info</p>
<p>Para los modos principales que se aplican a lenguajes que tienen documentación en Info, puede usar C-h S (info-lookup-symbol) para ver la documentación Info de un símbolo usado en el programa. Especifique el símbolo con el minibúfer; el valor predeterminado es el símbolo que aparece en el búfer en el punto. Por ejemplo, en modo C se busca el símbolo en el Manual de la Biblioteca C. El comando sólo funciona si están instalados los archivos Info del manual correspondiente.</p>
<p>Emacs determina dónde buscar la documentación para el símbolo -en qué archivos Info buscar y en qué índices buscar, basándose en el modo principal. También puede usar M-x info-lookup-file para buscar documentación para un nombre de archivo.</p>
<p>Si usa C-h S en un modo principal que no lo soporta, le pedirá que especifique el modo de ayuda del símbolo. Debe introducir un comando como c-mode que seleccionaría un modo principal que C-h S sí soporta.</p>
<p>27.6.2. Búsqueda en la Página man</p>
<p>En Unix, la principal forma de documentación en línea era la página de manual o página man. En el sistema operativo GNU, nuestro objetivo es reemplazar las páginas man por manuales mejor organizados que pueda consultar con Info (vea Otros Comandos de Ayuda). Este proceso no está terminado, por lo que todavía es útil leer las páginas de manual.</p>
<p>Puede leer la página man de un comando del sistema operativo, función de biblioteca o llamada al sistema, con el comando M-x man. Esto solicita un tema, con completado (ver Completado), y ejecuta el programa man para formatear la página man correspondiente. Si el sistema lo permite, ejecuta man de forma asíncrona, para que pueda seguir editando mientras se formatea la página. El resultado va a un búfer llamado <em>Man topic</em>. Estos búferes usan un modo principal especial, el modo Man, que facilita el desplazamiento y el salto a otras páginas de manual. Para más detalles, teclee C-h m mientras se encuentre en un búfer en modo Man (man Mode).</p>
<p>Cada página del manual pertenece a una de las diez o más secciones, cada una de ellas nombrada por un dígito o por un dígito y una letra. A veces hay páginas del manual con el mismo nombre en diferentes secciones. Para leer una página del manual de una sección específica, escriba “topic(section)” o “section topic” cuando M-x man le pregunte por el tema. Por ejemplo, la página del manual de la función chmod de la biblioteca C está en la sección 2, pero hay un comando de shell con el mismo nombre, cuya página del manual está en la sección 1; para ver la primera, escriba M-x man RET chmod(2) RET.</p>
<p>Si no especifica una sección, M-x man normalmente muestra sólo la primera página man encontrada. En algunos sistemas, el programa man acepta una opción de línea de comandos “-a”, que le indica que muestre todas las páginas man del tema especificado. Para usar esta opción, cambie el valor de la variable Man-switches a “»-a»”. Entonces, en el búfer del modo Man, puede escribir M-n y M-p para cambiar entre páginas de manual de diferentes secciones. La línea de modo muestra cuántas páginas de manual hay disponibles.</p>
<p>Una forma alternativa de leer páginas de manual es el comando M-x woman. A diferencia de M-x man, no ejecuta ningún programa externo para formatear y mostrar las páginas de manual; el formateo lo hace Emacs, por lo que funciona en sistemas como MS-Windows donde el programa man puede no estar disponible. Pide una página man, y la muestra en un búfer llamado <a href="#id7"><span class="problematic" id="id8">*</span></a>WoMan section topic.</p>
<p>M-x woman calcula la lista de completado de las páginas de manual la primera vez que se invoca el comando. Con un argumento numérico, vuelve a calcular esta lista; esto es útil si añade o elimina páginas de manual.</p>
<p>Si escribe el nombre de una página de manual y M-x woman encuentra que existen varias páginas de manual con el mismo nombre en diferentes secciones, aparece una ventana con posibles candidatos pidiéndole que elija uno de ellos.</p>
<p>Tenga en cuenta que M-x woman aún no soporta las últimas características de las páginas man modernas, por lo que recomendamos usar M-x man si está disponible en su sistema.</p>
<p>Para más información sobre cómo configurar y usar M-x woman, vea el manual WoMan Info, que se distribuye con Emacs.</p>
<p>27.6.3. Búsqueda de Documentación en Lenguajes de Programación</p>
<p>Cuando edite código Emacs Lisp, puede usar los comandos C-h f (describe-function) y C-h v (describe-variable) para ver la documentación incorporada para las funciones y variables Lisp que quiera usar. Consulte Ayuda por Comando o Nombre de Variable.</p>
<p>ElDoc15 es un modo menor de búfer local que ayuda a buscar documentación de símbolos (funciones, métodos, clases, variables, etc.) en su programa. Cuando este modo está activado, el área de eco muestra información útil siempre que haya un símbolo documentado en el punto. Por ejemplo, en búferes bajo el modo Emacs Lisp, muestra la lista de argumentos de una función en el punto, y para una variable Lisp muestra la primera línea de la cadena de documentación de la variable.</p>
<p>Para activar el modo ElDoc, escriba M-x eldoc-mode. También existe un modo ElDoc global, que está activado por defecto, y activa el modo ElDoc en los búferes cuyo modo principal establece las variables que se describen a continuación. Use M-x global-eldoc-mode para desactivarlo globalmente.</p>
<p>Varios modos principales configuran el modo ElDoc global para usar sus funciones de documentación. Algunos ejemplos son el modo Emacs Lisp, el modo Python y el modo Cfengine. Además, las características de Emacs que proporcionan soporte para varios modos principales configuran ElDoc para usar sus facilidades para recuperar la documentación. Algunos ejemplos son Eglot (ver Características de Eglot en Eglot: El cliente LSP de Emacs), que proporciona documentación basada en la información de los servidores de lenguajes; el modo Resumen inactivo de Semantic (ver Modo Resumen Inactivo en el Manual de Semantic); y Flymake, que usa ElDoc para mostrar diagnósticos en el punto (ver Encontrando Diagnósticos en el manual GNU Flymake).</p>
<p>El modo ElDoc funciona programando la visualización de la documentación disponible para el símbolo en el punto después de que Emacs haya estado inactivo durante un breve periodo de tiempo. Esto evita el molesto parpadeo de los mensajes de documentación en el área de eco o en la línea de modo cuando se escribe rápidamente y sin demora.</p>
<p>También puede activar la visualización de la documentación de un símbolo en un punto usando el comando M-x eldoc-print-current-symbol-info.</p>
<p>Se pueden usar las siguientes variables para configurar el modo ElDoc:</p>
<dl class="simple">
<dt>eldoc-idle-delay</dt><dd><p>El valor de esta opción de Usuario controla el tiempo de espera antes de que se muestre la documentación del punto de acceso. Debe establecerse en el número de segundos a esperar; el
valor de cero significa mostrar sin ningún retraso. El valor por defecto es 0,5 seg.</p>
</dd>
<dt>eldoc-print-after-edit</dt><dd><p>Si esta opción de Usuario no es nula, ElDoc mostrará la documentación sólo después de algún comando de edición, como insertar o borrar algún texto. Esto es útil si quiere que Emacs
muestre la documentación sólo sobre los símbolos que escriba, pero no sobre los símbolos que ya están en el búfer (por lo que la simple lectura del código fuente no mostrará la
documentación). El valor por defecto es nil. Si cambia el valor, necesita activar y desactivar eldoc-mode.</p>
</dd>
<dt>eldoc-echo-area-use-multiline-p</dt><dd><p>Esta opción de Usuario controla si y cómo truncar el texto de la documentación si es más largo de lo que el área de eco puede mostrar como una sola línea de pantalla. Si el valor es
un número positivo, especifica el número de líneas de pantalla que ElDoc puede mostrar en el área de eco sin truncar la documentación. Un número entero positivo especifica el número
máximo absoluto de líneas de pantalla que se pueden usar; un número en coma flotante especifica el número de líneas de pantalla como fracción de la altura del marco. El valor t
significa no truncar nunca la documentación (el área de eco se redimensionará hasta la altura permitida por max-mini-window-height, ver Edición en el minibúfer), mientras que el valor
nil significa truncar si la documentación es más larga que una sola línea de pantalla. Por último, el valor especial truncate-sym-name-if-fit (por defecto) significa truncar la parte
de la documentación que representa el nombre de un símbolo si al hacerlo la documentación cabe en una sola línea de pantalla.</p>
</dd>
<dt>eldoc-echo-area-display-truncation-message</dt><dd><p>Si no es nil (por defecto), y la documentación mostrada en el área de eco está truncada porque es demasiado larga, siga la documentación por instrucciones sobre cómo ver el texto
completo de la documentación. Si es nil, simplemente indique con “…” que la documentación fue truncada.</p>
</dd>
<dt>eldoc-echo-area-prefer-doc-buffer</dt><dd><p>Si el valor de esta opción de Usuario es t, ElDoc no mostrará la documentación en el área de eco si el búfer de ElDoc con la documentación ya se muestra en alguna ventana. (Puede usar
el comando M-x eldoc-doc-buffer en cualquier momento para mostrar el búfer de ElDoc). Si el valor de esta opción es el símbolo tal vez, la documentación no se mostrará en el área de
eco si el búfer ElDoc se muestra en alguna ventana, y el texto de la documentación deberá truncarse si se muestra en el área de eco. Por último, el valor nil (por defecto) significa
mostrar siempre la documentación en el área de eco.</p>
</dd>
<dt>eldoc-documentation-strategy</dt><dd><p>El valor de esta variable personalizable es la función que se usa para recuperar y mostrar la documentación del símbolo en cuestión. La documentación es producida por las funciones
del hook eldoc-documentation-functions. El valor predeterminado de eldoc-documentation-strategy especifica que ElDoc debe mostrar el primer texto de documentación producido por las
funciones del hook eldoc-documentation-functions, pero puede personalizar eldoc-documentation-strategy para que funcione de otras formas, como mostrar todos los textos de
documentación concatenados.</p>
</dd>
<dt>eldoc-documentation-functions</dt><dd><p>El valor de este gancho anormal es una lista de funciones que pueden producir documentación para el símbolo en el punto apropiado para el modo principal del búfer actual. Estas
funciones actúan como una colección de backends para ElDoc. Los modos principales registran sus funciones de búsqueda de documentación con ElDoc añadiendo sus funciones al valor local
del búfer de esta variable.</p>
</dd>
</dl>
</section>
<section id="modo-secundario-hideshow">
<h2>27.7 Modo Secundario Hideshow<a class="headerlink" href="#modo-secundario-hideshow" title="Link to this heading"></a></h2>
<p>El modo Hideshow (modo de ocultamiento) es un modo menor local del búfer que le permite mostrar selectivamente porciones de un programa, que se denominan bloques. Escriba M-x hs-minor-mode para activar este modo menor (ver Modos Menores).</p>
<p>Cuando usa el modo Hideshow para ocultar un bloque, éste desaparece de la pantalla y es sustituido por una elipsis (tres puntos seguidos). Lo que constituye un bloque depende del modo principal. En el modo C y los modos relacionados, los bloques se delimitan mediante llaves, mientras que en el modo Lisp se delimitan mediante paréntesis. Los comentarios multilínea también cuentan como bloques.</p>
<p>El modo Hideshow proporciona los siguientes comandos:</p>
<p>C-c &#64; C-h
C-c &#64; C-d</p>
<blockquote>
<div><p>Oculta el bloque actual (hs-hide-block).</p>
</div></blockquote>
<dl class="simple">
<dt>C-c &#64; C-s</dt><dd><p>Muestra el bloque actual (hs-show-block).</p>
</dd>
</dl>
<p>C-c &#64; C-c
C-c &#64; C-e
S-mouse-2</p>
<blockquote>
<div><p>Oculta o muestra el bloque actual (hs-toggle-hiding).</p>
</div></blockquote>
<p>C-c &#64; C-M-h
C-c &#64; C-t</p>
<blockquote>
<div><p>Oculta todos los bloques de nivel superior (hs-hide-all).</p>
</div></blockquote>
<p>C-c &#64; C-M-s
C-c &#64; C-a</p>
<blockquote>
<div><p>Muestra todos los bloques del búfer (hs-show-all).</p>
</div></blockquote>
<dl class="simple">
<dt>C-u n C-c &#64; C-l</dt><dd><p>Oculta todos los bloques n niveles por debajo de este bloque (hs-hide-level).</p>
</dd>
</dl>
<p>Estas variables se pueden usar para personalizar el modo Hideshow:</p>
<dl class="simple">
<dt>hs-hide-comments-when-hiding-all</dt><dd><p>Si no es nulo, C-c &#64; C-M-h (hs-hide-all) oculta también los comentarios.</p>
</dd>
<dt>hs-isearch-open</dt><dd><p>Esta variable especifica las condiciones en las que la búsqueda incremental debe desocultar un bloque oculto cuando aparece texto coincidente dentro del bloque. Su valor debe ser code
(desocultar sólo bloques de código), comment (desocultar sólo comentarios), t (desocultar tanto bloques de código como comentarios) o nil (desocultar ni bloques de código ni
comentarios). El valor por defecto es code.</p>
</dd>
</dl>
</section>
<section id="completado-de-nombres-de-simbolos">
<h2>27.8 Completado de Nombres de Símbolos<a class="headerlink" href="#completado-de-nombres-de-simbolos" title="Link to this heading"></a></h2>
<p>El completado se hace normalmente en el minibúfer (ver Completado), pero también puede completar nombres de símbolos en búferes Emacs ordinarios.</p>
<p>En la mayoría de los modos de lenguaje de programación, C-M-i (o M-TAB16) invoca el comando completion-at-point, que genera la lista de posibles terminaciones para el símbolo en el punto. Este comando usa las facilidades de soporte disponibles para obtener las terminaciones candidatas:</p>
<p>Si Eglot está activado para el proyecto del búfer actual (véase Trabajar con Proyectos) y el modo principal del búfer actual, el comando intenta usar el servidor de idiomas correspondiente para producir la lista de candidatos a finalización. Véase Características de Eglot en Eglot: El cliente LSP de Emacs.</p>
<p>Si el modo Semántico está habilitado (ver Semántica), el comando intenta usar los datos del analizador semántico para completar.</p>
<p>Si el modo Semántico (Semantic mode) no está habilitado o falla al completar, el comando intenta completar usando la tabla de etiquetas seleccionada (ver Tablas de Etiquetas); necesita visitar la tabla de etiquetas con M-x visit-tags-table para que funcione.</p>
<p>En modo Emacs Lisp, el comando usa los nombres de función, variable o propiedad definidos en la sesión Emacs actual.</p>
<p>En todos los demás aspectos, el completado de símbolos en el búfer se comporta como el completado en el minibúfer. Por ejemplo, si Emacs no puede completar un único símbolo, muestra una lista de alternativas de completado en otra ventana. Entonces puede usar las teclas M-DOWN y M-UP para navegar a través de los completados mostrados en el búfer de completados sin dejar el búfer original, y la tecla M-RET para insertar el completado actualmente resaltado en el búfer. Véase Completado.</p>
<p>En el modo Texto (Text mode) y modos relacionados, M-TAB completa las palabras basándose en el diccionario del corrector ortográfico. Véase Comprobación y Corrección Ortográfica.</p>
<ol class="arabic simple" start="16">
<li><p>En las pantallas gráficas, la tecla M-TAB suele estar reservada por el gestor de ventanas para cambiar de ventana gráfica, por lo que deberá teclear C-M-i o ESC TAB en su lugar.</p></li>
</ol>
</section>
<section id="palabras-en-mayusculas-y-minusculas">
<h2>27.9 Palabras en Mayúsculas y Minúsculas<a class="headerlink" href="#palabras-en-mayusculas-y-minusculas" title="Link to this heading"></a></h2>
<p>Algunos estilos de programación usan símbolos mixtos (o «CamelCase») como “unReadableSymbol”. (En el proyecto GNU, recomendamos usar guiones bajos para separar palabras dentro de un identificador, en lugar de usar distinciones entre mayúsculas y minúsculas). Emacs tiene varias características para hacer más fácil tratar con tales símbolos.</p>
<p>El modo Glasses es un modo menor localizado en el búfer que facilita la lectura de tales símbolos, alterando la forma en que se muestran. Por defecto, muestra guiones bajos adicionales entre cada letra minúscula y la siguiente mayúscula. Esto no altera el texto del búfer, sólo cómo se muestra.</p>
<p>Para activar este modo, escriba M-x glasses-mode (véase Modos Menores). Cuando el modo Gafas está activado, aparece el indicador de modo menor “o^o” en la línea de modo. Para obtener más información sobre el modo Glasses, escriba C-h P glasses RET.</p>
<p>El modo subpalabra es otro modo menor local del búfer. En modo subpalabra, los comandos de palabra de Emacs reconocen las letras mayúsculas en “StudlyCapsIdentifiers” como límites de palabra. Cuando el modo subpalabra está activado, el indicador de modo menor “,” aparece en la línea de modo. Véase también el modo similar superpalabra (superword-mode) (véase Otras Características Útiles para Editar Programas).</p>
</section>
<section id="semantica">
<h2>27.10 Semántica<a class="headerlink" href="#semantica" title="Link to this heading"></a></h2>
<p>Semantic es un paquete que proporciona comandos de edición conscientes del lenguaje y basados en analizadores de código fuente. Esta sección proporciona una breve descripción de Semantic; para más detalles, véase Semantic en Semantic.</p>
<p>La mayoría de las funciones de Emacs que tienen en cuenta el lenguaje, como el modo de bloqueo de fuentes (véase Modo de Bloqueo de Fuentes), se basan en reglas empíricas17 que suelen dar buenos resultados pero que nunca son del todo exactas. En cambio, los analizadores sintácticos que usa Semantic comprenden con exactitud la sintaxis de los lenguajes de programación. Esto permite a Semantic proporcionar comandos de búsqueda, navegación y finalización potentes y precisos.</p>
<p>Para empezar a usar Semantic, escriba M-x semantic-mode o haga clic en la opción de menú denominada “Source Code Parsers (Semantic)” en el menú “Herramientas”. Esto activa el modo Semántico, un modo global menor.</p>
<p>Cuando el modo semántico está activado, Emacs intenta analizar automáticamente cada archivo que visita. Actualmente, Semantic entiende C, C++, HTML, Java, Javascript, Make, Python, Scheme, SRecode y Texinfo. Dentro de cada búfer analizado, están disponibles los siguientes comandos:</p>
<dl class="simple">
<dt>C-c , j</dt><dd><p>Pregunta por el nombre de una función definida en el archivo actual y mueve el punto allí (semantic-complete-jump-local).</p>
</dd>
<dt>C-c , J</dt><dd><p>Pregunta por el nombre de una función definida en cualquier archivo que Emacs haya analizado, y mueve el punto allí (semantic-complete-jump).</p>
</dd>
<dt>C-c , SPC</dt><dd><p>Muestra una lista de posibles terminaciones para el símbolo en cuestión (semantic-complete-analyze-inline). Esto también activa un conjunto de combinaciones de teclas especiales para
elegir una terminación: RET acepta la terminación actual, M-n y M-p recorren las posibles terminaciones, TAB completa hasta donde sea posible y luego recorre el ciclo, y C-g o
cualquier otra tecla aborta la terminación.</p>
</dd>
<dt>C-c , l</dt><dd><p>Muestra una lista de las posibles terminaciones del símbolo en el punto, en otra ventana (semantic-analyze-possible-completions).</p>
</dd>
</dl>
<p>Además de los comandos anteriores, el paquete Semantic proporciona otras formas de usar la información del analizador sintáctico. Por ejemplo, puede usarlo para mostrar una lista de terminaciones cuando Emacs está inactivo. Ver Semantic en Semantic, para más detalles.</p>
<ol class="arabic simple" start="17">
<li><p>Expresiones regulares y tablas de sintaxis.</p></li>
</ol>
</section>
<section id="otras-funciones-utiles-para-editar-programas">
<h2>27.11 Otras Funciones Útiles para Editar Programas<a class="headerlink" href="#otras-funciones-utiles-para-editar-programas" title="Link to this heading"></a></h2>
<p>Algunos comandos de Emacs que no están diseñados específicamente para editar programas son útiles para ello.</p>
<p>Los comandos de Emacs que operan sobre palabras, frases y párrafos son útiles para editar código. La mayoría de los nombres de símbolos contienen palabras (ver Palabras), mientras que las sentencias se pueden encontrar en cadenas y comentarios (ver Sentencias). En cuanto a los párrafos, están definidos en la mayoría de los modos del lenguaje de programación para comenzar y terminar en líneas en blanco (véase Párrafos). Por lo tanto, usar juiciosamente las líneas en blanco para hacer el programa más claro también proporcionará trozos de texto útiles para que trabajen los comandos de párrafo. El modo Relleno Automático (Auto Fill mode), si está activado en un modo principal de lenguaje de programación, aplica sangría a las nuevas líneas que crea.</p>
<p>El modo Superpalabra es un modo menor localizado en el búfer que hace que los comandos de edición y movimiento traten los símbolos (por ejemplo, “esto_es_un_símbolo”) como palabras. Cuando el modo Superpalabra está activado, el indicador de modo menor “²” aparece en la línea de modo. Véase también el modo similar de subpalabra (subword-mode) (véase Palabras Mixtas).</p>
<p>El modo Electric Layout (M-x electric-layout-mode) es un modo menor global que inserta automáticamente nuevas líneas cuando se escriben ciertos caracteres; por ejemplo, “{”, “}” y “;” en el modo Javascript.</p>
<p>Aparte del modo Hideshow (ver modo menor Hideshow), otra forma de mostrar selectivamente partes de un programa es usar la función de visualización selectiva (ver Visualización Selectiva). Los modos de programación también suelen soportar el modo menor Esquema (véase Modo Esquema), que puede usarse con el paquete Plegado (véase Edición de Plegado).</p>
<p>El modo Prettify Symbols es un modo menor localizado en el búfer que sustituye ciertas cadenas por versiones más atractivas para su visualización. Por ejemplo, en el modo Emacs Lisp, sustituye la cadena “lambda” por el carácter lambda griego “λ”. En un búfer TeX, sustituirá “alpha” … “omega” y otras macros matemáticas por sus caracteres Unicode. Puede usar esto también en modos que no sean de programación. Puede personalizar el modo añadiendo más entradas a prettify-symbols-alist. Una personalización más elaborada está disponible mediante la personalización de prettify-symbols-compose-predicate si su valor por defecto prettify-symbols-default-compose-p no es apropiado. También existe una versión global, global-prettify-symbols-mode, que activa el modo en todos los búferes que lo soportan.</p>
<p>El símbolo en el punto puede mostrarse en su forma original. Esto se controla mediante la variable prettify-symbols-unprettify-at-point: si no es nula, la forma original del símbolo en el punto se restaurará mientras el punto esté en él.</p>
</section>
<section id="c-y-modos-relacionados">
<h2>27.12 C y Modos Relacionados<a class="headerlink" href="#c-y-modos-relacionados" title="Link to this heading"></a></h2>
<p>Esta sección ofrece una breve descripción de las características especiales disponibles en los modos C, C++, Objective-C, Java, CORBA IDL, Pike y AWK. (Se denominan «modo C y modos relacionados».) Para más detalles, consulte el manual de información del modo CC, que se distribuye con Emacs.</p>
<section id="comandos-de-movimiento-en-modo-c">
<h3>27.12.1 Comandos de Movimiento en Modo C<a class="headerlink" href="#comandos-de-movimiento-en-modo-c" title="Link to this heading"></a></h3>
<p>Esta sección describe los comandos para mover el punto, en modo C y modos relacionados.</p>
<p>C-M-a
C-M-e</p>
<blockquote>
<div><p>Mueve el punto al principio o al final de la función actual o de la definición de nivel superior. En lenguajes con ámbitos (como las clases de C++) la función actual es la inmediata,
posiblemente dentro de un ámbito. En caso contrario, es la definida por las llaves menos cercanas. (Por el contrario, beginning-of-defun y end-of-defun buscan llaves en la columna
cero). Véase Desplazamiento por defuns.</p>
</div></blockquote>
<dl>
<dt>C-u C-u</dt><dd><p>Mueve el punto de vuelta a la condicional de preprocesador contenedora, dejando atrás la marca. Un argumento prefijo actúa como un contador de repeticiones. Con un argumento negativo,
mueva el punto hacia adelante hasta el final de la condicional del preprocesador que lo contiene.</p>
<p>#elif” es equivalente a “#else” seguido de “#if”, por lo que la función se detendrá en un “#elif” cuando vaya hacia atrás, pero no cuando vaya hacia delante.</p>
</dd>
<dt>C-c C-p</dt><dd><p>Mueve el punto hacia atrás sobre una condicional de preprocesador, dejando la marca detrás. Un argumento prefijo actúa como una cuenta de repetición. Con un argumento negativo, avanza.</p>
</dd>
<dt>C-c C-n</dt><dd><p>Mueve el punto hacia adelante a través de una condicional de preprocesador, dejando la marca detrás. Un argumento prefijo actúa como una cuenta de repetición. Con un argumento
negativo, se mueve hacia atrás.</p>
</dd>
<dt>M-a</dt><dd><p>Mueve el punto al principio de la sentencia C más interna (c-beginning-of-statement). Si el punto ya está al principio de una sentencia, se mueve al principio de la sentencia
precedente. Con el argumento prefijo n, retrocede n - 1 sentencias.</p>
<p>En comentarios o en cadenas que abarcan más de una línea, este comando se mueve por sentencias en lugar de por sentencias.</p>
</dd>
<dt>M-e</dt><dd><p>Mueve el punto al final del enunciado o frase C más interior; como M-a excepto que se mueve en la otra dirección (c-end-of-statement).</p>
</dd>
</dl>
</section>
<section id="caracteres-c-electricos">
<h3>27.12.2 Caracteres C Eléctricos<a class="headerlink" href="#caracteres-c-electricos" title="Link to this heading"></a></h3>
<p>En modo C y modos relacionados, ciertos caracteres de impresión son eléctricos, además de insertarse a sí mismos, también reentintan la línea actual, y opcionalmente también insertan nuevas líneas. Los caracteres eléctricos son {, }, :, #, ;, ,, &lt;, &gt;, /, <a href="#id9"><span class="problematic" id="id10">*</span></a>, (, y ).</p>
<p>Puede que la sangría eléctrica le resulte incómoda si está editando código con sangría caótica. Si es nuevo en el modo CC, puede que le resulte desconcertante. Puede activar la acción eléctrica con el comando C-c C-l; cuando está activada, “/cl” aparece en la línea de modo después del nombre del modo (donde c, si está presente, es “*” o “/”, dependiendo de si el estilo de comentario es bloque o línea). Consulte Modos Menores en el Manual del Modo CC, para más información sobre los indicadores de línea de modo en el Modo CC.</p>
<dl class="simple">
<dt>C-c C-l</dt><dd><p>Alterna la acción eléctrica (c-toggle-electric-state). Con un argumento prefijo positivo, este comando activa la acción eléctrica, con uno negativo la desactiva.</p>
</dd>
</dl>
<p>Los caracteres eléctricos insertan nuevas líneas sólo cuando, además del estado eléctrico, está activada la función de auto-newline (indicada por “/cla” en la línea de modo después del nombre del modo). Puede activar o desactivar esta función con el comando C-c C-a:</p>
<dl class="simple">
<dt>C-c C-a</dt><dd><p>Activa la función de auto-newline (c-toggle-auto-newline). Con un argumento prefijo, este comando activa la función de auto-newline si el argumento es positivo, y la desactiva si es
negativo.</p>
</dd>
</dl>
<p>Normalmente el estilo Modo CC configura las circunstancias exactas en las que Emacs inserta auto-newlines. También puede configurar esto directamente. Vea Custom Auto-newlines en The CC Mode Manual.</p>
</section>
<section id="caracteristica-de-borrado-forzado-en-c">
<h3>27.12.3. Característica de Borrado Forzado en C<a class="headerlink" href="#caracteristica-de-borrado-forzado-en-c" title="Link to this heading"></a></h3>
<p>Si quiere borrar un bloque entero de espacio en blanco en un punto, puede usar el borrado forzado (hungry deletion). Esto borra todo el espacio en blanco contiguo antes o después del punto en una sola operación. Los espacios en blanco incluyen tabuladores y nuevas líneas, pero no comentarios ni comandos del preprocesador.</p>
<p>C-c C-DEL
C-c DEL</p>
<blockquote>
<div><p>Elimina todo el bloque de espacios en blanco que precede al punto (c-hungry-delete-backwards).</p>
</div></blockquote>
<p>C-c C-d
C-c C-Delete
C-c Delete</p>
<blockquote>
<div><p>Borra todo el bloque de espacios en blanco después del punto (c-hungry-delete-forward).</p>
</div></blockquote>
<p>Como alternativa a los comandos anteriores, puede activar el modo de borrado con hambre. Cuando esta función está activada (indicada por “h” después de “/” en la línea de modo después del nombre del modo), un solo DEL borra todos los espacios en blanco precedentes, no sólo un espacio, y un solo C-d (pero no Delete normal) borra todos los espacios en blanco siguientes.</p>
<dl class="simple">
<dt>M-x c-toggle-hungry-state</dt><dd><p>Activa la función de borrado por hambre (c-toggle-hungry-state). Con un argumento prefijo, este comando activa la función de borrado por hambre si el argumento es positivo, y la
desactiva si es negativo.</p>
</dd>
</dl>
<p>La variable c-hungry-delete-key controla si la función hungry-delete está activada.</p>
</section>
<section id="otros-comandos-para-el-modo-c">
<h3>27.12.4 Otros comandos para el Modo C<a class="headerlink" href="#otros-comandos-para-el-modo-c" title="Link to this heading"></a></h3>
<dl>
<dt>M-x c-context-line-break</dt><dd><p>Este comando inserta un salto de línea y aplica a la nueva línea la sangría adecuada al contexto. En código normal, hace el trabajo de RET (newline, nueva línea), en una línea de
preprocesador C inserta adicionalmente un “' en el salto de línea, y dentro de los comentarios es como M-j (c-indent-new-comment-line).</p>
<p>c-context-line-break no está vinculado a una tecla por defecto, pero necesita una vinculación para ser útil. El siguiente código lo vinculará a RET. Usamos c-initialization-hook aquí
para asegurarnos de que el mapa de teclado está cargado antes de intentar cambiarlo.</p>
<blockquote>
<div><blockquote>
<div><dl class="simple">
<dt>(defun my-bind-clb ()</dt><dd><dl class="simple">
<dt>(keymap-set c-mode-base-map «RET»</dt><dd><p>“c-context-line-break))</p>
</dd>
</dl>
</dd>
</dl>
</div></blockquote>
<p>(add-hook “c-initialization-hook “my-bind-clb)</p>
</div></blockquote>
</dd>
<dt>C-M-h</dt><dd><p>Pone marca al final de la definición de una función, y pone punto al principio ( c-mark-function).</p>
</dd>
<dt>M-q</dt><dd><p>Rellena un párrafo, manejando comentarios en C y C++ (c-fill-paragraph). Si cualquier parte de la línea actual es un comentario o está dentro de un comentario, este comando rellena el
comentario o el párrafo del mismo en el que se encuentra ese punto, preservando la sangría del comentario y los delimitadores del comentario.</p>
</dd>
<dt>C-c C-e</dt><dd><p>Ejecuta el preprocesador C sobre el texto de la región, y muestra el resultado, que incluye la expansión de todas las llamadas a macros (c-macro-expand). El texto del búfer antes de
la región también se incluye en el preprocesamiento, por las macros definidas allí, pero la salida de esta parte no se muestra.</p>
<p>Cuando está depurando código C que usa macros, a veces es difícil averiguar con precisión cómo se expanden las macros. Con este comando, no tendrá que averiguarlo; podrá ver las
expansiones.</p>
</dd>
<dt>C-c C-</dt><dd><p>Inserta o alinea caracteres “' en los extremos de las líneas de la región (c-backslash-region). Esto es útil después de escribir o editar una definición de macro C.</p>
<p>Si una línea ya termina en “', este comando ajusta la cantidad de espacio en blanco antes de ella. Si no, inserta un nuevo “'. Sin embargo, la última línea de la región se trata de
forma especial; no se inserta ningún “' en esa línea, y cualquier “' que haya se borra.</p>
</dd>
<dt>M-x cpp-highlight-buffer</dt><dd><p>Resalta partes del texto según sus condicionales de preprocesador. Este comando muestra otro búfer llamado <em>CPP Edit</em>, que sirve como menú gráfico para seleccionar cómo mostrar
determinados tipos de condicionales y su contenido. Después de cambiar varios parámetros, haga clic en [A]pply these settings ([A]plique estos parámetros) (o vaya a ese búfer y
escriba a) para volver a resaltar el búfer del modo C en consecuencia.</p>
</dd>
<dt>C-c C-s</dt><dd><p>Muestra la información sintáctica de la línea fuente actual (c-show-syntactic-information). Esta información indica cómo se aplica la sangría a la línea.</p>
</dd>
</dl>
<p>M-x cwarn-mode
M-x global-cwarn-mode</p>
<blockquote>
<div><p>El modo menor de CWarn resalta ciertas construcciones sospechosas de C y C++:</p>
<blockquote>
<div><ul class="simple">
<li><p>Asignaciones dentro de expresiones.</p></li>
<li><p>Punto y coma inmediatamente después de “if”, “for”, y “while” (excepto después de una sentencia “do … while”);</p></li>
<li><p>Funciones C++ con parámetros de referencia.</p></li>
</ul>
</div></blockquote>
<p>Puede activar el modo para un búfer con el comando M-x cwarn-mode, o para todos los búferes adecuados con el comando M-x global-cwarn-mode o personalizando la variable
global-cwarn-mode. También debe habilitar el modo Font Lock para que funcione.</p>
</div></blockquote>
<dl class="simple">
<dt>M-x hide-ifdef-mode</dt><dd><p>El modo menor Hide-ifdef oculta el código seleccionado dentro de los bloques de preprocesador “#if” y “#ifdef”. Si cambia la variable hide-ifdef-shadow a t, Hide-ifdef minor mode
sombrea los bloques de preprocesador mostrándolos con una cara menos prominente, en lugar de ocultarlos por completo. Consulte la cadena de documentación de hide-ifdef-mode para más
información.</p>
</dd>
<dt>M-x ff-find-related-file</dt><dd><p>Busca un archivo relacionado de forma especial con el archivo visitado por el búfer actual. Normalmente será el archivo de cabecera correspondiente a un archivo fuente C/C++, o
viceversa. La variable ff-related-file-alist especifica cómo calcular los nombres de archivos relacionados.</p>
</dd>
</dl>
</section>
</section>
<section id="modo-asm">
<h2>27.13 Modo Asm<a class="headerlink" href="#modo-asm" title="Link to this heading"></a></h2>
<p>El modo Asm es un modo principal para editar archivos de código ensamblador. Define estos comandos:</p>
<dl class="simple">
<dt>TAB</dt><dd><p>tab-to-tab-stop.</p>
</dd>
<dt>C-j</dt><dd><p>Inserta una nueva línea y luego aplica indentación usando tabulador a tabulador.</p>
</dd>
</dl>
<dl class="simple">
<dt>:</dt><dd><p>Introduzca dos puntos y, a continuación, elimine la sangría de antes de los dos puntos de la etiqueta anterior. A continuación, haga tabulador a tabulador.</p>
</dd>
</dl>
<dl class="simple">
<dt>;</dt><dd><p>Inserta o alinea un comentario.</p>
</dd>
</dl>
<p>La variable asm-comment-char especifica qué carácter inicia los comentarios en la sintaxis de ensamblador.</p>
</section>
<section id="modo-fortran">
<h2>27.14 Modo Fortran<a class="headerlink" href="#modo-fortran" title="Link to this heading"></a></h2>
<p>El modo Fortran está pensado para editar código fuente de forma fija (y también de formato tabulado) (normalmente Fortran 77). Para editar código fuente de forma libre más moderno (Fortran 90, 95, 2003, 2008), use el modo F90 (f90-mode). Emacs normalmente usa el modo Fortran para archivos con extensión “.f”, “.F” o “.for”, y el modo F90 para las extensiones “.f90”, “.f95”, “.f03” y “.f08”. Personalice auto-mode-alist para añadir más extensiones. GNU Fortran soporta tanto el modo libre como el fijo. Este manual documenta principalmente el modo Fortran, pero las características correspondientes del modo F90 se mencionan cuando son relevantes.</p>
<p>El modo Fortran proporciona comandos especiales de movimiento para sentencias y subprogramas Fortran, y comandos de sangrado que entienden las convenciones Fortran de anidamiento, números de línea y sentencias de continuación. El modo Fortran es compatible con el modo Auto Fill, que divide las líneas largas en líneas de continuación Fortran adecuadas. El modo Fortran también admite el modo Hideshow minor (véase Modo Hideshow minor) e Imenu (véase Imenu).</p>
<p>Se proporcionan comandos especiales para los comentarios porque los comentarios de Fortran no son como los de otros lenguajes. Las abreviaturas incorporadas ahorran teclear cuando se insertan palabras clave de Fortran.</p>
<p>Use M-x fortran-mode para cambiar a este modo principal. Este comando ejecuta el hook fortran-mode-hook. Consulte Ganchos.</p>
<section id="comandos-de-movimie">
<h3>27.14.1 Comandos de Movimie<a class="headerlink" href="#comandos-de-movimie" title="Link to this heading"></a></h3>
<p>Además de los comandos normales para moverse por defuns y operar sobre ellos (subprogramas-funciones y subrutinas de Fortran, así como módulos para el modo F90, usando los comandos fortran-end-of-subprogram y fortran-beginning-of-subprogram), el modo Fortran proporciona comandos especiales para moverse por sentencias y otras unidades de programa.</p>
<dl class="simple">
<dt>C-c C-n</dt><dd><p>Se mueve al principio de la siguiente sentencia (fortran-next-statement/f90-next-statement).</p>
</dd>
<dt>C-c C-p</dt><dd><p>Se desplaza al principio de la sentencia anterior (fortran-previous-statement/f90-previous-statement). Si no hay sentencia anterior (es decir, si se llama desde la primera sentencia
del búfer), se desplaza al principio del búfer.</p>
</dd>
<dt>C-c C-e</dt><dd><p>Avanza el punto hasta el inicio del siguiente bloque de código, o hasta el final del actual, lo que ocurra primero (f90-next-block). Un bloque de código es una subrutina, una
sentencia if-endif, etc. Este comando sólo existe en modo F90, no en modo Fortran. Con un argumento numérico, avanza el mismo número de bloques.</p>
</dd>
<dt>C-c C-a</dt><dd><p>Mueve el punto hacia atrás hasta el bloque anterior (f90-previous-block). Es como f90-next-block, pero se mueve hacia atrás.</p>
</dd>
<dt>C-M-n</dt><dd><p>Se desplaza al final del bloque de código actual (fortran-end-of-block/f90-end-of-block). Con un argumento numérico, avanza ese número de bloques. La marca se fija antes de mover el
punto. La versión en modo F90 de este comando comprueba la coherencia de los tipos de bloque y las etiquetas (si están presentes), pero no comprueba el bloque más externo ya que puede
estar incompleto.</p>
</dd>
<dt>C-M-p</dt><dd><p>Se mueve al principio del bloque de código actual (fortran-beginning-of-block/f90-beginning-of-block). Es como fortran-end-of-block, pero se mueve hacia atrás.</p>
</dd>
</dl>
<p>Las órdenes fortran-beginning-of-subprogram y fortran-end-of-subprogram se desplazan al inicio o al final del subprograma actual, respectivamente. Las órdenes fortran-mark-do y fortran-mark-if marcan el final del bloque actual do o if, y desplazan el punto al principio.</p>
</section>
<section id="indentacion-en-fortran">
<h3>27.14.2. Indentación en Fortran<a class="headerlink" href="#indentacion-en-fortran" title="Link to this heading"></a></h3>
<p>Se necesitan comandos y características especiales para sangrar código Fortran de forma fija (o tabulador) para asegurarse de que varias entidades sintácticas (números de línea, indicadores de línea de comentario y banderas de línea de continuación) aparecen en las columnas requeridas.</p>
<section id="comandos-fortran-de-indentado-y-relleno">
<h4>27.14.2.1. Comandos Fortran de Indentado y Relleno<a class="headerlink" href="#comandos-fortran-de-indentado-y-relleno" title="Link to this heading"></a></h4>
<dl class="simple">
<dt>C-M-j</dt><dd><p>Rompe la línea actual en un punto y establece una línea de continuación (fortran-split-line).</p>
</dd>
<dt>M-^</dt><dd><p>Une esta línea a la anterior (fortran-join-line).</p>
</dd>
<dt>C-M-q</dt><dd><p>Indenta todas las líneas del subprograma en el que se encuentra ese punto (fortran-indent-subprogram).</p>
</dd>
<dt>M-q</dt><dd><p>Rellena un bloque de comentarios o una sentencia (usando fortran-fill-paragraph o fortran-fill-statement).</p>
</dd>
</dl>
<p>La tecla C-M-q ejecuta fortran-indent-subprogram, una orden para volver a sangrar todas las líneas del subprograma Fortran (función o subrutina) que contiene el punto.</p>
<p>La tecla C-M-j ejecuta fortran-split-line, que divide una línea de la forma adecuada para Fortran. En una línea sin comentario, la segunda mitad se convierte en una línea de continuación y se sangra en consecuencia. En una línea de comentario, ambas mitades se convierten en líneas de comentario separadas.</p>
<p>M-^ o C-c C-d ejecutan el comando fortran-join-line, que une una línea de continuación con la línea anterior, más o menos como la inversa de fortran-split-line. El punto debe estar en una línea de continuación cuando se invoque este comando.</p>
<p>M-q en modo Fortran rellena el bloque de comentarios o la sentencia en la que se encuentra el punto. Esto elimina cualquier continuación de sentencia sobrante.</p>
</section>
<section id="lineas-de-continuacion">
<h4>27.14.2.2. Líneas de Continuación<a class="headerlink" href="#lineas-de-continuacion" title="Link to this heading"></a></h4>
<p>La mayoría de los compiladores de Fortran 77 permiten dos formas de escribir líneas de continuación. Si el primer carácter no espaciador de una línea está en la columna 5, entonces esa línea es una continuación de la línea anterior. A esto lo llamamos forma fija. (En GNU Emacs siempre contamos las columnas a partir de 0; pero tenga en cuenta que el estándar Fortran cuenta a partir de 1. Puede personalizar la variable column-number-indicator-zero-based para hacer que la visualización de la columna sea similar a Fortran; vea Características Opcionales del Modo Línea). La variable fortran-continuation-string especifica qué carácter poner en la columna 5. Una línea que comienza con un carácter de tabulación seguido de cualquier dígito excepto “0” es también una línea de continuación. Llamamos a este estilo de continuación formato tabulador. (Fortran 90 introdujo las líneas de continuación de forma libre).</p>
<p>El modo Fortran puede usar cualquier estilo de línea de continuación. Cuando se entra en el modo Fortran, éste intenta deducir automáticamente el estilo de continuación apropiado a partir del contenido del búfer. Para ello, explora hasta 100 líneas desde el inicio del búfer. La primera línea que comienza con un tabulador o seis espacios determina la elección. Si el escaneo falla (por ejemplo, si el búfer es nuevo y, por tanto, está vacío), se usa el valor de fortran-tab-mode-default (nil para la forma fija y no nil para el formato tab). “/t” (fortran-tab-mode-string) en la línea mode indica que se ha seleccionado el formato tab. El modo Fortran establece el valor de indent-tabs-mode en consecuencia.</p>
<p>Si el texto de una línea comienza con el marcador de continuación de Fortran “$”, o si comienza con cualquier carácter que no sea un espacio en blanco en la columna 5, el modo Fortran lo trata como una línea de continuación. Cuando indenta una línea de continuación con TAB, convierte la línea al estilo de continuación actual. Al dividir una sentencia Fortran con C-M-j, el marcador de continuación en la nueva línea se crea según el estilo de continuación.</p>
<p>La configuración del estilo de continuación afecta a otros aspectos de la edición en modo Fortran. En el modo de formato fijo, el número mínimo de columna para el cuerpo de una sentencia es 6. Las líneas dentro de bloques de Fortran que están sangradas a números de columna mayores deben usar sólo el carácter de espacio como espacio en blanco. En el modo de formato tabulado, el número mínimo de columna para el cuerpo de la sentencia es 8, y el espacio en blanco antes de la columna 8 debe consistir en un carácter de tabulación.</p>
</section>
<section id="numeros-de-linea">
<h4>27.14.2.3. Números de Línea<a class="headerlink" href="#numeros-de-linea" title="Link to this heading"></a></h4>
<p>Si un número es el primer no-espacio en blanco de la línea, la indentación de Fortran asume que es un número de línea y lo mueve a las columnas 0 a 4. (Las columnas siempre cuentan desde 0 en Emacs, pero establecer column-number-indicator-zero-based a nil puede cambiar esto, vea Características de Línea en Modo Opcional).</p>
<p>Los números de línea de cuatro dígitos o menos tienen normalmente una sangría de un espacio. La variable fortran-line-number-indent controla esto; especifica la sangría máxima que puede tener un número de línea. El valor por defecto de la variable es 1. El modo Fortran intenta evitar que los dígitos del número de línea pasen de la columna 4, reduciendo la sangría por debajo del máximo especificado si es necesario. Si fortran-line-number-indent tiene el valor 5, los números de línea se justifican a la derecha para terminar en la columna 4.</p>
<p>La simple inserción de un número de línea es suficiente para sangrarlo de acuerdo con estas reglas. A medida que se inserta cada dígito, se vuelve a calcular la sangría. Para desactivar esta función, establezca la variable fortran-electric-número-de-línea en nil.</p>
</section>
<section id="convenciones-sintacticas">
<h4>27.14.2.4 Convenciones Sintácticas<a class="headerlink" href="#convenciones-sintacticas" title="Link to this heading"></a></h4>
<p>El modo Fortran asume que Usted sigue ciertas convenciones que simplifican la tarea de entender un programa Fortran lo suficientemente bien como para sangrarlo adecuadamente:</p>
<blockquote>
<div><ul class="simple">
<li><p>Dos bucles “do” anidados nunca comparten una sentencia “continue”. Las palabras clave de Fortran como “if”, “else”, “then”, “do” y otras se escriben sin espacios en blanco ni saltos</p></li>
</ul>
<p>de línea.</p>
<ul class="simple">
<li><p>Los compiladores de Fortran suelen ignorar los espacios en blanco fuera de las constantes de cadena, pero el modo Fortran no reconoce estas palabras clave si no son contiguas.</p></li>
</ul>
<p>Construcciones como “else if” o “end do” son aceptables, pero la segunda palabra debe estar en la misma línea que la primera y no en una línea de continuación.</p>
</div></blockquote>
<p>Si no sigue estas convenciones, los comandos de sangrado pueden sangrar algunas líneas de forma poco estética. Sin embargo, un programa Fortran correcto conserva su significado cuando se le aplica la sangría aunque no se sigan las convenciones.</p>
</section>
<section id="variables-para-el-indentado-en-fortran">
<h4>27.14.2.5. Variables para el Indentado en Fortran<a class="headerlink" href="#variables-para-el-indentado-en-fortran" title="Link to this heading"></a></h4>
<p>Varias variables adicionales controlan cómo funciona la sangría en Fortran:</p>
<dl class="simple">
<dt>fortran-do-indent</dt><dd><p>Indentación extra dentro de cada nivel de la sentencia “do” (por defecto 3).</p>
</dd>
<dt>fortran-if-indent</dt><dd><p>Indentación extra dentro de cada nivel de sentencias “if”, “select case”, o “where” (por defecto 3).</p>
</dd>
<dt>fortran-structure-indent</dt><dd><p>Indentación extra dentro de cada nivel de sentencias “structure”, “union”, “map”, o “interface” (por defecto 3).</p>
</dd>
<dt>fortran-continuation-indent</dt><dd><p>Sangría adicional para los cuerpos de las líneas de continuación (por defecto 5).</p>
</dd>
<dt>fortran-check-all-num-for-matching-do</dt><dd><p>En Fortran 77, una sentencia “do” numerada es terminada por cualquier sentencia con un número de línea coincidente. Es común (pero no obligatorio) usar una sentencia “continue” para
este propósito. Si esta variable tiene un valor no nulo, la indentación de cualquier sentencia numerada debe comprobar si hay una “do” que termine ahí. Si siempre termina las
sentencias “do” con una línea “continue” (o si usa el más moderno “enddo”), entonces puede acelerar la indentación estableciendo esta variable a nil (por defecto).</p>
</dd>
<dt>fortran-blink-matching-if</dt><dd><p>Si es t, al indentar una sentencia “endif” (o “enddo”) el cursor se mueve momentáneamente a la sentencia “if” (o “do”) correspondiente para mostrar dónde está. Por defecto es nil.</p>
</dd>
<dt>fortran-minimum-statement-indent-fixed</dt><dd><p>Indentación mínima para sentencias Fortran cuando se usa el estilo de línea de continuación de forma fija. Los cuerpos de las sentencias nunca tienen una sangría menor. El valor por
defecto es 6.</p>
</dd>
<dt>fortran-minimum-statement-indent-tab</dt><dd><p>Indentación mínima de las sentencias Fortran para el estilo de línea de continuación del formato tabulador. Los cuerpos de las sentencias nunca tienen una sangría menor. El valor
predeterminado es 8.</p>
</dd>
</dl>
<p>La siguiente sección describe las variables que controlan la sangría de los comentarios.</p>
</section>
</section>
<section id="comentarios-en-fortran">
<h3>27.14.3. Comentarios en Fortran<a class="headerlink" href="#comentarios-en-fortran" title="Link to this heading"></a></h3>
<p>Las órdenes de comentario habituales de Emacs asumen que un comentario puede seguir a una línea de código. En Fortran 77, la sintaxis de comentario estándar requiere que una línea entera sea sólo un comentario. Por lo tanto, el modo Fortran sustituye las órdenes de comentario estándar de Emacs y define algunas variables nuevas.</p>
<p>El modo Fortran también puede manejar la sintaxis de comentarios de Fortran 90, en la que los comentarios empiezan por “!” y pueden seguir a otro texto. Dado que sólo algunos compiladores de Fortran 77 aceptan esta sintaxis, el modo Fortran no insertará tales comentarios a menos que usted haya dicho de antemano que lo haga. Para ello, ajuste la variable fortran-comment-line-start a “»!»”. Si usa un valor inusual, puede que necesite cambiar fortran-comment-line-start-skip.</p>
<dl class="simple">
<dt>M-;</dt><dd><p>Permite alinear un comentario o insertar uno nuevo (comment-dwim).</p>
</dd>
<dt>C-x ;</dt><dd><p>Sólo se aplica a los comentarios “!” no estándar (comment-set-column).</p>
</dd>
<dt>C-c ;</dt><dd><p>Convierte todas las líneas de la región en comentarios, o (con argumento) las convierte de nuevo en código real (fortran-comment-region).</p>
</dd>
</dl>
<p>M-; en modo Fortran ejecuta el comment-dwim estándar. Este reconoce cualquier tipo de comentario existente y alinea su texto adecuadamente; si no hay comentario existente, se inserta y alinea un comentario. Insertar y alinear comentarios no es lo mismo en modo Fortran que en otros modos.</p>
<p>Cuando hay que insertar un nuevo comentario, si la línea actual está en blanco, se inserta un comentario de línea completa. En una línea que no esté en blanco, se inserta un comentario “!” no estándar si ha dicho que quiere usarlos. En caso contrario, se inserta un comentario de línea completa en una nueva línea antes de la línea actual.</p>
<p>Los comentarios “!” no estándar se alinean como los comentarios en otros idiomas, pero los comentarios de línea completa son diferentes. En un comentario de línea completa estándar, el delimitador del comentario debe aparecer siempre en la columna cero. Lo que puede alinearse es el texto dentro del comentario. Puede elegir entre tres estilos de alineación ajustando la variable fortran-comment-indent-style a uno de estos valores:</p>
<dl>
<dt>fixed</dt><dd><p>Alinea el texto en una columna fija, que es la suma de fortran-comment-line-extra-indent y la sangría mínima de la sentencia. Este es el valor por defecto.</p>
<p>La sangría mínima es fortran-minimum-statement-indent-tab para el estilo de línea de continuación con formato tabulador y fortran-minimum-statement-indent-fixed para el estilo de
formulario fijo.</p>
</dd>
<dt>relative</dt><dd><p>Alinea el texto como si fuera una línea de código, pero con una columna adicional de sangría fortran-comment-line-extra-indent.</p>
</dd>
<dt>nil</dt><dd><p>No mueve automáticamente el texto en los comentarios de línea completa.</p>
</dd>
</dl>
<p>Además, puede especificar el carácter que se usará para sangrar dentro de los comentarios de línea completa estableciendo la variable fortran-comment-indent-char en la cadena de un solo carácter que desee usar.</p>
<p>Las líneas de directivas del compilador, o líneas del preprocesador, tienen prácticamente la misma apariencia que las líneas de comentario. Es importante, sin embargo, que dichas líneas nunca tengan sangría, sea cual sea el valor de fortran-comment-indent-style. La variable fortran-directive-re es una expresión regular que especifica qué líneas son directivas. Las líneas que coincidan nunca se sangrarán y recibirán un bloqueo de fuente distintivo.</p>
<p>El comando de comentario normal de Emacs C-x ; ( comment-set-column) no ha sido redefinido. Si usa comentarios “!”, este comando puede usarse con ellos. De lo contrario, es inútil en modo Fortran.</p>
<p>El comando C-c ; (fortran-comment-region) convierte todas las líneas de la región en comentarios insertando la cadena “c$$$” al principio de cada una. Con un argumento numérico, convierte la región de nuevo en código dinámico borrando “c$$$” del principio de cada línea. La cadena usada para estos comentarios puede controlarse estableciendo la variable fortran-comment-region. Observe que aquí tenemos un ejemplo de un comando y una variable con el mismo nombre; estos dos usos del nombre nunca entran en conflicto porque en Lisp y en Emacs siempre queda claro por el contexto a cuál de los dos se refiere.</p>
</section>
<section id="relleno-automatico-en-modo-fortran">
<h3>27.14.4. Relleno Automático en Modo Fortran<a class="headerlink" href="#relleno-automatico-en-modo-fortran" title="Link to this heading"></a></h3>
<p>El modo Fortran tiene soporte especializado para el modo Auto Fill, que es un modo menor que divide automáticamente las sentencias a medida que las inserta cuando se vuelven demasiado anchas. Dividir una sentencia implica hacer líneas de continuación usando fortran-continuation-string (vea Líneas de continuación). Esta división se produce cuando escribe SPC, RET o TAB, y también en los comandos de indentación de Fortran. Active Auto Fill en modo Fortran de la forma habitual. Véase Modo Auto Fill.</p>
<p>Auto Fill rompe las líneas en los espacios o delimitadores cuando las líneas superan la anchura deseada (el valor de fill-column). Los delimitadores (además de los espacios en blanco) con los que Auto Fill puede romper son “+”, “-”, “/”, “*”, “=”, “&lt;”, “&gt;”, y “,”. El salto de línea se produce después del delimitador si la variable fortran-break-before-delimiters es nula. En caso contrario (y por defecto), el salto va antes del delimitador.</p>
<p>Para activar el relleno automático en todos los búferes de Fortran, añada auto-fill-mode a fortran-mode-hook. Véase Ganchos.</p>
</section>
<section id="comprobacion-de-columnas-en-fortran">
<h3>27.14.5. Comprobación de Columnas en Fortran<a class="headerlink" href="#comprobacion-de-columnas-en-fortran" title="Link to this heading"></a></h3>
<p>En Fortran 77 estándar, cualquier cosa más allá de la columna 72 se ignora. La mayoría de los compiladores proporcionan una opción para cambiar esto (por ejemplo, “-ffixed-line-length-N” en gfortran). Personalice la variable fortran-line-length para cambiar la longitud de línea en modo Fortran. Cualquier cosa más allá de este punto se bloquea como un comentario. (A menos que esté dentro de una cadena: las cadenas que se extiendan más allá de fortran-line-length confundirán el font-lock).</p>
<dl class="simple">
<dt>C-c C-r</dt><dd><p>Muestra una regla de columnas momentáneamente sobre la línea actual (fortran-column-ruler).</p>
</dd>
<dt>C-c C-w</dt><dd><p>Divide la ventana actual horizontalmente de forma temporal para que tenga columnas de longitud de línea fortran (fortran-window-create-momentarily). Esto puede ayudarle a evitar hacer
líneas más largas que el límite impuesto por su compilador de Fortran.</p>
</dd>
<dt>C-u C-c C-w</dt><dd><p>Divide la ventana actual horizontalmente para que tenga columnas de longitud de línea de fortran de ancho (fortran-window-create). A continuación, puede seguir editando.</p>
</dd>
<dt>M-x fortran-strip-sequence-nos</dt><dd><p>Borra todo el texto de la columna fortran-longitud de línea y posteriores.</p>
</dd>
</dl>
<p>El comando C-c C-r (fortran-column-ruler) muestra una regla de columnas momentáneamente sobre la línea actual. La regla de comentarios son dos líneas de texto que muestran la ubicación de las columnas con un significado especial en los programas Fortran. Los corchetes muestran los límites de las columnas para los números de línea, y las llaves muestran los límites de las columnas para el cuerpo de la sentencia. Los números de columna aparecen sobre ellos.</p>
<p>Tenga en cuenta que los números de columna cuentan desde cero, como siempre en GNU Emacs (pero personalizando column-number-indicator-zero-based puede cambiar la visualización de las columnas para que coincida con la de Fortran; vea Características de línea de modo opcional). Como resultado, los números pueden ser uno menos que aquellos con los que está familiarizado; pero las posiciones que indican en la línea son estándar para Fortran.</p>
<p>El texto usado para mostrar la regla de columna depende del valor de la variable indent-tabs-mode. Si indent-tabs-mode es nil, entonces se usa el valor de la variable fortran-column-ruler-fixed como regla de columna. En caso contrario, se muestra el valor de la variable fortran-column-ruler-tab. Cambiando estas variables, puede cambiar la visualización de la regla de columna.</p>
<p>C-c C-w (fortran-window-create-momentarily) divide temporalmente la ventana actual horizontalmente, haciendo una ventana de columnas de longitud de línea fortran, para que pueda ver las líneas demasiado largas. Escriba un espacio para restaurar el ancho normal.</p>
<p>También puede dividir la ventana horizontalmente y continuar editando con la división en su lugar. Para usar esto, use C-u C-c C-w (M-x fortran-window-create). Editando en esta ventana puede ver inmediatamente cuando hace una línea demasiado ancha para ser Fortran correcto.</p>
<p>El comando M-x fortran-strip-sequence-nos borra todo el texto de la columna fortran-line-length y posteriores, en todas las líneas del búfer actual. Esta es la forma más fácil de deshacerse de números de secuencia antiguos.</p>
</section>
<section id="abreviaturas-de-palabras-clave-en-fortran">
<h3>27.14.6. Abreviaturas de Palabras Clave en Fortran<a class="headerlink" href="#abreviaturas-de-palabras-clave-en-fortran" title="Link to this heading"></a></h3>
<p>El modo Fortran proporciona muchas abreviaturas incorporadas para palabras clave y declaraciones comunes. Son el mismo tipo de abreviaturas que puede definir Usted mismo. Para usarlas, debe activar el modo Abbrev. Véase Abreviaturas.</p>
<p>Las abreviaturas incorporadas son inusuales en un sentido: todas empiezan por punto y coma. Por ejemplo, una abreviatura incorporada en Fortran es “;c” para “continuar”. Si inserta “;c” y luego inserta un carácter de puntuación como un espacio o una nueva línea, la “;c” se expande automáticamente a “continue”, siempre que el modo Abbrev esté activado.</p>
<p>Escriba “;?” o “;C-h” para ver una lista de todas las abreviaturas de Fortran y lo que significan.</p>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="26_ComandsLengsHuma.html" class="btn btn-neutral float-left" title="26 Comandos para Lenguajes Humanos" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="28_CompProbProg.html" class="btn btn-neutral float-right" title="28 Compilar y Probar Programas" accesskey="n" rel="next">Siguiente <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -0,0 +1,721 @@
<!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>28 Compilar y Probar Programas &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="prev" title="27 Edición de Programas" href="27_EdDePrograms.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.16
</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"><a class="reference internal" href="19_ManejoArchivos.html">19 Manejo de Archivos</a></li>
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">28 Compilar y Probar Programas</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#ejecutar-compiladores-en-emacs">28.1 Ejecutar Compiladores en Emacs</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modo-compilacion">28.2 Modo Compilación</a></li>
<li class="toctree-l2"><a class="reference internal" href="#subshells-para-compilar">28.3 Subshells para Compilar</a></li>
<li class="toctree-l2"><a class="reference internal" href="#buscar-con-grep-en-emacs">28.4 Buscar con Grep en Emacs</a></li>
<li class="toctree-l2"><a class="reference internal" href="#encontrar-errores-de-sintaxis-al-vuelo">28.5 Encontrar errores de sintaxis al vuelo</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ejecutar-depuradores-en-emacs">28.6. Ejecutar Depuradores en Emacs</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#iniciar-gud">28.6.1 Iniciar GUD</a></li>
<li class="toctree-l3"><a class="reference internal" href="#funcionamiento-del-depurador">28.6.2. Funcionamiento del Depurador</a></li>
<li class="toctree-l3"><a class="reference internal" href="#comandos-del-gud">28.6.3 Comandos del GUD</a></li>
<li class="toctree-l3"><a class="reference internal" href="#personalizacion-de-gud">28.6.4 Personalización de GUD</a></li>
<li class="toctree-l3"><a class="reference internal" href="#interfaz-grafica-de-gdb">28.6.5. Interfaz Gráfica de GDB</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#disposicion-de-la-interfaz-de-usuario-gdb">28.6.5.1. Disposición de la Interfaz de Usuario GDB</a></li>
<li class="toctree-l4"><a class="reference internal" href="#buferes-fuente">28.6.5.2 Búferes Fuente</a></li>
<li class="toctree-l4"><a class="reference internal" href="#bufer-de-puntos-de-interrupcion">28.6.5.3. Búfer de puntos de interrupción</a></li>
<li class="toctree-l4"><a class="reference internal" href="#bufer-de-hilos-threads">28.6.5.4. Búfer de Hilos (Threads)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#bufer-de-pila">28.6.5.5. Búfer de pila</a></li>
<li class="toctree-l4"><a class="reference internal" href="#otros-buferes-gdb">28.6.5.6. Otros Búferes GDB</a></li>
<li class="toctree-l4"><a class="reference internal" href="#observa-las-expresiones">28.6.5.7 Observa las Expresiones</a></li>
<li class="toctree-l4"><a class="reference internal" href="#depuracion-multihilo">28.6.5.8. Depuración Multihilo</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#ejecucion-de-expresiones-lisp">28.7. Ejecución de Expresiones Lisp</a></li>
<li class="toctree-l2"><a class="reference internal" href="#bibliotecas-de-codigo-lisp-para-emacs">28.8 Bibliotecas de Código Lisp para Emacs</a></li>
<li class="toctree-l2"><a class="reference internal" href="#evaluacion-de-expresiones-emacs-lisp">28.9. Evaluación de Expresiones Emacs Lisp</a></li>
<li class="toctree-l2"><a class="reference internal" href="#buferes-de-interaccion-lisp">28.10. Búferes de Interacción Lisp</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ejecutar-un-lisp-externo">28.11. Ejecutar un Lisp externo</a></li>
</ul>
</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">28 Compilar y Probar Programas</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/CapConSecciones/28_CompProbProg.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="compilar-y-probar-programas">
<h1>28 Compilar y Probar Programas<a class="headerlink" href="#compilar-y-probar-programas" title="Link to this heading"></a></h1>
<p>El capítulo anterior discute los comandos de Emacs que son útiles para hacer cambios en los programas. Este capítulo trata de los comandos que ayudan en el proceso de compilar y probar programas.</p>
<section id="ejecutar-compiladores-en-emacs">
<h2>28.1 Ejecutar Compiladores en Emacs<a class="headerlink" href="#ejecutar-compiladores-en-emacs" title="Link to this heading"></a></h2>
<p>Emacs puede ejecutar compiladores para lenguajes como C y Fortran, alimentando el registro de compilación en un búfer de Emacs. También puede analizar los mensajes de error y mostrarte dónde se han producido.</p>
<dl class="simple">
<dt>M-x compile</dt><dd><p>Ejecuta un compilador de forma asíncrona bajo Emacs, con los mensajes de error yendo al búfer de <em>compilación</em>.</p>
</dd>
</dl>
<p>M-x recompile
g (En Modo Compilación)</p>
<blockquote>
<div><p>Invoca un compilador con el mismo comando que en la última llamada a M-x compile.</p>
</div></blockquote>
<dl class="simple">
<dt>M-x kill-compilation</dt><dd><p>Mata el subproceso de compilación en ejecución.</p>
</dd>
</dl>
<p>Para ejecutar make u otro comando de compilación, escriba M-x compile. Esto lee una línea de comandos de shell usando el minibúfer, y luego ejecuta el comando ejecutando un shell como un subproceso (o proceso inferior) de Emacs. La salida se inserta en un búfer llamado <em>compilation</em>. El directorio por defecto del búfer actual se usa como directorio de trabajo para la ejecución de la orden, así que por defecto la compilación tiene lugar en ese directorio.</p>
<p>El comando de compilación por defecto es “make -k”, que normalmente es correcto para programas compilados usando la utilidad make (la bandera “-k” le dice a make que continúe compilando tanto como sea posible después de un error). Ver Make en el Manual GNU Make. Si ha hecho M-x compile antes, el comando que especificó se almacena automáticamente en la variable compile-command; esto se usa por defecto la próxima vez que escriba M-x compile. Un archivo también puede especificar un valor local para compile-command (ver Variables Locales en Archivos).</p>
<p>Al iniciar una compilación se muestra el búfer de <em>compilación</em> (<em>compilation</em>) en otra ventana, pero no se selecciona. Mientras se ejecuta la compilación, la palabra “run” aparece en el indicador de modo principal del búfer <em>compilación</em>, y la palabra “Compiling” (Compilando) aparece en todas las líneas de modo. No es necesario mantener visible el búfer <em>compilation</em> mientras se ejecuta la compilación; ésta continúa en cualquier caso. Cuando la compilación termina, por la razón que sea, la línea de modo del búfer de <em>compilación</em> cambia para decir “exit” (seguido del código de salida: “[0]” para una salida normal), o “signal” (si una señal terminó el proceso).</p>
<p>Si desea ver la transcripción de la compilación tal y como aparece, cambie al búfer <em>compilación</em> y mueva punto al final del búfer. Cuando el punto está al final, la nueva salida de compilación se inserta sobre el punto, que permanece al final. En caso contrario, el punto permanece fijo mientras se añade la salida de compilación al final del búfer.</p>
<p>Mientras se realiza la compilación, la línea mode muestra el número de errores, advertencias y mensajes informativos emitidos por el compilador hasta el momento.</p>
<p>Si cambia la variable compilation-scroll-output a un valor no nulo, el búfer de <em>compilación</em> se desplaza automáticamente para seguir la salida. Si el valor es first-error, el desplazamiento se detiene cuando aparece el primer error, dejando el punto en ese error. Para cualquier otro valor no nulo, el desplazamiento continúa hasta que no hay más salida.</p>
<p>Para volver a ejecutar la última compilación con el mismo comando, escriba M-x recompile. Esto reutiliza el comando de compilación de la última invocación de M-x compile. También reutiliza el búfer <em>compilación</em> e inicia la compilación en su directorio por defecto, que es el directorio en el que se inició la compilación anterior. En los búferes de <em>compilación</em> este comando está ligado a g.</p>
<p>Comenzar una nueva compilación también mata cualquier compilación que ya se esté ejecutando en el búfer <em>compilation</em>, ya que el búfer sólo puede manejar una compilación a la vez. Sin embargo, M-x compile y M-x recompile piden confirmación antes de matar una compilación que se está ejecutando; para matar siempre automáticamente la compilación sin preguntar, cambie la variable compilation-always-kill a t. También puede matar un proceso de compilación con el comando M-x kill-compilation.</p>
<p>Para ejecutar dos compilaciones a la vez, inicie la primera, luego renombre el búfer de <em>compilación</em> (quizás usando rename-uniquely; vea Operaciones Misceláneas del Búfer), luego cambie de búfer e inicie la otra compilación. Esto creará un nuevo búfer de <em>compilación</em>.</p>
<p>Puede controlar el entorno que se pasa al comando de compilación con la variable compilation-environment. Su valor es una lista de configuraciones de variables de entorno; cada elemento debe ser una cadena de la forma «envvarname=value». Estas configuraciones de variables de entorno anulan las habituales.</p>
<p>Mostrar líneas extremadamente largas en la salida de compilación puede ralentizar Emacs. Las líneas que son más largas que compilation-max-output-line-length tendrán la porción que excede ese límite oculta detrás de un botón que puede ser pulsado para revelar la porción oculta. Establezca esta variable a nil para no ocultar nunca nada.</p>
</section>
<section id="modo-compilacion">
<h2>28.2 Modo Compilación<a class="headerlink" href="#modo-compilacion" title="Link to this heading"></a></h2>
<p>El búfer <em>compilation</em> (<em>compilación</em>) usa un modo principal llamado modo de Compilación (Compilation mode). El modo de compilación convierte cada mensaje de error del búfer en un hiperenlace; puede mover el puntero sobre él y escribir RET, o hacer clic sobre él con el ratón (véase Seguir Referencias con el Ratón), para visitar el locus del mensaje de error en una ventana separada. El locus es la posición específica en un archivo donde se produjo ese error.</p>
<p>La apariencia del búfer de <em>compilación</em> puede controlarse personalizando las caras que se usan para resaltar partes del búfer de <em>compilación</em>, por ejemplo, compilation-error o compilation-warning (compilación-error o compilación-advertencia), para mensajes de error y advertencia respectivamente. Nótese que, dado que estas caras heredan de las caras de error y advertencia, también es posible personalizar directamente la cara padre.</p>
<p>Use M-x customize-group RET compilación para ver la lista completa de variables de personalización y caras.</p>
<p>Si cambia la variable compilation-auto-jump-to-first-error a un valor no nulo, Emacs visita automáticamente el lugar del primer mensaje de error que aparece en el búfer de <em>compilación</em>. (Esta variable también puede tener los valores if-location-known y first-known, que modifican las condiciones para visitar automáticamente el lugar del error).</p>
<p>El modo de compilación proporciona los siguientes comandos adicionales. Estos comandos también pueden usarse en búferes <em>grep</em>, donde los hipervínculos son coincidencias de búsqueda en lugar de mensajes de error (ver Buscando con Grep en Emacs).</p>
<p>M-g M-n
M-g n
C-x</p>
<blockquote>
<div><p>Visita el locus del siguiente mensaje de error o coincidencia (next-error).</p>
</div></blockquote>
<p>M-g M-p
M-g p</p>
<blockquote>
<div><p>Visita el locus del mensaje de error o coincidencia anterior (previous-error).</p>
</div></blockquote>
<dl class="simple">
<dt>M-n</dt><dd><p>Mueve el punto al siguiente mensaje de error o coincidencia, sin visitar su locus (compilation-next-error).</p>
</dd>
<dt>M-p</dt><dd><p>Mueve el punto al mensaje de error o coincidencia anterior, sin visitar su locus (compilation-previous-error).</p>
</dd>
<dt>M-}</dt><dd><p>Mueve el punto al siguiente mensaje de error o coincidencia que se produzca en un archivo diferente (compilation-next-file).</p>
</dd>
<dt>M-{</dt><dd><p>Mueve el punto al mensaje de error anterior o a la coincidencia que se produce en un archivo diferente (compilation-previous-file).</p>
</dd>
<dt>C-c C-f</dt><dd><p>Conmuta al modo menor Next Error Follow, que hace que el movimiento del cursor en el búfer de compilación produzca la visualización automática de la fuente.</p>
</dd>
<dt>g</dt><dd><p>Vuelve a ejecutar el último comando cuya salida se muestra en el búfer <em>compilation</em>.</p>
</dd>
<dt>M-x next-error-select-buffer</dt><dd><p>Selecciona un búfer para ser usado por la siguiente invocación de next-error y previous-error.</p>
</dd>
</dl>
<p>Para visitar los errores secuencialmente, escriba C-x ` (next-error), o equivalentemente M-g M-n o M-g n. Este comando puede invocarse desde cualquier búfer, no sólo desde un búfer del modo Compilación. La primera vez que se invoca tras una compilación, visita el lugar del primer mensaje de error. Cada M-g M-n posterior visita el siguiente error, de forma similar. Si visita un error específico con RET o un clic del ratón en el búfer de <em>compilación</em>, los comandos M-g M-n posteriores avanzan desde allí. Cuando M-g M-n no encuentra más mensajes de error que visitar, señala un error. C-u M-g M-n comienza de nuevo desde el principio del búfer de compilación, y visita el primer locus.</p>
<p>M-g M-p o M-g p (previous-error) itera a través de los errores en la dirección opuesta.</p>
<p>Los comandos next-error y previous-error no sólo actúan sobre los errores o coincidencias listados en los búferes <em>compilation</em> y <em>grep</em>; también saben cómo iterar a través de las listas de errores o coincidencias producidas por otros comandos, como M-x occur (ver Otros Comandos de Búsqueda y Bucle). Si el búfer actual contiene mensajes de error o coincidencias, estos comandos iterarán a través de ellos; de lo contrario, Emacs busca un búfer que contenga mensajes de error o coincidencias entre las ventanas del marco seleccionado (si la variable next-error-find-buffer-function está personalizada al valor next-error-buffer-on-selected-frame), luego un búfer usado previamente por next-error o previous-error, y finalmente todos los demás búferes. Se mostrará cualquier búfer que estos comandos recorran y que no se muestre actualmente en una ventana. Puede usar el comando next-error-select-buffer para cambiar a un búfer diferente que será usado por la siguiente invocación de next-error.</p>
<p>Por defecto, los comandos next-error y previous-error omiten los mensajes menos importantes. La variable compilation-skip-threshold controla esto. El valor por defecto, 1, significa saltarse cualquier cosa menos importante que una advertencia. Un valor de 2 significa saltarse cualquier cosa menos importante que un error, mientras que 0 significa no saltarse ningún mensaje.</p>
<p>Cuando Emacs visita el lugar de un mensaje de error, resalta momentáneamente la línea fuente relevante. La duración de este resaltado está determinada por la variable next-error-highlight para el locus en el búfer seleccionado, y next-error-highlight-no-select para el locus en búferes no seleccionados. También puede personalizar la variable next-error-message-highlight que define cómo resaltar el mensaje de error actual en el búfer que contiene mensajes.</p>
<p>Si el búfer de <em>compilación</em> se muestra en una ventana con una franja izquierda (ver Márgenes de Ventana), los comandos de visita de locus ponen una flecha en la franja, apuntando al mensaje de error actual. Si la ventana no tiene franja izquierda, como en un terminal de texto, estos comandos desplazan la ventana para que el mensaje actual esté en la parte superior de la ventana. Si cambia la variable compilation-context-lines a t, en su lugar se inserta una flecha visible antes de la columna cero. Si cambia la variable a un valor entero n, estos comandos desplazan la ventana para que el mensaje de error actual esté a n líneas de la parte superior, haya o no flecos; el valor por defecto, nil, da el comportamiento descrito anteriormente.</p>
<p>La salida de la compilación puede ser a veces muy verbosa, y gran parte de ella no es de particular interés para un Usuario. La opción de usuario compilation-hidden-output debe ser una expresión regular o una lista de expresiones regulares, y la salida que coincida se hará invisible. Por ejemplo, para ocultar la salida verbose de makefiles recursivos, puede decir algo como:</p>
<blockquote>
<div><dl class="simple">
<dt>(setq compilation-hidden-output</dt><dd><p>“(«^make[^n]+n»))</p>
</dd>
</dl>
</div></blockquote>
<p>Para analizar los mensajes del compilador, el modo Compilación (Compilation mode) usa la variable compilation-error-regexp-alist que lista varios formatos de mensajes de error y le dice a Emacs cómo extraer el locus de cada uno. Una variable similar, grep-regexp-alist, le dice a Emacs cómo analizar la salida de un comando grep (ver Buscando con Grep en Emacs).</p>
<p>El modo de compilación también define las teclas SPC y DEL para desplazarse por pantalla; M-n (compilation-next-error) y M-p (compilation-previous-error) para moverse al siguiente o anterior mensaje de error; y M-{ (compilation-next-file) y M-} (compilation-previous-file) para pasar al mensaje de error siguiente o anterior de un archivo fuente diferente.</p>
<p>Puede teclear C-c C-f para activar el modo de seguimiento del siguiente error. En este modo menor, el movimiento ordinario del cursor en el búfer de compilación actualiza automáticamente el búfer fuente, es decir, al mover el cursor sobre un mensaje de error se muestra el lugar de ese error.</p>
<p>Las funciones del modo de compilación también están disponibles en un modo secundario denominado modo secundario de compilación. Esto le permite analizar mensajes de error en cualquier búfer, no sólo en un búfer de salida de compilación normal. Escriba M-x compilation-minor-mode para activar el modo menor. Por ejemplo, en un búfer Rlogin (véase Shell de Host Remoto), el modo menor de Compilación accede automáticamente a los archivos fuente remotos por FTP (véase Nombres de Archivos).</p>
</section>
<section id="subshells-para-compilar">
<h2>28.3 Subshells para Compilar<a class="headerlink" href="#subshells-para-compilar" title="Link to this heading"></a></h2>
<p>Esta sección incluye varias técnicas y consejos para usar un shell y sus características en búferes de compilación. Este material es específico para compilaciones locales, y muy probablemente no funcionará en (o será irrelevante para) búferes de compilación cuyo directorio por defecto esté en hosts remotos.</p>
<p>El comando de compilación M-x usa un shell para ejecutar el comando de compilación, pero especifica la opción de un shell no interactivo. Esto significa, en particular, que el intérprete de comandos debe iniciarse sin símbolo del sistema. Si encuentra que el prompt habitual de su shell aparece en el búfer de <em>compilación</em>, significa que ha cometido un error en el archivo de init de su shell al establecer el prompt incondicionalmente. (Este archivo de init puede llamarse .bashrc, .profile, .cshrc, .shrc, etc., dependiendo del shell que uses). El archivo de inicio del intérprete de comandos debe establecer el indicador sólo si ya existe un indicador. He aquí cómo hacerlo en bash:</p>
<blockquote>
<div><p>if [ «${PS1+set}» = set ]
then PS1=…
fi</p>
</div></blockquote>
<p>Y así es como se hace en csh:</p>
<blockquote>
<div><p>if ($?prompt) set prompt = …</p>
</div></blockquote>
<p>Si desea personalizar el valor de la variable de entorno TERM que se pasa a la subshell de compilación, personalice la variable comint-terminfo-terminal (ver Opciones del Modo Shell).</p>
<p>Emacs no espera que un proceso compilador lance subprocesos asíncronos; si lo hace, y siguen ejecutándose después de que el proceso compilador principal haya terminado, Emacs puede matarlos o su salida puede no llegar a Emacs. Para evitar este problema, haz que el proceso de compilación principal espere a que sus subprocesos terminen. En un script de shell, puedes hacer esto usando “$!” y “wait”, así:</p>
<blockquote>
<div><p>¡(sleep 10; echo 2nd)&amp; pid=$! # Registrar pid del subproceso
echo primer mensaje
wait $pid # Esperar subproceso</p>
</div></blockquote>
<p>Si el proceso en segundo plano no emite al búfer de compilación, por lo que sólo necesita evitar que sea eliminado cuando finalice el proceso de compilación principal, esto es suficiente:</p>
<blockquote>
<div><p>nohup command; sleep 1</p>
</div></blockquote>
<p>En MS-DOS, los subprocesos asíncronos no están soportados, por lo que M-x compile ejecuta el comando de compilación de forma síncrona (es decir, debe esperar hasta que el comando termine antes de poder hacer cualquier otra cosa en Emacs). Ver Emacs y MS-DOS.</p>
</section>
<section id="buscar-con-grep-en-emacs">
<h2>28.4 Buscar con Grep en Emacs<a class="headerlink" href="#buscar-con-grep-en-emacs" title="Link to this heading"></a></h2>
<p>Al igual que puede ejecutar un compilador desde Emacs y luego visitar las líneas con errores de compilación, también puede ejecutar grep y luego visitar las líneas en las que se encontraron coincidencias. Esto funciona tratando las coincidencias reportadas por grep como si fueran errores. El búfer de salida usa el modo Grep, que es una variante del modo Compilación (ver Modo Compilación).</p>
<p>M-x grep
M-x lgrep</p>
<blockquote>
<div><p>Ejecuta grep asíncronamente bajo Emacs, listando las líneas coincidentes en el búfer llamado <em>grep</em>.</p>
</div></blockquote>
<p>M-x grep-find
M-x find-grep
M-x rgrep</p>
<blockquote>
<div><p>Ejecuta grep a través de find, y recoge la salida en el búfer <em>grep</em>.</p>
</div></blockquote>
<dl class="simple">
<dt>M-x zrgrep</dt><dd><p>Ejecuta zgrep y recoge la salida en el búfer <em>grep</em>.</p>
</dd>
<dt>M-x kill-grep</dt><dd><p>Mata el subproceso grep en ejecución.</p>
</dd>
</dl>
<p>Para ejecutar grep, escriba M-x grep y, a continuación, introduzca una línea de comandos que especifique cómo ejecutar grep. Utilice los mismos argumentos que le daría a grep cuando lo ejecuta normalmente: una expresión regular estilo grep (normalmente entre comillas simples para entrecomillar los caracteres especiales del shell) seguida de nombres de archivo, que pueden usar comodines. Si especifica un argumento de prefijo para M-x grep, éste encuentra el identificador (vea Encontrar Referencias de Identificador) en el búfer alrededor del punto, y lo pone en el comando grep por defecto.</p>
<p>Su comando no necesita simplemente ejecutar grep; puede usar cualquier comando del shell que produzca salida en el mismo formato. Por ejemplo, puede encadenar comandos grep, de esta manera:</p>
<blockquote>
<div><p>grep -nH -e foo <a href="#id1"><span class="problematic" id="id2">*</span></a>.el | grep bar | grep toto</p>
</div></blockquote>
<p>La salida de grep va al búfer <em>grep</em>. Puede encontrar las líneas correspondientes en los archivos originales usando M-g M-n, RET, etc., como en los errores de compilación. Ver Modo de Compilación, para una descripción detallada de los comandos y combinaciones de teclas disponibles en el búfer <em>grep</em>.</p>
<p>Algunos programas grep aceptan la opción “color” para mostrar marcadores especiales alrededor de las coincidencias con el propósito de resaltarlas. Puede usar esta opción poniendo grep-highlight-matches a t. Al mostrar una coincidencia en el búfer fuente, se resaltará la coincidencia exacta, en lugar de toda la línea fuente. El resaltado se realiza mediante las secuencias de escape ANSI emitidas por grep. La coincidencia de las secuencias se controla mediante grep-match-regexp, que puede personalizarse para adaptarse a diferentes programas grep.</p>
<p>Al igual que con los comandos de compilación (ver Ejecutar Compilaciones en Emacs), mientras se ejecuta el comando grep, la línea de modo muestra el número de coincidencias encontradas y resaltadas hasta el momento.</p>
<p>Los comandos grep ofrecerán guardar búferes antes de ejecutarse. Esto se controla mediante la variable grep-save-buffers. Los valores posibles son nil (no guardar), ask (preguntar antes de guardar), o una función que será usada como predicado (y es llamada con el nombre del archivo como parámetro y debe devolver no nil si el búfer debe ser guardado). Cualquier otro valor no nulo significa que todos los búferes deben guardarse sin preguntar. El valor por defecto es ask.</p>
<p>El comando M-x grep-find (también disponible como M-x find-grep) es similar a M-x grep, pero proporciona un valor inicial por defecto diferente para el comando-uno que ejecuta tanto find como grep, para buscar en todos los archivos de un árbol de directorios. Véase también el comando find-grep-dired, en Dired y find.</p>
<p>Los comandos M-x lgrep (grep local) y M-x rgrep (grep recursivo) son versiones más fáciles de usar de grep y grep-find, que solicitan por separado la expresión regular a buscar, los archivos a buscar y el directorio base para la búsqueda. La distinción entre mayúsculas y minúsculas se controla mediante el valor actual de case-fold-search. El comando M-x zrgrep es similar a M-x rgrep, pero utiliza zgrep en lugar de grep para buscar en el contenido de archivos comprimidos.</p>
<p>Estos comandos construyen los comandos del shell basándose en las variables grep-template (para lgrep) y grep-find-template (para rgrep). Los archivos a buscar pueden usar alias definidos en la variable grep-files-aliases.</p>
<p>Los directorios listados en la variable grep-find-ignored-directories son omitidos automáticamente por M-x rgrep. El valor por defecto incluye los directorios de datos usados por varios sistemas de control de versiones.</p>
<p>Por defecto, los comandos de shell construidos para lgrep, rgrep y zgrep se abrevian para su visualización ocultando la parte que contiene una larga lista de archivos y directorios a ignorar. Puede revelar la parte oculta haciendo clic en el botón con elipsis que los representa. También puede alternar interactivamente la visualización de la parte oculta escribiendo M-x grep-find-toggle-abbreviation. Para desactivar esta abreviación de los comandos del shell, personaliza la opción grep-find-abbreviate a un valor nulo.</p>
</section>
<section id="encontrar-errores-de-sintaxis-al-vuelo">
<h2>28.5 Encontrar errores de sintaxis al vuelo<a class="headerlink" href="#encontrar-errores-de-sintaxis-al-vuelo" title="Link to this heading"></a></h2>
<p>El modo Flymake es un modo menor que realiza una comprobación de sintaxis sobre la marcha para muchos lenguajes de programación y marcado, incluyendo C, C++, Perl, HTML y TeX/LaTeX. Es algo análogo al modo Flyspell, que realiza la comprobación ortográfica para lenguajes humanos ordinarios de forma similar (véase Comprobación y Corrección de la Ortografía). Mientras edita un archivo, el modo Flymake ejecuta una herramienta de comprobación sintáctica apropiada en segundo plano, usando una copia temporal del búfer. A continuación, analiza los mensajes de error y advertencia, y resalta las líneas erróneas en el búfer. La herramienta de comprobación de sintaxis usada depende del lenguaje; por ejemplo, para archivos C/C++ suele ser el compilador de C. Flymake también puede usar herramientas de compilación como make para comprobar proyectos complicados.</p>
<p>Para activar el modo Flymake, escriba M-x flymake-mode. Puede saltar a los errores que encuentre usando M-x flymake-goto-next-error y M-x flymake-goto-prev-error. Para mostrar una vista detallada de los diagnósticos del búfer actual, use el comando M-x flymake-show-buffer-diagnostics; para mostrar una vista similar de los diagnósticos de todo el proyecto (vea Trabajando con Proyectos), use M-x flymake-show-project-diagnostics.</p>
<p>Para más detalles sobre cómo usar Flymake, vea Flymake en The Flymake Manual.</p>
</section>
<section id="ejecutar-depuradores-en-emacs">
<h2>28.6. Ejecutar Depuradores en Emacs<a class="headerlink" href="#ejecutar-depuradores-en-emacs" title="Link to this heading"></a></h2>
<p>La biblioteca GUD (Grand Unified Debugger) proporciona una interfaz de Emacs para una amplia variedad de depuradores simbólicos. Puede ejecutar el depurador de GNU (GDB), así como DBX, SDB, XDB, los comandos de depuración de Guile REPL, el modo de depuración de Perl, el depurador de Python PDB, y el depurador de Java JDB.</p>
<p>Emacs proporciona una interfaz especial para GDB, que usa ventanas extra de Emacs para mostrar el estado del programa depurado. Ver Interfaz Gráfica GDB.</p>
<p>Emacs también tiene un depurador incorporado para programas Emacs Lisp. Ver El depurador Lisp en el Manual de Referencia de Emacs Lisp.</p>
<section id="iniciar-gud">
<h3>28.6.1 Iniciar GUD<a class="headerlink" href="#iniciar-gud" title="Link to this heading"></a></h3>
<p>Existen varios comandos para iniciar un subproceso depurador, cada uno correspondiente a un programa depurador en particular.</p>
<dl>
<dt>M-x gdb</dt><dd><p>Ejecuta GDB como un subproceso, e interactúa con él a través de una interfaz Emacs tipo IDE. Consulte Interfaz gráfica de GDB, para obtener más información sobre este comando.</p>
</dd>
<dt>M-x gud-gdb</dt><dd><p>Ejecuta GDB, usando un búfer de interacción GUD para entrada y salida al subproceso GDB (ver Funcionamiento del Depurador). Si tal búfer ya existe, cambia a él; de lo contrario, crea
el búfer y luego cambia a él.</p>
<p>Los otros comandos de esta lista hacen lo mismo, para otros programas depuradores.</p>
</dd>
<dt>M-x perldb</dt><dd><p>Ejecuta el intérprete Perl en modo depuración.</p>
</dd>
<dt>M-x jdb</dt><dd><p>Ejecuta el depurador de Java.</p>
</dd>
<dt>M-x pdb</dt><dd><p>Ejecuta el depurador de Python.</p>
</dd>
<dt>M-x guiler</dt><dd><p>Ejecuta Guile REPL para depurar programas Guile Scheme.</p>
</dd>
<dt>M-x dbx</dt><dd><p>Ejecuta el depurador DBX.</p>
</dd>
<dt>M-x xdb</dt><dd><p>Ejecuta el depurador XDB.</p>
</dd>
<dt>M-x sdb</dt><dd><p>Ejecuta el depurador SDB.</p>
</dd>
</dl>
<p>Cada uno de estos comandos lee una línea de comandos para invocar el depurador, usando el minibúfer. El contenido inicial del minibúfer contiene el nombre del ejecutable estándar y las opciones para el depurador, y a veces también una suposición del nombre del archivo ejecutable que se desea depurar. Los comodines y variables de shell no están permitidos en esta línea de comandos. Emacs asume que el primer argumento del comando que no comienza con un “-” es el nombre del archivo ejecutable.</p>
<p>Tramp permite la depuración remota, en la que tanto el depurador como el programa que se está depurando se encuentran en el mismo host remoto. Ver Ejecutar un Depurador en un Host Remoto en el Manual de Tramp, para más detalles. Esto es independiente de la característica de depuración remota de GDB, donde el programa y el depurador se ejecutan en máquinas diferentes (ver Depurando Programas Remotos en El depurador GNU).</p>
</section>
<section id="funcionamiento-del-depurador">
<h3>28.6.2. Funcionamiento del Depurador<a class="headerlink" href="#funcionamiento-del-depurador" title="Link to this heading"></a></h3>
<p>El búfer de interacción de GUD es un búfer de Emacs que se usa para enviar comandos de texto a un subproceso del depurador, y grabar su salida. Esta es la interfaz básica para interactuar con un depurador, usada por M-x gud-gdb y otros comandos listados en Comenzando GUD. El comando M-x gdb extiende esta interfaz con búferes especializados adicionales para controlar puntos de interrupción, marcos de pila y otros aspectos del estado del depurador (vea Interfaz Gráfica GDB).</p>
<p>El búfer de interacción GUD usa una variante del modo Shell, por lo que los comandos de Emacs definidos por el modo Shell están disponibles (ver Modo Shell). El completado está disponible para la mayoría de los comandos del depurador (vea Completado), y puede usar los comandos habituales del historial del modo Shell para repetirlos. Vea Comandos del GUD, para comandos especiales que pueden usarse en el búfer de interacción del GUD.</p>
<p>Mientras depura un programa, Emacs muestra los archivos fuente relevantes visitándolos en los búferes de Emacs, con una flecha en la franja izquierda que indica la línea de ejecución actual. (En un terminal de texto, la flecha aparece como “=&gt;”, superpuesta en las dos primeras columnas de texto). Si se mueve el punto en un búfer de este tipo, la flecha no se desplaza. Es libre de editar estos archivos fuente, pero tenga en cuenta que insertar o borrar líneas desviará el posicionamiento de la flecha, ya que Emacs no tiene forma de averiguar qué línea fuente editada corresponde a la línea informada por el subproceso depurador. Para actualizar esta información, normalmente hay que recompilar y reiniciar el programa.</p>
<p>El modo GUD Tooltip es un modo global menor que añade soporte tooltip a GUD. Para activar este modo, escriba M-x gud-tooltip-mode. Está desactivado por defecto. Si está habilitado, puede mover el puntero del ratón sobre una variable, una función o una macro (colectivamente llamadas identificadores) para mostrar sus valores en tooltips (vea Tooltips). Si con sólo colocar el puntero del ratón sobre una expresión no se muestra el valor de la expresión que tenía en mente, puede decirle a Emacs más explícitamente qué expresión evaluar arrastrando el ratón sobre la expresión, y luego dejando el ratón dentro del área marcada. El modo GUD Tooltip tiene efecto en el búfer de interacción GUD, y en todos los búferes fuente con modos principales listados en la variable gud-tooltip-modes. Si la variable gud-tooltip-echo-area no es nula, o si desactivó el modo tooltip, los valores se muestran en el área de eco en lugar de un tooltip.</p>
<p>Cuando se usa el modo GUD Tooltip con M-x gud-gdb, mostrar el valor de una expresión en GDB a veces puede expandir una macro, causando potenciales efectos secundarios en el programa depurado. Por esta razón, usar tooltips en gud-gdb está deshabilitado. Si usa la interfaz M-x gdb, este problema no ocurre, ya que hay código especial para evitar efectos secundarios; además, puede mostrar definiciones de macros asociadas a un identificador cuando el programa no se está ejecutando.</p>
</section>
<section id="comandos-del-gud">
<h3>28.6.3 Comandos del GUD<a class="headerlink" href="#comandos-del-gud" title="Link to this heading"></a></h3>
<p>GUD proporciona comandos para establecer y borrar puntos de interrupción, seleccionar marcos de pila y recorrer el programa.</p>
<dl class="simple">
<dt>C-x C-a C-b</dt><dd><p>Establece un punto de interrupción en la línea fuente en la que se encuentra ese punto.</p>
</dd>
</dl>
<p>C-x C-a C-b (gud-break), cuando se invoca en un búfer fuente, establece un punto de interrupción del depurador en la línea fuente actual. Este comando sólo está disponible después de iniciar GUD. Si lo ejecuta en un búfer que no está asociado a ningún subproceso del depurador, se producirá un error.</p>
<p>Los siguientes comandos están disponibles tanto en el búfer de interacción de GUD como globalmente, pero con diferentes combinaciones de teclas. Las teclas que empiezan por C-c sólo están disponibles en el búfer de interacción GUD, mientras que las que empiezan por C-x C-a están disponibles globalmente. Algunos de estos comandos también están disponibles a través de la barra de herramientas; otros no están soportados por ciertos depuradores.</p>
<p>C-c C-l
C-x C-a C-l</p>
<blockquote>
<div><p>Muestra, en otra ventana, la última línea de origen referida en el búfer de interacción GUD (gud-refresh).</p>
</div></blockquote>
<p>C-c C-s
C-x C-a C-s</p>
<blockquote>
<div><p>Ejecuta la siguiente línea de código (gud-step). Si la línea contiene una llamada a función, la ejecución se detiene tras entrar en la función llamada.</p>
</div></blockquote>
<p>C-c C-n
C-x C-a C-n</p>
<blockquote>
<div><p>Ejecuta la siguiente línea de código, recorriendo las llamadas a funciones sin detenerse dentro de ellas (gud-next).</p>
</div></blockquote>
<p>C-c C-i
C-x C-a C-i</p>
<blockquote>
<div><p>Ejecuta una única instrucción de máquina (gud-stepi).</p>
</div></blockquote>
<p>C-c C-p
C-x C-a C-p</p>
<blockquote>
<div><p>Evalúa la expresión en el punto (gud-print). Si Emacs no imprime la expresión exacta que desea, márquela primero como región.</p>
</div></blockquote>
<p>C-c C-r
C-x C-a C-r</p>
<blockquote>
<div><p>Continúa la ejecución sin especificar ningún punto de parada. El programa se ejecutará hasta que llegue a un punto de interrupción, termine o reciba una señal que el depurador esté
comprobando (gud-cont).</p>
</div></blockquote>
<p>C-c C-d
C-x C-a C-d</p>
<blockquote>
<div><p>Borra el(los) punto(s) de interrupción en la línea fuente actual, si existe(n) (gud-remove). Si usa este comando en el búfer de interacción GUD, se aplica a la línea donde el programa
se detuvo por última vez.</p>
</div></blockquote>
<p>C-c C-t
C-x C-a C-t</p>
<blockquote>
<div><p>Establece un punto de interrupción temporal en la línea fuente actual, si existe (gud-tbreak). Si usa este comando en el búfer de interacción GUD, se aplica a la línea donde el
programa se detuvo por última vez.</p>
</div></blockquote>
<p>C-c &lt;
C-x C-a &lt;</p>
<blockquote>
<div><p>Selecciona el siguiente marco de pila adyacente (gud-up). Esto es equivalente al comando “up” de GDB.</p>
</div></blockquote>
<p>C-c &gt;
C-x C-a &gt;</p>
<blockquote>
<div><p>Selecciona el siguiente marco interior de la pila (gud-down). Esto equivale al comando “down” de GDB.</p>
</div></blockquote>
<p>C-c C-u
C-x C-a C-u</p>
<blockquote>
<div><p>Continúa la ejecución hasta la línea actual (gud-until). El programa se ejecutará hasta que llegue a un punto de interrupción, termine, reciba una señal que el depurador esté
comprobando o llegue a la línea en la que se encuentra actualmente el cursor.</p>
</div></blockquote>
<p>C-c C-f
C-x C-a C-f</p>
<blockquote>
<div><p>Ejecuta el programa hasta que el marco de pila seleccionado regrese o se detenga por alguna otra razón (gud-finish).</p>
</div></blockquote>
<p>Si usa GDB, dispone de estos enlaces de teclas adicionales:</p>
<dl class="simple">
<dt>C-x C-a C-j</dt><dd><p>Sólo útil en un búfer fuente, gud-jump transfiere el punto de ejecución del programa a la línea actual. En otras palabras, la siguiente línea que ejecute el programa será aquella en
la que diste el comando. Si la nueva línea de ejecución está en una función diferente de la anterior, GDB pide confirmación ya que los resultados pueden ser extraños. Consulte la
entrada del manual de GDB relativa a jump para más detalles.</p>
</dd>
<dt>TAB</dt><dd><p>Con GDB, completa un nombre de símbolo (gud-gdb-complete-command). Esta tecla sólo está disponible en el búfer de interacción GUD.</p>
</dd>
</dl>
<p>Estos comandos interpretan un argumento numérico como un conteo de repeticiones, cuando eso tiene sentido.</p>
<p>Debido a que TAB sirve como comando de finalización, no puede usarlo para introducir un tabulador como entrada al programa que está depurando con GDB. En su lugar, escriba C-q TAB para introducir un tabulador.</p>
</section>
<section id="personalizacion-de-gud">
<h3>28.6.4 Personalización de GUD<a class="headerlink" href="#personalizacion-de-gud" title="Link to this heading"></a></h3>
<p>Al arrancar, GUD ejecuta uno de los siguientes ganchos: gdb-mode-hook, si está usando GDB; dbx-mode-hook, si está usando DBX; sdb-mode-hook, si está usando SDB; xdb-mode-hook, si está usando XDB; guiler-mode-hook para depuración Guile REPL; perldb-mode-hook, para modo de depuración Perl; pdb-mode-hook, para PDB; jdb-mode-hook, para JDB. Véase Hooks.</p>
<p>La macro Lisp gud-def (ver Definiendo Macros en el Manual de Referencia de Emacs Lisp) proporciona una forma conveniente de definir un comando Emacs que envíe una cadena de comandos particular al depurador, y establecer una unión de teclas para en el búfer de interacción GUD:</p>
<blockquote>
<div><p>(gud-def function cmdstring binding docstring)</p>
</div></blockquote>
<p>Esto define una función con nombre de comando que envía cmdstring al proceso de depuración, y le da la cadena de documentación docstring. Puede usar la función comando en cualquier búfer. Si binding no es nulo, gud-def también vincula el comando a C-c binding en el modo del búfer GUD y a C-x C-a binding en general.</p>
<p>La cadena de comandos cmdstring puede contener ciertas secuencias “%” que representan datos que deben rellenarse en el momento en que se llama a la función:</p>
<dl>
<dt>%f</dt><dd><p>El nombre del archivo fuente actual. Si el búfer actual es el búfer GUD, entonces el archivo fuente actual es el archivo en el que se detuvo el programa.</p>
</dd>
<dt>%l</dt><dd><p>El número de la línea fuente actual. Si el búfer actual es el búfer GUD, entonces la línea fuente actual es la línea en la que se detuvo el programa.</p>
</dd>
<dt>%e</dt><dd><p>En el modo transient-mark, el texto de la región, si está activa. En caso contrario, el texto del lvalor C o de la expresión de llamada a función en el punto o adyacente a él.</p>
</dd>
<dt>%a</dt><dd><p>El texto de la dirección hexadecimal en o adyacente al punto.</p>
</dd>
<dt>%p</dt><dd><p>El argumento numérico de la función llamada, como número decimal. Si el comando se usa sin argumento numérico, “%p” representa la cadena vacía.</p>
<p>Si no usa “%p” en la cadena de comandos, el comando que defina ignorará cualquier argumento numérico.</p>
</dd>
<dt>%d</dt><dd><p>El nombre del directorio del archivo fuente actual.</p>
</dd>
<dt>%c</dt><dd><p>Nombre de clase completamente cualificado derivado de la expresión que rodea al punto (sólo jdb).</p>
</dd>
</dl>
</section>
<section id="interfaz-grafica-de-gdb">
<h3>28.6.5. Interfaz Gráfica de GDB<a class="headerlink" href="#interfaz-grafica-de-gdb" title="Link to this heading"></a></h3>
<p>El comando M-x gdb inicia GDB en una interfaz tipo IDE, con búferes especializados para controlar puntos de ruptura, marcos de pila y otros aspectos del estado del depurador. También proporciona formas adicionales de controlar la sesión de depuración con el ratón, como hacer clic en el borde de un búfer fuente para establecer allí un punto de interrupción.</p>
<p>Para ejecutar GDB usando sólo la interfaz del búfer de interacción GUD, sin estas características adicionales, use M-x gud-gdb (vea Iniciando GUD).</p>
<p>Internamente, M-x gdb informa a GDB que el tamaño de su pantalla es ilimitado; para un correcto funcionamiento, no debe cambiar los valores de altura y anchura de la pantalla de GDB durante la sesión de depuración.</p>
<section id="disposicion-de-la-interfaz-de-usuario-gdb">
<h4>28.6.5.1. Disposición de la Interfaz de Usuario GDB<a class="headerlink" href="#disposicion-de-la-interfaz-de-usuario-gdb" title="Link to this heading"></a></h4>
<p>Si la variable gdb-many-windows es nil (por defecto), M-x gdb normalmente muestra sólo el búfer de interacción GUD. Sin embargo, si la variable gdb-show-main tampoco es nula, se inicia con dos ventanas: una mostrando el búfer de interacción GUD, y la otra mostrando el código fuente de la función principal del programa que está depurando.</p>
<p>Si gdb-many-windows es no nil, entonces M-x gdb muestra el siguiente diseño de marco:</p>
<blockquote>
<div></div></blockquote>
<p>Puede personalizar el diseño de la ventana basado en el anterior y guardar ese diseño en un archivo usando gdb-save-window-configuration. Luego puede cargar este diseño de nuevo usando gdb-load-window-configuration. (Internamente, Emacs usa el término configuración de ventana en lugar de disposición de ventana). Puede establecer su diseño personalizado como el predeterminado usado por gdb-many-windows personalizando gdb-default-window-configuration-file. Si no es un nombre de archivo absoluto, GDB busca el archivo en gdb-window-configuration-directory. gdb-window-configuration-directory por defecto es user-emacs-directory (vea Cómo encuentra Emacs su archivo Init).</p>
<p>Si alguna vez cambia la distribución de ventanas, puede restaurar la distribución por defecto tecleando M-x gdb-restore-windows. Para alternar entre la distribución de muchas ventanas y una distribución simple con sólo el búfer de interacción GUD y un archivo fuente, escriba M-x gdb-many-windows.</p>
<p>Si tiene una configuración de ventanas elaborada, y no quiere que gdb-many-windows la interrumpa, es mejor invocar M-x gdb en un marco separado para empezar, entonces la disposición de las ventanas en su marco original no se verá afectada. Un marco separado para las sesiones de GDB puede ser especialmente útil si trabaja en un terminal en modo texto, donde el espacio de pantalla para las ventanas puede ser escaso. Si elige iniciar GDB en el mismo marco, considere establecer gdb-restore-window-configuration-after-quit a un valor no nulo. Su diseño original será entonces restaurado después de que GDB se cierre. Use t para restaurar siempre; use if-gdb-many-windows para restaurar sólo cuando gdb-many-windows sea distinto de cero; use if-gdb-show-main para restaurar sólo cuando gdb-show-main sea distinto de cero.</p>
<p>También puede especificar búferes adicionales relacionados con GDB para mostrar, ya sea en el mismo marco o en uno diferente. Seleccione los búferes que desee escribiendo M-x gdb-display-buffertype-buffer o M-x gdb-frame-buffertype-buffer, donde buffertype es el tipo de búfer relevante, como “breakpoints” o “io”. Puede hacer lo mismo desde la barra de menús, con los submenús “GDB-Windows” y “GDB-Frames” del menú “GUD”.</p>
<p>Por defecto, GDB usa como máximo una ventana para mostrar el archivo fuente. Puede hacer que use más ventanas personalizando gdb-max-source-window-count. También puede personalizar gdb-display-source-buffer-action para controlar como GDB muestra los archivos fuente.</p>
<p>Cuando termine de depurar, elimine el búfer de interacción GUD con C-x k, que también eliminará todos los búferes asociados con la sesión. Sin embargo, no necesita hacer esto si, después de editar y recompilar su código fuente dentro de Emacs, desea continuar depurando. Cuando reinicie la ejecución, GDB encontrará automáticamente el nuevo ejecutable. Mantener el búfer de interacción GUD tiene la ventaja de mantener el historial del shell así como los puntos de interrupción de GDB. Es necesario comprobar que los puntos de interrupción de los archivos fuente editados recientemente siguen estando en los lugares correctos.</p>
</section>
<section id="buferes-fuente">
<h4>28.6.5.2 Búferes Fuente<a class="headerlink" href="#buferes-fuente" title="Link to this heading"></a></h4>
<dl class="simple">
<dt>ratón-1 (en el margen)</dt><dd><p>Establece o borra un punto de interrupción en esa línea (gdb-mouse-set-clear-breakpoint).</p>
</dd>
<dt>C-ratón-1 (en el margen)</dt><dd><p>Activa o desactiva un «punto de interrupción» (breakpoint) en esa línea (gdb-mouse-toggle-breakpoint-margin).</p>
</dd>
<dt>ratón-3 (en el margen)</dt><dd><p>Continúa la ejecución hasta esa línea (gdb-mouse-until).</p>
</dd>
<dt>C-ratón-3 (en el margen)</dt><dd><p>Salta a esa línea (gdb-mouse-jump).</p>
</dd>
</dl>
<p>En una pantalla gráfica, puede hacer clic con el ratón-1 en el margen de un búfer fuente, para establecer un punto de interrupción en esa línea (ver Márgenes de la Ventana). Aparecerá un punto rojo en la franja donde haya hecho clic. Si ya existe un punto de interrupción allí, el clic lo elimina. Un clic con C-ratón-1 activa o desactiva un punto de interrupción existente; un punto de interrupción desactivado, pero no desactivado, se indica con un punto gris.</p>
<p>En un terminal de texto, o cuando los márgenes están desactivados, los puntos de interrupción activados se indican con un carácter “B” en el margen izquierdo de la ventana. Los puntos de interrupción desactivados se indican con una “b”. (El margen sólo se muestra si hay un punto de interrupción presente).</p>
<p>Una flecha sólida en la franja izquierda de un búfer fuente indica la línea del marco más interno donde se ha detenido el programa depurado. Una flecha hueca indica la línea de ejecución actual de un marco superior. Si arrastra la flecha de la franja con ratón-1, la ejecución avanzará hasta la línea en la que suelte el botón. Alternativamente, puede hacer clic con el ratón-3 en la franja para avanzar a esa línea. Puede pulsar C-ratón-3 en la franja para saltar a esa línea sin ejecutar las líneas intermedias. Este comando le permite ir hacia atrás, lo que puede ser útil para recorrer código que ya se ha ejecutado, con el fin de examinar su ejecución con más detalle.</p>
<p>Por defecto, los nombres de archivos fuente y las cadenas no ASCII del programa que se está depurando se decodifican usando el sistema de codificación por defecto. Si prefiere una decodificación diferente, quizás porque el programa que está siendo depurado usa una codificación de caracteres diferente, establezca la variable gdb-mi-decode-strings al sistema de codificación apropiado, o a nil para dejar los caracteres no ASCII como escapes octales sin decodificar.</p>
</section>
<section id="bufer-de-puntos-de-interrupcion">
<h4>28.6.5.3. Búfer de puntos de interrupción<a class="headerlink" href="#bufer-de-puntos-de-interrupcion" title="Link to this heading"></a></h4>
<p>El búfer de puntos de interrupción del GDB muestra los puntos de interrupción, los puntos de control y los puntos de captura en la sesión del depurador. Ver Puntos de Interrupción en El depurador GNU. Proporciona los siguientes comandos, que en su mayoría se aplican al punto de interrupción actual (el punto de interrupción en el que se encuentra el punto):</p>
<dl class="simple">
<dt>SPC</dt><dd><p>Activa/desactiva el punto de interrupción actual (gdb-toggle-breakpoint). En una visualización gráfica, esto cambia el color del punto en la franja del búfer fuente en esa línea. El
punto es rojo cuando el punto de interrupción está activado, y gris cuando está desactivado.</p>
</dd>
<dt>D</dt><dd><p>Elimina el punto de interrupción actual (gdb-delete-breakpoint).</p>
</dd>
<dt>RET</dt><dd><p>Visita la línea fuente del punto de interrupción actual (gdb-goto-breakpoint).</p>
</dd>
<dt>ratón-2</dt><dd><p>Visita la línea fuente del punto de interrupción sobre el que ha hecho clic (gdb-goto-breakpoint).</p>
</dd>
</dl>
<p>Cuando gdb-many-windows es distinto de nil, el búfer GDB Breakpoints comparte su ventana con el búfer GDB Threads. Para cambiar de una a otra pulse con el ratón-1 sobre el botón correspondiente en la línea de cabecera. Si gdb-show-threads-by-default es distinto de nil, el búfer GDB Threads es el que se muestra por defecto.</p>
</section>
<section id="bufer-de-hilos-threads">
<h4>28.6.5.4. Búfer de Hilos (Threads)<a class="headerlink" href="#bufer-de-hilos-threads" title="Link to this heading"></a></h4>
<p>El búfer de hilos del GDB muestra un resumen de los hilos en el programa depurado. Ver Depurando Programas con Múltiples Hilos en El depurador GNU. Para seleccionar un hilo, mueva el punto allí y pulse RET (gdb-select-thread), o haga clic sobre él con el ratón-2. Esto también muestra el búfer fuente asociado, y actualiza el contenido de los otros búferes GDB.</p>
<p>Puede personalizar las variables del grupo gdb-buffers para seleccionar los campos incluidos en el búfer GDB Threads.</p>
<dl class="simple">
<dt>gdb-thread-buffer-verbose-names</dt><dd><p>Muestra nombres de hilos largos como “Thread 0x4e2ab70 (LWP 1983)”.</p>
</dd>
<dt>gdb-thread-buffer-arguments</dt><dd><p>Muestra los argumentos de los marcos superiores de hilo.</p>
</dd>
<dt>gdb-thread-buffer-locations</dt><dd><p>Muestra la información de los archivos o los nombres de las bibliotecas.</p>
</dd>
<dt>gdb-thread-buffer-addresses</dt><dd><p>Muestra las direcciones de los marcos de los hilos en el búfer de hilos.</p>
</dd>
</dl>
<p>Para ver información de varios hilos simultáneamente, use los siguientes comandos desde el búfer de hilos GDB.</p>
<dl class="simple">
<dt>d</dt><dd><p>Muestra el búfer de desensamblado para el hilo en la línea actual (gdb-display-disassembly-for-thread).</p>
</dd>
<dt>f</dt><dd><p>Muestra el búfer de pila GDB para el subproceso en la línea actual (gdb-display-stack-for-thread).</p>
</dd>
<dt>l</dt><dd><p>Muestra el búfer de GDB Locals para el subproceso en la línea actual (gdb-display-locals-for-thread).</p>
</dd>
<dt>r</dt><dd><p>Muestra el búfer de registros GDB para el subproceso en la línea actual (gdb-display-registers-for-thread).</p>
</dd>
</dl>
<p>Sus homólogos en mayúsculas, D, F ,L y R, muestran el búfer correspondiente en un nuevo marco.</p>
<p>Cuando se puede crear un búfer que muestre información sobre un subproceso específico, se vincula a ese subproceso y sigue mostrando la información real mientras se depura el programa. El indicador de modo de cada búfer GDB muestra el número de la hebra cuya información muestra ese búfer. El número de subproceso también se incluye en el nombre de cada búfer vinculado.</p>
<p>Hay más comandos disponibles en el búfer de hilos GDB que dependen del modo de GDB que se usa para controlar la ejecución de su programa. Ver Depuración Multihilo.</p>
</section>
<section id="bufer-de-pila">
<h4>28.6.5.5. Búfer de pila<a class="headerlink" href="#bufer-de-pila" title="Link to this heading"></a></h4>
<p>El búfer de pila del GDB muestra una pila de llamadas, con una línea para cada una de las llamadas a subrutinas anidadas (marcos de pila) en la sesión del depurador. Ver Trazas Anteriores (Backtraces) en El depurador GNU.</p>
<p>En pantallas gráficas, el marco de pila seleccionado se indica con una flecha en el borde. En terminales de texto, o cuando los flecos están desactivados, el marco de pila seleccionado se muestra en contraste inverso. Para seleccionar un marco de pila, mueva el punto en su línea y escriba RET (gdb-frames-select), o haga clic con el ratón-2 sobre él. Al hacerlo, también se actualiza el búfer Locals (véase Otros búferes GDB).</p>
<p>Si desea que la dirección del marco se muestre en cada marco de pila, personalice la variable gdb-stack-buffer-addresses a un valor no nulo.</p>
</section>
<section id="otros-buferes-gdb">
<h4>28.6.5.6. Otros Búferes GDB<a class="headerlink" href="#otros-buferes-gdb" title="Link to this heading"></a></h4>
<p>Otros búferes proporcionados por M-x gdb cuya visualización puede solicitar opcionalmente incluyen:</p>
<dl>
<dt>Búfer de variables locales</dt><dd><p>Este búfer muestra los valores de las variables locales del marco de pila actual para tipos de datos simples (ver Información Sobre un Marco en El depurador GNU). Pulsa RET o haz clic
con el ratón-2 sobre el valor si quiere editarlo.</p>
<p>Las matrices y estructuras sólo muestran su tipo. Con GDB 6.4 o posterior, puede examinar el valor de la variable local en el punto tecleando RET, o con un clic de ratón-2. Con
versiones anteriores de GDB, usar RET o mouse-2 en la descripción del tipo (“[struct/union]” o “[array]”). Ver Watch Expressions.</p>
<p>Para mostrar el búfer Locals, escriba M-x gdb-display-locals-buffer.</p>
</dd>
<dt>Búfer de E/S</dt><dd><p>Si el programa que está depurando usa flujos de entrada y salida estándar para interactuar con el Usuario, o emite una cantidad significativa de salida a su salida estándar, puede que
desee separar su E/S de la interacción con GDB. Usa el comando M-x gdb-display-io-buffer para mostrar una ventana con un búfer al que Emacs redirige la entrada y salida del programa
que estás depurando.</p>
</dd>
<dt>Búfer de Registros</dt><dd><p>Este búfer muestra los valores contenidos en los registros (ver Registros en El depurador GNU). Solicite la visualización de este búfer con el comando M-x
gdb-display-registers-buffer. Pulse RET o haga clic con el ratón-2 en un registro si desea editar su valor. Con GDB 6.4 o posterior, los valores de registro recientemente cambiados se
muestran con font-lock-warning-face.</p>
</dd>
<dt>Búfer de ensamblador</dt><dd><p>El búfer de ensamblador muestra el marco actual como código máquina. Una flecha señala la instrucción actual, y puede establecer y eliminar puntos de interrupción como en un búfer
fuente. También aparecen iconos de puntos de interrupción en la franja o margen. Para solicitar la visualización de este búfer, use M-x gdb-display-disassembly-buffer.</p>
</dd>
<dt>Búfer de Memoria</dt><dd><p>El búfer de memoria le permite examinar secciones de la memoria del programa (vea Examinar la memoria en El depurador GNU). Haga clic con el ratón-1 en la parte apropiada de la línea
de cabecera para cambiar la dirección de inicio o el número de elementos de datos que muestra el búfer. Alternativamente, use S o N respectivamente. Haga clic con el ratón-3 en la
línea de encabezado para seleccionar el formato de visualización o el tamaño de la unidad para estos elementos de datos. Usar M-x gdb-display-memory-buffer para solicitar la
visualización de este búfer.</p>
</dd>
</dl>
<p>Cuando gdb-many-windows es distinto de cero, el búfer local comparte su ventana con el búfer de registros, al igual que los puntos de interrupción y los búferes de hilos. Para cambiar de uno a otro, haga clic con el ratón-1 en el botón correspondiente de la línea de cabecera.</p>
</section>
<section id="observa-las-expresiones">
<h4>28.6.5.7 Observa las Expresiones<a class="headerlink" href="#observa-las-expresiones" title="Link to this heading"></a></h4>
<p>Si desea ver cómo cambia una variable cada vez que su programa se detiene, mueva el punto en el nombre de la variable y haga clic en el icono watch de la barra de herramientas (gud-watch) o escriba C-x C-a C-w. Si especifica un argumento prefijo, puede introducir el nombre de la variable en el minibúfer.</p>
<p>Cada expresión del reloj se muestra en la barra de velocidad (véase Marcos de Speedbar). Los tipos de datos complejos, como matrices, estructuras y uniones, se representan en formato de árbol. Las hojas y los tipos de datos simples muestran el nombre de la expresión y su valor y, cuando se selecciona el marco de la barra de velocidad, muestran el tipo como información sobre herramientas. Los niveles superiores muestran el nombre, el tipo y el valor de la dirección para los punteros y sólo el nombre y el tipo en caso contrario. Las expresiones raíz también muestran la dirección del marco como información sobre herramientas para ayudar a identificar el marco en el que se definieron.</p>
<p>Para expandir o contraer un tipo de dato complejo, haga clic con el ratón-2 o pulse SPC en la etiqueta a la izquierda de la expresión. Emacs pide confirmación antes de expandir la expresión si su número de hijos inmediatos excede el valor de la variable gdb-max-children.</p>
<p>Para borrar una expresión de reloj compleja, mueva el punto a la expresión raíz en la barra de velocidad y teclee D (gdb-var-delete).</p>
<p>Para editar una variable con un tipo de datos simple, o un elemento simple de un tipo de datos complejo, mueva el punto allí en la barra de velocidad y escriba RET (gdb-edit-value). O puede hacer clic con el ratón-2 en un valor para editarlo. De cualquier manera, esto lee el nuevo valor usando el minibúfer.</p>
<p>Si establece la variable gdb-show-changed-values a no nil (el valor por defecto), Emacs usa font-lock-warning-face para resaltar los valores que han cambiado recientemente y shadow face para hacer que las variables que han salido del ámbito sean menos perceptibles. Cuando una variable sale del ámbito no se puede editar su valor.</p>
<p>Si la variable gdb-delete-out-of-scope es distinta de nil (el valor por defecto), Emacs borra automáticamente las expresiones watch que salen de ámbito. A veces, cuando su programa vuelve a entrar en la misma función muchas veces, puede ser útil establecer este valor a nil para no tener que volver a crear la expresión de observación.</p>
<p>Si la variable gdb-use-colon-colon-notation no es nula, Emacs usa el formato “function::variable”. Esto permite al Usuario mostrar expresiones de reloj que comparten el mismo nombre de variable. El valor por defecto es nil.</p>
<p>Para subir automáticamente el acelerador cada vez que se actualiza la visualización de las expresiones de control, establezca gdb-speedbar-auto-raise a no-nil. Esto puede ser útil si está depurando con un marco Emacs a pantalla completa.</p>
</section>
<section id="depuracion-multihilo">
<h4>28.6.5.8. Depuración Multihilo<a class="headerlink" href="#depuracion-multihilo" title="Link to this heading"></a></h4>
<p>En el modo all-stop de GDB, cuando su programa se detiene, son detenidos todos los hilos de ejecución. Del mismo modo, cuando reinicia el programa, todos los hilos comienzan a ejecutarse. Vea Modo Todo Parada (All-Stop Mode) en El depurador GNU (The GNU debugger). Para algunos objetivos multihilo, GDB soporta un modo adicional de operación, llamado modo sin parada, en el cual puede examinar hilos de programa detenidos en el depurador mientras otros hilos continúan ejecutándose libremente. Vea Modo Sin Parada en El depurador GNU. Las versiones de GDB anteriores a la 7.0 no soportan el modo non-stop, y no funciona en todos los sistemas.</p>
<p>La variable gdb-non-stop-setting determina si Emacs ejecuta GDB en modo all-stop o en modo non-stop. El valor por defecto es t, lo que significa que intenta usar el modo non-stop si está disponible. Si cambia el valor a nil, o si el modo non-stop no está disponible, Emacs ejecuta GDB en modo all-stop. La variable tiene efecto cuando Emacs comienza una sesión de depuración; si cambias su valor, debes reiniciar cualquier sesión de depuración activa.</p>
<p>Cuando un hilo se detiene en modo non-stop, Emacs normalmente cambia a ese hilo. Si no desea que Emacs haga este cambio si otro hilo detenido ya está seleccionado, cambie la variable gdb-switch-when-another-stopped a nil.</p>
<p>Emacs puede decidir si cambiar o no al hilo detenido dependiendo de la razón que causó la parada. Personalice la variable gdb-switch-reasons para seleccionar las razones de parada que causarán un cambio de hilo.</p>
<p>La variable gdb-stopped-functions le permite ejecutar sus funciones siempre que algún hilo se detenga.</p>
<p>En modo non-stop, puede cambiar entre diferentes modos para los comandos de control de ejecución de GUD</p>
<dl class="simple">
<dt>Non-stop/A</dt><dd><p>Cuando gdb-gud-control-all-threads es t (el valor por defecto), los comandos de interrupción y continuación se aplican a todos los hilos, por lo que puede detener o continuar todos
sus hilos con un solo comando usando gud-stop-subjob y gud-cont, respectivamente. El botón “Ir” se muestra en la barra de herramientas cuando al menos un hilo está detenido, mientras
que el botón “Stop” (Detener) se muestra cuando al menos un hilo está en ejecución.</p>
</dd>
<dt>Non-stop/T</dt><dd><p>Cuando gdb-gud-control-all-threads es nil, sólo se detiene/continúa el hilo actual. Los botones “Go” y “Stop” de la barra de herramientas de GUD se muestran dependiendo del estado del
hilo actual.</p>
</dd>
</dl>
<p>Puede cambiar el valor actual de gdb-gud-control-all-threads desde la barra de herramientas o desde el menú “GUD-&gt;GDB-MI”.</p>
<p>Los comandos de paso siempre se aplican al hilo actual.</p>
<p>En modo non-stop, puede interrumpir/continuar los hilos sin seleccionarlos. Pulsando i en el búfer de hilos se interrumpe el hilo en cuestión, c lo continúa, s lo atraviesa. Es posible que en el futuro se añadan más comandos de este tipo.</p>
<p>Tenga en cuenta que cuando interrumpe un hilo, se detiene con la razón “señal recibida”. Si esa razón está incluida en tu gdb-switch-reasons (lo está por defecto), Emacs cambiará a ese hilo.</p>
</section>
</section>
</section>
<section id="ejecucion-de-expresiones-lisp">
<h2>28.7. Ejecución de Expresiones Lisp<a class="headerlink" href="#ejecucion-de-expresiones-lisp" title="Link to this heading"></a></h2>
<p>Emacs tiene modos principales para varias variantes de Lisp. Usan los mismos comandos de edición que otros modos de lenguajes de programación (véase Edición de Programas). Además, proporcionan comandos especiales para ejecutar expresiones Lisp.</p>
<dl class="simple">
<dt>Emacs Lisp Mode (modo Emacs Lisp)</dt><dd><p>El modo para editar archivos fuente Emacs Lisp. Define C-M-x para evaluar la expresión Lisp de nivel superior actual. Véase Evaluación de Expresiones Emacs Lisp.</p>
</dd>
<dt>Lisp Interaction mode (modo de Interacción Lisp)</dt><dd><p>El modo para una sesión interactiva de Emacs Lisp. Define C-j para evaluar la expresión antes de punto e insertar su valor en el búfer. Véase Búferes de Interacción Lisp.</p>
</dd>
<dt>Lisp mode (modo Lisp)</dt><dd><p>El modo para editar archivos fuente de programas que se ejecutan en Lisps distintos de Emacs Lisp. Define C-M-x para evaluar la expresión de nivel superior actual en un Lisp externo.
Véase Ejecutar un Lisp externo.</p>
</dd>
<dt>Inferior Lisp Mode (modo inferior Lisp)</dt><dd><p>El modo para una sesión interactiva con un Lisp externo que está siendo ejecutado como un subproceso (o proceso inferior) de Emacs. Ver Ejecutando un Lisp Externo.</p>
</dd>
<dt>Scheme mode</dt><dd><p>Como el modo Lisp, pero para programas Scheme.</p>
</dd>
<dt>Inferior Scheme mode</dt><dd><p>Como el modo Inferior de Lisp, pero para Scheme.</p>
</dd>
</dl>
</section>
<section id="bibliotecas-de-codigo-lisp-para-emacs">
<h2>28.8 Bibliotecas de Código Lisp para Emacs<a class="headerlink" href="#bibliotecas-de-codigo-lisp-para-emacs" title="Link to this heading"></a></h2>
<p>El código Lisp de Emacs se almacena en archivos cuyos nombres terminan convencionalmente en .el. Tales archivos se visitan automáticamente en el modo Emacs Lisp.</p>
<p>El código Emacs Lisp puede compilarse en código byte, que se carga más rápido, ocupa menos espacio y se ejecuta más rápido. Por convención, el código Emacs Lisp compilado va en un archivo separado cuyo nombre termina en “.elc”. Por ejemplo, el código compilado para foo.el va en foo.elc. Ver Compilación de Bytes en el Manual de Referencia de Emacs Lisp.</p>
<p>El código Emacs Lisp también puede compilarse en código nativo: código máquina no muy diferente del producido por un compilador C o Fortran. El código nativo se ejecuta incluso más rápido que el código byte. El código Emacs Lisp compilado nativamente se almacena en archivos cuyos nombres terminan en “.eln”. Véase Compilación nativa en el Manual de referencia de Emacs Lisp.</p>
<p>Para cargar un archivo Emacs Lisp, escriba M-x load-file. Este comando lee un nombre de archivo usando el minibúfer, y ejecuta el contenido de ese archivo como código Emacs Lisp. No es necesario visitar el archivo primero; este comando lee el archivo directamente del disco, no de un búfer Emacs existente.</p>
<p>Si un archivo Emacs Lisp está instalado en la ruta de carga de Emacs Lisp (definida más abajo), puede cargarlo tecleando M-x load-library, en lugar de usar M-x load-file. La orden M-x load-library pide un nombre de biblioteca en lugar de un nombre de fichero; busca en cada directorio de la ruta de carga de Emacs Lisp, intentando encontrar un archivo que coincida con ese nombre de biblioteca. Si el nombre de la biblioteca es “foo”, intenta buscar archivos llamados foo.elc, foo.el, y foo. (Si Emacs fue construido con la compilación nativa activada, load-library busca un archivo “.eln” que corresponda a foo.el y lo carga en lugar de foo.elc). El comportamiento por defecto es cargar el primer archivo encontrado. Este comando prefiere los archivos .eln a los archivos .elc, y prefiere los archivos .elc a los archivos .el, porque los archivos compilados se cargan y ejecutan más rápido. Si encuentra que lib.el es más reciente que lib.elc, emite una advertencia, en caso de que alguien haya hecho cambios en el archivo .el y haya olvidado recompilarlo, pero carga el archivo .elc de todos modos. (Debido a este comportamiento, puede guardar ediciones inacabadas en los archivos fuente de Emacs Lisp, y no recompilar hasta que sus cambios estén listos para usar). Sin embargo, si establece la opción load-prefer-newer a un valor no nulo, entonces en lugar del procedimiento descrito anteriormente, Emacs carga cualquier versión del archivo que sea más reciente. Si Emacs fue construido con compilación nativa, y no puede encontrar el archivo “.eln” correspondiente a lib.el, cargará un lib.elc e iniciará la compilación nativa de lib.el en segundo plano, luego cargará el archivo “.eln” cuando termine la compilación.</p>
<p>Los programas Emacs Lisp suelen cargar archivos Emacs Lisp usando la función load. Es similar a load-library, pero es de nivel inferior y acepta argumentos adicionales. Vea Cómo Cargan los Programas en el Manual de Referencia de Emacs Lisp.</p>
<p>La ruta de carga de Emacs Lisp se especifica mediante la variable load-path. Su valor debe ser una lista de directorios (cadenas). Estos directorios son buscados, en el orden especificado, por la orden M-x load-library, la función load de nivel inferior, y otras funciones de Emacs que encuentran bibliotecas Emacs Lisp. Una entrada en load-path también puede tener el valor especial nil, que representa el directorio actual por defecto, pero casi siempre es una mala idea usarlo, porque su significado dependerá del búfer que esté activo cuando load-path sea usado por Emacs. (Si se encuentra con que desearía que nil estuviera en la lista, lo más probable es que lo que realmente quiera sea usar M-x load-file).</p>
<p>El valor por defecto de load-path es una lista de directorios donde se almacena el código Lisp del propio Emacs. Si tiene bibliotecas propias en otro directorio, puede añadir ese directorio a la ruta de carga. A diferencia de la mayoría de las otras variables descritas en este manual, load-path no puede cambiarse a través de la interfaz Customize (ver Interfaz de Personalización Fácil), pero puedes añadirle un directorio poniendo una línea como esta en tu archivo init (ver El Archivo de Inicialización de Emacs):</p>
<blockquote>
<div><p>(add-to-list “load-path «/path/to/my/lisp/library»)</p>
</div></blockquote>
<p>Es habitual colocar las bibliotecas instaladas localmente en el directorio site-lisp que ya está en el valor por defecto de load-path, o en algún subdirectorio de site-lisp. De esta forma, no es necesario modificar el valor por defecto de load-path.</p>
<p>De forma similar a load-path, la lista de directorios donde Emacs busca archivos <a href="#id3"><span class="problematic" id="id4">*</span></a>.eln con código Lisp compilado nativamente se especifica mediante la variable native-comp-eln-load-path.</p>
<p>Algunos comandos se cargan automáticamente; cuando los ejecuta, Emacs carga primero la biblioteca asociada. Por ejemplo, el comando de compilación M-x (ver Ejecutar Compilaciones en Emacs) es autocargado; si lo invoca, Emacs carga automáticamente la biblioteca de compilación primero. Por el contrario, el comando M-x recompile no está autocargado, por lo que no está disponible hasta que cargue la biblioteca de compilación.</p>
<p>La carga automática también puede ocurrir cuando busca la documentación de un comando autocargado (vea Ayuda por Comando o Nombre de Variable), si la documentación se refiere a otras funciones y variables en su biblioteca (cargar la biblioteca permite a Emacs configurar correctamente los hipervínculos en el búfer <em>Help</em>). Para desactivar esta función, cambie la variable help-enable-autoload a nil.</p>
<p>La carga automática también ocurre cuando se completan los nombres para describe-variable y describe-función, basándose en el prefijo que se está completando. Para desactivar esta función, cambie la variable help-enable-completion-autoload a nil.</p>
<p>Una vez que haya puesto su biblioteca en un directorio donde Emacs pueda encontrarla y cargarla, puede que desee hacerla disponible al inicio. Esto es útil cuando la biblioteca define características que deberían estar disponibles automáticamente bajo demanda, y cargar manualmente la biblioteca es por tanto inconveniente. En estos casos, asegúrese de que la biblioteca se cargará añadiendo las formas adecuadas a su archivo init: load o require (si siempre necesita cargar la biblioteca al inicio), o autoload si necesita que Emacs cargue la biblioteca cuando se invoque algún comando o función. Por ejemplo:</p>
<blockquote>
<div><dl class="simple">
<dt>;; Carga my-shining-package.elc incondicionalmente.</dt><dd><p>(require “mi-paquete-brillante)</p>
</dd>
<dt>;; Cargará mi-paquete-brillante.elc cuando se invoque a mi-func.</dt><dd><p>(autoload “mi-func «mi-paquete-brillante»)</p>
</dd>
</dl>
</div></blockquote>
<p>Tenga en cuenta que instalar un paquete usando package-install (ver Instalación de Paquetes) se encarga de colocar los archivos Lisp del paquete en un directorio donde Emacs los encuentre, y también escribe el código de inicialización necesario en sus archivos init, haciendo innecesarias las personalizaciones manuales anteriores.</p>
</section>
<section id="evaluacion-de-expresiones-emacs-lisp">
<h2>28.9. Evaluación de Expresiones Emacs Lisp<a class="headerlink" href="#evaluacion-de-expresiones-emacs-lisp" title="Link to this heading"></a></h2>
<p>El modo Emacs Lisp es el modo principal para editar Emacs Lisp. Su comando de modo es M-x emacs-lisp-mode.</p>
<p>Emacs proporciona varios comandos para evaluar expresiones Emacs Lisp. Puedes usar estos comandos en modo Emacs Lisp, para probar tu código Emacs Lisp mientras se escribe. Por ejemplo, después de reescribir una función, puede evaluar la definición de la función para que tenga efecto en las siguientes llamadas a la función. Estos comandos también están disponibles globalmente, y pueden usarse fuera del modo Emacs Lisp.</p>
<dl class="simple">
<dt>M-:</dt><dd><p>Lee una única expresión Emacs Lisp en el minibúfer, la evalúa e imprime el valor en el área de eco (eval-expression).</p>
</dd>
<dt>C-x C-e</dt><dd><p>Evalúa la expresión Emacs Lisp anterior a punto, e imprime el valor en el área de eco (eval-last-sexp).</p>
</dd>
</dl>
<p>C-M-x (in Emacs Lisp mode)
M-x eval-defun</p>
<blockquote>
<div><p>Evalúa el defun que contiene o después del punto, e imprime el valor en el área de eco (eval-defun).</p>
</div></blockquote>
<dl class="simple">
<dt>M-x eval-region</dt><dd><p>Evalúa todas las expresiones Emacs Lisp de la región.</p>
</dd>
<dt>M-x eval-buffer</dt><dd><p>Evalúa todas las expresiones Emacs Lisp del búfer.</p>
</dd>
</dl>
<p>M-: (eval-expression) lee una expresión usando el minibúfer, y la evalúa. (Antes de evaluar la expresión, el búfer actual vuelve al búfer que había cuando tecleó M-:, no al minibúfer en el que tecleó la expresión).</p>
<p>El comando C-x C-e (eval-last-sexp) evalúa la expresión Emacs Lisp que precede al punto en el búfer, y muestra el valor en el área de eco. Cuando el resultado de una evaluación es un entero, se muestra junto con el valor en otros formatos (octal, hexadecimal y carácter si eval-expression-print-maximum-character, descrito más adelante, lo permite).</p>
<p>Si M-: o C-x C-e recibe un argumento prefijo, inserta el valor en el búfer actual en el punto, en lugar de mostrarlo en el área de eco. Si el argumento prefijo es cero, cualquier salida entera se inserta junto con su valor en otros formatos (octal, hexadecimal y carácter). Un argumento prefijo de este tipo también evita la abreviación de la salida según las variables eval-expression-print-level y eval-expression-print-length (véase más adelante). Del mismo modo, un argumento de prefijo -1 anula el efecto de eval-expression-print-length.</p>
<p>C-x C-e (eval-last-sexp) trata las expresiones defvar de forma especial. Normalmente, evaluar una expresión defvar no hace nada si la variable que define ya tiene un valor. Pero este comando reinicia incondicionalmente la variable al valor inicial especificado por defvar; esto es conveniente para depurar programas Emacs Lisp. Las expresiones defcustom y defface se tratan de forma similar. Tenga en cuenta que los otros comandos documentados en esta sección, excepto eval-defun, no tienen esta característica especial.</p>
<p>El comando eval-defun está vinculado a C-M-x en modo Emacs Lisp. Evalúa la expresión Lisp de nivel superior que contiene o sigue al punto, e imprime el valor en el área de eco. En este contexto, una expresión de nivel superior se denomina «defun», pero no tiene por qué ser un defun real (definición de función).</p>
<p>Este comando maneja las formas defvar/defcustom/defface del mismo modo que eval-last-sexp.</p>
<p>Con un argumento prefijo, C-M-x instrumenta la definición de función para Edebug, el depurador de Emacs Lisp. Ver Instrumentación para Edebug en el Manual de Referencia de Emacs Lisp.</p>
<p>El comando M-x eval-region analiza el texto de la región como una o más expresiones Lisp, evaluándolas una a una. M-x eval-buffer es similar pero evalúa todo el búfer.</p>
<p>Las opciones eval-expression-print-level y eval-expression-print-length controlan la profundidad y longitud máximas de las listas que se imprimirán en el resultado de los comandos de evaluación antes de abreviarlos. Si se proporciona un argumento de prefijo cero a eval-expression o eval-last-sexp, las listas se imprimen completas. eval-expression-debug-on-error controla si los errores de evaluación invocan al depurador cuando se usan estos comandos; su valor por defecto es t. eval-expression-print-maximum-character evita que los enteros que sean mayores que él se muestren como caracteres.</p>
</section>
<section id="buferes-de-interaccion-lisp">
<h2>28.10. Búferes de Interacción Lisp<a class="headerlink" href="#buferes-de-interaccion-lisp" title="Link to this heading"></a></h2>
<p>Cuando Emacs arranca, contiene un búfer llamado <em>scratch</em>, que se proporciona para evaluar expresiones Emacs Lisp interactivamente. Su modo principal es el modo de Interacción Lisp. También puede activar el modo de interacción de Lisp escribiendo M-x lisp-interaction-mode.</p>
<p>Si elimina el búfer <em>scratch</em>, puede volver a crearlo con la orden M-x scratch-buffer.</p>
<p>En el búfer <em>scratch</em> y en otros búferes del modo de interacción de Lisp, C-j (eval-print-last-sexp) evalúa la expresión Lisp anterior al punto e inserta el valor en el punto. Así, al escribir expresiones en el búfer seguidas de C-j después de cada expresión, el búfer registra una transcripción de las expresiones evaluadas y sus valores. Todos los demás comandos en el modo Lisp Interaction son los mismos que en el modo Emacs Lisp.</p>
<p>Al iniciarse, el búfer <em>scratch</em> contiene un breve mensaje, en forma de comentario Lisp, que explica para qué sirve. Este mensaje está controlado por la variable initial-scratch-message, que debe ser una cadena de documentación, o nil (que significa suprimir el mensaje).</p>
<p>Una forma alternativa de evaluar expresiones Emacs Lisp interactivamente es usar el modo Emacs Lisp Inferior, que proporciona una interfaz parecida al modo Shell (ver Modo Shell) para evaluar expresiones Emacs Lisp. Escriba M-x ielm para crear un búfer <em>ielm</em> que use este modo. Para más información, consulte la documentación de este comando.</p>
</section>
<section id="ejecutar-un-lisp-externo">
<h2>28.11. Ejecutar un Lisp externo<a class="headerlink" href="#ejecutar-un-lisp-externo" title="Link to this heading"></a></h2>
<p>El modo Lisp es el modo principal para editar programas escritos en dialectos Lisp de propósito general, como Common Lisp. Su comando de modo es M-x lisp-mode. Emacs usa el modo Lisp automáticamente para archivos cuyos nombres terminan en .l, .lsp, o .lisp.</p>
<p>Puede ejecutar una sesión Lisp externa como un subproceso o proceso inferior de Emacs, y pasarle expresiones para que sean evaluadas. Para iniciar una sesión Lisp externa, escriba M-x run-lisp. Esto ejecuta el programa llamado lisp, y lo configura para que tanto la entrada como la salida pasen por un búfer de Emacs llamado <em>inferior-lisp</em>. Para cambiar el nombre del programa Lisp ejecutado por M-x run-lisp, cambie la variable inferior-lisp-program.</p>
<p>28.11. Ejecutar un Lisp externo</p>
<p>El modo Lisp es el modo principal para editar programas escritos en dialectos Lisp de propósito general, como Common Lisp. Su comando de modo es M-x lisp-mode. Emacs usa el modo Lisp automáticamente para archivos cuyos nombres terminan en .l, .lsp, o .lisp.</p>
<p>Puede ejecutar una sesión Lisp externa como un subproceso o proceso inferior de Emacs, y pasarle expresiones para que sean evaluadas. Para iniciar una sesión Lisp externa, escriba M-x run-lisp. Esto ejecuta el programa llamado lisp, y lo configura para que tanto la entrada como la salida pasen por un búfer de Emacs llamado <em>inferior-lisp</em>. Para cambiar el nombre del programa Lisp ejecutado por M-x run-lisp, cambie la variable inferior-lisp-program.</p>
<p>El modo principal del búfer <em>lisp</em> es el modo Lisp inferior, que combina las características del modo Lisp y del modo Shell (véase Modo Shell). Para enviar una entrada a la sesión Lisp, vaya al final del búfer <em>lisp</em> y escriba la entrada, seguida de RET. La salida del terminal de la sesión Lisp se inserta automáticamente en el búfer.</p>
<p>Cuando edite un programa Lisp en modo Lisp, puede escribir C-M-x (lisp-eval-defun) para enviar una expresión desde el búfer del modo Lisp a una sesión Lisp que haya iniciado con M-x run-lisp. La expresión enviada es la expresión Lisp de nivel superior en o siguiente punto. El valor resultante va como de costumbre al búfer <em>inferior-lisp</em>. Observe que el efecto de C-M-x en modo Lisp es, por tanto, muy similar a su efecto en modo Emacs Lisp (véase Evaluación de Expresiones Emacs Lisp), salvo que la expresión se envía a un entorno Lisp diferente en lugar de evaluarse en Emacs.</p>
<p>Las facilidades para editar código Scheme, y para enviar expresiones a un subproceso Scheme, son muy similares. Los archivos fuente de Scheme se editan en modo Scheme, que puede activarse explícitamente con M-x scheme-mode. Puede iniciar una sesión de Scheme tecleando M-x run-scheme (el búfer para interactuar con Scheme se llama <em>scheme</em>), y enviarle expresiones tecleando C-M-x.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="27_EdDePrograms.html" class="btn btn-neutral float-left" title="27 Edición de Programas" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -391,6 +391,8 @@ Además, cada icono individual puede personalizarse con ``M-x customize-icon``,
Para obtener una descripción rápida de un icono, use el comando ``M-x describe-icon``.
.. _15.12:
15.12 Escala de Texto
---------------------

View File

@ -0,0 +1,237 @@
17 Comandos para Corregir Errores Tipográficos
==============================================
En este capítulo describimos comandos que resultan útiles cuando se detecta un error durante la edición. El más básic de estos comandos es el comando deshacer :kbd:`Ctrl`-:kbd:`/` ``C-/`` (también vinculado a :kbd:`Ctrl`-:kbd:`x` :kbd:`u` (``C-x u``) y :kbd:`Ctrl`-:kbd:`_` (``C-_``)). Esta orden deshace un único comando, o parte de èl (como en el caso de ``query-replace``), o varias inserciones consecutivas de caracteres. Las repeticiones consecutivas de ``C-/`` deshacen cambios cada vez anteriores, hasta el límite de la información de deshacer disponible.
Aparte de los comandos descritos aquí, puede borrar texto usando comandos de borrado como ``DEL`` (``delete-backward-char``). Estos se describieron anteriormente en este manual. Véase **Borrar Texto**.
17.1 Deshacer
-------------
El comando deshacer anula los cambios recientes en el texto del búfer. Cada búfer registra los cambios individualmente, y el comando deshacer siempre se aplica al búfer actual. Puede deshacer todos los cambios en un búfer hasta donde lleguen los registros del búfer. Normalmente, cada comando de edición hace una entrada separada en los registros de deshacer, pero algunos comandos como ``query-replace`` dividen sus cambios en múltiples entradas para mayor flexibilidad a la hora de deshacer. Los comandos de inserción de caracteres consecutivos suelen agruparse en un único registro de deshacer, para que deshacer sea menos tedioso.
| :kbd:`Ctrl`-:kbd:`/` (``C-/``)
| :kbd:`Ctrl`-:kbd:`x` :kbd:`u` (``C-x u``)
| :kbd:`Ctrl`-:kbd:`_` (``C-_``)
Deshace una entrada en los registros de deshacer (``undo``) del búfer actual.
Para empezar a deshacer, teclee :kbd:`Ctrl`-:kbd:`/` (``C-/``) (o sus alias, :kbd:`Ctrl`-:kbd:`_` (``C-_``) o :kbd:`Ctrl`-:kbd:`x` :kbd:`u` (``C-x u``)) [6]_. Esto deshace el cambio más reciente en el buffer, y mueve el punto de vuelta a donde estaba antes de ese cambio. Las repeticiones consecutivas de ``C-/`` (o sus alias) deshacen cambios cada vez más anteriores en el búfer actual. Si ya se han deshecho todos los cambios registrados, el comando deshacer indica un error.
Cualquier comando que no sea de deshacer rompe la secuencia de comandos de deshacer. A partir de ese momento, toda la secuencia de comandos de deshacer que acabas de realizar se colocan a su vez en el registro de deshacer. Por lo tanto, para volver a aplicar los cambios que ha deshecho, escriba :kbd:`Ctrl`-:kbd:`f` (``C-f``) o cualquier otro comando que rompa inofensivamente la secuencia de deshacer; a continuación, escriba :kbd:`Ctrl`-:kbd:`/` (``C-/``) una o más veces para deshacer algunos de los comandos de deshacer.
Alternativamente, si desea reanudar el deshacer, sin rehacer los comandos de deshacer anteriores, use ``M-x undo-only``. Esto es como deshacer, pero no rehará los cambios que acaba de deshacer. Para complementarlo, ``M-x undo-redo`` deshará los comandos de deshacer anteriores (y no se registrará como un comando que se puede deshacer).
Si nota que un búfer ha sido modificado accidentalmente, la forma más fácil de recuperarlo es teclear :kbd:`Ctrl`-:kbd:`/` (``C-/``) repetidamente hasta que las estrellas desaparezcan de la parte delantera de la línea de modo (véase **La Línea de Modo**). Cuando un comando deshacer hace desaparecer las estrellas de la línea de modo, significa que el contenido del búfer es el mismo que la última vez que se leyó o guardó el archivo. Si no recuerda si cambió el buffer deliberadamente, teclee :kbd:`Ctrl`-:kbd:`/` (``C-/``) una vez. Cuando vea deshecho el último cambio que hizo, verá si fue un cambio intencionado. Si fue un accidente, déjalo sin hacer. Si fue deliberado, rehaga el cambio como se ha descrito anteriormente.
Alternativamente, puede descartar todos los cambios desde que el buffer fue visitado o guardado por última vez con ``M-x revert-buffer`` (ver **Revertir un Búfer**).
Cuando hay una región activa, cualquier uso de deshacer realiza un *deshacer selectivo*: deshace el cambio más reciente dentro de la región, en lugar de todo el búfer. Sin embargo, cuando el modo de marcas transitorias está desactivado (véase **Desactivar el Modo de Marcas Transitorias**), ``C-/`` siempre actúa sobre todo el búfer, ignorando la región. En este caso, puede realizar un deshacer selectivo proporcionando un argumento de prefijo al comando deshacer: ``C-u C-/``. Para deshacer más cambios en la misma región, repita el comando deshacer (no es necesario el argumento prefijo).
Algunos búferes especializados no hacen registros de deshacer. Los búferes cuyos nombres comienzan con espacios nunca lo hacen; estos, son usados internamente por Emacs para contener texto que los usuarios normalmente no miran o editan.
Cuando la información de deshacer de un búfer se hace demasiado grande, Emacs descarta los registros más antiguos de vez en cuando (durante la *recolección de basura*). Puede especificar cuánta información de deshacer guardar configurando las variables ``undo-limit``, ``undo-strong-limit``, y ``undo-outer-limit``. Sus valores se expresan en bytes.
La variable ``undo-limit`` establece un límite blando: Emacs mantiene datos de deshacer para suficientes comandos como para alcanzar este tamaño, y quizás excederlo, pero no mantiene datos para ningún comando anterior más allá de eso. Su valor por defecto es 160000. La variable ``undo-strong-limit`` establece un límite más estricto: cualquier comando anterior (aunque no el más reciente) que empuje el tamaño más allá de esta cantidad es olvidado. El valor por defecto de ``undo-strong-limit`` es 240000.
Independientemente de los valores de esas variables, el cambio más reciente nunca se descarta a menos que sea mayor que ``undo-outer-limit`` (normalmente 24.000.000). En ese punto, Emacs descarta los datos de deshacer y le advierte de ello. Esta es la única situación en la que no puede deshacer el último comando. Si esto ocurre, puedes aumentar el valor de ``undo-outer-limit`` para que sea aún menos probable que ocurra en el futuro. Pero si no esperaba que el comando creara datos de deshacer tan grandes, entonces probablemente se trate de un error y debería informar de ello. Ver Informar de Errores.
.. [6] Además de ``C-/``, el comando deshacer también está asociado a ``C-x u`` porque es más fácil de recordar para los principiantes: ``u`` significa "deshacer". También está vinculado a C-_ porque al teclear C-/ en algunos terminales de texto en realidad se introduce C-_.
17.2 Transponer Texto
---------------------
:kbd:`Ctrl`-:kbd:`t` (``C-t``)
Transpone dos caracteres (``transpose-chars``).
:kbd:`Alt`-:kbd:`t` (``M-t``)
Transpone dos palabras (``transpose-words``).
:kbd:`Ctrl`-:kbd:`Alt`-:kbd:`t` (``C-M-t``)
Transpone dos expresiones equilibradas (``transpose-sexps``).
:kbd:`Ctrl`-:kbd:`x` :kbd:`Ctrl`-:Kbd:`t` (``C-x C-t``)
Transpone dos líneas (``transpose-lines``).
:kbd:`Alt`-:kbd:`x` ``transpose-sentences`` (``M-x transpose-sentences``)
Transpone dos frases (``transpose-sentences``).
:kbd:`Alt`-:Kbd:`x` ``M-x transpose-paragraphs`` (``M-x transpose-paragraphs``)
Transpone dos párrafos (``transpose-paragraphs``).
:kbd:`Alt`-:kbd:`x` ``transpose-regiones`` (``M-x transpose-regions``)
Transpone dos regiones.
El error común de transponer dos caracteres puede solucionarse, cuando son adyacentes, con el comando ``C-t`` (``transpose-chars``). Normalmente, ``C-t`` transpone los dos caracteres a ambos lados del punto. Cuando se da al final de una línea, en lugar de transponer el último carácter de la línea con la nueva línea, lo que sería inútil, ``C-t`` transpone los dos últimos caracteres de la línea. Por lo tanto, si detecta el error de transposición enseguida, puede solucionarlo con ``C-t``. Si no lo detecta tan rápido, debe volver a colocar el cursor entre los dos caracteres transpuestos antes de teclear ``C-t``. Si ha transpuesto un espacio con el último carácter de la palabra delante, los comandos de movimiento de palabra (``M-f``, ``M-b``, etc.) son una buena forma de llegar hasta allí. De lo contrario, una búsqueda inversa (``C-r``) suele ser la mejor manera. Véase **Búsqueda y Sustitución**.
``M-t`` transpone la palabra antes del punto con la palabra después del punto (``transpose-words``). Desplaza el punto hacia delante sobre una palabra, arrastrando también hacia delante la palabra que precede o contiene al punto. Los caracteres de puntuación entre las palabras no se mueven. Por ejemplo, ``FOO, BAR`` se transpone a ``BAR, FOO`` en lugar de ``BAR FOO,``. Si el punto se encuentra al final de la línea, la palabra anterior al punto se transpondrá con la primera palabra de la línea siguiente.
``C-M-t`` (``transpose-sexps``) es un comando similar para transponer dos expresiones (véase **Expresiones con Paréntesis Equilibrados**), y ``C-x C-t`` (``transpose-lines``) intercambia líneas. ``M-x transpose-sentences`` y ``M-x transpose-paragraphs`` transponen frases y párrafos, respectivamente. Estos comandos funcionan como ``M-t`` excepto en lo que respecta a las unidades de texto que transponen.
Un argumento numérico para un comando de transposición sirve como recuento de repeticiones: indica al comando de transposición que mueva el carácter (o palabra o expresión o línea) anterior o que contenga el punto a través de varios otros caracteres (o palabras o expresiones o líneas). Por ejemplo, :kbd:`Ctrl`-:kbd:`u` :kbd:`3` :kbd:`Ctrl`-:kbd:`t` (``C-u 3 C-t``) desplaza el carácter anterior al punto hacia adelante a través de otros tres caracteres. Cambiaría ``foobar`` por ``oobfar``. Esto equivale a repetir ``C-t`` tres veces. :kbd:`Ctrl`-:kbd:`u` :kbd:`-` :kbd:`4` :kbd:`Alt`-:kbd:`t` (``C-u - 4 M-t``) mueve la palabra anterior al punto anterior a través de cuatro palabras. :kbd:`Ctrl`-:kbd:`u` :kbd:`-` :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`t` (``C-u - C-M-t``) anularía el efecto de :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`t` (``C-M-t``) simple.
A un argumento numérico de cero se le asigna un significado especial (porque de otro modo un comando con un recuento de repeticiones de cero no haría nada): transponer el carácter (o palabra o expresión o línea) que termina después del punto con el que termina después de la marca.
``M-x transpose-regions`` transpone el texto entre el punto y la marca con el texto entre las dos últimas marcas empujado al anillo de la marca (véase **Establecer la Marca**). Con un argumento de prefijo numérico, transpone el texto entre punto y marca con el texto entre dos marcas sucesivas que muchas entradas atrás en el anillo de marca. Este comando se usa mejor para transponer varios caracteres (o palabras o frases o párrafos) de una sola vez.
17.3 Conversión Mayúsculas y Minúsculas
---------------------------------------
:kbd:`Alt`-:kbd:`-` :kbd:`Alt`-:kbd:`l` (``M-- M-l``)
Convierte la última palabra a minúsculas. Nota ``Meta--`` es Meta-menos (:kbd:`Alt`-:kbd:`-`).
:kbd:`Alt`-:kbd:`-` :kbd:`Alt`-:kbd:`u` (``M-- M-u``)
Convierte la última palabra a mayúsculas.
:kbd:`Alt`-:kbd:`-` :kbd:`Alt`-:kbd:`c` (``M-- M-c``)
Convierte la última palabra a minúscula con inicial mayúscula.
Un error muy común es escribir palabras en mayúsculas o minúsculas equivocadas. Por eso, los comandos de conversión de palabras ``M-l``, ``M-u`` y ``M-c`` tienen una característica especial cuando se usan con un argumento negativo: no mueven el cursor. En cuanto vea que ha escrito mal la última palabra, puede simplemente convertirla a mayúsculas y seguir escribiendo. Consulte Comandos de **Conversión de Mayúsculas y Minúsculas**.
17.4 Comprobar y Corregir la Ortografía
---------------------------------------
En esta sección se describen los comandos para comprobar la ortografía de una sola palabra o de una parte de un búfer. Estas órdenes sólo funcionan si está instalado un programa corrector ortográfico, uno de Hunspell, Aspell, Ispell o Enchant. Estos programas no forman parte de Emacs, pero uno de ellos suele estar instalado en GNU/Linux y otros sistemas operativos libres. Véase **Aspell** en El manual de Aspell.
Si sólo tiene instalado uno de los programas correctores ortográficos, Emacs lo encontrará cuando invoque por primera vez uno de los comandos descritos aquí. Si tiene más de uno instalado, puede controlar cuál se usa personalizando la variable ``ispell-program-name``.
:kbd:`Alt`-:kbd:`$` (``M-$``)
Comprueba y corrige la ortografía de la palabra en el punto (``ispell-palabra``). Si la región está activa, hágalo para todas las palabras de la región.
:kbd:`Alt`-:kbd:`x` ``ispell`` (``M-x ispell``)
Comprueba y corrige la ortografía de todas las palabras del búfer. Si la región está activa, hágalo para todas las palabras de la región.
:kbd:`Alt`-:kbd:`x` ``ispell-buffer`` (``M-x ispell-buffer``)
Comprueba y corrige la ortografía en el búfer.
:kbd:`Alt`-:kbd:`x` ``ispell-region`` (``M-x ispell-region``)
Comprueba y corrige la ortografía en la región.
:kbd:`Alt`-:kbd:`x` ``ispell-message`` (``M-x ispell-message``)
Revisa y corrige la ortografía de un borrador de mensaje de correo, excluyendo el material citado.
:kbd:`Alt`-:kbd:`x` ``ispell-comments-and-strings`` (``M-x ispell-comments-and-strings``)
Comprueba y corrige la ortografía de los comentarios y las cadenas en el búfer o la región.
:kbd:`Alt`-:kbd:`x` ``ispell-comment-or-string-at-point`` (``M-x ispell-comment-or-string-at-point``)
Comprueba el comentario o la cadena en el punto.
| :kbd:`Alt`-:kbd:`x` ``ispell-change-dictionary`` :kbd:`RETURN` *dicc* :kbd:`RETURN`
| (``M-x ispell-change-dictionary RET`` *dicc* ``RET``)
Reinicia el proceso de corrección ortográfica, usando a *dicc* como diccionario.
:kbd:`Alt`-:kbd:`x` ``ispell-kill-ispell`` (``M-x ispell-kill-ispell``)
Mata el subproceso del corrector ortográfico.
| :kbd:`Alt`-:kbd:`TAB` (``M-TAB``)
| :kbd:`ESC`:kbd:`TAB` (``ESC TAB``)
| :kbd:`Ctrl`-:kbd:`Alt`-:Kbd:`i` (``C-M-i``)
Completa la palabra antes del punto basándose en el diccionario ortográfico (``ispell-complete-wordù``).
:kbd:`Alt`-:kbd:`x` ``flyspell-mode`` (``M-x flyspell-mode``)
Activa el modo Flyspell, que resalta todas las palabras mal escritas.
:kbd:`Alt`-:kbd:`x` ``flyspell-prog-mode`` (``M-x flyspell-prog-mode``)
Activa el modo Flyspell sólo para comentarios y cadenas.
Para comprobar la ortografía de la palabra alrededor o antes de punto, y opcionalmente corregirla también, escriba ``M-$`` (``ispell-word``). Si hay una región activa, ``M-$`` comprueba la ortografía de todas las palabras dentro de la región. Véase **La Marca y la Región**. (Cuando el modo Marca transitoria (Transient Mark mode) está desactivado, ``M-$`` actúa siempre sobre la palabra alrededor o antes del punto, ignorando la región; véase **Desactivar el Modo Marca transitoria** (Transient Mark Mode)).
Del mismo modo, el comando ``M-x ispell`` realiza la corrección ortográfica en la región si hay una activa, o en todo el búfer en caso contrario. Los comandos ``M-x ispell-buffer`` y ``M-x ispell-region`` realizan explícitamente la corrección ortográfica en todo el búfer o en la región, respectivamente. Para revisar la ortografía de un mensaje de correo electrónico que esté escribiendo, use ``M-x ispell-message``; ese comando revisa todo el búfer, excepto el material que esté sangrado o que parezca citado de otros mensajes. Véase **Envío de Correo**. Cuando trabaje con código fuente, puede usar ``M-x ispell-comments-and-strings`` o ``M-x ispell-comment-or-string-at-point`` para comprobar sólo los comentarios o las cadenas literales.
Cuando uno de estos comandos encuentra lo que parece ser una palabra incorrecta, le pregunta qué hacer. Normalmente muestra una lista numerada de palabras cercanas a la palabra incorrecta. A continuación, debe escribir una respuesta de un solo carácter. Éstas son las respuestas válidas:
`dígito`
Sustituya la palabra, sólo esta vez, por uno de los cuasi-aciertos mostrados. Cada cuasi fallo aparece con un dígito; escríbalo para seleccionarlo.
:kbd:`SPACE` (``SPC``)
Omite esta palabra: sigue considerándola incorrecta, pero no la cambie aquí.
:kbd:`r` *nueva* :kbd:`RETURN` (``r`` *nueva* ``RET``)
Sustituye la palabra, sólo esta vez, por *nueva*. (La cadena de sustitución se volverá a analizar en busca de más errores ortográficos).
:kbd:`R` *nueva* :kbd:`RETURN` (``R`` *nueva* ``RET``)
Sustituye la palabra por *nueva*, y haga una consulta-sustitución (``query-replace``) para poder sustituirla en otro lugar del búfer si lo desea. (Los reemplazos se volverán a
escanear en busca de más errores ortográficos).
:kbd:`a` (``a``)
Acepta la palabra incorrecta: trata la palabra como correcta, pero sólo en esta sesión de edición.
:kbd:`y` (``A``)
Acepta la palabra incorrecta: la trata como correcta, pero sólo en esta sesión de edición y para este búfer.
:kbd:`y` (``i``)
Inserta esta palabra en su archivo privado de diccionario para que se considere correcta a partir de ahora, incluso en futuras sesiones.
:kbd:`m` (``m``)
Como ``i``, pero también puede especificar la información de completado del diccionario.
:kbd:`u` (``up``)
Inserta la versión en minúsculas de esta palabra en el archivo privado de su diccionario.
:kbd:`l` *palabra* :Kbd:`RETURN` (``l`` *palabra* ``RET``)
Busca en el diccionario aquellas palabras que coincidan con el término *palabra*. Estas palabras se convierten en la nueva lista de casi-errores; puede seleccionar una de ellas como
reemplazo tecleando un dígito. Puede usar ``*`` en palabra como comodín.
| :kbd:`Ctrl`-:kbd:`g` (``C-g``)
| :kbd:`X` (``X``)
Sale de la revisión ortográfica interactiva, dejando el punto en la palabra que se estaba revisando. Después puede reiniciar la revisión con :kbd:`Ctrl`-:kbd:`u` :Kbd:`Alt`-:kbd:`$`
(``C-u M-$``).
:kbd:`x` (``x``)
Sale del corrector ortográfico interactivo y vuelve a colocar el punto donde estaba cuando se activó el mismo.
:kbd:`q` (``q``)
Sale de la corrección ortográfica interactiva y mata el subproceso del corrector ortográfico.
:kbd:`?` (``?``)
Mostrar lista de opciones.
En el modo Texto y modos relacionados, ``M-TAB`` (``ispell-complete-word``) realiza el completado en el búfer basándose en la corrección ortográfica. Introduzca el principio de una palabra y escriba :kbd:`Alt`-:kbd:`TAB` (``M-TAB``); aparecerá una lista de palabras completadas. (Si su gestor de ventanas intercepta ``M-TAB``, escriba :kbd:`ESC`:kbd:`TAB` (``ESC TAB``) o :kbd:`Ctrl`-:kbd:`Alt`-:Kbd::`i` (``C-M-i``).) Cada completado aparece con un dígito o carácter; escriba ese dígito o carácter para elegirlo.
Una vez iniciado, el subproceso del corrector ortográfico continúa ejecutándose, a la espera de algo que hacer, de modo que los siguientes comandos de corrección ortográfica se completen más rápidamente. Si desea deshacerse del proceso, use ``M-x ispell-kill-ispell``. Esto no suele ser necesario, ya que el proceso no usa tiempo del procesador excepto cuando hace la corrección ortográfica.
Los correctores ortográficos buscan la ortografía en dos diccionarios: el diccionario estándar y su diccionario personal. El diccionario estándar se especifica mediante la variable ``ispell-local-dictionary`` o, si es nula, mediante la variable ``ispell-dictionary``. Si ambas son nulas, se usa el diccionario por defecto del programa de ortografía. El comando ``M-x ispell-change-dictionary`` establece el diccionario estándar para el búfer y luego reinicia el subproceso, para que use un diccionario estándar diferente. Su diccionario personal se especifica mediante la variable ``ispell-personal-dictionary``. Si es ``nil``, el programa de ortografía busca un diccionario personal en una ubicación predeterminada, que es específica para cada corrector ortográfico.
Para completar palabras se usa un diccionario distinto. La variable ``ispell-complete-word-dict especifica`` el nombre de archivo de este diccionario. El diccionario de completado debe ser diferente porque no puede usar la información sobre raíces y afijos de las palabras, que el corrector ortográfico utiliza para detectar variaciones de las palabras. Para algunos idiomas, existe un diccionario de corrección ortográfica pero no un diccionario de compleción de palabras.
El modo Flyspell es un modo secundario que realiza una corrección ortográfica automática del texto que escribe a medida que lo teclea. Cuando encuentra una palabra que no reconoce, la resalta. Escriba :kbd:`Alt`-:Kbd:`x` ``flyspell-mode`` (``M-x flyspell-mode``) para activar el modo Flyspell en el búfer actual. Para activar el modo Flyspell en todos los búfers de modo texto, añada ``flyspell-mode`` a ``text-mode-hook``. Ver **Ganchos**. Tenga en cuenta que, como el modo Flyspell necesita comprobar cada palabra por la que se mueve, ralentizará el movimiento del cursor y los comandos de desplazamiento. Tampoco comprueba automáticamente el texto que no ha escrito o por el que no se ha movido; para ello utilice ``flyspell-region`` o ``flyspell-búfer``.
Cuando el modo Flyspell resalta una palabra como mal escrita, puede hacer clic sobre ella con ratón-2 (``flyspell-correct-word``) para mostrar un menú de posibles correcciones y acciones. Si desea que el menú aparezca con ratón-3, active el modo de menú contextual. Además, ``C-``. o ``ESC TAB`` (``flyspell-auto-correct-word``) propondrá varias correcciones sucesivas para la palabra en el punto, y ``C-c $`` (``flyspell-correct-word-before-point``) desplegará un menú de posibles correcciones. Por supuesto, siempre puede corregir la palabra mal escrita editándola manualmente como desee.
El modo Flyspell Prog funciona igual que el modo Flyspell normal, con la diferencia de que sólo comprueba las palabras de los comentarios y las constantes de cadena. Esta función es útil para editar programas. Escriba :kbd:`Alt`-:kbd:`x` ``flyspell-prog-mode`` (``M-x flyspell-prog-mode``) para activar o desactivar este modo en el búfer actual. Para activar este modo en todos los búferes del modo de programación, añada ``flyspell-prog-mode`` a ``prog-mode-hook`` (ver **Ganchos**).

View File

@ -70,4 +70,21 @@ Copyright © 1985-1987, 1993-2023 Free Software Foundation, Inc.
CapConSecciones/20_UsarVariosBuferes.rst
CapConSecciones/21_VariasVentanas.rst
CapConSecciones/22_MarcosPantallasGraf.rst
CapConSecciones/23_SoporteJuegoCaracIntern.rst
CapConSecciones/24_ModosMayores-Y-Menores.rst
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/
CapConSecciones/

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -35,7 +35,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -70,6 +70,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

View File

@ -37,7 +37,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -72,6 +72,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>
@ -414,6 +420,160 @@ de la libertad del software.»</p>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html#uso-del-raton-en-terminales-de-texto">22.22 Uso del Ratón en Terminales de Texto</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a><ul>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#introduccion-a-los-juegos-de-caracteres-internacionales">23.1 Introducción a los Juegos de Caracteres Internacionales</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#entornos-de-lenguaje">23.2 Entornos de Lenguaje</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#metodos-de-entrada">23.3 Métodos de Entrada</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#seleccion-de-un-metodo-de-entrada">23.4 Selección de un Método de Entrada</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#sistemas-de-codificacion">23.5 Sistemas de Codificación</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#reconocimiento-de-sistemas-de-codificacion">23.6. Reconocimiento de Sistemas de Codificación</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#especificar-el-sistema-de-codificacion-de-un-archivo">23.7 Especificar el Sistema de Codificación de un Archivo</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#eleccion-de-sistemas-de-codificacion-para-la-salida">23.8. Elección de Sistemas de Codificación para la Salida</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#especificar-un-sistema-de-codificacion-para-el-texto-de-un-archivo">23.9 Especificar un Sistema de Codificación para el Texto de un Archivo</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#sistemas-de-codificacion-para-la-comunicacion-interprocesos">23.10 Sistemas de Codificación para la Comunicación Interprocesos</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#sistemas-de-codificacion-de-nombres-de-archivos">23.11 Sistemas de Codificación de Nombres de Archivos</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#sistemas-de-codificacion-para-la-entrada-de-teclado-x">23.12. Sistemas de Codificación para la Entrada de Teclado X</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#sistemas-de-codificacion-para-e-s-de-terminal">23.13 Sistemas de Codificación para E/S de Terminal</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#juegos-de-fuentes">23.14 Juegos de fuentes</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#definir-juegos-de-fuentes">23.15. Definir Juegos de Fuentes</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#modificar-juegos-de-fuentes">23.16 Modificar Juegos de Fuentes</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#caracteres-no-visualizables">23.17 Caracteres no Visualizables</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#modo-de-edicion-unibyte">23.18 Modo de Edición Unibyte</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#juegos-de-caracteres">23.19 Juegos de Caracteres</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html#edicion-bidireccional">23.20 Edición Bidireccional</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a><ul>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html#modos-principales">24.1 Modos Principales</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html#modos-menores">24.2 Modos Menores</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html#eleccion-de-los-modos-de-archivo">24.3 Elección de los Modos de Archivo</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a><ul>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/25_Indentacion.html#comandos-de-indentado">25.1 Comandos de Indentado</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/25_Indentacion.html#paradas-de-tabulacion">25.2 Paradas de Tabulación</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/25_Indentacion.html#tabulaciones-vs-espacios">25.3 Tabulaciones vs. Espacios</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/25_Indentacion.html#funciones-practicas-para-la-sangria">25.4 Funciones Prácticas para la Sangría</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a><ul>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#palabras">26.1 Palabras</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#frases">26.2 Frases</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#parrafos">26.3 Párrafos</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#paginas">26.4 Páginas</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#comillas">26.5 Comillas</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#rellenar-texto">26.6 Rellenar Texto</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#modo-auto-fill">26.6.1 Modo Auto Fill</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#comandos-explicitos-de-relleno">26.6.2 Comandos Explícitos de Relleno</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#el-prefijo-de-relleno">26.6.3 El Prefijo de Relleno</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#relleno-adaptativo">26.6.4 Relleno Adaptativo</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#comandos-de-conversion-de-mayusculas-y-minusculas">26.7. Comandos de Conversión de Mayúsculas y Minúsculas</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#modo-texto">26.8 Modo Texto</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#modo-esquema">26.9 Modo Esquema</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#modo-org-org-mode">26.10. Modo Org (Org Mode)</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#modo-tex">26.11 Modo TeX</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#modos-sgml-y-html">26.12 Modos SGML y HTML</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#modo-nroff">26.13 Modo Nroff</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#texto-enriquecido">26.14 Texto enriquecido</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#modo-enriquecido">26.14.1 Modo enriquecido</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#nuevas-lineas-duras-y-flexibles">26.14.2. Nuevas Líneas Duras y Flexibles</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#editar-informacion-de-formato">26.14.3 Editar Información de Formato</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#caras-en-texto-enriquecido">26.14.4 Caras en texto enriquecido</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#sangria-en-texto-enriquecido">26.14.5 Sangría en Texto Enriquecido</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#justificacion-en-texto-enriquecido">26.14.6 Justificación en Texto Enriquecido</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#establecer-otras-propiedades-de-texto">26.14.7 Establecer otras Propiedades de Texto</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#editar-tablas-basadas-en-texto">26.15 Editar Tablas Basadas en Texto</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#que-es-una-tabla-basada-en-texto">26.15.1 ¿Qué es una Tabla Basada en Texto?</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#creacion-de-una-tabla">26.15.2 Creación de una Tabla</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#reconocimiento-de-tablas">26.15.3 Reconocimiento de Tablas</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#comandos-para-celdas-de-tabla">26.15.4 Comandos para Celdas de Tabla</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#justificacion-de-celdas">26.15.5 Justificación de Celdas</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#filas-y-columnas-de-la-tabla">26.15.6. Filas y Columnas de la Tabla</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#conversion-entre-texto-plano-y-tablas">26.15.7 Conversión entre Texto plano y Tablas</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#miscelanea-de-la-tabla">26.15.8 Miscelánea de la Tabla</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html#edicion-a-dos-columnas">26.16 Edición a Dos Columnas</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a><ul>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#modos-principales-para-lenguajes-de-programacion">27.1 Modos Principales para Lenguajes de Programación</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#definiciones-de-nivel-superior-o-defuns">27.2 Definiciones de Nivel Superior, o Defuns</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#desplazamiento-por-defuns">27.2.2 Desplazamiento por defuns</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#imenu">27.2.3 Imenu</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#modo-que-funcion-which-function-mode">27.2.4 Modo Qué función (Which Function Mode)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#indentacion-de-programas">27.3 Indentación de Programas</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#comandos-para-la-edicion-con-parentesis">27.4 Comandos para la Edición con Paréntesis</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#manipulacion-de-comentarios">27.5. Manipulación de Comentarios</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#busqueda-de-documentacion">27.6 Búsqueda de Documentación</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#modo-secundario-hideshow">27.7 Modo Secundario Hideshow</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#completado-de-nombres-de-simbolos">27.8 Completado de Nombres de Símbolos</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#palabras-en-mayusculas-y-minusculas">27.9 Palabras en Mayúsculas y Minúsculas</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#semantica">27.10 Semántica</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#otras-funciones-utiles-para-editar-programas">27.11 Otras Funciones Útiles para Editar Programas</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#c-y-modos-relacionados">27.12 C y Modos Relacionados</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#comandos-de-movimiento-en-modo-c">27.12.1 Comandos de Movimiento en Modo C</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#caracteres-c-electricos">27.12.2 Caracteres C Eléctricos</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#caracteristica-de-borrado-forzado-en-c">27.12.3. Característica de Borrado Forzado en C</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#otros-comandos-para-el-modo-c">27.12.4 Otros comandos para el Modo C</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#modo-asm">27.13 Modo Asm</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#modo-fortran">27.14 Modo Fortran</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#comandos-de-movimie">27.14.1 Comandos de Movimie</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#indentacion-en-fortran">27.14.2. Indentación en Fortran</a><ul>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#comandos-fortran-de-indentado-y-relleno">27.14.2.1. Comandos Fortran de Indentado y Relleno</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#lineas-de-continuacion">27.14.2.2. Líneas de Continuación</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#numeros-de-linea">27.14.2.3. Números de Línea</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#convenciones-sintacticas">27.14.2.4 Convenciones Sintácticas</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#variables-para-el-indentado-en-fortran">27.14.2.5. Variables para el Indentado en Fortran</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#comentarios-en-fortran">27.14.3. Comentarios en Fortran</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#relleno-automatico-en-modo-fortran">27.14.4. Relleno Automático en Modo Fortran</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#comprobacion-de-columnas-en-fortran">27.14.5. Comprobación de Columnas en Fortran</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html#abreviaturas-de-palabras-clave-en-fortran">27.14.6. Abreviaturas de Palabras Clave en Fortran</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a><ul>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#ejecutar-compiladores-en-emacs">28.1 Ejecutar Compiladores en Emacs</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#modo-compilacion">28.2 Modo Compilación</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#subshells-para-compilar">28.3 Subshells para Compilar</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#buscar-con-grep-en-emacs">28.4 Buscar con Grep en Emacs</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#encontrar-errores-de-sintaxis-al-vuelo">28.5 Encontrar errores de sintaxis al vuelo</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#ejecutar-depuradores-en-emacs">28.6. Ejecutar Depuradores en Emacs</a><ul>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#iniciar-gud">28.6.1 Iniciar GUD</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#funcionamiento-del-depurador">28.6.2. Funcionamiento del Depurador</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#comandos-del-gud">28.6.3 Comandos del GUD</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#personalizacion-de-gud">28.6.4 Personalización de GUD</a></li>
<li class="toctree-l3"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#interfaz-grafica-de-gdb">28.6.5. Interfaz Gráfica de GDB</a><ul>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#disposicion-de-la-interfaz-de-usuario-gdb">28.6.5.1. Disposición de la Interfaz de Usuario GDB</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#buferes-fuente">28.6.5.2 Búferes Fuente</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#bufer-de-puntos-de-interrupcion">28.6.5.3. Búfer de puntos de interrupción</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#bufer-de-hilos-threads">28.6.5.4. Búfer de Hilos (Threads)</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#bufer-de-pila">28.6.5.5. Búfer de pila</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#otros-buferes-gdb">28.6.5.6. Otros Búferes GDB</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#observa-las-expresiones">28.6.5.7 Observa las Expresiones</a></li>
<li class="toctree-l4"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#depuracion-multihilo">28.6.5.8. Depuración Multihilo</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#ejecucion-de-expresiones-lisp">28.7. Ejecución de Expresiones Lisp</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#bibliotecas-de-codigo-lisp-para-emacs">28.8 Bibliotecas de Código Lisp para Emacs</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#evaluacion-de-expresiones-emacs-lisp">28.9. Evaluación de Expresiones Emacs Lisp</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#buferes-de-interaccion-lisp">28.10. Búferes de Interacción Lisp</a></li>
<li class="toctree-l2"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html#ejecutar-un-lisp-externo">28.11. Ejecutar un Lisp externo</a></li>
</ul>
</li>
</ul>
</div>
</section>

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

Binary file not shown.

View File

@ -38,7 +38,7 @@
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.12
Traducción Revisón: 1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="#" method="get">
@ -73,6 +73,12 @@
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/21_VariasVentanas.html">21 Varias Ventanas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/22_MarcosPantallasGraf.html">22 Marcos y Pantallas Gráficas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/23_SoporteJuegoCaracIntern.html">23 Soporte de Juego de Caracteres Internacional</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/24_ModosMayores-Y-Menores.html">24 Modos Mayores y Menores</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/25_Indentacion.html">25 Indentación</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/26_ComandsLengsHuma.html">26 Comandos para Lenguajes Humanos</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/27_EdDePrograms.html">27 Edición de Programas</a></li>
<li class="toctree-l1"><a class="reference internal" href="CapConSecciones/28_CompProbProg.html">28 Compilar y Probar Programas</a></li>
</ul>
</div>

File diff suppressed because one or more lines are too long