나는 수십 개의 터미널을 열고 싶지 않습니다. 노틸러스를 사용할 때 터미널에서 열기 대신 현재 터미널에서 열기 를 추가하는 방법이 있습니까?
답변
더럽거나 말거나, 아래 솔루션은 자주 테스트 한 30 분 동안 완벽하게 작동했습니다. 디렉토리 내에서 파일을 마우스 오른쪽 단추로 클릭하면 솔루션이 작동합니다.
1.
2.
삼.
노틸러스 스크립트
#!/usr/bin/env python3
import subprocess
import os
import time
def replace(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
t = get(["pgrep", "gnome-terminal"])
if t:
w = [l.split()[0] for l in get(["wmctrl", "-lp"]).splitlines() if t in l][0]
# get the current path
current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
# raise the found terminal window
subprocess.call(["wmctrl", "-ia", w])
time.sleep(0.3)
# copy the cd command to clipboard
c1 = "printf 'cd ' | xclip -in -selection c"
c2 = 'echo "'+"'"+dr+"'"+'" | xclip -in -selection c'
# paste & run it
for c in [c1, c2]:
subprocess.call(["/bin/bash", "-c", c])
subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
time.sleep(0.05)
사용하는 방법
-
스크립트
wmctrl
에는xdotool
xclip이 필요합니다 .sudo apt-get install wmctrl xdotool xclip
-
스크립트를 빈 파일에 복사하고에
open_in_terminal
(확장자 없음) 으로 저장하십시오~/.local/share/nautilus/scripts
. 필요한 경우 디렉토리를 작성하십시오. 스크립트를 실행 가능하게 만들기
그게 다야. 로그 아웃했다가 다시 로그인하면 이미지 (2)와 같이 스크립트를 사용할 수 있습니다.
설명
- 파일을 마우스 오른쪽 버튼으로 클릭하면 nautilus ‘를 사용하여 경로를 얻을 수 있습니다
"NAUTILUS_SCRIPT_CURRENT_URI"
. - 스크립트에서 우리는 다음 클립 보드에이 경로를로드 할 수 있습니다 (사용
xclip
) - 결과적으로 스크립트는 (처음 찾은)
gnome-terminal
창을 올리고 경로를 명령 앞에 붙여 넣 습니다cd
. 우리echo
는 전체 라인을 클립 보드에로드하는 데 사용 되었으므로 Return포함되어 있습니다.
노트
- 터미널에서 실행중인 것이 없어야하며 터미널 창이 하나만 열려있는 경우 가장 잘 작동합니다. 여러 개가있는 경우 스크립트는 가장 오래된
gnome-terminal
창을 선택합니다 . - 실제로는 스크립트를 철저히 테스트해야합니다. 내가 그것을 실행하는 동안, 타이밍은 한 번도 문제가되지 않았다. 심지어 터미널 윈도우에 도달하기 위해 데스크탑이 4 개 또는 5 개의 뷰포트를 가로 질러 이동해야 할 때조차 아니었다. 경우 오류가 몇 줄, 그러나 발생할 수있는 이상 우리는 실제로 만들 수 기다릴 터미널 창을 제기하는 스마트 (어) 방식으로. 어떻게되는지 보자. 필요하지 않은 것 같습니다.
- 스크립트는 realpath를 사용하므로 링크 된 디렉토리도 올바르게 작동합니다.
노틸러스 스크립트에 대한 자세한 내용은 여기를 참조하십시오 .
또는 여러 개인 경우 자신의 터미널 창을 선택하십시오
당신은에서 선택할 수 있도록하려면 어떤 당신이 현재 (노틸러스) 디렉토리를 열고 아래의 스크립트를 사용하는 것이 터미널 창.
실제로 작동하는 방식
스크립트
#!/usr/bin/env python3
import subprocess
import os
import time
def replace(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
# check if gnome-terminal runs
pid = get(["pgrep", "gnome-terminal"])
if pid:
t = 0
while t < 30:
# see if the frontmost window is a terminam window
active = get(["xdotool", "getactivewindow"])
if pid in get(["xprop", "-id", active]):
# get the current path
current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
# copy the cd command to clipboard
c1 = "printf 'cd ' | xclip -in -selection c"
c2 = 'echo "'+"'"+dr+"'"+'" | xclip -in -selection c'
# paste & run it
for c in [c1, c2]:
subprocess.call(["/bin/bash", "-c", c])
subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
time.sleep(0.05)
break
else:
t += 1
time.sleep(0.5)
설정
첫 번째 스크립트와 정확히 같습니다.
설명
스크립트는 첫 번째와는 다른 점이 있습니다. 첫 번째 발견 된 터미널 창을 자동으로 올리는 대신 첫 번째 터미널 창에 포커스가있을 때까지 기다립니다. 그런 다음 해당 창의 내부 디렉토리로 cd됩니다.
답변
나는 이것을 할 수있는 방법이 없다고 확신하지만 도움이 될 수있는 해결 방법이 있습니다.
항상 노틸러스에서 터미널 창으로 디렉토리를 끌어다 놓을 수 있으며 노틸러스는 해당 디렉토리를 전달하여 명령 행에 붙여 넣습니다. 따라서 cd
폴더를 터미널로 끌어서 Enter 키를 누르십시오.
답변
가장 간단한 방법은 다음과 같습니다.
- 노틸러스에서 Ctrl+을 누르면 L주소 표시 줄이 편집을 위해 열립니다. Ctrl+를 누르십시오C
- 터미널로 전환하고
cd
, 공백을 입력 한 다음 Shift+ Insert (or INS)를 입력하여 경로를 붙여 넣습니다. 을 누르십시오 Enter.
스크립트 나 추가 작업이 필요 없습니다.
답변
내 의견으로는이 문제를 해결하지 않는 유일한 우아한 방법은 tmux 와 같은 터미널 멀티플렉서를 사용하고 파일 관리자를 갖는 것입니다
- 기존 세션 내에서 새 터미널 창을 열거 나
- 새로운 tmux 세션으로 새로운 터미널 에뮬레이터를 시작하십시오.
다음 쉘 스크립트는이를 달성합니다.
#!/bin/sh
set -e
TMUX=tmux
#TERMINAL_EMULATOR='gnome-terminal -x'
cd "$1"
if $TMUX has-session; then
exec $TMUX new-window
else
exec ${TERMINAL_EMULATOR:-x-terminal-emulator -x} $TMUX
fi
TERMINAL_EMULATOR
새 터미널 창에 대해 원하는 터미널 에뮬레이터를 보유하고 있습니다 (기본 설정이 마음에 들지 않으면 x-terminal-emulator
) 에뮬레이터 내에서 명령을 실행할 수있는 명령 행 옵션이 있습니다.
파일 관리자에서 다른 파일 형식 연결과 마찬가지로 파일 처리기 스크립트를 등록 할 수 있습니다.