Как сделать сам gedit терминал для изменения каталога на местоположение файла, который в настоящее время открывается в gedit? Поскольку по умолчанию я имею к CD, пока я не добираюсь для представления расположения файла в моем gedit-встроенном терминале. Я знаю, что нет никакого прямого способа сделать так. Но если какой-либо длинный путь также возможен, я действительно хочу, чтобы сам встроенный терминал сделал динамично каталог изменения согласно в настоящее время открываемому файлу на любой текущей вкладке, открыт в gedit.
К моему собственному удивлению это может быть сделано. За эти 45 минут я протестировал его, это работало вполне хорошо на самом деле и не перестало работать на мне однажды.
Тем не менее, это должно быть рассмотрено экспериментальная возможность, так как это сделано полностью "снаружи", если можно так выразиться, с помощью xprop
, wmctrl
и xdotool
. Для использования его необходимо будет принять несколько особенностей: это работает хорошо, пока у Вас есть все файлы, снабженные вкладками в одном окне, и Ваш щелчок мышью, для выбора вкладок, должен быть реальным щелчком: если Вы "держите" щелчок, вкладка открыта в новом окне.
Необходимо также знать о том, что различное gedit
вкладки (файлы) совместно используют встроенное окно терминала того. Это означает что cd
команда будет выполнена на переключателе вкладки, независимо от того, что могло бы работать в терминале.
Alltogether, необходимо будет видеть, работает ли он достаточно стабильный в ситуации и если он ведет себя хорошо в способе, которым Вы используете его.
Основной прием основан на том, что gedit по умолчанию имеет каталог файла на свое имя окна. Это используется, чтобы извлечь целенаправленный каталог и установить его, если он изменяется (путем нажатия на другую вкладку gedit окна).
Сценарий, работая в фоновом режиме, проверки:
cd
действия, если две вкладки работают в том же каталоге (который является: если все файлы снабжаются вкладками в одном окне).Затем если a cd
действие необходимо, сценарий перемещает мышь в середину gedit
окно (x-wise), 70 пкс от нижней части окна (y-wise), который определенно будет на терминальном разделе окна. Затем это нажимает, вводитcd
команда + Входит. Вы едва заметите, так как мышь попятилась к ее исходному положению. Необходимо будет дать ему время (appr. 0,5 секунды) для выполнения cd
прежде чем Вы продолжите работать, но снова, Вы, вероятно, не заметите задержку вообще.
Если еще в Вашей системе, установке wmctrl
и xdotool
во-первых:
sudo apt-get install wmctrl
sudo apt-get install xdotool
Скопируйте сценарий ниже в пустой файл, сохраните его как set_directory.py
Выполните его командой:
python3 /path/to/set_directory.py
Я предполагаю, что Вы выполняете его от (минимизированный) gnome-terminal
окно, в то время как Вы работаете с gedit
+ встроенный терминал; иметь его работающий постоянно кажется небольшим излишеством для такой определенной задачи.
#!/usr/bin/env python3
import os
import subprocess
import socket
import time
home = os.environ["HOME"]
last_dr = ""
def get(cmd):
try:
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").strip()
except:
return ""
def execute(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
def get_windowid():
cmd = "xprop -root"
frontmost = [l for l in get(cmd).splitlines() if "ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
return frontmost[:2]+"0"+frontmost[2:]
def get_dirfromname(name):
dr = name[name.find("(")+1:name.find(")")].replace(" ", "\\ ")
if "~" in dr:
dr = dr[dr.find("~"):]
if os.path.exists(dr.replace("~", home+"/")):
return dr
else:
return None
def cd(coords, dr):
currmouse = get("xdotool getmouselocation").split()[:2]
currcoords = (" ").join([it.split(":")[-1] for it in currmouse])
x_set = str(int((int(coords[0])+int(coords[2])/2)))
y_set = str(int(int(coords[1])+int(coords[3])-70))
execute("xdotool mousemove "+x_set+" "+y_set+"&&xdotool click 1")
execute("xdotool type 'cd "+dr+"'"+"&&xdotool key KP_Enter")
execute("xdotool mousemove "+currcoords)
def update_directory():
global last_dr
try:
pid = get("pidof gedit")
except subprocess.CalledProcessError:
pass
else:
wid = get_windowid()
wdata = get("wmctrl -lpG")
wdata = [l for l in wdata.splitlines() if pid in l and wid in l] if len(wdata) != 0 else []
if len(wdata) != 0:
wdata = wdata[0]; coords = wdata.split()[3:7]
wname = wdata.split(socket.gethostname()+" ")[-1]
dr = get_dirfromname(wname)
if dr != None and dr != last_dr:
time.sleep(1)
cd(coords, dr)
last_dr = dr
while True:
update_directory()
time.sleep(1)
Автоматически установите рабочий каталог на в настоящее время передний большая часть файла:
CD на переключателе вкладки
Альтернатива, почти с тем же комфортом, могла быть gedit терминалом, созданным в функции. Только требуется два щелчка мышью (одно право - один оставленный):
Выберите "Change Directory", и окно терминала будет CD к в настоящее время frontmost каталог файла: