Giter VIP home page Giter VIP logo

org-cliplink's Introduction

http://melpa.org/packages/org-cliplink-badge.svg https://travis-ci.org/rexim/org-cliplink.svg?branch=master https://coveralls.io/repos/rexim/org-cliplink/badge.svg

org-cliplink

http://i.imgur.com/oA0birm.gif

A simple command that takes a URL from the clipboard and inserts an org-mode link with a title of a page found by the URL into the current buffer.

This code was a part of my Emacs config almost a year. I decided to publish it as a separate package in case someone needs this feature too.

Usage

org-cliplink

Bind org-cliplink function to something. For example, put this line in your init file:

(global-set-key (kbd "C-x p i") 'org-cliplink)

Then copy any http/https URL to the clipboard, switch to the Emacs window and hit C-x p i.

org-cliplink-capture

org-cliplink version for org-capture templates. Makes synchronous request. Returns the link instead of inserting it to the current buffer. Doesn’t support Basic Auth. Doesn’t support cURL transport.

Here is how it’s supposed to be used in org-capture-templates:

(setq org-capture-templates
   '(("K" "Cliplink capture task" entry (file "")
      "* TODO %(org-cliplink-capture) \n  SCHEDULED: %t\n" :empty-lines 1)))

Custom Transformers

You can actually customize how org-cliplink transforms and inserts url and title to the current buffer. To do that use org-cliplink-insert-transformed-title function. It takes the URL and a CALLBACK which is invoked when the title is retrieved.

For example, if you want to strip off Github - <description>: from the GitHub titles you can implement the following custom-org-cliplink function and use it instead of the original org-cliplink:

(defun custom-org-cliplink ()
  (interactive)
  (org-cliplink-insert-transformed-title
   (org-cliplink-clipboard-content)     ;take the URL from the CLIPBOARD
   (lambda (url title)
     (let* ((parsed-url (url-generic-parse-url url)) ;parse the url
            (clean-title
             (cond
              ;; if the host is github.com, cleanup the title
              ((string= (url-host parsed-url) "github.com")
               (replace-regexp-in-string "GitHub - .*: \\(.*\\)" "\\1" title))
              ;; otherwise keep the original title
              (t title))))
       ;; forward the title to the default org-cliplink transformer
       (org-cliplink-org-mode-link-transformer url clean-title)))))

Requirements

  • Linux
  • Emacs version 24.4+
  • cURL 7.35.0+ (optional)

Windows

Windows is not officially supported until #35 is resolved.

  • GnuTLS — if you use Emacs installation from the official GNU FTP server — ftp://ftp.gnu.org/gnu/emacs/windows/ — you may simply download the latest version of GnuTLS from ftp://ftp.gnutls.org/gcrypt/gnutls/w32/ and copy the content of the downloaded archive to the emacs installation folder.

Bugs

https://github.com/rexim/org-cliplink/labels/bug

Development

  1. open org-cliplink.el in Emacs;
  2. change something;
  3. M-x eval-buffer RET;
  4. manual testing;
  5. go to 3 until it’s done;

Automated testing

For automated testing you need to install Cask first.

To run unit tests:

$ cask # only once to download development dependencies
$ cask exec ert-runner

To run integration and unit tests together:

$ ./run-travis-ci.sh

This exact script is run on every push to org-cliplink GitHub repo on Travis CI (that’s why it’s called run-travis-ci.sh). This script starts up a testing web-server, executes integrations tests defined in *-integration-tests.el files and executes unit tests after that.

You can start the testing web-server standalone:

$ ./run-testing-server.py

It requires Python 2.7.6+. It will serve test-data/site folder on different ports with different features (like HTTPS, Gziped content, Basic Auth, etc.).

To stop the server just ^C it.

The automated testing stuff was tested only under Linux so far.

Contribution

This command doesn’t handle some cases (like different encodings) but I do my best to improve it. If you find this code useful and want to make a contribution I’m waiting for your pull requests. :)

Thanks.

org-cliplink's People

Contributors

rexim avatar miciah avatar notevenaperson avatar d12frosted avatar 15cm avatar purcell avatar bb2020 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.