Хочу поделиться с хабросообществом двумя рецептами «приготовления» Firefox для более приятного и удобного его использования в повседневной жизни юниксоида.
Речь будет идти о версии Firefox под FreeBSD. Но всё, описанное ниже, вполне применимо и к версии для Linux. Для Windows всё не так просто и решается другими способами.
Я опишу метод «внедрения» в Firefox сочетаний клавиш в стиле Emacs, а также как заставить Firefox загружать по mouse middleclick любой контент буфера обмена, а не только тот, который похож на ссылку (имеет префикс http:// и т.п.).
Если тема интересна, прошу под кат.
Итак. Каждый из нас, кто в силу разных причин использует shell (в частности bash), наверняка знаком с Emacs-style keybindings. Например:
Ctrl — a: перейти в начало строки
Ctrl — e: перейти в конец строки
Ctrl — u: удалить до начала строки
Ctrl — k: удалить до конца строки
И т.д.
Я настолько привык использовать эти сочетания клавиш, что зачастую по инерции пытаюсь применить их и в других программах. В частности, в Firefox. Однако, это приводит к неожиданным результатам. Например, сочетание «Ctrl — w», вместо удаления слова перед курсором, просто закрывает текущую вкладку.
Когда-то давно мне такое положение дел надоело и я использовал метод, найденный на просторах MozillaZine. И с тех пор использую это решение при каждом обновлении Firefox. Ниже опишу последовательность действий.
Для начала нам нужен установленный Firefox. В FreeBSD его можно установить из коллекции портов (ports/www/firefox). Далее необходимо взять файл toolkit.jar. По умолчанию в FreeBSD он устанавливается в директорию /usr/local/lib/firefox/chrome/. Затем его нужно распаковать. Сделать это можно с помощью утилиты jar из поставки JDK, либо утилиты fastjar (ports/archivers/fastjar), либо обычным unzip:
Содержимое архива будет распаковано в текущую директорию. Далее в файл content/global/platformHTMLBindings.xml добавляем следующее:
1) в секцию <handlers> раздела <binding id="inputFields">
2) в секцию <handlers> разделов <binding id="textAreas"> и <binding id="editor">
После этого запаковываем архив обратно: "
Для этого понадобятся root'овые права. Также, само собой, файл toolkit.jar предварительно нужно забэкапить.
Перезапускаем Firefox и наслаждаемся наличием сочетаний клавиш в стиле Emacs во всех текстовых полях, включая адресную строку броузера.
Чтобы каждый раз при выходе новой версии Firefox руками не копаться в содержимом файла content/global/platformHTMLBindings.xml, я завернул эти изменения в патч.
Идём дальше. Начиная с 4-ой версии Firefox я столкнулся с тем, что по нажатию средней кнопки мыши броузер более не пытается загрузить ссылку из буфера обмена, если у этой ссылки нету соответствующего префикса (http:// и т.п.). Т.е., если я, скажем, из лога веб-сервера копирую имя виртуального хоста, чтобы посмотреть на его веб-сайт в броузере, то вместо привычного middle click в окне броузера, я вынужден поставить курсор в адресную строку, вставить туда контент буфера обмена и нажать Enter. Это, мягко говоря, нововведение настолько повергло меня в уныние, что заставило снова обратиться к поиску решения на просторах Сети. И решение было найдено. Оно предполагает такую же процедуру, что и описанный выше метод. Только файлы редактировать мы будем другие. Берём файл browser.jar из директории /usr/local/lib/firefox/chrome/, бэкапим и распаковываем его. Далее в файле content/browser/browser.js находим вот такой блок:
и заменяем его на вот такой:
Сохраняем, запаковываем обратно и перемещаем вновьсозданный browser.jar назад в директорию /usr/local/lib/firefox/chrome/. Перезагружаем броузер, убеждаемся, что в about:config опция contentLoadURL имеет значение true и наслаждаемся полученным результатом: теперь при нажатии средней кнопки мыши броузер будет пытаться загрузить любой контент из буфера обмена, а не только тот, который он считает ссылкой.
Как и для предыдущего метода, тоже можно использовать соответствующий патч.
Оба метода используются мною давно и уже проверены на работоспособность в недавно вышедшем FF 10.0.
Один минус этого подхода: патчи нужно применять после каждого обновления Firefox.
Надеюсь, эта статья будет полезной и принесёт кому-то ещё больше удовлетворения и наслаждения от работы в любимом броузере.
В статье были использованы следующие материалы:
1. Emacs Keybindings — Firefox (MozillaZine).
2. Firefox 4: Fixing middlemouse.content load, and hacking jars (ShallowSky.com).
Речь будет идти о версии Firefox под FreeBSD. Но всё, описанное ниже, вполне применимо и к версии для Linux. Для Windows всё не так просто и решается другими способами.
Я опишу метод «внедрения» в Firefox сочетаний клавиш в стиле Emacs, а также как заставить Firefox загружать по mouse middleclick любой контент буфера обмена, а не только тот, который похож на ссылку (имеет префикс http:// и т.п.).
Если тема интересна, прошу под кат.
Итак. Каждый из нас, кто в силу разных причин использует shell (в частности bash), наверняка знаком с Emacs-style keybindings. Например:
Ctrl — a: перейти в начало строки
Ctrl — e: перейти в конец строки
Ctrl — u: удалить до начала строки
Ctrl — k: удалить до конца строки
И т.д.
Я настолько привык использовать эти сочетания клавиш, что зачастую по инерции пытаюсь применить их и в других программах. В частности, в Firefox. Однако, это приводит к неожиданным результатам. Например, сочетание «Ctrl — w», вместо удаления слова перед курсором, просто закрывает текущую вкладку.
Когда-то давно мне такое положение дел надоело и я использовал метод, найденный на просторах MozillaZine. И с тех пор использую это решение при каждом обновлении Firefox. Ниже опишу последовательность действий.
Для начала нам нужен установленный Firefox. В FreeBSD его можно установить из коллекции портов (ports/www/firefox). Далее необходимо взять файл toolkit.jar. По умолчанию в FreeBSD он устанавливается в директорию /usr/local/lib/firefox/chrome/. Затем его нужно распаковать. Сделать это можно с помощью утилиты jar из поставки JDK, либо утилиты fastjar (ports/archivers/fastjar), либо обычным unzip:
mkdir /tmp/firefox/ && cd /tmp/firefox/ && cp /usr/local/lib/firefox/chrome/toolkit.jar /tmp/firefox/ && fastjar -xf toolkit.jar
Содержимое архива будет распаковано в текущую директорию. Далее в файл content/global/platformHTMLBindings.xml добавляем следующее:
1) в секцию <handlers> раздела <binding id="inputFields">
<!-- Emacsish single-line motion and delete keys -->
<handler event="keypress" key="a" modifiers="control" command="cmd_beginLine"/>
<handler event="keypress" key="e" modifiers="control" command="cmd_endLine"/>
<handler event="keypress" key="b" modifiers="control" command="cmd_charPrevious"/>
<handler event="keypress" key="f" modifiers="control" command="cmd_charNext"/>
<handler event="keypress" key="h" modifiers="control" command="cmd_deleteCharBackward"/>
<handler event="keypress" key="d" modifiers="control" command="cmd_deleteCharForward"/>
<handler event="keypress" key="w" modifiers="control" command="cmd_deleteWordBackward"/>
<handler event="keypress" key="u" modifiers="control" command="cmd_deleteToBeginningOfLine"/>
<handler event="keypress" key="k" modifiers="control" command="cmd_deleteToEndOfLine"/>
2) в секцию <handlers> разделов <binding id="textAreas"> и <binding id="editor">
<!-- Emacsish single-line motion and delete keys -->
<handler event="keypress" key="a" modifiers="control" command="cmd_beginLine"/>
<handler event="keypress" key="e" modifiers="control" command="cmd_endLine"/>
<handler event="keypress" id="key_left" key="b" modifiers="control" command="cmd_charPrevious"/>
<handler event="keypress" id="key_right" key="f" modifiers="control" command="cmd_charNext"/>
<handler event="keypress" id="key_delback" key="h" modifiers="control" command="cmd_deleteCharBackward"/>
<handler event="keypress" id="key_delforw" key="d" modifiers="control" command="cmd_deleteCharForward"/>
<handler event="keypress" id="key_delwback" key="w" modifiers="control" command="cmd_deleteWordBackward"/>
<handler event="keypress" id="key_del_bol" key="u" modifiers="control" command="cmd_deleteToBeginningOfLine"/>
<handler event="keypress" id="key_del_eol" key="k" modifiers="control" command="cmd_deleteToEndOfLine"/>
<!-- Emacsish multi-line motion and delete keys -->
<handler event="keypress" id="key_linedown" key="n" modifiers="control" command="cmd_lineNext"/>
<handler event="keypress" id="key_lineup" key="p" modifiers="control" command="cmd_linePrevious"/>
После этого запаковываем архив обратно: "
fastjar -cf toolkit.jar */
" (или с помощью "zip -r
"). И перемещаем его в исходную директорию:mv toolkit.jar /usr/local/lib/firefox/chrome/toolkit.jar
Для этого понадобятся root'овые права. Также, само собой, файл toolkit.jar предварительно нужно забэкапить.
Перезапускаем Firefox и наслаждаемся наличием сочетаний клавиш в стиле Emacs во всех текстовых полях, включая адресную строку броузера.
Чтобы каждый раз при выходе новой версии Firefox руками не копаться в содержимом файла content/global/platformHTMLBindings.xml, я завернул эти изменения в патч.
Идём дальше. Начиная с 4-ой версии Firefox я столкнулся с тем, что по нажатию средней кнопки мыши броузер более не пытается загрузить ссылку из буфера обмена, если у этой ссылки нету соответствующего префикса (http:// и т.п.). Т.е., если я, скажем, из лога веб-сервера копирую имя виртуального хоста, чтобы посмотреть на его веб-сайт в броузере, то вместо привычного middle click в окне броузера, я вынужден поставить курсор в адресную строку, вставить туда контент буфера обмена и нажать Enter. Это, мягко говоря, нововведение настолько повергло меня в уныние, что заставило снова обратиться к поиску решения на просторах Сети. И решение было найдено. Оно предполагает такую же процедуру, что и описанный выше метод. Только файлы редактировать мы будем другие. Берём файл browser.jar из директории /usr/local/lib/firefox/chrome/, бэкапим и распаковываем его. Далее в файле content/browser/browser.js находим вот такой блок:
try {
makeURI(url);
} catch (ex) {
// Not a valid URI.
return;
}
и заменяем его на вот такой:
var URIFixup = Components.classes["@mozilla.org/docshell/urifixup;1"]
.getService(Components.interfaces.nsIURIFixup);
url = URIFixup.createFixupURI(url, 1).spec;
// 1 is FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP
Сохраняем, запаковываем обратно и перемещаем вновьсозданный browser.jar назад в директорию /usr/local/lib/firefox/chrome/. Перезагружаем броузер, убеждаемся, что в about:config опция contentLoadURL имеет значение true и наслаждаемся полученным результатом: теперь при нажатии средней кнопки мыши броузер будет пытаться загрузить любой контент из буфера обмена, а не только тот, который он считает ссылкой.
Как и для предыдущего метода, тоже можно использовать соответствующий патч.
Оба метода используются мною давно и уже проверены на работоспособность в недавно вышедшем FF 10.0.
Один минус этого подхода: патчи нужно применять после каждого обновления Firefox.
Надеюсь, эта статья будет полезной и принесёт кому-то ещё больше удовлетворения и наслаждения от работы в любимом броузере.
В статье были использованы следующие материалы:
1. Emacs Keybindings — Firefox (MozillaZine).
2. Firefox 4: Fixing middlemouse.content load, and hacking jars (ShallowSky.com).