OS X Terminal - Open Tab im aktuellen Verzeichnis, Probleme mit Umlauten


2

Ich verwende OS X 10.7.5. Ich habe gerade ein Problem mit Terminal. Ich habe die Option aktiviert, neue Registerkarten im aktuellen Arbeitsverzeichnis zu öffnen. Dies funktioniert jedoch nicht wie erwartet, wenn der Pfad des aktuellen Arbeitsverzeichnisses einen oder mehrere Umlaute enthält. Zum Beispiel in einem Verzeichnis sein Uni/Semester\ 7/C++/Übung\ 2 und schlagen Cmd-T Um einen neuen Tab zu öffnen, stelle ich mich in das Verzeichnis, das ich zuletzt gemacht habe cd z. Uni/Semester\ 7/C++ oder so. Gleiches, wenn ich in einem Unterverzeichnis von bin Übung\ 2.

Ein anderes Symptom (zumindest scheinen sie verwandt zu sein) besteht darin, dass beim Beenden von Terminal in einem Verzeichnis, das Umlaute enthält, beim erneuten Öffnen in meinem Home-Verzeichnis gestartet wird, nicht einmal im nächsten übergeordneten Element ohne Umlaute wie in der neuen Registerkarte.

Ich habe gelesen, dass einige Leute Probleme mit Tab-Autovervollständigung und Umlauten haben. Ich weiß nicht, es funktioniert gut, und ich weiß nicht, ob das damit zusammenhängt.

Konfigurationsmäßig habe ich die Option eingestellt Anlaufen im Einstellungen & gt; Einstellungen & gt; Schale zu /opt/local/bin/bash -l (Da die vorinstallierte bash-Version veraltet ist, hat das Entfernen dieser Einstellung keinen Einfluss auf das Verhalten). Die Option Muscheln öffnen sich mit In den Voreinstellungen ist die Standardeinstellung, ich weiß nicht, ob dies relevant ist.

Nun die Frage: Weiß jemand, wie man Terminal mit Umlauten so arbeiten lässt, dass ich beim Öffnen einer neuen Registerkarte nicht immer zu meinem Arbeitsverzeichnis wechseln muss? Es erscheint mir komisch, dass ich der erste sein sollte, der dieses Problem hatte. Ich habe es nicht geschafft, etwas zu googeln.

BEARBEITEN : Ich habe jetzt ein Upgrade auf Yosemite durchgeführt. Das Problem besteht weiterhin. Ich kann nicht glauben, dass niemand sonst dieses Problem hat. Ich habe mich auch als Gastbenutzer angemeldet, um die Standardeinstellungen zu erhalten, und dasselbe passiert.


Informationen zum Shell-Fehler finden Sie unter: apple.stackexchange.com/questions/146849/…
CousinCocaine

apple.stackexchange.com/a/128999/139153 löste dasselbe Problem für mich
ppcano

Ich habe die gleiche Definition in meinem /etc/bashrc Das scheint also nicht das Problem zu sein.
oarfish

Beachten Sie, dass der Fehler in OS X El Capitan 10.11 behoben wurde.
Chris Page

@ChrisPage Bitte fügen Sie keine Antworten in die Frage ein, es verwirrt beide Benutzer und die Suchfunktion. Falls zutreffend, posten Sie stattdessen eine separate Antwort (oder einen Kommentar, der hier wahrscheinlich ausreicht).
nohillside

Antworten:


3

Vor OS X El Capitan 10.11 wurde der Code in /etc/bashrc veranlasst, an jeder Eingabeaufforderung eine Escape-Sequenz zu senden, um dem Terminal mitzuteilen, welches das aktuelle Arbeitsverzeichnis ist, jedoch codiert dieser Code nur Leerzeichen, was bedeutet, dass er nicht mit Zeichen arbeitet, die keine gültigen URL-Zeichen sind. ASCII-Zeichen wie "Ü":

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

Am 10.11 und später wurde der Code nach verschoben /etc/bashrc_Apple_Terminal und wurde dahingehend aktualisiert, dass alle Zeichen, die dies erfordern, in Prozent kodiert werden, sodass jetzt mit Zeichen wie "Ü" gearbeitet werden kann (Ihr Fallbeispiel funktioniert für mich am 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 liest anscheinend das Arbeitsverzeichnis aus dem Shell-Prozessstatus. Dies hat den Vorteil, dass es ohne Shell-Setup funktioniert. Es kann jedoch nicht garantiert werden, dass es korrekt ist (es gibt keinen Grund, warum das aktuelle Arbeitsverzeichnis einer Shell tatsächlich mit dem cwd übereinstimmen muss, wenn es einen Befehl ausführt, zu einem bestimmten Zeitpunkt) ssh oder Shells, die in Editoren oder Bildschirm-Multiplexern ausgeführt werden, und das Verzeichnis kann nicht aus Prozessen gelesen werden, die anderen Benutzern gehören, z. B. wenn Sie dies verwenden sudo -s Um eine Root-Shell zu erstellen, kann sie das Arbeitsverzeichnis nicht vom Root-Shell-Prozess lesen. Darüber hinaus enthält der Programmstatus nur eine Dateibeschreibung für das offene Verzeichnis, nicht den Pfad, den die Shell verwendet $PWDSie erhalten also in einigen Fällen nicht den Pfad, den Sie zum Navigieren zum aktuellen Verzeichnis verwendet haben - z. B. wenn Sie einen symbolischen Link durchlaufen haben.]


2

Was am Ende zur Lösung meines Problems führte, war einfach, kein Terminal zu verwenden und zu wechseln iTerm . Es hat alles, was Terminal hat, außer den Bugs und das neueste Update hat einige Ärgernisse mit Yosemite beseitigt. Bislang habe ich keinen Grund gesehen, Terminal über iTerm zu wählen.


1
Beachten Sie, dass der Fehler in OS X El Capitan 10.11 behoben wurde.
Chris Page
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.