OS X Terminal - Aba Open no diretório atual, problemas com umlauts

2

Eu corro o OS X 10.7.5. No momento, estou com um problema no Terminal. Eu habilitei a opção para abrir novas abas no diretório de trabalho atual. No entanto, isso não funciona como esperado, quando o caminho do diretório de trabalho atual contém um ou mais umlauts. Por exemplo, estar em um diretório Uni/Semester\ 7/C++/Übung\ 2 e bater Cmd-T para abrir uma nova aba me coloca no diretório que eu mais recentemente cd ed para, e. Uni/Semester\ 7/C++ ou alguma coisa. Mesma coisa se eu estiver em um subdiretório de Übung\ 2.

Outro sintoma (pelo menos parece estar relacionado) é que ao sair do Terminal enquanto em um diretório contendo umlauts, na reabertura ele irá iniciar no meu diretório home, nem mesmo no pai mais próximo sem os umlauts como no novo caso de tabulação.

Eu li que algumas pessoas têm problemas com o preenchimento automático de Tab e os tremas. Eu não, funciona muito bem, e eu não sei se isso está relacionado.

Configuração-sábio, eu defino a opção Comece em Preferências & gt; Configurações & gt; Concha para /opt/local/bin/bash -l (porque a versão bash pré-instalada está desatualizada, remover isso não fez diferença no comportamento). A opção Conchas abertas com nas preferências é definido como padrão, eu não sei se isso é relevante.

Agora, a pergunta: Alguém sabe como fazer com que o Terminal funcione com umlauts, de modo que nem sempre eu precise renavegar para o meu diretório de trabalho ao abrir uma nova guia? Parece estranho para mim que eu deveria ser o primeiro a ter esse problema, eu não consegui google nada.

EDITAR : Eu agora atualizei para o Yosemite. O problema persiste. Eu não posso acreditar que ninguém mais tenha esse problema. Eu também entrei como usuário convidado para obter as configurações padrão e acontece a mesma coisa.

oarfish
fonte
Sobre o seu bug do shell, veja: apple.stackexchange.com/questions/146849/…
CousinCocaine
apple.stackexchange.com/a/128999/139153 resolveu o mesmo problema para mim
ppcano
@ppcano eu tenho a mesma definição na minha /etc/bashrc então isso não parece ser o problema.
oarfish
Note que o bug foi corrigido no OS X El Capitan 10.11.
Chris Page
@ChrisPage Por favor, não inclua respostas à pergunta, isso confunde os usuários e a função de busca. Se aplicável, publique uma resposta separada (ou um comentário, que provavelmente é o suficiente aqui).
nohillside

Respostas:

3

Antes do OS X El Capitan 10.11, o código em /etc/bashrc organiza para enviar uma seqüência de escape em cada prompt para informar ao Terminal qual é o diretório de trabalho atual, mas esse código codifica apenas os espaços, o que significa que não funciona com caracteres que não sejam caracteres de URL válidos, o que inclui Caracteres 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"
}

No 10.11 e posterior, o código foi movido para /etc/bashrc_Apple_Terminal e foi atualizado para codificar por cento todos os caracteres que o exigem, para que ele possa agora trabalhar com caracteres como "Ü" (o seu exemplo funciona para mim no 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"
}

[O iTerm 2 aparentemente lê o diretório de trabalho do estado do processo do shell. Isto tem a vantagem de funcionar sem qualquer configuração de shell; no entanto, não é garantido que esteja correto (não há nenhuma razão para o diretório de trabalho atual de um shell ter realmente que corresponder ao cwd que ele usa ao executar um comando, a qualquer momento), ele não funciona através de conexões indiretas como ssh ou shells sendo executados em editores ou multiplexadores de tela, e ele não pode ler o diretório de processos pertencentes a outros usuários - por exemplo, se você usar sudo -s para criar um shell de root, ele não pode ler o diretório de trabalho do processo do shell de root. Além disso, o estado do programa inclui apenas um descritor de arquivo para o diretório aberto, não o caminho que o shell está usando para $PWD, portanto, você não obterá o caminho usado para navegar até o diretório atual em alguns casos, por exemplo, se você atravessar um link simbólico.

Chris Page
fonte
2

O que acabou resolvendo meu problema é simplesmente não usar Terminal e mudar para iTerm . Tem tudo o que o Terminal tem, exceto os bugs e a atualização mais recente corrigiu alguns aborrecimentos com o Yosemite. Até agora, não vi razão para escolher o Terminal sobre o iTerm.

oarfish
fonte
1
Note que o bug foi corrigido no OS X El Capitan 10.11.
Chris Page