Как установить каталог по умолчанию в 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);

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


person qpl guy    schedule 29.07.2014    source источник


Ответы (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);
    }
}
person qpl guy    schedule 23.12.2014

Интерфейс 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);

Ссылки

person Paul Sweatte    schedule 04.09.2014