Конвертация длинных ссылок в короткие

    Небольшой скрипт для приведение URL в емаксе в приличный вид. Работает через сервис bit.ly.

    Интерфейс представлен функцией short-url-dwim. Если она вызвана, когда курсор находится над URL (указания протокола требуется), то URL заменяется на короткую ссылку. В другом случае будет предложено ввести URL в минибуфере, короткая ссылка будет вставлена на место курсора.
    Сообщения об ошибках выводятся в минибуфере.

    Код скрипта:


    (defvar short-url-user "emacsshorturl")
    (defvar short-url-apiKey "R_ac13b2e481b5a73db361ddfa1430fef5")

    (defun short-url (url place-url)
    (unless url (error "Url is nil"))
    (let ((reply (replace-regexp-in-string
    "\n" ""
    (shell-command-to-string
    (concat "curl --url \"api.bit.ly/shorten\" -F version=\"2.0.1\" -F"
    "longUrl=\"" url "\""
    " -F login=\"" short-url-user
    "\" -F apiKey=\"" short-url-apiKey
    "\" 2> /dev/null")))))
    (when (string-match ".*\"errorMessage\": \"\\([^\"]+\\)\".*" reply)
    (error (concat
    "ERROR: "
    (replace-regexp-in-string
    ".*\"errorMessage\": \"\\([^\"]+\\)\".*"
    "\\1" reply))))
    (let ((shortUrl (replace-regexp-in-string
    ".*\"shortUrl\": \"\\([^\"]*\\)\".*"
    "\\1" reply)))
    (when place-url
    (delete-region (car place-url) (cdr place-url)))
    (insert shortUrl))))

    (defun short-url-dwim ()
    (interactive)
    (let ((bounds-url (bounds-of-thing-at-point 'url)))
    (if bounds-url
    (short-url (thing-at-point 'url) bounds-url)
    (short-url-user-url (read-from-minibuffer "URL: ")))))

    (provide 'short-url)

    Установка и настройка


    Код необходимо поместить в файл c именем «short-url.el» в вашу load-path папку. Далее в .emacs поместить следующий код:

    (require 'short-url)

    Крайне рекомендую зарегистрироваться на bit.ly и настроить скрипт на свой аккаунт. Для этог есть как минимум 2 причины:
    • У вас будет статистика посещения ваших ссылок.
    • У вас ничего не отвалится, если что-то изменится с аккаунтом установленным по умолчанию.

    Для этого допишите в .emacs следующее:

    (setq short-url-user <Ваш логин>)
    (setq short-url-apiKey <Ваш apiKey>)
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 21

      0
      Отличный пост) Смотрю Emacs с разных сторон, забавная штука которой много лет, но что на столько она расширяемая я себе не представлял.)
        0
        Emacs это интерпретатор языка программирования elisp — чему тут удивляться, тут и irc/jabber/почта есть.
          0
          И тетрис с психоаналитиком(doctor если память не изменяет)…
            0
            Ещё текстовый квест: dunnet (в emacs 23.x — builtin)
              0
              Вот такая вот забавная была у него как-то ревизия bit.ly/sHJAM
              Спасибо
        0
        В twit.el есть свой сокращатель:

        (defun compress-url (url)
          "Compress a URL using is.gd."
          (let* ((returned-request
                   (car (twit-parse-xml
                         (concat "http://is.gd/api.php?longurl=" url) "GET")))
                  (url-idx (string-match "http://" returned-request 160))
                  (compressed-url
                   (if url-idx
                       (substring returned-request url-idx -1)
                       "is.gd is down :(")))
               compressed-url))
        


        Принимает url в качестве аргумента
          0
          Есть много аналогов, но вот для битли я не видел. А его я выбрал просто по историческим причинам.

          Использую twitter.el, по этому не охота тянуть кучу всего остального.
            0
            Зачем же тянуть, эту функцию можно и в twitter.el использовать, и без твиттера.
          0
          Удивление вот почему — я слышал про lisp, смотрел как на нем пишут, но сам не пробовал. Когда пришел ко мне первый мак я поверхностно все изучил. А сейчас все более глубже изучаю) И как коснулся текстового редактора — а их такое множетво и комбайном среди них Emacs стоит. Да еще и видеокурс поглядел — фантастика, почему раньше не пробовал не знаю)) Спасибо, отличная среда и ваш пост)
            0
            Если не секрет какой лисп пробуете? А вообще чудесный язык, после курсового по приложениям к базам данных с написанием своего dsl (по крайней мере некоторого подобия dsl) на макросах для описания графического интерфейса, стало как-то грустно писать на других языках. Хотя и синтаксис в нём жестокий.

            Не забывайте про второй правильный редактор — vim. Быть модет вам он больше подойдёт. (а по возможностям примерно одно и тоже)
            0
            На самом деле я когда-то пытался запустить и честно найти документацию по нему — в то время ничего не смог найти( Слышал, что в AutoCAD используется) Использую несколько редакторов под *nix — наипростейший nano (приглянулся из-за простоты), vim и emacs. Правда с первыми 2 быстро подружился, а вот с комбайном сложнее)) Но в последние несколько недель все чаще стараюсь использовать) Курсовые в свое время я писал на VB еще первом под DOS) Вполне успшно сдавались, а потом научился на С — вот до некоторого момента другого ничего не пробовал, а сейчас у меня на повесте Ruby и RoR).
              0
              Да и сейчас пожалуй наиболее вменяемой документацией на русском по нему является вот этот незаконченный перевод. bit.ly/1nPYnD + стандарт (речь о комон лисп)

              Как говорят руби, это для тех кто не осилил лисп. На сколько это утверждение верно сказать трудно, но их объединяет то, что в обоих есть хорошо выверенное концептуальное единство.
                0
                НУ я б не сказал кто не осилил)) Это скажем так две разные вещи) Руби — объекты) Лисп (насколько я представляю) списки)) Но и тот и другой великолепны каждый по своему))
                  0
                  Но в отношение синтаксиса, оно пожалуй обосновано. С лиспом тут всё довольно глухо.

                  Лисп это единство данных и кода. + функционалы. Есть кстати CLOS, очень специфичная реализация ооп, по началу использовать её фишки очень трудно, но потом их начинает не хватать. Вообще есть мнение, что это не какое не ооп (хотя и очень похоже), а система с автоматическим формированием методов. Там центральное место занимают функции, которые воздействуют на объекты, а не объекты, которые делают то, что им сказано.
                    0
                    Хм) О клосе тоже слышал, но не находил рабочей реализации среды. Пробовал eifel — но ничего толком тоже не нашел. Когда читал про ООП Буча, долго искал нормальную реализацию. Потом были паттерны — тепепрь на основании этого постигаю Дао и Джен Ruby и скриптовых языков вообще. Сервера мои выполняют часть нужных действий под powershell) Так что я использую скрипты давненько и они мне все больше нравятся. Вот пару дней назад достал опять .Net думаю повторить. А вот Lisp и аналогичную экзотику тяжковато мне осилить((
                      0
                      sbcl, clisp. Первый считается лучше по производительности, второй дружелюбнее. А в теории, подойдёт любая реализация поддерживающая common lisp. Если всё-таки решитесь опробовать, то slime как среда пожалуй лучший выбор (модуль для емакса).
                        0
                        А скачать попробовать где? Среда аналогичная Netbeans, VS есть? Или просто собирать в текстовых редакторах, а потом скармливать?
                          0
                          slime прикручивается к емаксу. Скачать common-lisp.net/project/slime/
                          У меня настраивается так
                          (add-to-list 'load-path "~/.emacs.d/slime")
                          (setq inferior-lisp-program "/opt/local/bin/sbcl"); адрес к бинарнику
                          (require 'slime)
                          (slime-setup)
                          (setf slime-net-coding-system 'utf-8-unix)

                          Сам sbcl тут sbcl.sourceforge.net/
                          Но под никсы лучше ставить с пакетов (под винду тоже есть, но как настраивать совсем не знаю)

                          Как проще всего это попробовать и под это разрабатывать почитайте тут: bit.ly/18vsVt Всё делается из емакса
                            0
                            Спасибо большое))
                          0
                          Еще пробовал tcl/tk и с недавних пор к python присматриваюсь))
                            0
                            Для лиспа есть модуль ltk. Сильно аскетичный, с плохой документацией. Именно для описания интерфейсов на нём dsl делал. Если интересно могу оформить и выложить.

              Only users with full accounts can post comments. Log in, please.