Обрабатывать содержимое буфера обмена в Mac OS?

0

Я хочу посмотреть, есть ли инструмент или сценарий, который я могу использовать для изменения содержимого буфера обмена на лету.

Часто, когда я пишу код, я хотел бы взять строку текста и сделать из нее слаг . Вместо того, чтобы перепечатывать содержимое в формате слагов, было бы замечательно, если бы при копировании оно было заменено на слаг.

Например: «Барбекю с друзьями» → «Барбекю с друзьями»

Знаете какие-либо приложения или Applescripts, которые могут помочь с этим? Очень признателен.

Крис Уллиотт
источник

Ответы:

0

Я соединил сценарии здесь и здесь, чтобы создать один сценарий, который будет убивать все, что находится в буфере обмена.

set theclip to the clipboard contents
on normalize(the_string)
    set p_script to ¬
        "# -*- coding: utf-8 -*-
import unicodedata, sys

def normalize(x):
    normal_form_1 = 'NFKD'
    normal_form_2 = 'NFC'
    x = unicodedata.normalize(normal_form_2, x)
    x = x.lower()
    x = x.replace(u'ß', u'ss')
    x = x.replace(u'å', u'aa')
    x = unicodedata.normalize(normal_form_1, x)
    x = u''.join([c for c in x if not unicodedata.combining(c)])
    x = x.encode('utf-8')
    return x
arg = sys.argv[1].decode('utf-8')
x = normalize(arg)
print x"

    set p_script to quoted form of p_script
    set the_string to quoted form of the_string

    return (do shell script ("python -c " & p_script & " " & the_string))
end normalize
on change_case(this_text)
    set the comparison_string to "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    set the source_string to "abcdefghijklmnopqrstuvwxyz"
    set the new_text to ""
    repeat with this_char in this_text
        set x to the offset of this_char in the comparison_string
        if x is not 0 then
            set the new_text to (the new_text & character x of the source_string) as string
        else
            set the new_text to (the new_text & this_char) as string
        end if
    end repeat
    return the new_text
end change_case
on replace_chars(this_text, search_string, replacement_string)
    set AppleScript's text item delimiters to the search_string
    set the item_list to every text item of this_text
    set AppleScript's text item delimiters to the replacement_string
    set this_text to the item_list as string
    set AppleScript's text item delimiters to ""
    return this_text
end replace_chars

set theresult to normalize(theclip)
set theresult to replace_chars(theresult, " ", "-")
set theresult to change_case(theresult)

edit 1 Если вы хотите добавить строку для использования в качестве URL, добавьте это в конец этого скрипта:

set theresult to replace_chars(theresult, "%", "%25")
set theresult to replace_chars(theresult, "<", "%3C")
set theresult to replace_chars(theresult, ">", "%3E")
set theresult to replace_chars(theresult, "#", "%23")
set theresult to replace_chars(theresult, "{", "%7B")
set theresult to replace_chars(theresult, "}", "%7D")
set theresult to replace_chars(theresult, "|", "%7C")
set theresult to replace_chars(theresult, "\\", "%5C")
set theresult to replace_chars(theresult, "^", "%5E")
set theresult to replace_chars(theresult, "~", "%7E")
set theresult to replace_chars(theresult, "[", "%5B")
set theresult to replace_chars(theresult, "]", "%5D")
set theresult to replace_chars(theresult, "`", "%60")
set theresult to replace_chars(theresult, ";", "%3B")
set theresult to replace_chars(theresult, "/", "%2F")
set theresult to replace_chars(theresult, "?", "%3F")
set theresult to replace_chars(theresult, ":", "%3A")
set theresult to replace_chars(theresult, "@", "%40")
set theresult to replace_chars(theresult, "=", "%3D")
set theresult to replace_chars(theresult, "&", "%26")
set theresult to replace_chars(theresult, "$", "%24")
Алекс Пламб
источник
0

Я использую такие функции:

f() {
  (. ~/Scripts/f; "$@")
}

ff() {
  pbpaste | f "$@" | pbcopy
}

(Однако я ~/Scripts/fчаще использую функции из emacs и из текстовых представлений OS X).

~/Scripts/f может содержать такую ​​функцию:

slug() {
  LC_ALL=C tr A-Z a-z | LC_ALL=C tr -cs a-z0-9 - | sed 's/^-//;s/-$//'
}

tr -cявляется дополнением и tr -sсжимает несколько дефисов в один дефис.

LRI
источник
0

У меня есть скрипт, который выполняет аналогичное действие с именами файлов, хотя я заменяю пробелы подчеркиванием. Вы можете использовать что-то вроде:

pbpaste | sed -e 's/ /-/g' | awk '{print tolower($0)}' | pbcopy 

в сочетании с чуть-чуть яблочного сценария в форме:

do shell script "pbpaste | sed -e 's/ /-/g' | awk '{print tolower($0)}' | pbcopy" 
unforswearing
источник