Andrey_Krropotkin, спасибо!
Отсутствует
Типа, if - первый код ОК! , тогда и этот второй проходит
Что-то мне эта идея не нравится. А если во вкладках
какое-нибудь добро с beforeunload и передумаешь.
Или если руками всё закрыто, то не надо что ли.
Вместо простого и безопасного скрытия неугодных элементов,
ты меня склоняешь «Сессию стереть» при выходе.
Нет, ну могу попробовать сочинить какую-нибудь стиралку, но не советую.
((topic, id) => { var obs, getObserver = () => { for(var o of Services.obs.enumerateObservers(topic)) { var res = o.wrappedJSObject; if (res && id in res) return res; } } addDestructor(reason => { if (reason[5] != "e") return; var obs = getObserver(); obs && obs.destroy(); }); (obs = getObserver()) || Services.obs.addObserver(obs = { [id]: true, __proto__: null, destroyed: false, destroy() { Services.obs.removeObserver(this, topic); this.destroyed = true; }, get wins() { return Array.from(Services.wm.getEnumerator("navigator:browser")) .filter(win => win.toolbar.visible); }, observe(cancelQuit, t, data) { data != "restart" && !cancelQuit.data && this.onQuit(true); }, handleEvent() { this.destroyed || this.onQuit(); }, onQuit(fromObs) { var {wins} = this, multi = wins.length > 1; if (multi) return fromObs && this.destroy(); this.destroy(); var {tabs} = wins[0].gBrowser; if (tabs.length > 1 ) return; var es = JSON.parse(SessionStore.getTabState(tabs[0])).entries; es.length == 1 && wins[0].isBlankPageURL(es[0].url) && this.erase(); }, erase() { Services.obs.notifyObservers(null, "browser:purge-session-history"); Cu.import("resource:///modules/sessionstore/SessionFile.jsm", {}) .SessionFileInternal.write = () => {}; } }, topic, false); addEventListener("DOMWindowClose", obs); })("quit-application-requested", `${_id}:quitApplicationRequestedObserver1`);
Отсутствует
Приветствую!
Образовался вопрос.Есть ли возможность при помощи CustomButtons кода запретить(как это сказать!?) открепление вкладок
от основного окна.
Попробую пояснить.
Когда у тебя открыто множество вкладок и ты прыгаешь по ним щёлкая мышкой с удивлением замечаешь,что образовались новые окна.
Это происходит потому что во время щелчка мыши иногда бывают микро движения с зажатой левой кпокой.
А новому FireFox достаточно несколько пикселей чтобы сработало событие открепления.В FireFox53 например такого не было.
Заранее спасибо!
Отсутствует
questman
Может что-нибудь простенькое подойдёт
((obj, key) => { var meth = obj[key], func = meth.bind(obj); obj[key] = (...args) => new Error().stack.includes("dragend") ? null : func(...args); addDestructor(() => obj[key] = meth); })(gBrowser, "replaceTabsWithWindow");
Отсутствует
questman
Может что-нибудь простенькое подойдётскрытый текстВыделить кодКод:
((obj, key) => { var meth = obj[key], func = meth.bind(obj); obj[key] = (...args) => new Error().stack.includes("dragend") ? null : func(...args); addDestructor(() => obj[key] = meth); })(gBrowser, "replaceTabsWithWindow");
Это просто шикарно!Всё работает прекрасно.
Спасибо!
Кстати благодаря этому обнаружил для себя новую функцию связанную со вкладками.
Если вкладка одна, то можно дёргая её мышкой позиционировать окно браузера по левую
или по правую сторону.Вот так прикол, только что узнал!
Отредактировано questman (11-08-2019 00:38:25)
Отсутствует
Dumby
Вопрос...
Отредактировано solombala (12-08-2019 10:35:26)
Отсутствует
solombala
Вот вроде подробнее чем обычно расписано, но всё равно не улавливаю.
Какая-то несвязанная последовательность в вопросе.
Скажем так: распаковал Iceweasel_68_x32.rar в субпапку на диске Цэ,
жму кнопку — нормально всё алертится.
var nir = Services.dirsvc.get("GreD", Ci.nsIFile); nir.append("nir"); alert( [...nir.directoryEntries].map(file => file.path).join("\n") );
Отсутствует
Dumby
Если это не использовать , то и проблем нет. Этот код в кн. "Очистка памяти" и как ? Как без привязки к диску?
Отредактировано solombala (12-08-2019 13:25:52)
Отсутствует
У тебя берется путь к профилю и....
var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
.... никак не используется.
file.initWithPath("D:\\iceweasel\\app\\nir\\d.vbs");
let prof = Services.dirsvc.get('ProfD', Ci.nsIFile); // нашел путь к профилю prof.initWithPath("prof.path + "\\nir\\d.vbs"); // в профиле лежит папка nir где лежить нужный файлег prof.launch();
Там папка NIR участвует и не только...Какая , к черту, портатабельность? Никакая...Плюс, в самих vbs дергается memreduct.exe , она тоже в папке и к профилю не привязана... Короче, сижу на ж@пе ровно и не дергаюсь..
Зачем дважды подряд вызывать разные скрипты, если логично записать вызов второго скрипта в конец первого.
Все переменные можно в самом скрипте находить и присвоить. яхз как оно там в VBS, но в cmd\bat определить где лежить выполняемый скрипт
можно через %~dp0 .
Ну а, у VBS возможностей куда больше чем в cmd/bat и есть не один способ узнать, откуда запущен скрипт.
Отредактировано mokujin (12-08-2019 20:22:54)
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
mokujin
Хороший ход, а как с этим быть?
d.bat :
Отсутствует
у тебя какая-то очень-очень дураццкая скриптовая мешанина; запускается vbs, который запускает bat в котором выполняется nircmd.exe - где опять вызывается vbs в котором вызывается bat что это?? зачем!?
Напиши нормальный батнег с нужными командами для memreduct.exe, nircmd.exe... запихни его в кнопку в Help и запускай его из Code
// Записать батнег из вкладки Справка в файл и запустить var prof = Services.dirsvc.get('ProfD', Ci.nsIFile); prof.append("memreduct.cmd"); custombuttonsUtils.writeFile( prof.path, convertFromUnicode("866", self.Help) ); prof.launch();
пример наглядный как это может быть, посмотри здесь [CB]Архив профиля (backup)
В твоем случае как-то так, часть батнега:
@echo off rem скрипт лежит в профиле. Папка приложений, например \app\ лежит ниже chcp 866 cd /d %~dp0 rem folder в профиле где лежат другие проги. например \app\ rem Путь откуда можно начать танцевать со всеми другими путями rem nircmdc.exe лежит в корне этой папки. другие вложены в свои под-папки с именами set app_iw=%~dp0app pushd "%app_iw%" nircmd exec hide "%app_iw%\memreduct\memreduct.exe" nircmd.exe wait 600 nircmd.exe sendkeypress Insert pause exit
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
mokujin
Спасибо, но это не для меня...Ни фига не въезжаю. С эти все понятно
Отсутствует
solombala
глянул что это за прога... в общем вот рабочий батнег (upd. чуть поправил батнег на случай уже запущенной проги.)
@echo off chcp 866 cd /d %~dp0 tasklist | find /i "memreduct.exe" 1>nul goto :%errorlevel% exit :0 nircmdc.exe sendkeypress Ctrl+F1 exit :1 if defined "ProgramFiles(x86)" ( set memRPath=%~dp0memreduct\64\memreduct.exe ) Else ( set memRPath=%~dp0memreduct\32\memreduct.exe ) nircmdc.exe exec hide "%memRPath%" nircmdc.exe wait 1000 nircmdc.exe sendkeypress Ctrl+F1 exit
let prof = Services.dirsvc.get('ProfD', Ci.nsIFile); // нашел путь к профилю prof.initWithPath("prof.path + "\\app\\memreduct.cmd"); // в профиле лежит папка app где лежит nirCmdc.exe и memreduct.cmd prof.launch();
Отредактировано mokujin (12-08-2019 23:14:39)
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
Этот код в кн. "Очистка памяти" и как ? Как без привязки к диску?
Ладно, порылся в сборке немного. Расскажу как наблюдалось.
Во-вторых, пришлось заменить memreduct.exe, этот был недоволен
Warning!
You are attempting to run 32-bit version of Mem Reduct on 64-bit Windows.
Please run the 64-bit version of Mem Reduct instead.
А так, вроде, кое-как работает
this.onclick = async e => { if (e.button) return e.button == 1 || e.ctrlKey || event.shiftKey || Services.prefs.setBoolPref( "browser.zoom.full", !Services.prefs.getBoolPref("browser.zoom.full") ); var wait = ms => new Promise(resolve => setTimeout(resolve, ms)); var launch = (file, hidden, ...args) => { var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); if (hidden) process.startHidden = true; process.runw(false, args, args.length); } var sys = Services.dirsvc.get("SysD", Ci.nsIFile); var fox = Services.dirsvc.get("GreD", Ci.nsIFile); var getFile = (...args) => { var file = args.shift().clone(); args.forEach(file.append); return file; } var mem = getFile(fox, "memreduct", "memreduct.exe"); var nir = getFile(fox, "nir", "nircmd.exe"); var tray = getFile(fox, "nir", "trayupdate.exe"); var tskk = getFile(sys, "taskkill.exe"); mem.launch(); await wait(1000); launch(nir, false, "sendkeypress", "insert"); await wait(2000); launch(tskk, true, "/F", "/IM", "memreduct.exe"); await wait(2000); tray.launch(); }
Отсутствует
Нет. я не понимаю все-равно. Это понятно , папки Nir и memreduct кидаю в профиль и пробую это
Отредактировано solombala (13-08-2019 00:06:11)
Отсутствует
solombala
Все косольные качалки - лежат в одной папке wget. там скрипты для них; curl, wget, youtube-dl, mpv.exe, sort.exe и другие... Поэтому, не проблем с путями:
запустив скрипт из CB(получением пути к профилю, как выше показал) дальше орудуют скрипты, тоже берущие путь относительно себя( %~dp0 )
Сделай в профиле папку основную. В неё уже кидай все другие программы\папки. И тебе будет всегда известно где ты и куда надо переходить.
Любая программа, любой скрипт у мя запускается с одного и того же:
нашел путь к профилю , а в профиле лежит папка SOFT_PM где все остальное лежит. И добавляя нужную часть пути, запускаешь что нужно.
А у тебя, разброс\шатание и даже за пределами рабочей папки бравзера, лежит yotube-dl
Вот пример запуска из конт.меню ссылки(кнопка-меню) PotPlayer
// ----------------------- = PotPlayer = ----------------------------------------- this.potplayOpen = function potplayOpen(){ let prof = Services.dirsvc.get('ProfD', Ci.nsIFile); let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); prof.initWithPath(prof.path + "\\SOFT_PM\\Potplayer\\PotPlayerMini.exe"); process.init(prof); process.run(false, [gContextMenu.linkURL], 1); };
// и тут же , такой же запуск скрипта wget
// ----------------------- = WGET = ------------------------------------- this.wgeturl = function wgeturl(){ let prof = Services.dirsvc.get('ProfD', Ci.nsIFile); let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); let url = ('"' + gContextMenu.linkURL + '"'); let ref = ('"' + getCurUrl() + '"'); let title = getCurTitle(); prof.initWithPath(prof.path + "\\SOFT_PM\\wget\\wgetfile.cmd"); process.init(prof); process.run(false, [url, title, ref], 3); setTimeout(()=> gBrowser.focus(), 1500); };
всегда знаешь где ты находишься, ибо есть точка отсчёта %профиль%\SOFT_PM\. Сделай и у себя так, будет и проще и понятней.
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
Здравствуйте, как можно сделать под портабл путь? запутался в filе... спасибо заранее.
var path="C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe"; var file=Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); var process=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var uri=gBrowser.currentURI.spec; var uri=/.рф/.test(uri) ? Services.io.newURI(uri,null,null).asciiSpec:uri; file.initWithPath(path); !file.exists()&&custombuttons.alertSlide(self.label,"The file doesn't exist"); process.init(file); process.run(false,[uri],1);
function openBrave(){var prof=Services.dirsvc.get('ProfD',Ci.nsIFile); var process=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); prof.initWithPath(prof.path+"\\..\\..\\gBrave\\brave-portable.exe"); !prof.exists()&&custombuttons.alertSlide(self.label,"The file doesn't exist"); var uri=gBrowser.currentURI.spec; var uri=/.рф/.test(uri)?Services.io.newURI(uri,null,null).asciiSpec:uri; process.init(prof);process.run(false,[uri],1);};
var uri=gBrowser.currentURI.spec; var uri=/.рф/.test(uri)?Services.io.newURI(uri,null,null).asciiSpec:uri; process.run(false,[uri],1);}; вопрос тут, он берет с 2 или с одного параметра? может одна из них лишняя? //======================================= var file=Services.dirsvc.get("ProfD",Ci.nsIFile);file.append("SQL.vbs"); в этом коде можно также с путями играться? или тупо профиль?
Отредактировано func4ptch4 (13-08-2019 05:32:24)
Отсутствует
Можете проверить, правильно все? код сам работает через HotKey.
Меня смущает две строки снизу, один с кода сверху, другой со старого кода.
var prof=Services.dirsvc.get('ProfD',Ci.nsIFile); var process=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); prof.initWithPath(prof.path+"\\%Soft\\_QTranslate 6.7.2.exe");prof.launch(); //process.init(prof);process.run(false,[uri],1);}; ////var link=gClipboard.read();var args=[link];file.launch();
Отредактировано func4ptch4 (13-08-2019 05:27:35)
Отсутствует
Так, а как это скрытно запустить? Vbs = требует полный путь или этот батник сразу переделать в Vbs ?
Отредактировано solombala (13-08-2019 13:33:53)
Отсутствует
xrun1
Все равно не то....мелькает. и с этим тоже nircmd.exe win hide title "%ComSpec%"
Да хотя бы свернуть окно консоли , мелькает зараза....Все, сборка полностью портабл...
Все . Вопросов нет. Хочешь сделать хорошо - сделай сам!
Отредактировано solombala (13-08-2019 19:20:32)
Отсутствует
Не понял, так как запустить к примеру это без появления окна? без .vbs
var closer={observe:function(subject,topic,data){if(data=="shutdown"){ var prof=Services.dirsvc.get('ProfD',Ci.nsIFile);prof.append("SQL.bat");prof.launch();}}}; Services.obs.addObserver(closer,"quit-application",false);
да и кажется код кривоват, хотя я походу в игноре лад..
Отредактировано func4ptch4 (13-08-2019 19:00:21)
Отсутствует
func4ptch4
}
}
};
Services.obs.addObserver(closer, "quit-application", false);
Отредактировано solombala (13-08-2019 19:19:17)
Отсутствует
solombala вот тебе готовый комплект ;-) Запускать надо memreduct-start.vbs
MemReduct pack
Теперь понял, зачем там vbs. оказуеццо, это такой простой способ скрыть консоль без сторонних утилит, скрыть окно.
вот это:
Set WshShell = CreateObject("WScript.Shell") RetCode = WshShell.Run("memreduct-action.cmd", 0, False)
заводит пакетный файл без окна. Именно вторая строчка это самое и делает. Т.е. не просто WshShell.Run(что то там...) а с этим вот RetCode и параметрами... возврата, чтоле, хз.
В любом случае, открытие(для меня) поелзное, не знал.
let - это для линукса, как я понял.
нет. let это та же var , только с защитой(или наоборот - с проблемами), работает только внутри { ..... } здесь, в таком мелком коде, это не важно что исп-ть.
зы. solombala почитай про относительные и абсолютные путя\и , вопросы отпадут 1 (http) и 2(Windows)
Добавлено 13-08-2019 23:00:49
var file=Services.dirsvc.get("ProfD",Ci.nsIFile);
file.append("SQL.vbs");
в этом коде можно также с путями играться? или тупо профиль?
Это другой способ составлять путь. Просто более ранний и объемный. За раз , можно добавить только один уровень append == "добавить". ЕЯПП то используется обычно для проверки есть ли файл №3 или для создания файла по известному пути с нужным именем №9
Для запуска программ, можно... но проще\удобней делать через prof.path +"\\часть пути к программе\\123.exe
Отредактировано mokujin (13-08-2019 23:00:49)
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует