VimMate 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +18 -0
- data/README +25 -3
- data/Rakefile +4 -0
- data/bin/vimmate +4 -0
- data/lib/vimmatelib/files_window.rb +21 -6
- data/lib/vimmatelib/main_window.rb +56 -0
- data/lib/vimmatelib/search_window.rb +5 -0
- data/lib/vimmatelib/terminals_window.rb +46 -5
- data/lib/vimmatelib/version.rb +1 -1
- data/lib/vimmatelib/vim_window.rb +8 -0
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
|
+
=== Version 0.6.4
|
4
|
+
- VimMate now has shortcut keys to control it's various parts. Here is the
|
5
|
+
list of the shortcut keys that where added:
|
6
|
+
- CTRL+SHIFT+T: Set focus to current terminal
|
7
|
+
- CTRL+SHIFT+N: Create a new terminal
|
8
|
+
- CTRL+SHIFT+W: Close current terminal
|
9
|
+
- CTRL+PAGEDOWN: Next terminal
|
10
|
+
- CTRL+PAGEDOWN: Previous terminal
|
11
|
+
- CTRL+SHIFT+L: Set focus to file filter
|
12
|
+
- CTRL+SHIFT+F: Set focus to file list
|
13
|
+
- CTRL+SHIFT+S: Set focus to search file list
|
14
|
+
- CTRL+SHIFT+V: Set focus to Vim
|
15
|
+
Setting the focus to Vim doesn't work perfectly. If it doesn't seem to work,
|
16
|
+
you can try to press TAB or the Up or Down keys on your keyboard after using
|
17
|
+
the CTRL+SHIFT+V shortcut and it works most of the time. Thanks to Florian
|
18
|
+
Frank who sent me a patch for the first 5 shortcuts. The other shortcuts
|
19
|
+
where also added thanks to this patch by Florian Frank.
|
20
|
+
|
3
21
|
=== Version 0.6.3
|
4
22
|
- # 13212: VimMate could not be resized properly.
|
5
23
|
- # 7399, partially. A new warning has been added when too many files are
|
data/README
CHANGED
@@ -24,6 +24,7 @@ VimMate has the following features:
|
|
24
24
|
- Basic Subversion[http://subversion.tigris.org/] integration: <i>(Optional)</i>
|
25
25
|
- The file status is displayed in the file tree.
|
26
26
|
- You can add, rename, delete and revert a file from the file tree.
|
27
|
+
- Navigate the various part of the interface with the keyboard
|
27
28
|
|
28
29
|
= Installation
|
29
30
|
VimMate has only been tested under Linux (in fact,
|
@@ -108,13 +109,15 @@ You can redirect the output of this command to overwrite your .vimmaterc file
|
|
108
109
|
and then run VimMate: it should work this time.
|
109
110
|
|
110
111
|
An other nice trick is to add a special alias that exists only within
|
111
|
-
VimMate's terminals
|
112
|
+
VimMate's terminals (Thanks to Jonathan Hankins for this updated tip,
|
113
|
+
see {#13432}[http://rubyforge.org/tracker/index.php?func=detail&aid=13432&group_id=2612&atid=10058]
|
114
|
+
for details):
|
112
115
|
|
113
116
|
# Other configurations before...
|
114
117
|
# (Because of a small quirk in rdoc, I put a space between the
|
115
118
|
# colon (:) and terminals_autoexec but there must be no space.)
|
116
119
|
: terminals_autoexec: |
|
117
|
-
alias vm='gvim --servername
|
120
|
+
alias vm='gvim --servername $(gvim --serverlist | grep "VIMMATE_$PPID") --remote-tab'
|
118
121
|
export TERM="gnome"
|
119
122
|
clear
|
120
123
|
|
@@ -136,7 +139,7 @@ edit your commit messages within VimMate:
|
|
136
139
|
# (Because of a small quirk in rdoc, I put a space between the
|
137
140
|
# colon (:) and terminals_autoexec but there must be no space.)
|
138
141
|
: terminals_autoexec: |
|
139
|
-
alias vm='gvim --servername
|
142
|
+
alias vm='gvim --servername $(gvim --serverlist | grep "VIMMATE_$PPID") --remote-tab'
|
140
143
|
export SVN_EDITOR='gvim --servername `gvim --serverlist | grep VIMMATE_` --remote-wait'
|
141
144
|
export TERM="gnome"
|
142
145
|
clear
|
@@ -182,6 +185,22 @@ make Vim more powerful:
|
|
182
185
|
There are a lot of other nice script out there so check
|
183
186
|
{Vim's web site}[http://www.vim.org/] for more scripts.
|
184
187
|
|
188
|
+
= Keyboard shortcuts
|
189
|
+
Here is a list of the various shortcut keys:
|
190
|
+
- CTRL+SHIFT+T: Set focus to current terminal
|
191
|
+
- CTRL+SHIFT+N: Create a new terminal
|
192
|
+
- CTRL+SHIFT+W: Close current terminal
|
193
|
+
- CTRL+PAGEDOWN: Next terminal
|
194
|
+
- CTRL+PAGEDOWN: Previous terminal
|
195
|
+
- CTRL+SHIFT+L: Set focus to file filter
|
196
|
+
- CTRL+SHIFT+F: Set focus to file list
|
197
|
+
- CTRL+SHIFT+S: Set focus to search file list
|
198
|
+
- CTRL+SHIFT+V: Set focus to Vim
|
199
|
+
Thanks to Florian Frank who sent me a patch for the first 5 shortcuts. The
|
200
|
+
other shortcuts where also added thanks to this patch by Florian Frank. (Note
|
201
|
+
that if there are bugs in the processing of those shortcut keys, it's probably
|
202
|
+
my fault and not is.)
|
203
|
+
|
185
204
|
= Limitations
|
186
205
|
- VimMate cannot handle well a directory tree with thousands of files,
|
187
206
|
although it has no problems with hundreds of files although it can take
|
@@ -191,6 +210,9 @@ There are a lot of other nice script out there so check
|
|
191
210
|
things. You should wait for Vim before you start playing with VimMate.
|
192
211
|
Weird things can also happen if you close VimMate without saving in
|
193
212
|
Vim before.
|
213
|
+
- Setting the focus to Vim with the shortcut key doesn't work perfectly. If it
|
214
|
+
doesn't seem to work, you can try to press TAB or the Up or Down keys on
|
215
|
+
your keyboard after using the shortcut key and it works most of the time.
|
194
216
|
|
195
217
|
= Author and Copyright
|
196
218
|
|
data/Rakefile
CHANGED
@@ -70,3 +70,7 @@ task :package => [:rdoc]
|
|
70
70
|
desc 'Remove rdoc and package'
|
71
71
|
task :clobber => [:clobber_rdoc, :clobber_package]
|
72
72
|
|
73
|
+
desc 'Upload rdoc to Rubyforge'
|
74
|
+
task :upload_rdoc => [:rdoc] do
|
75
|
+
sh "scp -r html bennygui@rubyforge.org:/var/www/gforge-projects/vimmate"
|
76
|
+
end
|
data/bin/vimmate
CHANGED
@@ -91,6 +91,10 @@ fork do
|
|
91
91
|
VimMate::TerminalsWindow.new
|
92
92
|
end
|
93
93
|
|
94
|
+
main.files_window = files if files
|
95
|
+
main.vim_window = vim if files
|
96
|
+
main.terminals_window = terminals if terminals
|
97
|
+
|
94
98
|
# Set the signals for the file list
|
95
99
|
files.add_open_signal do |path, kind|
|
96
100
|
vim.open(path, kind)
|
@@ -182,15 +182,15 @@ module VimMate
|
|
182
182
|
# Create a box to filter the list
|
183
183
|
gtk_filter_box = Gtk::HBox.new
|
184
184
|
gtk_filter_box.pack_start(gtk_filter_button = Gtk::ToggleButton.new("Filter"), false, false)
|
185
|
-
gtk_filter_box.pack_start(
|
185
|
+
gtk_filter_box.pack_start(@gtk_file_filter_entry = Gtk::Entry.new, true, true)
|
186
186
|
changed_lambda = lambda do
|
187
187
|
if gtk_filter_button.active?
|
188
|
-
self.filter =
|
188
|
+
self.filter = @gtk_file_filter_entry.text
|
189
189
|
else
|
190
190
|
self.clear_filter
|
191
191
|
end
|
192
192
|
end
|
193
|
-
|
193
|
+
@gtk_file_filter_entry.signal_connect("changed", &changed_lambda)
|
194
194
|
gtk_filter_button.signal_connect("toggled", &changed_lambda)
|
195
195
|
gtk_filter_button.active = Config[:files_filter_active]
|
196
196
|
gtk_filter_box.spacing = 10
|
@@ -208,16 +208,16 @@ module VimMate
|
|
208
208
|
if Config[:files_use_search]
|
209
209
|
@gtk_paned_box = Gtk::VPaned.new
|
210
210
|
@gtk_paned_box.add(gtk_top_box)
|
211
|
-
@gtk_paned_box.add((search_window = SearchWindow.new(@file_tree)).gtk_window)
|
211
|
+
@gtk_paned_box.add((@search_window = SearchWindow.new(@file_tree)).gtk_window)
|
212
212
|
@gtk_paned_box.position = Config[:files_search_separator_position]
|
213
213
|
|
214
214
|
# Set the signals for the search window
|
215
|
-
search_window.add_open_signal do |path, kind|
|
215
|
+
@search_window.add_open_signal do |path, kind|
|
216
216
|
@open_signal.each do |signal|
|
217
217
|
signal.call(path, kind)
|
218
218
|
end
|
219
219
|
end
|
220
|
-
search_window.add_menu_signal do |path|
|
220
|
+
@search_window.add_menu_signal do |path|
|
221
221
|
@menu_signal.each do |signal|
|
222
222
|
signal.call(path)
|
223
223
|
end
|
@@ -280,6 +280,21 @@ module VimMate
|
|
280
280
|
filter
|
281
281
|
end
|
282
282
|
|
283
|
+
# Set the focus to the file filter
|
284
|
+
def focus_file_filter
|
285
|
+
@gtk_file_filter_entry.has_focus = true if @gtk_file_filter_entry
|
286
|
+
end
|
287
|
+
|
288
|
+
# Set the focus to the file list
|
289
|
+
def focus_file_list
|
290
|
+
@gtk_tree_view.has_focus = true if @gtk_tree_view
|
291
|
+
end
|
292
|
+
|
293
|
+
# Set the focus to the search file list
|
294
|
+
def focus_file_search
|
295
|
+
@search_window.focus_file_search if @search_window
|
296
|
+
end
|
297
|
+
|
283
298
|
# Expand the first row of the file tree
|
284
299
|
def expand_first_row
|
285
300
|
@gtk_tree_view.collapse_all
|
@@ -30,6 +30,8 @@ module VimMate
|
|
30
30
|
# Represents the main window of the application
|
31
31
|
class MainWindow
|
32
32
|
|
33
|
+
attr_accessor :vim_window, :files_window, :terminals_window
|
34
|
+
|
33
35
|
# Create the MainWindow
|
34
36
|
def initialize
|
35
37
|
@gtk_main_window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
|
@@ -40,6 +42,59 @@ module VimMate
|
|
40
42
|
gtk_window.set_default_size(Config[:window_width],
|
41
43
|
Config[:window_height])
|
42
44
|
gtk_window.set_icon_list(Icons.window_icons)
|
45
|
+
# Add an event handler for keys events
|
46
|
+
gtk_window.signal_connect("key-press-event") do |window, event|
|
47
|
+
if event.state & Gdk::Window::ModifierType::CONTROL_MASK != 0
|
48
|
+
if event.state & Gdk::Window::ModifierType::SHIFT_MASK != 0
|
49
|
+
case event.keyval
|
50
|
+
# CTRL+SHIFT+T: Set focus to terminal
|
51
|
+
when Gdk::Keyval::GDK_T
|
52
|
+
terminals_window.focus_terminal if terminals_window
|
53
|
+
next true
|
54
|
+
# CTRL+SHIFT+N: New terminal
|
55
|
+
when Gdk::Keyval::GDK_N
|
56
|
+
terminals_window.add_new_terminal if terminals_window
|
57
|
+
next true
|
58
|
+
# CTRL+SHIFT+W: Close terminal
|
59
|
+
when Gdk::Keyval::GDK_W
|
60
|
+
terminals_window.delete_current_terminal if terminals_window
|
61
|
+
next true
|
62
|
+
# CTRL+SHIFT+L: Set focus to file filter
|
63
|
+
when Gdk::Keyval::GDK_L
|
64
|
+
files_window.focus_file_filter if files_window
|
65
|
+
next true
|
66
|
+
# CTRL+SHIFT+F: Set focus to file list
|
67
|
+
when Gdk::Keyval::GDK_F
|
68
|
+
files_window.focus_file_list if files_window
|
69
|
+
next true
|
70
|
+
# CTRL+SHIFT+S: Set focus to search file list
|
71
|
+
when Gdk::Keyval::GDK_S
|
72
|
+
files_window.focus_file_search if files_window
|
73
|
+
next true
|
74
|
+
# CTRL+SHIFT+V: Set focus to Vim
|
75
|
+
when Gdk::Keyval::GDK_V
|
76
|
+
vim_window.focus_vim if vim_window
|
77
|
+
next true
|
78
|
+
else
|
79
|
+
next nil
|
80
|
+
end
|
81
|
+
else
|
82
|
+
case event.keyval
|
83
|
+
# CTRL+PAGEDOWN: Next terminal
|
84
|
+
when Gdk::Keyval::GDK_Page_Down
|
85
|
+
terminals_window.next_terminal if terminals_window
|
86
|
+
next true
|
87
|
+
# CTRL+PAGEDOWN: Previous terminal
|
88
|
+
when Gdk::Keyval::GDK_Page_Up
|
89
|
+
terminals_window.prev_terminal if terminals_window
|
90
|
+
next true
|
91
|
+
else
|
92
|
+
next nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
nil
|
97
|
+
end
|
43
98
|
end
|
44
99
|
|
45
100
|
# The "window" for this object
|
@@ -54,6 +109,7 @@ module VimMate
|
|
54
109
|
start_window.start
|
55
110
|
Gtk.main
|
56
111
|
end
|
112
|
+
|
57
113
|
end
|
58
114
|
end
|
59
115
|
|
@@ -202,6 +202,11 @@ module VimMate
|
|
202
202
|
@gtk_container_box
|
203
203
|
end
|
204
204
|
|
205
|
+
# Set the focus to the entry field in the file search list
|
206
|
+
def focus_file_search
|
207
|
+
@gtk_entry.has_focus = true if @gtk_entry
|
208
|
+
end
|
209
|
+
|
205
210
|
# Add a block that will be called when the user choose to open a file
|
206
211
|
# The block take two argument: the path to the file to open, and a
|
207
212
|
# symbol to indicate the kind: :open, :split_open, :tab_open
|
@@ -33,6 +33,10 @@ module VimMate
|
|
33
33
|
not Config[:terminals_enabled]
|
34
34
|
end
|
35
35
|
|
36
|
+
class ::Vte::Terminal
|
37
|
+
attr_accessor :pid
|
38
|
+
end
|
39
|
+
|
36
40
|
# The window that contains the terminals
|
37
41
|
class TerminalsWindow
|
38
42
|
|
@@ -50,10 +54,7 @@ module VimMate
|
|
50
54
|
Gtk::Image.new(Gtk::Stock::NEW, Gtk::IconSize::MENU))
|
51
55
|
# When we try to go to the last page, we create a new terminal instead
|
52
56
|
@gtk_notebook.signal_connect_after("switch-page") do |notebook, page, page_num|
|
53
|
-
if page_num == (@gtk_notebook.n_pages - 1)
|
54
|
-
@gtk_notebook.insert_page(page_num, new_terminal)
|
55
|
-
@gtk_notebook.page = page_num
|
56
|
-
end
|
57
|
+
add_new_terminal if page_num == (@gtk_notebook.n_pages - 1)
|
57
58
|
end
|
58
59
|
@gtk_notebook.set_size_request(0, Config[:terminals_height])
|
59
60
|
end
|
@@ -69,6 +70,46 @@ module VimMate
|
|
69
70
|
def add_expander_signal(&block)
|
70
71
|
@expander_signal << block
|
71
72
|
end
|
73
|
+
|
74
|
+
# Set the focus to the current terminal
|
75
|
+
def focus_terminal
|
76
|
+
page = @gtk_notebook.get_nth_page(@gtk_notebook.page)
|
77
|
+
page.has_focus = true if page
|
78
|
+
end
|
79
|
+
|
80
|
+
# Add a new terminal at the left of the tab bar.
|
81
|
+
def add_new_terminal
|
82
|
+
page_num = @gtk_notebook.n_pages - 1
|
83
|
+
@gtk_notebook.insert_page(page_num, new_terminal)
|
84
|
+
@gtk_notebook.page = page_num
|
85
|
+
end
|
86
|
+
|
87
|
+
# Deletes terminal with number *page_num*, defaults to current page number.
|
88
|
+
def delete_current_terminal
|
89
|
+
page = @gtk_notebook.get_nth_page(@gtk_notebook.page)
|
90
|
+
prev_terminal
|
91
|
+
Process.kill 'HUP', page.pid
|
92
|
+
end
|
93
|
+
|
94
|
+
# Switch the next (right) terminal, if there exists one. Otherwise start
|
95
|
+
# again with the first terminal on the left.
|
96
|
+
def next_terminal
|
97
|
+
if @gtk_notebook.page < @gtk_notebook.n_pages - 2
|
98
|
+
@gtk_notebook.next_page
|
99
|
+
else
|
100
|
+
@gtk_notebook.page = 0
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Switch the previous (left) terminal, if there exists one. Otherwise start
|
105
|
+
# with again with the last terminal on the right.
|
106
|
+
def prev_terminal
|
107
|
+
if @gtk_notebook.page > 0
|
108
|
+
@gtk_notebook.prev_page
|
109
|
+
else
|
110
|
+
@gtk_notebook.page = @gtk_notebook.n_pages - 2
|
111
|
+
end
|
112
|
+
end
|
72
113
|
|
73
114
|
private
|
74
115
|
|
@@ -104,7 +145,7 @@ module VimMate
|
|
104
145
|
gtk_terminal.signal_connect("window-title-changed") do |terminal|
|
105
146
|
@gtk_notebook.set_tab_label_text(terminal, terminal.window_title)
|
106
147
|
end
|
107
|
-
gtk_terminal.fork_command
|
148
|
+
gtk_terminal.pid = gtk_terminal.fork_command
|
108
149
|
gtk_terminal.feed_child(Config[:terminals_autoexec])
|
109
150
|
gtk_terminal.show
|
110
151
|
gtk_terminal
|
data/lib/vimmatelib/version.rb
CHANGED
@@ -42,6 +42,8 @@ module VimMate
|
|
42
42
|
@gtk_socket.signal_connect("destroy") do
|
43
43
|
Gtk.main_quit
|
44
44
|
end
|
45
|
+
@gtk_socket.can_focus = true
|
46
|
+
@gtk_socket.has_focus = true
|
45
47
|
@vim_started = false
|
46
48
|
end
|
47
49
|
|
@@ -79,6 +81,12 @@ module VimMate
|
|
79
81
|
end
|
80
82
|
self
|
81
83
|
end
|
84
|
+
|
85
|
+
# Set the focus to Vim
|
86
|
+
def focus_vim
|
87
|
+
@gtk_socket.can_focus = true
|
88
|
+
@gtk_socket.has_focus = true
|
89
|
+
end
|
82
90
|
end
|
83
91
|
end
|
84
92
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: VimMate
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.6.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.6.4
|
7
|
+
date: 2007-09-05 00:00:00 -04:00
|
8
8
|
summary: VimMate is a graphical add-on to Vim with IDE-like features.
|
9
9
|
require_paths:
|
10
10
|
- lib
|