aboutsummaryrefslogtreecommitdiffstats
path: root/echopy.js
blob: faca7e4868bdcb1b7436359155ffdd1a9ec7b62e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// ==VimperatorPlugin==
// @name           echopy
// @description    echo and copy
// @description-ja echo and copy
// @license        Creative Commons 2.1 (Attribution + Share Alike)
// @version        1.0
// @author         anekos (anekos@snca.net)
// @maxVersion     2.0pre
// @minVersion     2.0pre
// ==/VimperatorPlugin==
//
// Usage:
//    :echo <EXPRESSION>
//      echo with copy (to clipboard).
//
// Usage-ja:
//    :echo <EXPRESSION>
//      echo すると同時にクリップボードにコピー
//
// Links:
//    http://d.hatena.ne.jp/nokturnalmortum/20081111#1226414487

(function () {

  function neko (obj, useColor) {
    switch (typeof obj) {
      case 'object':
        return liberator.modules.util.objectToString(obj, useColor);
      case 'function':
        return liberator.modules.util.escapeHTML(obj.toString());
      case 'number':
      case 'boolean':
        return '' + obj;
      case 'undefined':
        return 'undefined';
    }
    return obj;
  }

  let echo = commands.get('echo');
  let original_action = echo.action;

  echo.action = function (arg, bang) {
    if (bang) {
      try {
        if (arg.string == '')
          return;
        let obj = liberator.eval(arg.string);
        liberator.echo(neko(obj, true));
        liberator.modules.util.copyToClipboard(neko(obj, false));
      } catch (e) {
        liberator.echoerr(e);
      }
    } else {
      original_action.apply(this, arguments);
    }
  };
  echo.bang = true;


})();