Terminale OS X - Apri la scheda nella directory corrente, problemi con le dieresi

2

Eseguo OS X 10.7.5. Attualmente sto riscontrando un problema con Terminal. Ho abilitato l'opzione per aprire nuove schede nella directory di lavoro corrente. Tuttavia, questo non funziona come previsto, quando il percorso della directory di lavoro corrente contiene uno o più dieresi. Ad esempio, trovarsi in una directory Uni/Semester\ 7/C++/Übung\ 2 e premere Cmd-T per aprire una nuova scheda mi colloca nella directory I più recentemente cd a, ad es. Uni/Semester\ 7/C++ o qualcosa del genere. Stessa cosa se sono in una sottodirectory di Übung\ 2 .

Un altro sintomo (almeno sembrano essere correlati) è che quando si esce da Terminal in una directory contenente dieresi, alla riapertura inizierà nella mia home directory, nemmeno nel genitore più vicino senza dieresi come nel caso di nuova scheda .

Ho letto che alcune persone hanno problemi con il completamento automatico di Tab e le dieresi. Io no, funziona bene, e non so se questo è collegato.

Dal punto di vista della configurazione, ho impostato l'opzione Avvio in Preferenze > Impostazioni > Shell a /opt/local/bin/bash -l (poiché la versione di bash preinstallata non è aggiornata, la rimozione di questa operazione non ha comportato alcuna differenza di comportamento). L'opzione Gusci aperti con nelle preferenze è impostata su default, non so se sia rilevante.

Ora, la domanda: qualcuno sa come far funzionare Terminal con dieresi in modo tale che non debba sempre rinnovare la propria directory di lavoro all'apertura di una nuova scheda? Mi sembra strano che dovrei essere il primo ad avere quel problema, non sono riuscito a pubblicare nulla su Google.

EDIT : ora sono aggiornato a Yosemite. Il problema persiste. Non posso credere che nessun altro abbia questo problema. Ho anche effettuato l'accesso come utente guest per ottenere le impostazioni predefinite e succede la stessa cosa.

    
posta oarfish 21.10.2014 - 12:26
fonte

2 risposte

2

Ciò che ha finito per risolvere il mio problema è semplicemente non utilizzare Terminal e passare a iTerm . Ha tutto ciò che Terminal ha tranne i bug e l'ultimo aggiornamento ha risolto alcuni fastidi con Yosemite. A tutt'oggi non ho visto alcun motivo per scegliere Terminal su iTerm.

    
risposta data 09.11.2014 - 20:16
fonte
3

Prima di OS X El Capitan 10.11, il codice in /etc/bashrc dispone di inviare una sequenza di escape ad ogni prompt per dire a Terminal quale sia la directory di lavoro corrente, ma questo codice solo per cento-codifica gli spazi, il che significa che non funziona con caratteri che non sono caratteri URL validi, che include caratteri non ASCII come "Ü":

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"
}

Il 10.11 e successivi, il codice è stato spostato su /etc/bashrc_Apple_Terminal ed è stato aggiornato per codificare in percentuale tutti i caratteri che lo richiedono, quindi ora può lavorare con caratteri come "Ü" (il tuo caso esemplificativo funziona per me su 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 legge apparentemente la directory di lavoro dallo stato del processo della shell. Questo ha il vantaggio che funziona senza alcuna configurazione della shell; tuttavia, non è garantito che sia corretto (non c'è ragione che la directory di lavoro corrente di una shell debba effettivamente corrispondere al cwd che usa quando si esegue un comando, in qualsiasi momento), non funziona attraverso connessioni indirette come ssh o shell in esecuzione all'interno di editor o multiplexer dello schermo, e non può leggere la directory da processi di proprietà di altri utenti, ad esempio, se si utilizza sudo -s per creare una shell di root, non può leggere la directory di lavoro dalla root processo di shell. Inoltre, lo stato del programma include solo un descrittore di file per la directory aperta, non il percorso utilizzato dalla shell per $PWD , quindi in alcuni casi non si otterrà il percorso utilizzato per navigare nella directory corrente, ad esempio , se hai attraversato un collegamento simbolico.]

    
risposta data 07.12.2015 - 11:08
fonte

Leggi altre domande sui tag