private void popup (MouseEvent e) {
		if (!e.isPopupTrigger()) {
			return;
		}
		
		{
			int r = rowAtPoint(e.getPoint());
			int c = columnAtPoint(e.getPoint());
			if (!(r >= 0 && c >= 0)) {
				return;
			}
			
			if (!isCellSelected(r, c)) {
				clearSelection();
				addRowSelectionInterval(r, r);
				addColumnSelectionInterval(c, c);
			}
		}
		
		int[] rows = getSelectedRows();
		final List<Repository> reps = new ArrayList<>();
		final List<Repository.Command> cmds = new ArrayList<>();
		for (int row : rows) {
			int modelRow = convertRowIndexToModel(row);
			Repository rep = getModel().getRepository(modelRow);
			reps.add(rep);
			for (Repository.Command cmd : rep.getCommands()) {
				if (!cmds.contains(cmd)) {
					cmds.add(cmd);
				}
			}
		}
		
		println("popup on " + reps);
		
		JPopupMenu menu = new JPopupMenu("Commands");
		
		for (final Repository.Command cmd : cmds) {
			JMenuItem mi = new JMenuItem(cmd.name);
			mi.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed (ActionEvent e) {
					for (final Repository rep : reps) {
						Main.commandLater(rep, cmd);
					}
				}

			});
			menu.add(mi);
		}
		
		menu.show(this, e.getX(), e.getY());
	}