vimamsa 0.1.0 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.vma_project +0 -0
- data/README.md +110 -16
- data/exe/vimamsa +40 -0
- data/ext/vmaext/vmaext.c +0 -3
- data/lang/hyperplaintext.lang +129 -0
- data/lib/vimamsa.rb +3 -1
- data/lib/vimamsa/ack.rb +35 -0
- data/lib/vimamsa/actions.rb +125 -0
- data/lib/vimamsa/buffer.rb +1760 -0
- data/lib/vimamsa/buffer_list.rb +207 -0
- data/lib/vimamsa/constants.rb +44 -0
- data/lib/vimamsa/debug.rb +142 -0
- data/lib/vimamsa/default_key_bindings.rb +448 -0
- data/lib/vimamsa/easy_jump.rb +161 -0
- data/lib/vimamsa/editor.rb +667 -0
- data/lib/vimamsa/encrypt.rb +47 -0
- data/lib/vimamsa/file_finder.rb +103 -0
- data/lib/vimamsa/file_history.rb +100 -0
- data/lib/vimamsa/file_manager.rb +144 -0
- data/lib/vimamsa/hook.rb +46 -0
- data/lib/vimamsa/hyper_plain_text.rb +61 -0
- data/lib/vimamsa/key_binding_tree.rb +603 -0
- data/lib/vimamsa/macro.rb +177 -0
- data/lib/vimamsa/main.rb +71 -0
- data/lib/vimamsa/rbvma.rb +1072 -0
- data/lib/vimamsa/search.rb +100 -0
- data/lib/vimamsa/search_replace.rb +333 -0
- data/lib/vimamsa/text_transforms.rb +32 -0
- data/lib/vimamsa/util.rb +101 -0
- data/lib/vimamsa/version.rb +1 -1
- data/styles/134272-molokai.xml +33 -0
- data/styles/dark.xml +152 -0
- data/styles/molokai_edit.xml +49 -0
- data/vimamsa.gemspec +4 -2
- metadata +66 -10
- data/ext/vimamsa/extconf.rb +0 -11
- data/ext/vimamsa/vimamsa.c +0 -174
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f68b029a6b5f374740c9afa2cb7c4ac628db4c4b9295b7e64db8294dac89659
|
4
|
+
data.tar.gz: c7c72c69ec7cd513e976caff3b0b1f2e619d890d8d84e616fcd747e4ab1193be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 892b4011a44310ad05becbf108fce73d4cdda3a25d6241435b03519ad0dd264daa856502956f02f47386bce251aef3e0296cc682fc35b01fefa375fbffd5ee4a
|
7
|
+
data.tar.gz: 25c97fde0e225c7cb273bc0fa97d0db4d74376ea2ddca2baea8823dbb1e01d31334fabbaa8e319cc37d40eca23d37b3d64f2cbbbdcbbce88f7d30435cfb44a6f
|
data/.vma_project
ADDED
File without changes
|
data/README.md
CHANGED
@@ -1,35 +1,129 @@
|
|
1
1
|
# Vimamsa
|
2
2
|
|
3
|
-
|
3
|
+
Vi/Vim -inspired experimental GUI-oriented text editor written with Ruby and GTK.
|
4
4
|
|
5
|
-
|
5
|
+
|
6
|
+
## Requirements
|
7
|
+
- Ruby 2.0+
|
8
|
+
- GTK 3
|
6
9
|
|
7
10
|
## Installation
|
8
11
|
|
9
|
-
Add this line to your application's Gemfile:
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
+
On Ubuntu:
|
14
|
+
```
|
15
|
+
sudo apt install ruby-dev
|
16
|
+
sudo gem install vimamsa
|
13
17
|
```
|
14
18
|
|
15
|
-
|
19
|
+
Run:
|
20
|
+
```
|
21
|
+
vimamsa
|
22
|
+
```
|
16
23
|
|
17
|
-
|
24
|
+
Packages for optional features:
|
25
|
+
```
|
26
|
+
sudo apt install ack-grep clang-format
|
27
|
+
```
|
18
28
|
|
19
|
-
|
29
|
+
For customization, edit dot_vimamsarc.rb and copy to ~/.vimamsarc
|
20
30
|
|
21
|
-
|
31
|
+
## Key bindings
|
22
32
|
|
23
|
-
|
33
|
+
Key bindings are very much like in VIm. For details, see file lib/vimamsa/key_bindings.rb and lib/vimamsa/default_bindings.rb
|
24
34
|
|
25
|
-
|
35
|
+
Keys that work somewhat similarly as in Vim:
|
26
36
|
|
27
|
-
|
37
|
+
In Command mode:
|
38
|
+
```
|
39
|
+
j k l h w b p P G f F ; 0 $ v i o J * / a A I u ctrl-r x
|
40
|
+
zz dd dw gg <linenum>G r<char>
|
41
|
+
```
|
42
|
+
|
43
|
+
In Visual mode:
|
44
|
+
```
|
45
|
+
d y gU gu
|
46
|
+
```
|
28
47
|
|
29
|
-
|
48
|
+
Keys that work differently to Vim are documented in the tables below
|
49
|
+
|
50
|
+
Syntax:
|
51
|
+
ctrl! means press and immediate release of ctrl key. Triggered by key up event.
|
52
|
+
ctrl-x means press and hold ctrl key, press x
|
53
|
+
|
54
|
+
<table>
|
55
|
+
<colgroup>
|
56
|
+
<col style="text-align:center;"/>
|
57
|
+
<col style="text-align:left;"/>
|
58
|
+
</colgroup>
|
59
|
+
|
60
|
+
<thead> <tr> <th style="text-align:center;" colspan="4">Command mode keys</th> </tr> </thead>
|
61
|
+
|
62
|
+
<tbody>
|
63
|
+
<tr><th>Key</th><th>Action</th></tr>
|
64
|
+
<tr><td style="text-align:center;">ctrl!</td> <td style="text-align:left;">switch between command and insert modes</td> </tr>
|
65
|
+
<tr> <td style="text-align:center;">z</td> <td style="text-align:left;"> enter into BROWSE mode</td></tr>
|
66
|
+
<tr> <td style="text-align:center;">shift!</td> <td style="text-align:left;">save file</td> </tr>
|
67
|
+
<tr> <td style="text-align:center;">s</td> <td style="text-align:left;">Easy jump (Similar to Vim EasyMotion https://github.com/easymotion/vim-easymotion ) </td> </tr>
|
68
|
+
<tr> <td style="text-align:center;">tab</td> <td style="text-align:left;">switch betwen current and previous buffer/file</td></tr>
|
69
|
+
<tr> <td style="text-align:center;">enter</td> <td style="text-align:left;"> (when cursor on link) open url in browser </td></tr>
|
70
|
+
<tr> <td style="text-align:center;">enter</td> <td style="text-align:left;">(when cursor on /path/to/file.txt:linenum ) open file in editor, jump to linenum </td></tr>
|
71
|
+
<tr> <td style="text-align:center;">,a</td> <td style="text-align:left;">Search for string using ack
|
72
|
+
</td></tr>
|
73
|
+
<tr> <td style="text-align:center;">,b</td> <td style="text-align:left;"> Switch buffer (jump to other open file)</td></tr>
|
74
|
+
<tr> <td style="text-align:center;">,g</td> <td style="text-align:left;">search for input string inside current buffer</td></tr>
|
75
|
+
<tr> <td style="text-align:center;">,f</td> <td style="text-align:left;">Fuzzy filename search</td></tr>
|
76
|
+
<tr> <td style="text-align:center;">space c</td> <td style="text-align:left;">insert character "c"</td></tr>
|
77
|
+
</tbody>
|
78
|
+
</table>
|
79
|
+
|
80
|
+
<table>
|
81
|
+
<colgroup>
|
82
|
+
<col style="text-align:center;"/>
|
83
|
+
<col style="text-align:left;"/>
|
84
|
+
</colgroup>
|
85
|
+
|
86
|
+
<thead> <tr> <th style="text-align:center;" colspan="4">Insert mode keys (similar to bash or emacs)</th> </tr> </thead>
|
87
|
+
|
88
|
+
<tbody>
|
89
|
+
<tr> <td style="text-align:center;">ctrl! OR esc</td> <td style="text-align:left;">Switch to command mode</td></tr>
|
90
|
+
<tr> <td style="text-align:center;">ctrl-n</td> <td style="text-align:left;">Move to next line</td></tr>
|
91
|
+
<tr> <td style="text-align:center;">ctrl-p</td> <td style="text-align:left;">Move to previous line</td></tr>
|
92
|
+
<tr> <td style="text-align:center;">ctrl-a</td> <td style="text-align:left;">Move beginning of line</td></tr>
|
93
|
+
<tr> <td style="text-align:center;">ctrl-e</td> <td style="text-align:left;">Move to end of line</td></tr>
|
94
|
+
<tr> <td style="text-align:center;">ctrl-b</td> <td style="text-align:left;">Move backward one char</td></tr>
|
95
|
+
<tr> <td style="text-align:center;">ctrl-f</td> <td style="text-align:left;">Move forward one char</td></tr>
|
96
|
+
<tr> <td style="text-align:center;">alt-f</td> <td style="text-align:left;">Move forward one word</td></tr>
|
97
|
+
<tr> <td style="text-align:center;">alt-b</td> <td style="text-align:left;">Move backward one word</td></tr>
|
98
|
+
</tbody>
|
99
|
+
</table>
|
100
|
+
|
101
|
+
|
102
|
+
<table>
|
103
|
+
<colgroup>
|
104
|
+
<col style="text-align:center;"/>
|
105
|
+
<col style="text-align:left;"/>
|
106
|
+
</colgroup>
|
107
|
+
|
108
|
+
<thead> <tr> <th style="text-align:center;" colspan="4">Browse mode keys</th> </tr> </thead>
|
109
|
+
|
110
|
+
<tbody>
|
111
|
+
<tr> <td style="text-align:center;">h</td> <td style="text-align:left;">jump to previous buffer in history</td></tr>
|
112
|
+
<tr> <td style="text-align:center;">l</td> <td style="text-align:left;">jump to next buffer in history</td></tr>
|
113
|
+
<tr> <td style="text-align:center;">q</td> <td style="text-align:left;">jump to previous edited position</td></tr>
|
114
|
+
<tr> <td style="text-align:center;">w</td> <td style="text-align:left;">jump to next edited position</td></tr>
|
115
|
+
<tr> <td style="text-align:center;">j OR esc</td> <td style="text-align:left;">switch from browse to command mode</td></tr>
|
116
|
+
</tbody>
|
117
|
+
</table>
|
118
|
+
|
119
|
+
Bindings can be customized in ~/.vimamsarc
|
120
|
+
For example, to bind ctrl-n to action "create new file":
|
121
|
+
```
|
122
|
+
bindkey 'C ctrl-n', 'create_new_file()'
|
123
|
+
```
|
30
124
|
|
31
|
-
|
125
|
+
## Current limitations
|
126
|
+
- UTF8 only
|
127
|
+
- Line endings with "\n"
|
32
128
|
|
33
|
-
## Contributing
|
34
129
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/vimamsa.
|
data/exe/vimamsa
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require "ripl/multi_line"
|
3
|
+
require "tempfile"
|
4
|
+
# Ripl.config[:multi_line_prompt] = ' > '
|
5
|
+
require "pathname"
|
6
|
+
|
7
|
+
ENV["GTK_THEME"] = "Adwaita:dark"
|
8
|
+
|
9
|
+
selfpath = __FILE__
|
10
|
+
selfpath = File.readlink(selfpath) if File.lstat(selfpath).symlink?
|
11
|
+
scriptdir = File.expand_path(File.dirname(selfpath) + "/..")
|
12
|
+
|
13
|
+
|
14
|
+
# If process is already running, open the parameter file in the running process and exit.
|
15
|
+
listen_dir = File.expand_path("~/.vimamsa/listen")
|
16
|
+
if File.exist?(listen_dir) and !ARGV[0].nil?
|
17
|
+
tmpf = Tempfile.new("vmarun", listen_dir)
|
18
|
+
fp = tmpf.path
|
19
|
+
tmpf.write(ARGV[0])
|
20
|
+
tmpf.close
|
21
|
+
tstart = Time.new
|
22
|
+
timeout = false
|
23
|
+
while File.exist?(fp)
|
24
|
+
sleep 0.001
|
25
|
+
if Time.new - tstart > 0.5
|
26
|
+
timeout = true
|
27
|
+
break
|
28
|
+
end
|
29
|
+
end
|
30
|
+
exit(0) if !timeout
|
31
|
+
end
|
32
|
+
|
33
|
+
$LOAD_PATH.unshift(File.expand_path("lib"))
|
34
|
+
$LOAD_PATH.unshift(File.expand_path("ext"))
|
35
|
+
|
36
|
+
require "vimamsa"
|
37
|
+
# Ilib:ext
|
38
|
+
# r rbvma -e "puts VMA.new.run"
|
39
|
+
$vmag = VMAg.new()
|
40
|
+
$vmag.run
|
data/ext/vmaext/vmaext.c
CHANGED
@@ -0,0 +1,129 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!--
|
3
|
+
|
4
|
+
This file is part of GtkSourceView
|
5
|
+
|
6
|
+
Authors: Marco Barisione, Emanuele Aina
|
7
|
+
Copyright (C) 2005-2007 Marco Barisione <barisione@gmail.com>
|
8
|
+
Copyright (C) 2005-2007 Emanuele Aina
|
9
|
+
|
10
|
+
GtkSourceView is free software; you can redistribute it and/or
|
11
|
+
modify it under the terms of the GNU Lesser General Public
|
12
|
+
License as published by the Free Software Foundation; either
|
13
|
+
version 2.1 of the License, or (at your option) any later version.
|
14
|
+
|
15
|
+
GtkSourceView is distributed in the hope that it will be useful,
|
16
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
18
|
+
Lesser General Public License for more details.
|
19
|
+
|
20
|
+
You should have received a copy of the GNU Lesser General Public License
|
21
|
+
along with this library; if not, see <http://www.gnu.org/licenses/>.
|
22
|
+
|
23
|
+
-->
|
24
|
+
<language id="hyperplaintext" name="HyperPlainText" version="2.0" _section="Source">
|
25
|
+
<metadata>
|
26
|
+
<property name="mimetypes">text/x-c;text/x-csrc;image/x-xpixmap</property>
|
27
|
+
<property name="globs">*.txt</property>
|
28
|
+
</metadata>
|
29
|
+
|
30
|
+
<styles>
|
31
|
+
<style id="comment" name="Comment" map-to="def:comment"/>
|
32
|
+
<style id="title" name="title" map-to="def:title"/>
|
33
|
+
<style id="hyperlink" name="hyperlink" map-to="def:hyperlink"/>
|
34
|
+
<style id="heading1" name="heading1" map-to="def:heading1"/>
|
35
|
+
<style id="heading2" name="heading1" map-to="def:heading2"/>
|
36
|
+
<style id="heading3" name="heading1" map-to="def:heading3"/>
|
37
|
+
<style id="heading4" name="heading1" map-to="def:heading4"/>
|
38
|
+
<style id="string" name="String" map-to="def:string"/>
|
39
|
+
<style id="floating-point" name="Floating point number" map-to="def:floating-point"/>
|
40
|
+
</styles>
|
41
|
+
|
42
|
+
<definitions>
|
43
|
+
|
44
|
+
<!--regexs-->
|
45
|
+
<define-regex id="preproc-start">^\s*#\s*</define-regex>
|
46
|
+
<define-regex id="escaped-character" extended="true">
|
47
|
+
\\( # leading backslash
|
48
|
+
[\\\"\'nrbtfav\?] | # escaped character
|
49
|
+
[0-7]{1,3} | # one, two, or three octal digits
|
50
|
+
x[0-9A-Fa-f]+ # 'x' followed by hex digits
|
51
|
+
)
|
52
|
+
</define-regex>
|
53
|
+
|
54
|
+
<!--contexts NOT used on the main context-->
|
55
|
+
<!-- TODO: what about scanf ? -->
|
56
|
+
<!-- man 3 printf -->
|
57
|
+
<context id="printf" style-ref="printf" extend-parent="false">
|
58
|
+
<match extended="true">
|
59
|
+
\%\%|\%
|
60
|
+
(?:[1-9][0-9]*\$)? # argument
|
61
|
+
[#0\-\ \+\'I]* # flags
|
62
|
+
(?:[1-9][0-9]*|\*)? # width
|
63
|
+
(?:\.\-?(?:[0-9]+|\*))? # precision
|
64
|
+
(?:hh|ll|[hlLqjzt])? # length modifier
|
65
|
+
[diouxXeEfFgGaAcsCSpnm] # conversion specifier
|
66
|
+
</match>
|
67
|
+
</context>
|
68
|
+
|
69
|
+
|
70
|
+
<context id="heading1" style-ref="heading1">
|
71
|
+
<match>(^◼[^◼].*)*</match>
|
72
|
+
</context>
|
73
|
+
|
74
|
+
<context id="heading2" style-ref="heading2">
|
75
|
+
<match>(^◼◼[^◼].*)*</match>
|
76
|
+
</context>
|
77
|
+
|
78
|
+
<context id="heading3" style-ref="heading3">
|
79
|
+
<match>(^◼◼◼[^◼].*)*</match>
|
80
|
+
</context>
|
81
|
+
|
82
|
+
<context id="heading4" style-ref="heading4">
|
83
|
+
<match>(^◼◼◼◼[^◼].*)*</match>
|
84
|
+
</context>
|
85
|
+
|
86
|
+
<context id="title" style-ref="title">
|
87
|
+
<match>(^❙.*❙)</match>
|
88
|
+
</context>
|
89
|
+
|
90
|
+
<context id="hyperlink" style-ref="hyperlink">
|
91
|
+
<match>(⟦.*⟧)</match>
|
92
|
+
</context>
|
93
|
+
|
94
|
+
|
95
|
+
<!-- http://www.lysator.liu.se/c/ANSI-C-grammar-l.html -->
|
96
|
+
<context id="float" style-ref="floating-point">
|
97
|
+
<match extended="true">
|
98
|
+
(?<![\w\.])
|
99
|
+
((\.[0-9]+ | [0-9]+\.[0-9]*) ([Ee][+-]?[0-9]*)? |
|
100
|
+
([0-9]+[Ee][+-]?[0-9]*))
|
101
|
+
[fFlL]?
|
102
|
+
(?![\w\.])
|
103
|
+
</match>
|
104
|
+
</context>
|
105
|
+
|
106
|
+
<context id="decimal" style-ref="decimal">
|
107
|
+
<match extended="true">
|
108
|
+
(?<![\w\.])
|
109
|
+
(0|[1-9][0-9]*)[uUlL]*
|
110
|
+
(?![\w\.])
|
111
|
+
</match>
|
112
|
+
</context>
|
113
|
+
|
114
|
+
|
115
|
+
<!--Main context-->
|
116
|
+
<context id="hyperplaintext" class="no-spell-check">
|
117
|
+
<include>
|
118
|
+
<context ref="title"/>
|
119
|
+
<context ref="hyperlink"/>
|
120
|
+
<context ref="heading1"/>
|
121
|
+
<context ref="heading2"/>
|
122
|
+
<context ref="heading3"/>
|
123
|
+
<context ref="heading4"/>
|
124
|
+
<context ref="float"/>
|
125
|
+
</include>
|
126
|
+
</context>
|
127
|
+
|
128
|
+
</definitions>
|
129
|
+
</language>
|
data/lib/vimamsa.rb
CHANGED
data/lib/vimamsa/ack.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Interface for ack! https://beyondgrep.com/
|
2
|
+
|
3
|
+
def gui_ack()
|
4
|
+
nfo = "<html><h2>Search contents of all files using ack</h2>
|
5
|
+
<div style='width:300px'>
|
6
|
+
<p>Hint: add empty file named .vma_project to dirs you want to search.</p>\n<p>If .vma_project exists in parent dir of current file, searches within that dir</p></div></html>"
|
7
|
+
|
8
|
+
nfo = "<span size='x-large'>Search contents of all files using ack</span>
|
9
|
+
|
10
|
+
<span>Hint: add empty file named .vma_project to directories you want to search in.
|
11
|
+
If .vma_project exists in parent directory of current file, searches within that directory.
|
12
|
+
</span>"
|
13
|
+
|
14
|
+
|
15
|
+
callback = proc{|x| ack_buffer(x)}
|
16
|
+
gui_one_input_action(nfo, "Search:", "search", callback)
|
17
|
+
end
|
18
|
+
|
19
|
+
def invoke_ack_search()
|
20
|
+
start_minibuffer_cmd("", "", :ack_buffer)
|
21
|
+
end
|
22
|
+
|
23
|
+
def ack_buffer(instr, b = nil)
|
24
|
+
instr = instr.gsub("'", ".") # TODO
|
25
|
+
bufstr = ""
|
26
|
+
for path in $vma.get_content_search_paths
|
27
|
+
bufstr += run_cmd("ack -Q --type-add=gd=.gd -k --nohtml --nojs --nojson '#{instr}' #{path}")
|
28
|
+
end
|
29
|
+
if bufstr.size > 5
|
30
|
+
create_new_file(nil, bufstr)
|
31
|
+
else
|
32
|
+
message("No results for input:#{instr}")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,125 @@
|
|
1
|
+
class Action
|
2
|
+
attr_accessor :id, :method_name, :method
|
3
|
+
|
4
|
+
def initialize(id, method_name, method, scope = [])
|
5
|
+
@method_name = method_name
|
6
|
+
@id = id
|
7
|
+
@method = method
|
8
|
+
$actions[id] = self
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
$actions = {}
|
13
|
+
|
14
|
+
# def reg_act(id, callfunc, name = "", scope = [])
|
15
|
+
# if callfunc.class == Proc
|
16
|
+
# a = Action.new(id, name, callfunc, scope)
|
17
|
+
# else
|
18
|
+
# a = Action.new(id, name, method(callfunc), scope)
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
|
22
|
+
def reg_act(id, callfunc, name = "", scope = [])
|
23
|
+
if callfunc.class == Proc
|
24
|
+
a = Action.new(id, name, callfunc, scope)
|
25
|
+
else
|
26
|
+
begin
|
27
|
+
m = method(callfunc)
|
28
|
+
rescue NameError
|
29
|
+
m = method("missing_callfunc")
|
30
|
+
end
|
31
|
+
a = Action.new(id, name, m, scope)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def missing_callfunc
|
36
|
+
puts "missing_callfunc"
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def call(id)
|
41
|
+
a = $actions[id]
|
42
|
+
if a
|
43
|
+
# Ripl.start :binding => binding
|
44
|
+
a.method.call()
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def search_actions()
|
49
|
+
l = []
|
50
|
+
$select_keys = ["h", "l", "f", "d", "s", "a", "g", "z"]
|
51
|
+
qt_select_update_window(l, $select_keys.collect { |x| x.upcase },
|
52
|
+
"search_actions_select_callback",
|
53
|
+
"search_actions_update_callback")
|
54
|
+
end
|
55
|
+
|
56
|
+
$item_list = []
|
57
|
+
|
58
|
+
def search_actions_update_callback(search_str = "")
|
59
|
+
# item_list = $actions.collect {|x| x[1].id.to_s}
|
60
|
+
return [] if search_str == ""
|
61
|
+
# item_list = $action_list.collect { |x|
|
62
|
+
# actname = x[:action].to_s
|
63
|
+
# if x[:action].class == Symbol
|
64
|
+
# mn = $actions[x[:action]].method_name
|
65
|
+
# actname = mn if mn.size > 0
|
66
|
+
# end
|
67
|
+
# r = { :str => actname, :key => x[:key], :action => x[:action] }
|
68
|
+
# }
|
69
|
+
|
70
|
+
# => {:str=>"insert_new_line", :key=>"I return", :action=>:insert_new_line}
|
71
|
+
|
72
|
+
item_list2 = []
|
73
|
+
for act_id in $actions.keys
|
74
|
+
act = $actions[act_id]
|
75
|
+
item = {}
|
76
|
+
item[:key] = ""
|
77
|
+
item[:action] = act_id
|
78
|
+
item[:str] = act_id.to_s
|
79
|
+
if $actions[act_id].method_name != ""
|
80
|
+
item[:str] = $actions[act_id].method_name
|
81
|
+
end
|
82
|
+
item_list2 << item
|
83
|
+
end
|
84
|
+
# Ripl.start :binding => binding
|
85
|
+
item_list = item_list2
|
86
|
+
|
87
|
+
a = filter_items(item_list, 0, search_str)
|
88
|
+
puts a.inspect
|
89
|
+
|
90
|
+
r = a.collect { |x| [x[0][0], 0, x] }
|
91
|
+
puts r.inspect
|
92
|
+
$item_list = r
|
93
|
+
# Ripl.start :binding => binding
|
94
|
+
|
95
|
+
r = a.collect { |x| ["[#{x[0][:key]}] #{x[0][:str]}", 0, x] }
|
96
|
+
return r
|
97
|
+
end
|
98
|
+
|
99
|
+
def search_actions_select_callback(search_str, idx)
|
100
|
+
item = $item_list[idx][2]
|
101
|
+
acc = item[0][:action]
|
102
|
+
|
103
|
+
puts "Selected:" + acc.to_s
|
104
|
+
qt_select_window_close(0)
|
105
|
+
|
106
|
+
if acc.class == String
|
107
|
+
eval(acc)
|
108
|
+
elsif acc.class == Symbol
|
109
|
+
puts "Symbol"
|
110
|
+
call(acc)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def filter_items(item_list, item_key, search_str)
|
115
|
+
# Ripl.start :binding => binding
|
116
|
+
item_hash = {}
|
117
|
+
scores = Parallel.map(item_list, in_threads: 8) do |item|
|
118
|
+
[item, srn_dst(search_str, item[:str])]
|
119
|
+
end
|
120
|
+
scores.sort_by! { |x| -x[1] }
|
121
|
+
puts scores.inspect
|
122
|
+
scores = scores[0..30]
|
123
|
+
|
124
|
+
return scores
|
125
|
+
end
|