13:27 

Как я чистил Фокс.

stepa6ka
Когда мой любимый лис начал тормозить неимоверно и глючить, так что мочи больше не было терпеть,
было принято стратегическое решение: пора чистить его от мусора.

Старый профиль был снесён под корень (кроме паролей, которые собирались в фоксе поколениями
— файлы «signons.txt» и «signons2.txt» из каталога с профилем, если кому-то будет интересно).

Фокс был запущен и тут же закрыт, в новорожденный профиль были положены файлы с паролями,
а потом, после повторного запуска, был поставлен скромный такой набор экстеншенов, без которых
жизнь уже и не мила:

Firebug с Web Developer ― без них не поработаешь ни дня,
Inspect Context ― дабы можно было посмотреть лису в зубы, то бишь в Chrome,
— и… Vimperator :)

После установки последнего, превращающего лису в нечто vim'подобное (что это такое описать невозможно,
те, кто «в теме», и так понял, а для остальных: надо быть программером и вариться в Unix'ах, чтоб такое знать),
моя половинка, взяв в руки мой комп с запущенной лисой для «посидеть в инете», спешно нашла Оперу :)
Так что простым юзерам, что считают слово «Юникс» страшным ругательством, этот экстеншен строго
противопоказан. Я предупредил.

Дальше для тех, кто в теме.

Ясный пень, расширение это не просто так попало в мои шаловливые ручки :)

Оно было исследовано вдоль и поперёк, пропатчено под мои нужды и облеплено плагинами.
Плагинами самописными, а не теми, что висят на оф. сайте.

Не все мои плагинчики были ещё приняты/посланы/размещены на оф. сайте, так что осмелюсь некоторые выложить тут:

1. Повторяем функционал Neo Diggler, от которого отказался полностью, ибо он прилеплен к ныне почившей
адресной строке.

vimperator.completion.regexpUrl = function(filter, complete) {
var regExps = [
[ /^http:\/\/([a-zA-Z0-9]+)(?:\.(?:live|dev|beta))?\.my\.site\.com(.*)/, 'http://$1.stage.my.site.com$2' ],
[ /^http:\/\/([a-zA-Z0-9]+)(?:\.(?:live|stage|beta))?\.my\.site\.com(.*)/, 'http://$1.dev.my.site.com$2' ],
[ /^http:\/\/([a-zA-Z0-9]+)(?:\.(?:live|stage|dev))?\.my\.site\.com(.*)/, 'http://$1.beta.my.site.com$2' ],
[ /^http:\/\/([a-zA-Z0-9]+)\.(?:stage|beta|dev)\.my\.site\.com(.*)/, 'http://$1.my.site.com$2' ],
];
var cpt = [];
for (var i = 0; i < regExps.length; i++)
if (regExps[i][0].test(filter))
cpt = cpt.concat([[filter.replace(regExps[i][0], regExps[i][1]), regExps[i][1]]]);

var cpt = cpt.concat(vimperator.completion.url(filter, complete));
return cpt;
}

var cmd;

if (cmd = vimperator.commands.get('tabopen'))
cmd.completer = function(filter) { return vimperator.completion.regexpUrl(filter); };

if (cmd = vimperator.commands.get('open'))
cmd.completer = function(filter) { return vimperator.completion.regexpUrl(filter); };


2. Настраиваем управление загрузкой картинок для экономии трафика.

vimperator.options.add(new vimperator.Option(["img"], "string", {
shortHelp: "Set image behavior: 1=load all, 2=load none, 3=load from the same host",
help: "Set image loading policy. You can set it to 1 to load all images (default), " +
"to 2 to disable images loading and to 3 to load only images from the same host.
" +
"You can also use string aliases: all, none and host.",
defaultValue: 1,
validator: function(val) { return (/^([123]|all|none|host)$/i.test(val)); },
setter: function(val) {
val = val.toLowerCase();
if (val == "all")
val = 1;
else if (val == "none")
val = 2;
else if (val == "host")
val = 3;
else
val = parseInt(val);
vimperator.options.setFirefoxPref("permissions.default.image", val);
},
getter: function() {
var val = vimperator.options.getFirefoxPref("permissions.default.image", 1);
if (val == 1)
return "all";
else if (val == 2)
return "none";
else
return "host";
}
}));


3. Типографим текст (заюзано при написании этого поста).

vimperator.util.typograph = function (txt) {

var re_dash = /-(\s|$)/mg;
var re_rquot = /"([?!,.;:)}\]\/\\]|\s|$)/mg;
var re_lquot = /"/mg;
var re_ellip = /\.\.\.\B/mg;

txt = txt.replace(re_rquot,"\u00bb$1");
txt = txt.replace(re_lquot,"\u00ab");

txt = txt.replace(re_dash,"\u2015$1");
txt = txt.replace(re_ellip,"\u2026");

return txt;
};

vimperator.commands.add(new vimperator.Command(['typo[graph]'],
function (args, special) {
var objlist;
var tab = vimperator.tabs.getTab().linkedBrowser.contentDocument;
if (special) {
objlist = tab.getElementsByTagName('TEXTAREA');
} else if (args) {
objlist = args.split(/\s+/).map( function (item) { return item? tab.getElementById(item): ''; } );
} else {
vimperator.echoerr("You must pass id of textarea to process!");
return;
}
for (var i = 0; i < objlist.length; i++)
if (objlist[i] && objlist[i].tagName == 'TEXTAREA')
objlist[i].value = vimperator.util.typograph(objlist[i].value);

}, {
usage: [ "typo[graph] {id} [...]", "typo[graph]!" ],
shortHelp: "Makes text more beautiful for publishing",
help: "Replaces inch marks (") with arrowed quotes (\u00ab and \u00bb), " +
"hyphens (-) with long dashes (\u2015) and three dots in a row (...) " +
"with ellipsis (\u2026). Very useful for text formatting " +
"before publishing to CMS or weblog.
" +
"If used with '!' processes text in all " +
"textareas on the page, otherwise takes space " +
"separated list of textareas' ids to process.",
completer: function (filter)
{
var tab = vimperator.tabs.getTab().linkedBrowser.contentDocument;
var txts = tab.getElementsByTagName('TEXTAREA');
var completions = [];

for (var i = 0; i < txts.length; i++)
if (txts[i].id && vimperator.completion.match(filter, [ txts[i].id, txts[i].value ], false))
completions.push([txts[i].id, txts[i].value.substr(0, 100)]);

return completions;
}
}
));


4. Добавляем команду "s" для поиска и замены текста с регулярными выражениями.

vimperator.commands.add(new vimperator.Command(['s'],
function (args, special, count) {
var sep = args[0];
var [ srch, repl, flags ] = args.substr(1).split(sep);

var tab = vimperator.tabs.getTab().linkedBrowser.contentDocument;
var textareas = tab.getElementsByTagName('TEXTAREA');
var textinputs = tab.getElementsByTagName('INPUT');

try {
var re = new RegExp(srch, flags);

for (var i = 0; i < textareas.length; i++)
textareas[i].value = textareas[i].value.replace(re, repl);

for (var i = 0; i < textinputs.length; i++)
if (textinputs[i].type == 'text')
textinputs[i].value = textinputs[i].value.replace(re, repl);

} catch (e) {
vimperator.echoerr(e.toString());
}
},
{
usage: ['s /{what}/{replace}/[{flags}]'],
shortHelp: 'Replaces {what} with {replace}'
}
));




@темы: апдейт, программки

URL
Комментарии
2008-12-24 в 12:21 

А нельзя ли поподробнее? Не совсем понятно что делают эти плагины и как они вызываются к жизни.

URL
     

Здесь торчат уши

главная