เปิดเทอร์มินัลจาก emacs


11

มีวิธีที่รวดเร็ว (แป้นพิมพ์ลัด) เพื่อเปิดเทอร์มินัลอีมูเลเตอร์ (ในกรณีของฉัน urxvt) ในไดเรกทอรีเดียวกันกับไฟล์ในบัฟเฟอร์ emacs ปัจจุบันหรือไม่?

คำตอบ:


15

การรวมกันM-!ช่วยให้คุณสามารถเปิดคำสั่งเชลล์ urxvtคุณสามารถใช้มันเพื่อเปิดแยกต่างหาก

M-! urxvt RET

ฉันเพิ่งลองด้วยxterm(ฉันไม่มีurxvt) และมันก็เปิดในไดเรกทอรีเดียวกับไฟล์ในบัฟเฟอร์

หากคุณต้องการกำหนดทางลัดให้เพิ่มสิ่งที่คล้ายกันในไฟล์ init ของคุณ:

(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))

ในกรณีของฉันฉันผูกพันทางลัดไปยัง: Ctrl+ -CS


9

M-x termผมมักจะใช้

คุณสามารถเช็คเอาต์:

  • M-x terminal
  • M-x shell

M-x termกำลังเปิดตัวโปรแกรมจำลองเทอร์มินัลอย่างมีประสิทธิภาพที่เขียนด้วย elisp จากความช่วยเหลือ:

คำ
M-x ... RET เริ่มต้นเทอร์มินัลอีมูเลเตอร์ในบัฟเฟอร์ใหม่ (โปรแกรมคำศัพท์)

term เป็นฟังก์ชั่น Lisp ที่คอมไพล์แบบอินเตอร์แอคทีฟใน `term.el '

เริ่ม terminal-emulator ในบัฟเฟอร์ใหม่ บัฟเฟอร์อยู่ในโหมด Term ดู`term-mode 'สำหรับคำสั่งที่ใช้ในบัฟเฟอร์นั้น

พิมพ์ Cc b เพื่อสลับไปยังบัฟเฟอร์อื่น


1
ขอบคุณฉันไม่ทราบM-x termดูเหมือนดี แต่ไม่ใช่สิ่งที่ฉันต้องการ ฉันต้องการเริ่มต้นไม่ใช่เชลล์ (เช่นbashหรือzshใน emacs buffer แต่เป็น terminal emulator ( xtermหรือurxvt... )
นักเรียน

1
@ นักเรียนได้ดูmulti-term
Ulrich Dangel

8

คำสั่ง emacs M-x shellจะเริ่มเชลล์ในบัฟเฟอร์ใหม่ (หรือเปลี่ยนเป็นเชลล์บัฟเฟอร์ที่มีอยู่หากมี) หากเป็นบัฟเฟอร์ใหม่เชลล์จะเริ่มต้นในไดเรกทอรีของไฟล์ที่เข้าชมในบัฟเฟอร์ปัจจุบัน หากเป็นบัฟเฟอร์เชลล์ที่มีอยู่จะยังคงอยู่ในไดเรกทอรีที่คุณทิ้งไว้หลังจากใช้งานครั้งล่าสุด เพื่อให้ได้พฤติกรรมตามที่คุณต้องการอย่าลืมฆ่าบัฟเฟอร์ของเชลล์เมื่อคุณทำเสร็จแล้ว ( C-x k)

หากM-x shellพิมพ์มากเกินไปคุณสามารถตั้งค่าโกลบอลคีย์เพื่อเริ่มเชลล์สำหรับคุณ สิ่งที่ต้องการ(global-set-key (kbd "C-x S") 'shell)ในไฟล์เริ่มต้นของคุณควรทำ (แต่ระวังอย่าปกปิดคำสั่งที่มีประโยชน์อื่นด้วยทางลัด!

นอกจากนี้โปรดทราบว่านี่เป็น "เทอร์มินัลโง่" ดังนั้นคำสั่งบางอย่างเช่นgit commitตัวเลือกที่ต้องการเช่น-mและรหัสผ่านจะเป็นข้อความธรรมดาบนหน้าจอของคุณ


3

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

ตั้งแต่ฉันอายุน้อยแล้วฉันแยกการใช้งานระหว่าง emacs และ bash ฉันเรียก defun ต่อไปนี้จาก emacs:

(defun bk-konsoles ()
  "Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
  (interactive)
  (let ((curDir default-directory))
    (shell-command (concat "bk_konsoles.bash \"" curDir "\" 2>&1 > /dev/null & disown") nil nil)
    (kill-buffer "*Shell Command Output*")))

defun เรียกสคริปต์ทุบตีbk_konsoles.bash:

#!/bin/bash

myPath=`echo $@ | sed 's/.$//'`

runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
    if [ "$@"!="" ]; then
        konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
    else
        konsole --new-tab 2>&1 > /dev/null
    fi
    wmctrl -a " – Konsole"
else
    konsole
fi

1

shell-modeส่วนใหญ่ของการใช้เวลาฉัน ดังนั้นผมจึงหนักใช้เปลือกที่นี่ แต่เมื่อฉันต้องการขั้วภายนอก ฉันใช้ urxvt-client กับ tmux โดยใช้สิ่งนี้:

  • สร้างไฟล์ชื่อ 'term-here' ใน / usr / local / bin / บรรจุ
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
  • สร้างฟังก์ชั่นใหม่ใน emacs
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • ผูกไว้กับคีย์ที่คุณชื่นชอบ

สิ่งนี้จะเปิด urxvt-client (ด้วย tmux) ในไดเรกทอรีปัจจุบันของคุณ ฉันผูกมันในโหมด dire-map

(use-package dired
  :ensure nil
  :ensure-system-package urxvt
  :bind ((:map dired-mode-map
           ("," . term-here))))

ฉันเลือก urxvt-client เพราะมันรวดเร็วและง่าย อย่าลืมเรียกใช้ urxvt-daemon เมื่อเริ่มต้น


1

หากคุณhelmติดตั้งเฟรมเวิร์กความสมบูรณ์แล้วคุณสามารถใช้helm-run-external-command (C-x c C-c C-x)เพื่อรันเทอร์มินัลอีมูเลเตอร์ที่คุณเลือกหรือโปรแกรมภายนอกอื่น ๆ ในไดเรกทอรีของบัฟเฟอร์ปัจจุบัน

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