อัปเดตไดเรกทอรีเริ่มต้นโดยอัตโนมัติเมื่อ PWD เปลี่ยนแปลงในโหมดเชลล์และโหมดคำศัพท์


12

มีตัวเลือกใด ๆ หรือแพคเกจซึ่งสาเหตุที่default-directoryได้รับการปรับปรุงถ้าไดเรกทอรีการทำงานที่มีการเปลี่ยนแปลงในshell-modeและterm-mode? cdนั่นคือเมื่อใช้แต่การแก้ปัญหาจะต้องแข็งแกร่งกว่าเพียงแค่มองหาคำสั่งนี้และอาจจะมีคนอื่น ๆ อีกสองสามคน - มันควรตรวจสอบคุณค่าของ$PWDคำสั่งทุกคำสั่งหลังจากนั้นฉันคิดว่า

ที่สำคัญกว่านั้นก็ควรจะทำงานเมื่อเชื่อมต่อกับเครื่องระยะไกลจากภายในshell-modeหรือterm-modeบัฟเฟอร์ซึ่งถูกสร้างขึ้นครั้งแรกด้วยdefault-directoryการเป็นไดเรกทอรีท้องถิ่น นั่นเป็นคุณสมบัติที่ฉันต้องการจริงๆ: สามารถบอกทางโปรแกรมว่าคำสั่งที่ฉันพิมพ์ลงในเทอร์มินัลนั้นรันบนเครื่องระยะไกลหรือไม่ ฉันต้องการได้รับข้อมูลในรูปแบบของการตั้งค่าdefault-directoryและรูปแบบที่ถูกต้องหากมีวิธีการที่จะได้รับแล้วเครื่องมือในการทำเช่นนี้จะทำงานในพื้นที่ตามที่อธิบายไว้ข้างต้น


คุณมองเข้าไปdirtrack-mode? มันมีตะขอที่สามารถทำสิ่งที่คุณต้องการ
J David Smith

คำตอบ:


12

dirtrack-modeผมคิดว่าส่วนแรกของคำถามของคุณสามารถทำได้ด้วย ขั้นแรกให้คุณตั้งค่า shell prompt เพื่อรวมไดเรกทอรีทำงานปัจจุบัน ถัดไปคุณตั้งค่าdirtrack-listเป็น regex ที่บอกdirtrack-modeวิธีแยกมัน ตัวอย่าง: ฉันตั้งค่าPS1ใน Bash เป็น:

export PS1="[\h:\w] $ "

และใน Emacs ฉันตั้งdirtrack-listและเปิดdirtrack-mode:

(set-variable 'dirtrack-list '("^.*[^ ]+:\\(.*\\)]" 1 nil))
(dirtrack-mode 1)

(นำมาจากโพสต์บล็อกที่ยอดเยี่ยมนี้)

หลังจากนั้นฉันสามารถเปลี่ยนไดเรกทอรีได้ตามต้องการและdefault-directoryเปลี่ยนแปลงได้ตามต้องการ นอกจากนี้ยังทำงานถ้าในเปลือกผม SSH ไปยังเครื่องระยะไกลที่ฉันได้ตั้งพรอมต์ทางเดียวกัน - cd /etc/apache2บนเครื่องระยะไกลมีการเปลี่ยนแปลงไปdefault-directory /etc/apache2อย่างไรก็ตามโปรดทราบว่านี่เป็นแบบโลคัล - ในกรณีของรีโมตเครื่องdefault-directoryจะยังคงถูกตั้งค่าเป็น/etc/apache2บนเครื่องโลคัล

หากฉันเข้าใจส่วนที่สองของคำถามของคุณคุณต้องการdefault-directoryตั้งค่าเป็นบางสิ่งเช่นremote-machine:/etc/apache2เมื่อ SSHing ไปยังเครื่องอื่น เมื่อใช้ ssh-elคุณสามารถเรียกใช้ssh-directory-tracking-modeเพื่อทำให้การทำงานนี้ ตัวอย่างเช่นถ้าฉันเรียกใช้M-x sshcd to /etc/apache2จากนั้นเรียกใช้C-x C-fพรอมต์ที่ฉันเห็นคือ:

Find Files or Url: /scp:aardvark@remote-machine:/etc/apache2

คุณสามารถเรียกใช้ 'Mx ssh-directory-tracking-mode' ด้วยมือ แต่สะดวกกว่าที่จะตั้งเป็น hook สำหรับโหมด ssh:

(setq ssh-mode-hook 'ssh-directory-tracking-mode)

ข้อมูลมากกว่านี้:


2
คำตอบที่ยอดเยี่ยมขอบคุณ! ฉันสนใจสิ่งนี้จริง ๆ เพราะแพ็คเกจที่ฉันเขียนมีคุณสมบัติที่พัฒนาขึ้นซึ่งจะทำให้สิ่งนี้เป็นที่ต้องการ มันwith-editorจะถูกใช้โดย Magit รุ่นถัดไป Magit ตัวเองไม่ได้ใช้with-editor's shell-mode/ term-modeสนับสนุนดังนั้นฉันอาจจะไม่ได้บูรณาการนี้ก่อนที่จะปล่อย แต่ข้อมูลที่คุณให้จะทำให้ง่ายขึ้นมากเมื่อฉันทำกับ Magit release และสามารถมุ่งเน้นไปที่สิ่งอื่น ๆ อีกครั้ง
tarsius

นี่คือวิธีการที่จะเริ่มต้นกับwith-editorด้านนอกของ Magit: emacs.stackexchange.com/questions/27/... และปัญหา Magit ที่นำฉันไปถามคำถามนี้: github.com/magit/magit/issues/1638
tarsius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.