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
... ... @@ -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)>
... ...
... ... @@ -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 +
... ...
... ... @@ -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 +
... ...