มีวิธีที่รวดเร็วในการบันทึกและกู้คืนแท็บของ Terminal ใช่ไหม


80

ฉันมีหน้าจอเทอร์มินัลพร้อมแท็บชื่อโหลที่เปิดอยู่

ฉันต้องการบันทึกการกำหนดค่าปัจจุบันและกู้คืนด้วยชื่อและไดเรกทอรี

มีวิธีทำเช่นนี้หรือไม่?


คุณสมบัติที่น่าสนใจมาก แต่ฉันไม่คิดว่าจะมี
dlin

คุณใช้เทอร์มินัลอะไรอยู่ ขั้ว Gnome? Konsole? ฯลฯ
gertvdijk

@gertvdijk: ชื่อที่เรียกว่า "Terminal" ฉันเชื่อว่ามันเป็นคำพังเพย
เท็จ

1
@ ฟลอร่า Btw. ชา Xfce ชนะเรียกอีกอย่างว่า "เทอร์มินัล" สำหรับผู้ที่สนใจสามารถบันทึกได้ที่Xfce Goodies , โครงการ: applications: terminal :)
Nostromov

2
หากต้องการให้เป็นไปได้ให้ลงคะแนนที่bugzilla.gnome.org/show_bug.cgi?id=623986
Marius Andreiana

คำตอบ:


44

วิธีบันทึกการกำหนดค่าลงใน/tmp/cfg:

gnome-terminal --save-config=/tmp/cfg

หากต้องการโหลดกลับ:

gnome-terminal --load-config=/tmp/cfg 

UPDATE

หลังจากเล่นไปรอบ ๆ กับทุบตีฉันสร้างสคริปต์ต่อไปนี้ซึ่งเก็บชื่อแท็บลงในไฟล์/tmp/testเช่นกัน:

#!/usr/bin/env bash

gnome-terminal --save-config=/tmp/test

LINES=($(grep -n '\[Terminal' /tmp/test | cut -d: -f1))
for ((i=0; i<$(grep '\[Terminal' /tmp/test | wc -l); i++))
do
    TITLE=$(xprop -id $WINDOWID WM_NAME | sed -e 's/WM_NAME(STRING) = "//' -e 's/"$//';xdotool key ctrl+Page_Down;)
    sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" /tmp/test 
done

หากต้องการกำหนดชื่อให้ถูกต้องคุณต้องเรียกใช้จากแท็บแรกของเทอร์มินัลของคุณ โหลดเหมือนก่อน:

gnome-terminal --load-config=/tmp/test

คำอธิบาย:

ฉันสามารถใช้สิ่งต่อไปนี้เพื่อรับชื่อแท็บ:

xprop -id $WINDOWID WM_NAME

ฉันสามารถใช้สิ่งต่อไปนี้เพื่อข้ามไปยังแท็บถัดไป:

xdotool key ctrl+Page_Down;

ฉันได้รับจำนวนแท็บหลังจาก grepping ไฟล์การตั้งค่าที่ฉันบันทึกไว้ก่อนหน้า:

$(grep '\[Terminal' /tmp/test | wc -l)

ดังนั้นฉันสามารถวนซ้ำแท็บในวง ฉันต้องเพิ่มรายการ "Title = titlename" สำหรับแต่ละส่วนกำหนดค่าแท็บในไฟล์ที่บันทึกไว้ก่อนหน้านี้ ในการทำเช่นนั้นก่อนอื่นฉันจะสร้างอาร์เรย์ของหมายเลขบรรทัดที่ฉันจะเพิ่มบรรทัด

LINES=($(grep -n '\[Terminal' /tmp/test | cut -d: -f1))

ฉันกำลังเพิ่มบรรทัด "Title = titlename" ในการวนซ้ำวนรอบแท็บ:

sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" /tmp/test 

1
คุณอาจต้องการดูคำสั่งหน้าจอ ฉันไม่ได้ใช้ แต่ฉันเชื่อว่ามันสามารถบันทึกและกู้คืนเซสชันได้ทุกประเภท - แม้แต่เซสชันระยะไกล
Joe

1
ชื่อไม่ทำงาน ตรวจสอบให้แน่ใจว่าในเมนู Edit \ Profile Preferences แท็บ 'ชื่อเรื่องและคำสั่ง' 'เมื่อคำสั่งเทอร์มินัลตั้งชื่อของตนเอง:' KEEP INITIAL TITLE 'หวังว่านี่จะช่วยได้ในเรื่องของหัวเรื่อง
Sentient

1
พฤติกรรมที่ต้องการในคำตอบนี้คืออะไร? สำหรับฉันมันจะบันทึกแท็บและฉันเชื่อว่าไดเรกทอรีการทำงานปัจจุบัน แต่จะไม่บันทึกอินพุตและเอาต์พุตก่อนหน้า เทอร์มินัล OS X ทำเช่นนั้น
Tyler Collier

11
gnome 3.18: ตัวเลือก "--save-config" ไม่รองรับใน gnome-terminal เวอร์ชันนี้อีกต่อไป
Marius Andreiana

2
Ubuntu 16.04: ตัวเลือก "--save-config" ไม่รองรับใน gnome-terminal รุ่นนี้อีกต่อไป
Eugene Kulabuhov

12

ทางเลือกคือการใช้เพียงByobu กด F2 เพื่อเปิดเทอร์มินัลใหม่ภายใน ใช้ F3 และ F4 เพื่อสลับซ้ายและขวาระหว่างขั้ว

ปิดหน้าต่าง GUI ทุกเวลาที่คุณต้องการ เมื่อคุณเปิด Byobu อีกครั้งเทอร์มินัลทั้งหมดจะถูกกู้คืน :)


1
มันทำงานข้ามรีบูต? สำหรับฉันแล้วมันจะรีเซ็ตหลังจากรีบูต
akshay2000

3
มันใช้งานไม่ได้กับการรีบู๊ต
maxgalbu

1
มันไม่ได้เปิดแท็บทั้งหมดที่นี่อีกเพียงแท็บแรกเท่านั้น
Leonardo Castro

3
ทำไม upvoted นี้ถึงแม้จะเป็นคำตอบถ้ามันไม่สามารถรีบูตได้?
killjoy

3

ฉันลองตัวเลือกด้านล่างหลังจากกู้คืนการตั้งค่าที่บันทึกไว้และชื่อยังได้รับการกู้คืนอย่างถูกต้อง

  1. ไปที่การตั้งค่า> โปรไฟล์และเลือกโปรไฟล์ปัจจุบันที่คุณใช้
  2. คลิกที่แก้ไขและไปที่แท็บ "ชื่อและคำสั่ง"
  3. ทำให้ชื่อเริ่มต้นว่างเปล่า
  4. เลือกตัวเลือก "รักษาชื่อเริ่มต้น" ในช่องแบบเลื่อนลงด้านล่าง

ตัวเลือกนี้หลีกเลี่ยงการตั้งชื่อเริ่มต้นของคุณที่จะถูกเขียนทับ

หวังว่านี่จะช่วยและเป็นสคริปต์ที่ดีอย่างแน่นอน ประหยัดเวลาได้มากเมื่อคุณรีบูทและฉันสามารถรีบูทกล่องเสมือนบ่อยครั้งได้อย่างมีความสุข

ขอบคุณ !!


3

ฉันพยายามอีกหนึ่งทางเลือก

ฉันเปลี่ยนชื่อเริ่มต้นสำหรับ Terminal เพื่อใช้ค่า Intital ใน~/.bashrcแทนที่จะเปลี่ยนการ~/.profileตั้งค่า

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="$PS1"
    ;;
*)
    ;;
esac

หากคุณทำเช่นนี้คุณไม่จำเป็นต้องเปลี่ยนโปรไฟล์เทอร์มินัล
เมื่อคุณรันgnome-terminal --load-configชื่อแท็บทั้งหมดจะถูกกู้คืนอย่างถูกต้อง และคุณสามารถเปลี่ยนได้ตามที่คุณต้องการและบันทึกแท็บอีกครั้ง !!


3

ฉันพบวิธีที่จะทำสิ่งที่ฉันคิดว่าเร็วกว่า

  1. สร้างโปรไฟล์ที่มีชื่อและชื่อที่คุณต้องการเช่นโยคะกล่าว
  2. ประเภท:

    gnome-terminal --tab-with-profile=PROFILENAME1 --tab-with-profile=PROFILENAME2 ... --tab-with-profile=PROFILENAME999
    

ฉันสร้างนามแฝงด้วยคำสั่งนี้และใช้งานได้ดีสำหรับฉัน ฉันเพิ่งพิมพ์workflowและเทอร์มินัลจะปรากฏขึ้นพร้อมกับ 3 แท็บและชื่อที่ฉันเลือกในการกำหนดโปรไฟล์ที่ใส่ไว้ในแท็บ

ใน.bashrcไฟล์ของฉันฉันวาง:

alias workflow='gnome-terminal --tab-with-profile=Git --tab-with-profile=Run | sublime-text &'

1

Screen หรือ Byobu เป็นวิธีที่ฉันชอบในการจัดการเวิร์กโฟลว์ที่ซับซ้อนในเทอร์มินัลและทั้งคู่ก็สามารถบันทึกการกำหนดค่าของคุณได้


1

การปรับปรุงเล็กน้อยสำหรับสคริปต์ที่มีอยู่ซึ่งตรวจสอบ xdotool ที่ติดตั้งบนระบบและเพิ่มตัวแปรสำหรับการเปลี่ยนเส้นทาง

#!/bin/bash

SAVEPATH=/tmp/termprofile

if [ ! -f /usr/bin/xdotool ]; then
        echo "please install 'xdotool'"
        exit 1
fi

gnome-terminal --save-config=$SAVEPATH

LINES=($(grep -n '\[Terminal' $SAVEPATH | cut -d: -f1))
for ((i=0; i<$(grep '\[Terminal' $SAVEPATH | wc -l); i++))
do
    TITLE=$(xprop -id $WINDOWID WM_NAME | sed -e 's/WM_NAME(STRING) = "//' -e 's/"$//';xdotool key ctrl+Page_Down;)
    sed -ri "$((${LINES[$i]}+$i))s/.*/&\nTitle=$TITLE/" $SAVEPATH
done

1

เมื่อเพิ่มคำตอบของ Nyakin ข้างต้นสคริปต์นี้จะใช้ได้กับหลายหน้าต่างและการกำหนดค่าแท็บและบันทึกชื่อแท็บอย่างถูกต้องสำหรับแท็บทั้งหมดที่มี

ขณะนี้มีการทดสอบกับ gnome-terminal 3.2 แต่สามารถกำหนดค่าสำหรับโปรแกรมเทอร์มินัลใด ๆ ที่มีฟังก์ชั่นการบันทึกการกำหนดค่าที่คล้ายกัน

ต้องใช้เครื่องมือ 'xprop', 'xdotool' และ 'wmctrl'

รหัส:

#!/usr/bin/env bash

FILE="$1"
gnome-terminal --save-config=$FILE

WINDOWLINES=$(wmctrl -lx | grep gnome-terminal.Gnome-terminal)
WINDOWNUM=$(echo "$WINDOWLINES" | wc -l)
TABLISTS=$(grep "^Terminals" $FILE)

for ((i=1; i<=$WINDOWNUM; i++))
do
    WINDOWLINE=$(echo "$WINDOWLINES" | sed -n "$i{p;q}")
    WINDOW_ID=$(echo "$WINDOWLINE" | cut -d' ' -f1)
    #Switch to window
    wmctrl -i -a $WINDOW_ID

    LINE=$(echo "$TABLISTS" | sed -n "$i{p;q}"); LINE=${LINE#Terminals=}
    TERMINALNUM=$(echo "$LINE" | grep -o ';' | wc -l)
    #go to first tab of the window if more than 1
    [ $TERMINALNUM -gt 1 ] && xdotool key alt+1 && sleep .1

    for tab in ${LINE//;/ }
    do
        #Get the current tab title
        TITLE=$(xprop -id $WINDOW_ID WM_NAME | sed -e 's/WM_NAME(STRING) = "//' -e 's/"$//')
        #Insert it into the config file
        [ "$TITLE" == "${TITLE//WM_NAME/}" ] && sed -ri "/\[${tab}\]/aTitle=${TITLE}" $FILE
        #Move to the next tab in the window
        xdotool key ctrl+Page_Down
    done
done

1

ฉันยังค้นหาคุณลักษณะนั้นในเทอร์มินัล Gnome แต่หาไม่เจอ ตัวเลือกที่ดีที่สุดที่ฉันพบในตอนนี้คือใช้ konsole ช่วยให้คุณคั่นหน้าแท็บของคุณเพื่อให้คุณสามารถกลับไปที่พวกเขาได้โดยเลือกจากเมนูที่คั่นหน้า ฉันหวังว่านี่จะช่วยได้.



0

เช่นเดียวกับวิธีการของโยคะแก้ไข >> การตั้งค่าโปรไฟล์ >> ชื่อเรื่องและคำสั่ง >> ชื่อเรื่อง >> เมื่อคำสั่งเทอร์มินัลตั้งชื่อของตนเอง: >> "เตรียมชื่อเริ่มต้น "

จากนั้นดำเนินการ: gnome-terminal --save-config = terminals-cfg

ปิดหน้าต่างเทอร์มินัล

เปิดเทอร์มินัลใหม่และดำเนินการ: gnome-terminal --load-config = terminals-cfg

ใช้งานได้ดีสำหรับฉันทุกชื่อเก็บไว้


0

ไฮเปอร์ ( https://github.com/zeit/hyper ) เป็นทางเลือกข้ามแพลตฟอร์มที่ดีซึ่งเขียนด้วย JavaScript และรวมเข้ากับ Electron

มีการประชาสัมพันธ์ที่จะเพิ่มการสนับสนุนสำหรับการบันทึกเซสชัน / คืนค่าออกจากกล่อง: https://github.com/zeit/hyper/pull/945

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.