OS X Terminal - Abrir pestaña en el directorio actual, problemas con diéresis

2

Ejecuto OS X 10.7.5. Actualmente estoy experimentando un problema con la Terminal. He habilitado la opción para abrir nuevas pestañas en el directorio de trabajo actual. Sin embargo, esto no funciona como se esperaba, cuando la ruta del directorio de trabajo actual contiene uno o más diéresis. Por ejemplo, estar en un directorio Uni/Semester\ 7/C++/Übung\ 2 y presionar Cmd-T para abrir una nueva pestaña me coloca en el directorio en el que más recientemente cd ed, por ejemplo. Uni/Semester\ 7/C++ o algo así. Lo mismo si estoy en un subdirectorio de Übung\ 2 .

Otro síntoma (al menos parecen estar relacionados) es que al salir de Terminal mientras está en un directorio que contiene diéresis, al volver a abrirlo comenzará en mi directorio de inicio, ni siquiera en el padre más cercano sin diéresis como en el caso de la nueva pestaña .

He leído que algunas personas tienen problemas con la autocompletación de pestañas y las diéresis. No, funciona bien y no sé si eso está relacionado.

En cuanto a la configuración, configuré la opción Inicio en Preferencias > Configuraciones > Shell a /opt/local/bin/bash -l (debido a que la versión de bash preinstalada no está actualizada, eliminar esto no hizo ninguna diferencia en el comportamiento). La opción Shells open with en las preferencias está configurada como predeterminada, no sé si eso es relevante.

Ahora, la pregunta: ¿Alguien sabe cómo hacer que Terminal funcione con diéresis de modo que no siempre tenga que volver a navegar en mi directorio de trabajo al abrir una nueva pestaña? Me parece extraño que yo fuera el primero en tener ese problema, no logré buscar nada en Google.

EDIT : ahora actualicé a Yosemite. El problema persiste. No puedo creer que nadie más tenga este problema. También inicié sesión como usuario invitado para obtener la configuración predeterminada y sucede lo mismo.

    
pregunta oarfish 21.10.2014 - 12:26

2 respuestas

2

Lo que terminó por resolver mi problema es simplemente no usar Terminal y cambiar a iTerm . Tiene todo lo que Terminal tiene excepto los errores y la última actualización solucionó algunas molestias con Yosemite. Hasta el momento no he visto ninguna razón para elegir Terminal sobre iTerm.

    
respondido por el oarfish 09.11.2014 - 20:16
3

Antes de OS X El Capitan 10.11, el código en /etc/bashrc arregla el envío de una secuencia de escape en cada solicitud para decirle a la Terminal cuál es el directorio de trabajo actual, pero este código solo codifica los espacios en porcentaje, lo que significa que no no trabaje con caracteres que no sean caracteres de URL válidos, que incluyen cualquier carácter no ASCII como "Ü":

update_terminal_cwd() {
    # Identify the directory using a "file:" scheme URL,
    # including the host name to disambiguate local vs.
    # remote connections. Percent-escape spaces.
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
}

En 10.11 y versiones posteriores, el código se movió a /etc/bashrc_Apple_Terminal y se actualizó para codificar en porcentaje todos los caracteres que lo requieren, por lo que ahora puede trabajar con caracteres como “Ü” (su caso de ejemplo funciona para mí en 10.11.1):

update_terminal_cwd() {
    # Identify the directory using a "file:" scheme URL, including
    # the host name to disambiguate local vs. remote paths.

    # Percent-encode the pathname.
    local url_path=''
    {
        # Use LC_CTYPE=C to process text byte-by-byte. Ensure that
        # LC_ALL isn't set, so it doesn't interfere.
        local i ch hexch LC_CTYPE=C LC_ALL=
        for ((i = 0; i < ${#PWD}; ++i)); do
            ch="${PWD:i:1}"
            if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
                url_path+="$ch"
            else
                printf -v hexch "%02X" "'$ch"
                # printf treats values greater than 127 as
                # negative and pads with "FF", so truncate.
                url_path+="%${hexch: -2:2}"
            fi
        done
    }

    printf '\e]7;%s\a' "file://$HOSTNAME$url_path"
}

[iTerm 2 aparentemente lee el directorio de trabajo desde el estado del proceso de shell. Esto tiene la ventaja de que funciona sin ninguna configuración de shell; sin embargo, no se garantiza que sea correcto (no hay ninguna razón para que el directorio de trabajo actual de un shell tenga que coincidir con el cwd que usa cuando ejecuta un comando, en un momento dado), no funciona a través de conexiones indirectas como ssh o shells que se ejecutan dentro de editores o multiplexores de pantalla, y no puede leer el directorio de procesos que son propiedad de otros usuarios, por ejemplo, si usa sudo -s para crear un shell raíz, no puede leer el directorio de trabajo desde la raíz proceso de shell Además, el estado del programa solo incluye un descriptor de archivo para el directorio abierto, no la ruta que está usando el shell para $PWD , por lo que en realidad no obtendrá la ruta que usó para navegar al directorio actual en algunos casos, por ejemplo , si atravesaste un enlace simbólico.]

    
respondido por el Chris Page 07.12.2015 - 11:08

Lea otras preguntas en las etiquetas