Commit e0ea6dd8a89bb6a0b8afae8da429af86810fb8ca
0 parents
Exists in
master
Clone de terminator-applauncher
plugin para terminator
Showing
3 changed files
with
196 additions
and
0 deletions
Show diff stats
README.md
... | ... | @@ -0,0 +1,60 @@ |
1 | +# AppLauncher | |
2 | + | |
3 | +I want to share this plugin, I use [Terminator](http://www.tenshu.net/p/terminator.html), and every time I wanted to set up my development environment, I had to launch Terminator and execute the commands needed. In order to avoid this repetitive sequence, I decided to write a plugin that, with just one click, launches Terminator, creates divisions in it, and executes the commands needed for every project. | |
4 | + | |
5 | +## Installation | |
6 | + | |
7 | +1. Put files in `~/.config/terminator/plugins/`: | |
8 | + | |
9 | + mkdir -p ~/.config/terminator/plugins | |
10 | + cp applauncher.py ~/.config/terminator/plugins/ | |
11 | + cp projects.py ~/.config/terminator/plugins/ | |
12 | + | |
13 | +2. Restart [Terminator](http://www.tenshu.net/p/terminator.html), go to `Context menu > Preferences > Plugins` and select `AppLauncher`. | |
14 | + | |
15 | +## Setup | |
16 | + | |
17 | +1. Edit `~/.config/terminator/plugins/projects.py`, example: | |
18 | + | |
19 | + :::python | |
20 | + PROJECTS = {"Project 1": {"split": "vert", | |
21 | + "terminal1": {"split": "horiz", | |
22 | + "terminal1": {"commands": ["dir"], | |
23 | + }, | |
24 | + "terminal2": {"commands": ["ls"], | |
25 | + } | |
26 | + }, | |
27 | + "terminal2": {"commands": ["dir"], | |
28 | + }, | |
29 | + }, | |
30 | + "Project 2": {"enabled": False, | |
31 | + "split": "vert", | |
32 | + "terminal1": {"split": "horiz", | |
33 | + "terminal1": {"commands": ["command 1", | |
34 | + "command 2", | |
35 | + "command 3"], | |
36 | + }, | |
37 | + "terminal2": {"commands": ["command"], | |
38 | + } | |
39 | + }, | |
40 | + "terminal2": {"split": "horiz", | |
41 | + "terminal1": {"commands": ["command"], | |
42 | + }, | |
43 | + "terminal2": {"commands": ["command"], | |
44 | + } | |
45 | + }, | |
46 | + }, | |
47 | + "Project 3": {"commands": ["history", ] } | |
48 | + } | |
49 | + | |
50 | + EDITOR = "gedit" | |
51 | + | |
52 | +2. Restart Terminator. | |
53 | + | |
54 | +## Use | |
55 | + | |
56 | +* Go to `Context menu > AppLauncher`, and select your project. | |
57 | + | |
58 | +## Autor | |
59 | + | |
60 | +* Guido Castillo Gรณmez <[gcasgo@gmail.com](https://plus.google.com/116701415230747107577)> | ... | ... |
applauncher.py
... | ... | @@ -0,0 +1,104 @@ |
1 | +#!/usr/bin/python | |
2 | +# Written by Guido Castillo Gomez <gcasgo@gmail.com> | |
3 | +# GPL v2 only | |
4 | + | |
5 | +import os | |
6 | +import gtk | |
7 | +import terminatorlib.plugin as plugin | |
8 | +from terminatorlib.translation import _ | |
9 | + | |
10 | +try: | |
11 | + from projects import PROJECTS | |
12 | +except ImportError: | |
13 | + PROJECTS = {} | |
14 | + | |
15 | +try: | |
16 | + from projects import EDITOR | |
17 | +except ImportError: | |
18 | + EDITOR = "gedit" | |
19 | + | |
20 | +AVAILABLE = ['AppLauncher'] | |
21 | + | |
22 | + | |
23 | +class AppLauncher(plugin.Plugin): | |
24 | + capabilities = ['terminal_menu'] | |
25 | + | |
26 | + def callback(self, menuitems, menu, terminal): | |
27 | + """Add our menu item to the menu""" | |
28 | + | |
29 | + item = gtk.MenuItem('AppLauncher') | |
30 | + menuitems.append(item) | |
31 | + | |
32 | + submenu = gtk.Menu() | |
33 | + item.set_submenu(submenu) | |
34 | + | |
35 | + projects = PROJECTS.keys() | |
36 | + projects.sort() | |
37 | + for project in projects: | |
38 | + if not PROJECTS[project].get('enabled', True): | |
39 | + continue | |
40 | + menuitem = gtk.MenuItem(project) | |
41 | + menuitem.connect("activate", self.launch_project, terminal, project) | |
42 | + submenu.append(menuitem) | |
43 | + | |
44 | + menuitem = gtk.SeparatorMenuItem() | |
45 | + submenu.append(menuitem) | |
46 | + | |
47 | + menuitem = gtk.ImageMenuItem(gtk.STOCK_PREFERENCES) | |
48 | + menuitem.connect("activate", self.configure) | |
49 | + submenu.append(menuitem) | |
50 | + | |
51 | + #if config.has_key("default"): | |
52 | + # self.launch_project("widget", terminal, DEFAULT_PROJECT) | |
53 | + | |
54 | + def launch_project(self, widget, terminal, project): | |
55 | + | |
56 | + if PROJECTS.has_key(project): | |
57 | + | |
58 | + focussed_terminal = None | |
59 | + widget_win = terminal.terminator.windows[0] | |
60 | + widget_win.set_maximised(True) | |
61 | + widget_win.tab_new(widget_win.get_focussed_terminal()) | |
62 | + visible_terminals = widget_win.get_visible_terminals() | |
63 | + for visible_terminal in visible_terminals: | |
64 | + if visible_terminal.vte.is_focus(): | |
65 | + focussed_terminal = visible_terminal | |
66 | + | |
67 | + project_config = PROJECTS[project] | |
68 | + self.split_terminal(focussed_terminal, project_config, widget_win) | |
69 | + | |
70 | + def split_terminal(self, terminal, terminal_config, window): | |
71 | + self.execute_command(terminal, terminal_config.get('commands')) | |
72 | + | |
73 | + if terminal_config.has_key('split'): | |
74 | + visible_terminals_temp = window.get_visible_terminals() | |
75 | + if terminal_config['split'].lower().count("vert"): | |
76 | + terminal.key_split_vert() | |
77 | + else: | |
78 | + terminal.key_split_horiz() | |
79 | + visible_terminals = window.get_visible_terminals() | |
80 | + | |
81 | + for visible_terminal in visible_terminals: | |
82 | + if not visible_terminal in visible_terminals_temp: | |
83 | + terminal2 = visible_terminal | |
84 | + | |
85 | + if terminal_config.has_key('terminal1'): | |
86 | + self.split_terminal(terminal, terminal_config['terminal1'], window) | |
87 | + if terminal_config.has_key('terminal2'): | |
88 | + self.split_terminal(terminal2, terminal_config['terminal2'], window) | |
89 | + | |
90 | + def execute_command(self, terminal, command): | |
91 | + if command: | |
92 | + if isinstance(command, list): | |
93 | + command = "\n".join(command) | |
94 | + else: | |
95 | + command = command | |
96 | + if command[len(command)-1] != '\n': | |
97 | + command = command + '\n' | |
98 | + terminal.vte.feed_child(command) | |
99 | + | |
100 | + def configure(self, widget): | |
101 | + filename = os.path.realpath(os.path.join(os.path.dirname(__file__), 'projects.py')) | |
102 | + editor = os.getenv('EDITOR') or EDITOR | |
103 | + os.system('%s %s' % (editor, filename)) | |
104 | + | ... | ... |
projects.py
... | ... | @@ -0,0 +1,32 @@ |
1 | +PROJECTS = {"Project 1": {"split": "vert", | |
2 | + "terminal1": {"split": "horiz", | |
3 | + "terminal1": {"commands": ["dir"], | |
4 | + }, | |
5 | + "terminal2": {"commands": ["ls"], | |
6 | + } | |
7 | + }, | |
8 | + "terminal2": {"commands": ["dir"], | |
9 | + }, | |
10 | + }, | |
11 | + "Project 2": {"enabled": False, | |
12 | + "split": "vert", | |
13 | + "terminal1": {"split": "horiz", | |
14 | + "terminal1": {"commands": ["command 1", | |
15 | + "command 2", | |
16 | + "command 3"], | |
17 | + }, | |
18 | + "terminal2": {"commands": ["command"], | |
19 | + } | |
20 | + }, | |
21 | + "terminal2": {"split": "horiz", | |
22 | + "terminal1": {"commands": ["command"], | |
23 | + }, | |
24 | + "terminal2": {"commands": ["command"], | |
25 | + } | |
26 | + }, | |
27 | + }, | |
28 | + "Project 3": {"commands": ["history", ] } | |
29 | + } | |
30 | + | |
31 | +EDITOR = "gedit" | |
32 | + | ... | ... |