OS X Lion มีคุณสมบัติ "ดำเนินการต่อ" เช่นเมื่อคุณเปิดแอปอีกครั้งแอปจะเรียกคืนหน้าต่างและเนื้อหาทั้งหมด ใช้งานได้กับ Terminal เช่นกัน แต่ถ้าคุณใช้ Zsh แทน Bash มันจะไม่คืนค่าไดเรกทอรีที่เปิด ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
OS X Lion มีคุณสมบัติ "ดำเนินการต่อ" เช่นเมื่อคุณเปิดแอปอีกครั้งแอปจะเรียกคืนหน้าต่างและเนื้อหาทั้งหมด ใช้งานได้กับ Terminal เช่นกัน แต่ถ้าคุณใช้ Zsh แทน Bash มันจะไม่คืนค่าไดเรกทอรีที่เปิด ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
คำตอบ:
ปรับปรุง : นี่ไม่ถูกต้องทั้งหมดด้วยเหตุผลที่กล่าวถึงในความคิดเห็น ใช้คำตอบดังต่อไปนี้ ขอบคุณ @ChrisPage สำหรับการเพิ่มไมล์ :)
คำตอบสามารถพบได้โดยวิศวกรรมย้อนกลับวิธีทุบตีมัน/etc/bashrc
มา ฉันลองวิธีการมากมายจากทั่วเน็ต แต่วิธีของ Apple ดูเหมือนจะทำงานได้ดีที่สุด (ไปคิดเลข)
ในการ.zshrc
เพิ่มของคุณต่อไปนี้
# Set Apple Terminal.app resume directory
if [[ $TERM_PROGRAM == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]] {
function chpwd {
local SEARCH=' '
local REPLACE='%20'
local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
printf '\e]7;%s\a' "$PWD_URL"
}
chpwd
}
มีความสุขกลับมาทำงานต่อ
เพื่อความกระจ่างแจ้งคำตอบนี้เกี่ยวข้องกับข้อความลึกลับในการตั้งค่าของ Terminal Xapp ของ OS X Lion:
** โปรแกรมแจ้งเตือนเทอร์มินัลของไดเรกทอรีการทำงานปัจจุบันโดยใช้ลำดับการหลีกเลี่ยง คุณอาจต้องกำหนดค่าเชลล์หรือโปรแกรมอื่นเพื่อเปิดใช้งานลักษณะการทำงานนี้ *
คำตอบนี้ใช้ได้เมื่อคุณใช้ zsh เป็นเปลือกของคุณ Apple Resume สำหรับทุบตีได้ดำเนินการแล้วโดย Apple
chpwd
เหมือนกับprintf '\e]7;%s\a' "$PWD_URL"
เครื่องหมายคำพูดคู่ ขอบคุณสำหรับทิป.
นี่คือการปรับ / etc / bashrc สำหรับ zsh ของฉัน ฉันได้รวมการเข้ารหัสอักขระ URL ทั้งหมดที่จำเป็นต้องใช้เป็นเปอร์เซ็นต์ซึ่งเป็นสิ่งสำคัญหากคุณต้องการให้สิ่งนี้ทำงานกับชื่อไฟล์และไดเรกทอรีที่ถูกต้องทั้งหมด
นี่เป็นการลงทะเบียนprecmd
hook ซึ่งอนุญาตให้มีการลงทะเบียนมากกว่าหนึ่งฟังก์ชั่นในสคริปต์และไฟล์การกำหนดค่าอื่น ๆ
ปรับปรุงมีนาคม 2019: ชุดที่ว่างเปล่าจึงไม่ได้แทนที่LC_ALL
LC_CTYPE
ใช้precmd
เพื่ออัปเดตไดเรกทอรีการทำงานในแต่ละพรอมต์แทนที่จะใช้chpwd
เพื่ออัปเดตทุกครั้งที่มีการเปลี่ยนแปลง - ไปป์ไลน์คำสั่งอาจเปลี่ยนแปลงชั่วคราวและเทอร์มินัลไม่ควรแสดงสิ่งเหล่านั้น นอกจากนี้ยังมีประโยชน์ที่จะให้แต่ละการอัพเดตพร้อมต์สถานะเทอร์มินัลในกรณีที่มีการเปลี่ยนแปลงระหว่างคำสั่งก่อนหน้า ใช้printf -v
เพื่อเขียนลงในตัวแปรอย่างชัดเจนแทนที่จะใช้ไวยากรณ์ย่อย
# Tell the terminal about the working directory whenever it changes.
if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
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 = 1; i <= ${#PWD}; ++i)); do
ch="$PWD[i]"
if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
url_path+="$ch"
else
printf -v hexch "%02X" "'$ch"
url_path+="%$hexch"
fi
done
}
printf '\e]7;%s\a' "file://$HOST$url_path"
}
# Register the function so it is called at each prompt.
autoload add-zsh-hook
add-zsh-hook precmd update_terminal_cwd
fi
.zprofile
oh-my-zsh
มันอยู่ในโฉนดโซลูชั่นเดียวกันที่แน่นอนและคุณสมควรได้รับเครดิตทั้งหมด