Web-разработка, иностранные языки, Eclipse и разные разности

Zygo Profile

Санскрит - словоформы

Verbos Irregulares

Открыть ресурс в файловом менеджере - плагин для Eclipse под Ubuntu Linux.

19.10.2015
Передо мной встала задачка - создать плагин для Eclipse, позволяющий открывать директорию выбранного файла/папки/проекта в дереве проектов Package Explorer. Директория открывается при выборе соответсвующего пункта контекстного меню или нажатия комбинации клавиш (CTRL+8)

В результате получилось следующее:


Расскажу как делала по шагам:

1) Для начала создаю сам проект com.zygo.openfolder на базе шаблона "Hello, World Command"
(см. Welcome -> Eclipse Plug-in Development -> Create a plug-in)
На последнем шаге указываю: Handler Class Name - ZygoHandler

2) Вношу изменения в созданный plugin.xml
(Для этого можно открыть plugin.xml и выбрать нижнюю вкладку "plugin.xml")

Заменяю часть кода:

   <extension
         point="org.eclipse.ui.menus">
        ....
    </extension>

На

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
            <command
                  commandId="com.zygo.openfolder.commands.sampleCommand"
                  icon="icons/sample.gif"
                  tooltip="Open Containing Folder"
                  id="com.zygo.openfolder.toolbars.sampleCommand"
                  label="Show in FileManager">
            </command>
      </menuContribution>
      <menuContribution
            locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu">
            <command
                  commandId="com.zygo.openfolder.commands.sampleCommand"
                  icon="icons/sample.gif"
                  tooltip="Open Containing Folder"
                  id="com.zygo.openfolder.toolbars.sampleCommand"
                  label="Show in FileManager">
            </command>
      </menuContribution>
      <menuContribution
            locationURI="popup:org.python.pydev.navigator.view#PopupMenu">
            <command
                  commandId="com.zygo.openfolder.commands.sampleCommand"
                  icon="icons/sample.gif"
                  tooltip="Open Containing Folder"
                  id="com.zygo.openfolder.toolbars.sampleCommand"
                  label="Show in FileManager">
            </command>
      </menuContribution>     
   </extension>

Я добавляю три почти одинаковых тега menuContribution для того, чтобы новый пункт контекстного меню отображался в Package Explorer (для перспективы Java), в Project Explorer (напр. для отображения в перспективе Plug-in Development) и в PyDev Package Explorer.
Выбор трех указанных эксплореров определялся непосредственно моей задачкой - по большей части я занимаюсь разработкой в перспективе PyDev.

Существует, конечно, другой вариант: <extension point="org.eclipse.ui.popupMenus">, но я решила им не пользоваться, поскольку данный extension point уже deprecated и имеет ряд ограничений - например, сложность с привязыванием комбинации клавиш (решение есть, но довольно громоздкое) и прочие неудобства.

3) В файла src / com.zygo.openfolder.handlers / ZygoHandler.java добавляю следующий код:



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.zygo.openfolder.handlers;

import java.io.IOException;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeSelection;


public class ZygoHandler extends AbstractHandler {
 
 // файловый менеджер в убунту по умолчанию
 // при запуске "xdg-open /path/to/location" откроет файловый менеджер в
 // директории /path/to/location
 private String DefaultUbuntuFilemanager = "xdg-open";

   IResource extractSelection(ISelection sel) {
       if (!(sel instanceof IStructuredSelection))
          return null;
       IStructuredSelection ss = (IStructuredSelection) sel;
       Object element = ss.getFirstElement();
       if (element instanceof IResource)
          return (IResource) element;
       // @TODO: if (element instanceof SourceMember) ...      
       if (!(element instanceof IAdaptable)){
          return null;
       }
       IAdaptable adaptable = (IAdaptable)element;
       Object adapter = adaptable.getAdapter(IResource.class);
       return (IResource) adapter;
 }
 
 public Object execute(ExecutionEvent event) throws ExecutionException {

  // определяем, что выделено в данный момент
  ISelection selection = HandlerUtil.getCurrentSelectionChecked(event);
  
  if (!(selection instanceof TreeSelection)){
   return null;
  }
  
  IResource res = extractSelection(selection);
  
  if(res == null){
   return null;
  }
  
        String folderPath = "";       
      
        // 1 соотвествует файлу, 2 - директория, 4 - проект
      
        if(res.getType() == 1){
         folderPath = res.getParent().getLocation().toString(); 
        }else if (res.getType() == 2 || res.getType() == 4){
         folderPath = res.getLocation().toString();
        }
      
  if(!folderPath.isEmpty()){
   try {
       String command = DefaultUbuntuFilemanager+" "+folderPath;
       Runtime.getRuntime().exec(command);
      } catch (IOException e) {
       System.out.println(e);
      }
  }       
      
  return null;
 }
}

Вместо "xdg-open" можно подставить другой файловый менеджер, принимающий на вход как аргумент путь к нужной директории.


Еще я заменила комбинацию клавиш с CTRL+6 (стандартной), на нужную мне.
В plugin.xml <extension point="org.eclipse.ui.bindings"> в теге key вместо опции sequence="M1+6" (т.е. CTRL+6) я поставила CTRL+8.
M1, M2 и M3 соотвествуют клавишам CTRL, SHIFT и ALT. Т.е., если бы я хотела выбрать комбинацию клавиш CTRL+SHIFT+3, я могла бы использовать M1+M2+3

Вот и все. Собираю стандартными средствами эклипса jar-aрхив (Вкладка "Overview" > "Exporting" в plugin.xml), затем помещаю его в директорию эклипса dropins. Работает!

Критика, советы и пожелания приветствуются.
Облако тегов
Меню
Архив
© Psytronica.ru. Блог существа SherZa. 2015-2017 Наверх