Как установить каталог по умолчанию в Komodo из расширения?

Я работаю над расширением KomodoIDE/KomodoEdit, которое создает новый файл, а затем открывает его на новой вкладке редактирования, используя

...
var obsvc = Components.classes["@mozilla.org/observer-service;1"].
getService(Components.interfaces.nsIObserverService);
...
Display.initWithPath(Target.path);
Display.append(what);

try {
  obsvc.notifyObservers(null, 'open-url', "file://" + Display.path);
} catch (e) {
  alert(e);
}

это работает, но мне также хотелось бы, чтобы каталог по умолчанию Komodo был в том же каталоге, где находится этот файл, но я не вижу способа сделать это автоматически.

Я нашел doCommand...

ko.commands.doCommand('cmd_openDirectory')

но это только запускает диалоговое окно файла, которое просит пользователя выбрать каталог. Я хотел бы сделать что-то, чтобы установить это программно, используя что-то вроде...

obsvc.notifyObservers(null, 'open-directory', "file://" + Display.path);

(что я знаю, не работает, но это своего рода идея).

2 ответа

Я только что обнаружил, что у объекта ko.places.manager есть функция, чтобы установить каталог оконной панели Places по умолчанию. Ниже приведен пример того, как я его использовал. Для URI должен быть задан полный путь к каталогу, а в случае Windows обратная косая черта должна быть экранирована...

function SetPlace(ko, uri) {
    try {
    ko.places.manager.openDirURI("file:///" + uri.replace(/\\/g, "\\\\") );
    } catch(e) {
    alert("Could not set place to: " + uri.replace(/\\/g, "\\\\") + "\n" + e);
    }
}

Интерфейс nsIFile обеспечивает это:

// Get current working directory

var file = Components.classes["@mozilla.org/file/directory_service;1"].
       getService(Components.interfaces.nsIProperties).
       get("CurProcD", Components.interfaces.nsIFile);

Служба предпочтений Komodo также будет вариант:

    var gprefs = Components.classes["@activestate.com/koPrefService;1"].
      getService(Components.interfaces.koIPrefService).prefs;
    gprefs.setStringPref("mruDirectory", "Display.path);

Рекомендации

Другие вопросы по тегам