Я использую Ubuntu 14.04, но я предполагаю, что эта вещь видна почти во всех версиях Ubuntu.
Когда я копирую файл с использования наутилуса Ctrlc и вставляю в gedit, это вставляет текст как /home/urvish/.bash_history
который идеально подходит для меня. Но когда я вставляю его в использовании терминала CtrlShiftv, это идет как file:///home/urvish/.bash_history
.
Есть ли любой способ, которым я могу удалить это предыдущее file://
при вставке? (Я знаю, что могу сделать это вручную, но я делаю это очень часто, и всегда выполнение вручную время, беря).
Я немного опаздываю стороне, но я вижу эту проблему о ПОМОЩНИКЕ Linux Mint (терминал помощника).
кажется, что просто захват содержания буфера обмена и затем пасование назад его к буферу обмена снова будут достаточны. Если это верно, затем нам нужны только проблемы самим с тестированием, если содержание буфера обмена включает один или несколько путей правильного файла и отъезда остальных в безопасности.
следующее отбросит префикс file:// на Монетном дворе:
#!/usr/bin/env python
import os
import pyperclip
import time
class ClipboardWatcher():
def __init__(self,latency):
self.clipboard_last = pyperclip.paste()
self.clipboard_now = None
self.latency = latency
def check_clipboard(self):
# assume clipboard is space delimited list of valid paths
as_list = self.clipboard_now.split()
valid_path = [ i for i in as_list if os.path.exists(i) ]
if len(as_list) == len(valid_path): # assumption true
self.clipboard_now = " ".join(valid_path)
return True
return False
def run(self):
while True:
time.sleep(self.latency)
self.clipboard_now = pyperclip.paste()
if self.clipboard_now != self.clipboard_last:
if self.check_clipboard():
pyperclip.copy(self.clipboard_now)
print "Matched:", self.clipboard_now
self.clipboard_last = self.clipboard_now
clippy = ClipboardWatcher(1) # watch every n seconds
clippy.run()
, Если бы Вы собирались реализовать этот вид подхода затем, Вы, вероятно, также хотели бы к daemonize его. pyperclip модуль может иметься с:
sudo pip install pyperclip
От прочтения документации Gtk кажется, что существует 2 способа, которыми программа может рассматривать содержание буфера обмена - простой текст и список URIs в файл. По любой причине, gnome-terminal
решенный, что это будет хорошая идея дифференцироваться между два, и поэтому это при копировании файла от Наутилуса до gnome-terminal
, терминал получает список URI, в то время как другие программы - только простой текст.
Автоматическое редактирование буфера обмена было бы немного неприятно (хотя я все еще преследую идею) - мы должны были бы определить способ обнаружить, где Вы пытаетесь вставить содержание буфера обмена и запускаете персистентный скрипт, который редактирует сценарий в простой текст (эффективно удаляющий URIs), будет препятствовать тому, чтобы Вы копировали файлы от одного окна Nautilus до другого.
Перетаскивание является, вероятно, простым решением. Но так как подход сценариев требовали, я придумал идею для двух ручных подходов. Каждый полагается на Наутилус, создал в функции добавляющих сценариев к Вашему контекстному меню. Другой при вводе определенного ярлыка прежде, чем вставить в терминал гнома.
Этот сценарий должен быть помещен в ~/.local/share/nautilus/scripts
папка и сделанный исполняемый файл через chmod +x ~/.local/share/nautilus/scripts/scriptname.sh
или через щелчок правой кнопкой по файлу и редактирование вкладки Permissions в свойствах. Эффективно, это позволяет Вам копировать путь к выбранным файлам как заключенные в кавычки строки и с file://
часть удалена.
Для использования его выберите файл или файлы в Наутилусе, и щелкните правой кнопкой по ним. Выбрать Scripts
меню-> your_script_name.py
.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from gi.repository import Gtk, Gdk
import sys
import os
import time
import subprocess
import signal
import urllib.parse
import threading
def autoquit(*args):
subprocess.call(['zenity','--info'])
time.sleep(1)
Gtk.main_quit()
def main():
uris = os.getenv("NAUTILUS_SCRIPT_SELECTED_URIS")
new_text = " ".join([ "'" + urllib.parse.unquote(i).replace('file://','') + "'"
for i in uris.split()])
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
if clip.set_text(new_text,-1):
thread = threading.Thread(target=autoquit)
thread.start()
Gtk.main()
if __name__ == '__main__':
try:
main()
except Exception as e:
subprocess.call(['zenity','--info','--text',str(e)])
Этот подход полагается на идею запустить скрипт Python ниже прямо перед вставкой в gnome-terminal
. Можно назвать его от gnome-terminal
вручную как команда, или связывают это с сочетанием клавиш. Таким образом, с методом ярлыка, я связал бы его с CtrlShiftB (потому что это - B, и V близки на клавиатуре), и каждый раз, когда я должен вставить от Наутилуса, я поразил CtrlShiftB для редактирования, затем CtrlShiftV для вставки
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from gi.repository import Gtk, Gdk
import subprocess
import urllib.parse
import signal
import sys
def unquote_uri(*args):
uris = args[-2]
new_text = " ".join([ "'" + str(urllib.parse.unquote(i).replace('file://','')) + "'"
for i in uris])
print(new_text)
args[-3].clear()
args[-3].set_text(new_text,-1)
Gtk.main_quit()
def main():
cached = str()
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clip.request_uris(unquote_uri, None)
signal.signal(signal.SIGINT,signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__': main()
Отказ от ответственности: ответьте все еще разрабатываемый; дополнительное содержание/идеи может быть добавлено позже