2 votos

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

Utilizo OS X 10.7.5. Actualmente estoy experimentando un problema con Terminal. He activado la opción de 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 una o más diéresis. Por ejemplo, estando en un directorio Uni/Semester\ 7/C++/Übung\ 2 y golpeando Cmd + T para abrir una nueva pestaña me sitúa en el directorio que más recientemente cd ed to, e.g. 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 estando en un directorio que contiene diéresis, al volver a abrirlo se iniciará en mi directorio personal, 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 el autocompletado con tabulador y las diéresis. Yo no, funciona muy bien, y no sé si eso está relacionado.

En cuanto a la configuración, he establecido la opción Puesta en marcha en Preferencias > Configuración > Shell a /opt/local/bin/bash -l (debido a que la versión de bash preinstalada es obsoleta, la eliminación de este no hizo ninguna diferencia en el comportamiento). La opción Las conchas se abren con en las preferencias está configurado por defecto, no sé si eso es relevante.

Ahora, la pregunta: ¿Alguien sabe cómo hacer que Terminal funcione con diéresis de modo que no tenga que renavegar siempre a mi directorio de trabajo al abrir una nueva pestaña? Me parece raro que yo sea el primero en tener ese problema, no he conseguido buscar nada en google.

EDITAR : He actualizado 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.

0 votos

Acerca de su error de shell, ver: apple.stackexchange.com/preguntas/146849/

0 votos

apple.stackexchange.com/a/128999/139153 me solucionó el mismo problema

0 votos

@ppcano Tengo la misma definición en mi /etc/bashrc por lo que este no parece ser el problema.

3voto

Yasmine Mustafa Puntos 21

Antes de OS X El Capitan 10.11, el código en /etc/bashrc se encarga de enviar una secuencia de escape en cada consulta para indicar a Terminal cuál es el directorio de trabajo actual, pero este código sólo codifica espacios en porcentaje, lo que significa que no funciona con caracteres que no sean caracteres URL válidos, lo que incluye 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 posteriores, el código se ha trasladado a /etc/bashrc_Apple_Terminal y se ha actualizado para codificar porcentualmente todos los caracteres que lo requieren, por lo que ahora puede funcionar con caracteres como "Ü" (tu caso de ejemplo me funciona 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"
}

[Aparentemente, iTerm 2 lee el directorio de trabajo a partir del estado del proceso shell. Esto tiene la ventaja de que funciona sin ninguna configuración de la shell; sin embargo, no está garantizado que sea correcto (no hay ninguna razón por la que el directorio de trabajo actual de una shell tenga que coincidir realmente con el cwd que utiliza al ejecutar un comando, en un momento dado), no funciona a través de conexiones indirectas como ssh o shells que se ejecuten dentro de editores o multiplexores de pantalla, y no puede leer el directorio desde procesos que pertenezcan a otros usuarios-por ejemplo, si utiliza sudo -s para crear un shell Root, no puede leer el directorio de trabajo del proceso del shell Root. Además, el estado del programa sólo incluye un descriptor de archivo para el directorio abierto, no la ruta que el shell está utilizando para $PWD por lo que, en algunos casos, no obtendrá la ruta que utilizó para navegar hasta el directorio actual (por ejemplo, si viajó a través de un enlace simbólico).

2voto

Arve Nygård Puntos 21

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

1 votos

Tenga en cuenta que el error se ha corregido en OS X El Capitan 10.11.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X