it-swarm.asia

اضبط عنوان النافذة الطرفية على الدليل الحالي

كيف يمكنني الحصول على Terminal.app في OS X لعرض الدليل الحالي في نافذة أو علامة تبويب عنوانه؟

أنا باستخدام شل باش.

71
kareman

يعتمد على شل الخاص بك.

تعرض هذه المقالة طرقًا متعددة.

أنا شخصيا استخدام zsh التي لديها وظيفة precmd () مريحة التي يتم تشغيلها قبل كل موجه.

    precmd () { print -Pn "\e]2;%[email protected]%M | %~\a" } # title bar Prompt

على الرغم من أن الأسئلة الأخرى تسرد طرق bash ، فإنها اسم مستعار cd. يوفر Bash طريقة متأصلة تعمل على إيقاف التشغيل الفوري.

bash

يوفر bash متغير Prompt_COMMAND الذي يحتوي على أمر للتنفيذ قبل المطالبة. هذا المثال (المدرج في ~/.bashrc) يعين العنوان إلى "اسم المستخدم @ اسم المضيف: الدليل":

 Prompt_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

حيث\033 هو رمز الحرف لـ ESC ، و\007 لـ BEL. لاحظ أن الاقتباس مهم هنا: يتم توسيع المتغيرات في "..." ، ولا يتم توسيعها في '...'. لذلك يتم تعيين Prompt_COMMAND على قيمة غير موسعة ، ولكن يتم توسيع المتغيرات داخل "..." عند استخدام Prompt_COMMAND.

ومع ذلك ، PWD ينتج مسار الدليل الكامل. إذا كنا نرغب في استخدام الاختصار '~' ، فإننا نحتاج إلى تضمين سلسلة الهروب في Prompt ، والتي تتيح لنا الاستفادة من توسعات Prompt التالية التي توفرها Shell:

\u          expands to $USERNAME
\h          expands to hostname up to first '.'
\w          expands to directory, replacing $HOME with '~'
\[...\]     embeds a sequence of non-printing characters

وبالتالي ، يُنتج ما يلي مطالبة بـ "bash $" ، وعنوان xterm لـ "username @ hostname: directory" ...

 case $TERM in
     xterm*)
        PS1="\[\033]0;\[email protected]\h: \w\007\]bash\$ "
        ;;
     *)
        PS1="bash\$ "
        ;;
 esac

لاحظ استخدام [...] ، الذي يخبر bash بتجاهل أحرف التحكم غير القابلة للطباعة عند حساب عرض الموجه. خلاف ذلك ، يتم خلط أوامر تحرير الأسطر أثناء وضع المؤشر.

59
Darren Hall

نسخ ولصق في ملف ~/.profile:
Prompt_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $Prompt_COMMAND"

سيؤدي ذلك إلى تعيين عنوان علامة تبويب المحطة الطرفية الحالية على اسم المجلد الذي أنت فيه (وليس المسار بالكامل).
وبالتالي...
Developer/Applications/Utilities/Bluetooth/ يصبح => Bluetooth

31
Allisone

اعتبارًا من Mac OS X Lion 10.7 ، فإن Terminal لديه تسلسل هروب صريح لإعداد دليل العمل ، والذي يعرضه Terminal باستخدام أيقونة "proxy" للنافذة القياسية. يمكّنك هذا الأمر من النقر فوقه Command-Click لرؤية المسار أو الكشف في Finder أو سحبه مثل أي مجلد آخر. بالإضافة إلى ذلك ، يمكن لـ Terminal استخدام هذا لإنشاء محطة طرفية أخرى في نفس الدليل ، واستعادة دليل العمل عند إنهاء/إعادة تشغيل الجهاز الطرفي (عند تمكين استئناف). كما أنه يتيح استعادة الدلائل لمجموعات النافذة.

إنه نفس تسلسل هروب أمر نظام التشغيل (OSC) كما هو الحال بالنسبة لعناوين النافذة وعلامة التبويب ، ولكن مع تعيين المعلمة الأولى على 7. يجب أن تكون القيمة "ملف:" URL ، والذي يتيح الأحرف الخاصة بترميز النسبة المئوية حتى يتمكن من التعامل جميع أسماء المسارات صالحة. يجب عليك أيضًا تضمين اسم المضيف حتى يمكن لـ Terminal تحديد ما إذا كان دليلًا محليًا ؛ سيتجنب الجهاز استخدامه كدليل عمل حالي إذا كان من مضيف مختلف.

في ملاحظة ذات صلة ، تدعم المحطة الطرفية بالمثل إعداد "الملف الممثّل" باستخدام تسلسل هروب OSC بمعلمة 6. إذا تم التعيين ، فسيعرض رمز الوكيل هذا بدلاً من دليل العمل. على سبيل المثال ، لدي emacs وتكوين أقل لعكس الملف/المخزن المؤقت المعروض حاليًا في أيقونة الوكيل. وهذا يتيح لهذه البرامج القائمة على tty أن تكون أكثر تكاملاً مع نظام التشغيل المحيط.

يتم تمكين سلوكيات دليل العمل بشكل افتراضي لـ bash (الافتراضي Shell على Mac OS X). انظر/etc/bashrc للحصول على الكود ذي الصلة.

تجدر الإشارة أيضًا إلى أن Lion Terminal يدعم الآن تعيين عنوان علامة التبويب بشكل مستقل عن عنوان النافذة باستخدام تسلسل الهروب OSC.

11
Chris Page

بصرف النظر عن التوصية باستخدام تسلسل هروب أمر نظام التشغيل الخاص بـ Apple Terminal: ESC ] Ps ; Pt BEL حيث Ps7 و Pt فهو عنوان URL file: ؛ تجدر الإشارة إلى أنه في نظام التشغيل Mac OS X 10.11 (وربما منذ 10.7) يوجد ملف /etc/bashrc_Apple_Terminal (غير قابل للتعديل تحت 10.11) والذي يعرف update_terminal_cwd() الملائم على أنه (بدون التعليقات):

update_terminal_cwd () 
{ 
    local url_path='';
    { 
        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";
                url_path+="%${hexch: -2:2}";
            fi;
        done
    };
    printf '\e]7;%s\a' "file://$HOSTNAME$url_path"
}

يمكنك استخدام هذا على الصناديق البعيدة الخاصة بك أيضًا ، إذا كنت تفكر في القيام بذلك ثم تخدش رأسك بتشفير عنوان URL للملف بشكل صحيح في bash.

وإذا قمت بتغيير Prompt_COMMAND في .bash_profile الخاص بك أو .bashrc فقد تنسى الاتصال بهذا. في نفس الملف ، يظهرون مثالًا على السلاسل بشكل أفضل قليلاً باستخدام:

Prompt_COMMAND="update_terminal_cwd${Prompt_COMMAND:+; $Prompt_COMMAND}"

شخصيا في .bash_profile الخاص بي ، أردت إضافة بوابة git ، لذلك فعلت هذا:

local git_path=/Applications/Xcode.app/Contents/Developer/usr/share/git-core
for f in $git_path/git-completion.bash $git_path/git-Prompt.sh
do
  if [[ -f "$f" ]]; then
    . "$f"
  fi
done
get_sha() {
    git rev-parse --short HEAD 2>/dev/null
}
if [ "function" = $(type -t __git_ps1) ]; then
    export GIT_PS1_SHOWDIRTYSTATE=1
    GIT_PS1_SHOWSTASHSTATE=1
    GIT_PS1_SHOWUNTRACKEDFILES=1
    GIT_PS1_SHOWCOLORHINTS=1
    GIT_PS1_DESCRIBE_STYLE="branch"
    GIT_PS1_SHOWUPSTREAM="auto git"
    export Prompt_COMMAND="$Prompt_COMMAND${Prompt_COMMAND:+; }"'__git_ps1 "\[\e[0;32m\]\u\[\e[1;32m\]@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]" "\$ " "\n{%s $(get_sha)}"'
fi
3
dlamblin

على افتراض أنك تستخدم MAC Terminal الافتراضي ، يمكنك استخدام ما يلي في .profile لأن "set_Prompt" في حد ذاته قد يرسل لك إلى المجلد الجذر عند فتح علامة تبويب جديدة:

set_Prompt () {
    BASE_PATH="${PWD##*/}"
    echo -ne "\033]0;$BASE_PATH\007"
}
set_my_tab () {
   update_terminal_cwd
   set_Prompt
}

Prompt_COMMAND=set_my_tab
1
Kopz Kyoto

تفشل حلول Bash التي تتضمن PS1 و Prompt_COMMAND إذا كان الدليل يحتوي على أحرف Unicode (على Snow Leopard على الأقل). أفضل حل يمكن أن أتوصل إليه هو القيام بما يعادل

PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "

لسوء الحظ ، هذا لا يعمل بشكل مباشر ، لذلك قمت بدلاً من ذلك بتعريف وظيفة Shell لإجراء مكالمة tr:

termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "

هذا يعمل بشكل جيد مع لهجات اللاتينية ، والتي ستكون في Unicode NFD (سوف تختفي لهجات ولكن ستبقى الشخصية اللاتينية الأساسية).

لسوء الحظ ، سوف تفشل تماما لأشياء مثل الصينية.

1
Michael Norrish

أدخل هذا في ملف ~/.profile أو ملف مكافئ:

function settitle() { echo -n "]0;[email protected]"; }
function cd() { command cd "[email protected]"; settitle `pwd -P`; }

export PS1='\W \$ '

settitle `pwd`

يحتوي السطر الأول على حرفين خاصين لا يمكن نسخهما/لصقهما ، ولكن يمكنك تنزيل النص من هنا: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh .

0
kareman