Commit e0ea6dd8a89bb6a0b8afae8da429af86810fb8ca

Authored by Guillermo Moguel
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
File was created 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)>
61
File was created 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
105
File was created 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
33