удалите предыдущее “file://” при вставке в терминале гнома

Я использую Ubuntu 14.04, но я предполагаю, что эта вещь видна почти во всех версиях Ubuntu.

Когда я копирую файл с использования наутилуса Ctrlc и вставляю в gedit, это вставляет текст как /home/urvish/.bash_history который идеально подходит для меня. Но когда я вставляю его в использовании терминала CtrlShiftv, это идет как file:///home/urvish/.bash_history.

Есть ли любой способ, которым я могу удалить это предыдущее file:// при вставке? (Я знаю, что могу сделать это вручную, но я делаю это очень часто, и всегда выполнение вручную время, беря).

2
задан 9 February 2017 в 08:28

2 ответа

Я немного опаздываю стороне, но я вижу эту проблему о ПОМОЩНИКЕ 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
0
ответ дан 2 December 2019 в 09:26

Что делает терминал гнома

От прочтения документации Gtk кажется, что существует 2 способа, которыми программа может рассматривать содержание буфера обмена - простой текст и список URIs в файл. По любой причине, gnome-terminal решенный, что это будет хорошая идея дифференцироваться между два, и поэтому это при копировании файла от Наутилуса до gnome-terminal, терминал получает список URI, в то время как другие программы - только простой текст.

Автоматическое редактирование буфера обмена было бы немного неприятно (хотя я все еще преследую идею) - мы должны были бы определить способ обнаружить, где Вы пытаетесь вставить содержание буфера обмена и запускаете персистентный скрипт, который редактирует сценарий в простой текст (эффективно удаляющий URIs), будет препятствовать тому, чтобы Вы копировали файлы от одного окна Nautilus до другого.

Перетаскивание является, вероятно, простым решением. Но так как подход сценариев требовали, я придумал идею для двух ручных подходов. Каждый полагается на Наутилус, создал в функции добавляющих сценариев к Вашему контекстному меню. Другой при вводе определенного ярлыка прежде, чем вставить в терминал гнома.

Ручной подход сценария, версия 1

Этот сценарий должен быть помещен в ~/.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)])

Ручной подход сценария, версия 2

Этот подход полагается на идею запустить скрипт 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()

Отказ от ответственности: ответьте все еще разрабатываемый; дополнительное содержание/идеи может быть добавлено позже

0
ответ дан 2 December 2019 в 09:26

Другие вопросы по тегам:

Похожие вопросы: