Иногда мне нужно переместить URL-адрес из приложения в браузер. Я выбираю URL, скажем в gvim, и активирую окно Firefox. Затем я вижу, что должен очистить адресную строку перед вставкой нового URL-адреса, что требует выбора существующего URL-адреса, который стирает новый URL-адрес из ПЕРВИЧНОГО буфера обмена.
Как лучше всего поместить новый URL из основного буфера обмена в адресную строку? Есть ли ярлык для очистки адресной строки и , а затем для перемещения фокуса?
пс. Я знаю, что могу использовать Ctrl-C, чтобы поместить новый URL в буфер обмена CLIPBOARD, но я предпочитаю использовать ПЕРВИЧНЫЙ буфер обмена.
Просто используйте дополнение Xclear.
Очистите URL и поле поиска легко https://addons.mozilla.org/en-US/firefox/addon/xclear/
Ctrl kbd> + L kbd> выбирает строку местоположения , придавая ей фокус и выделяя все, что находится в поле. Просто используйте эту комбинацию клавиш сразу после выделения фокуса окна Firefox, но перед тем, как вставить целевой URL.
В соответствии с моими тестами Alt kbd> + A kbd> не работает как задумано, но Ctrl kbd> + A kbd> определенно работает, поскольку расширения «Xclear» или «Очистить поля» больше не работают с Firefox 60 или более поздней версии.
Различие между Ctrl kbd> + A kbd> и Alt kbd> + A kbd> состоит в том, что последний переводит выбор в ПЕРВИЧНЫЙ буфер (перезаписывает ваш выбор), тогда как Ctrl kbd> + A kbd> этого не делает, поэтому вы можете выбрать текст в любом приложении, Ctrl kbd> + A kbd> чтобы выделить любое текстовое поле (не только адресную строку), нажмите Del, чтобы удалить его, а затем вставьте свой предыдущий выбор средней кнопкой мыши.
Ctrl kbd> + K kbd> позволяет выбрать дополнительное поле поиска в адресной строке (и выделить его, не перекрывая основной буфер обмена).
Активируйте поле адреса, если необходимо, одним щелчком мыши, выберите URL-адрес с помощью Alt-A, очистите URL-адрес с помощью Del и вставьте новый URL-адрес средней кнопкой мыши.
Я создал сценарий userChromeJS, который добавит кнопки очистки на urlbar и findbar.
// ==UserScript==
// @name xClearFieldButton.uc.js
// @namespace xClearFieldButton@iwo.uc.js
// @description xClearbutton test
// @include main
// @compatibility Firefox 67-72
// @author Tobias Rupf
// @version 0.5
// @note build button to clear address bar and search bar fields for use in conjunction with middle mouse paste (about:config "middlemouse.paste"=true)
// ==/UserScript==
(function clearFieldButton() {
if (!location.toString().match('chrome://browser/content/browser\.(xul)|(xhtml)')) return;
if (document.getElementById("urlbarClearButton")) return;
function createBtn() {
var xClearBtnBox = document.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'hbox');
xClearBtnBox.setAttribute("class", "urlbar-icon-wrapper");
xClearBtnBox.setAttribute("onclick", "if (event.button == 0) {\
if (typeof(this.parentNode.parentNode.reset) == 'function') {\
this.parentNode.parentNode.reset();\
this.parentNode.parentNode.focus();\
} else {\
obj = this.parentNode.parentNode.children;\
for (var i=0; i<obj.length; i++) {\
if (typeof(obj[i].reset) == 'function') {\
obj[i].reset();\
obj[i].focus();\
}\
else if (typeof(obj[i].className.indexOf('input-box'>0)) || typeof(obj[i].className.indexOf('textbox'>0))) {\
if (typeof(obj[i].value) == 'string') {\
obj[i].value = '';\
obj[i].focus();\
}\
for (var j=0; j<obj[i].children.length; j++) {\
if (typeof(obj[i].children[j].value) == 'string') {\
obj[i].children[j].value = '';\
obj[i].children[j].focus();\
}\
}\
}\
}\
}\
}");
var xClearBtn = document.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'image');
xClearBtn.setAttribute("class", "urlbar-icon");
xClearBtn.setAttribute("role", "button");
/* KDE button style */
xClearBtn.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAATVQTFRF////AAAAOkI6AAAALDIsAAAAICAgAAAAFRUSAAAABQUFPT48AAAAPT47Y2NjAAAAAQEBMDEvAgICJCUkAgICGBgXBAQEDQ0NAQEBAgICBAQEBQUFBgYGBwcHCAgIDAwMDQ0NEBAQFBQTFBQUGRkZICAgISIhIiIiJycmLzAuMTExMjMxNzc3Ojo6PT47Pz8/QUFBQUI/REVDRUVFR0dHSkpKSktIS0tLTU5LTk5OTk9NUFBQU1NTVFRUVlZVVldUWFlWWVlZW1tbZGRjZGZiZmhkaGhoampqamtncXFxdXV1eXl5enp6hISEhoaGioqKkJCQn5+frKysrq6usrKxt7i3wcHBxMXExsbGz9DP1NTU3t7e4eHh5+fn6enp6urq7e3t8PDw8/Pz9PT0+vr6+/v7/Pz8dUr3qgAAABh0Uk5TAB8fLi4/P1RUZWW4ysrU5eXl8PD4+P39CqmsmgAAAJ1JREFUGBmdwQMWAgEABcCfbdu2bdt2W3v/I4Q9QO81A/yJLgpTBPhiyurjQb837LR9+GArijNiUh8R86Ibb1xVqrZ/3BcEecnZAfA10UyydHg8yVshYgQg8UdCweCUJJ9Tj1MLgKe2WG2Jw/V0PeZ0OrxxlAb99rwpr887lx4fLLkjvszHKqtGwIAvhtSbrja7rWrWBApNaKaI8dsLXHIcGL0rDy8AAAAASUVORK5CYII=)";
/* CLEAR button style */
/*xClearBtn.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAkVJREFUOI3FkMtrE1EYxe/NxIJ1ZqVUbB5NH5kkQjuTdFKLNVDBihGKxVK0JY9JddGlf4d/ghtFsBhuC4rYjQ+ikFixNpNJMpPGhYIS0NhGJTOTdCa5LiRpm+K6Z/Vdzj2H7/sBcNSCrYFfjNyFJhhtNvArtaqFEUKNzr8LoZsvj3WZRyA2PXpw/+EdAAAwtW0M+Fu3Yz0MOzzdTR1Hc3NzxP5wlA/FaRc9Nj9/41QT44WWsVcA8ZNkMlUNBCZIlmWmyL0SyC+G4y6P+0ogcJ7c2NisQoiftmLm1uCwDy7JufxJM0Fcnrw4SQKApwQhsxKNhbDnrOfS+PgY9S71XikWPr3Q1PpSK9deM5FIYKfTvbpd2fHXNc12ITBBmiBhtVh6BznOR62vf1CkvPRaU+uz+/nsvxNIkoRppwttV3bGCbPZyjDDJ3pO93SJ2ZyS/ph+oyn1mU64JtAhhFATAKzq9V1s6DowDAMYuwYEGKj/vIMiOt4wEgs9pmln0Md5yXxO1srffxhuD92taqrNYrX6xEx25X8FMMqHloeG+q+OnfNT6U1BEdLp5LdS6bOu62dYliFrNdVmddhZUciuHiqI8OF7fQ77db+fozKCqOYlKaUpetDQG8uVX5UJQzd6GXaErGk1u6O/byAjiM8OMIAQz3Ccj8qKOUWS5WRN0YMIoQZCqFFXd6eLW8WEKOaU0VEv1Wzi2UMbeH2MrSBvDZR/lt9+/VK6tra21qYtSRKmaXf8T/X3iJwvWAjCFBfS4vNOoEejvx7fDFN88/S5AAAAAElFTkSuQmCC)";*/
/* XCLEAR button style */
/*xClearBtn.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACSSURBVDjLrZPNCcAgDIW9O1PXci6P6gJOIJ48Ooa0PlBJtRVaDTwSJF9M/GFst2mtuTFGZC+zj1CJscansFLqyIkh63xRQM4MThO4Kg1FStttZ2vtAHZr4TYO5qOJMO99AxDDuiKCdiDpbhWApzHNAUM7iH3LFXyCi+K+Av0IzrnPIywf4to1Lj+kLU95y2f6Yxe9Ghv54yQyLAAAAABJRU5ErkJggg==)";*/
/* Firefox standard button style */
//xClearBtn.style.listStyleImage = url("chrome://global/skin/icons/searchfield-cancel.svg");
//xClearBtnBox.setAttribute("class", xClearBtnBox.className + " textbox-search-clear");
const localeString = "de_DE";
const tooltipText = localeString.indexOf("zh") == -1?"Feldinhalt löschen":"\u6E05\u7A7A\u5404\u8F93\u5165\u680F";
xClearBtn.setAttribute("tooltiptext", tooltipText);
xClearBtnBox.appendChild(xClearBtn);
return xClearBtnBox
}
var pageActionButtonbar = document.getElementById("page-action-buttons");
var urlbarClearBtn = new createBtn();
urlbarClearBtn.id = "urlbarClearButton"
pageActionButtonbar.insertBefore(urlbarClearBtn, pageActionButtonbar.firstChild);
function addSearchbarClearButton() {
var searchbarTextBox = document.getElementsByClassName("search-go-container")[0];
var searchbarClearBtn = new createBtn();
searchbarClearBtn.id = "searchClearButton"
searchbarTextBox.insertBefore(searchbarClearBtn, searchbarTextBox.firstChild);
}
addSearchbarClearButton();
var searchbar = document.getElementById('searchbar');
var observers=new window.MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if(mutation.addedNodes!==null) {
for (var i=0; i<mutation.addedNodes.length; i++) {
if (mutation.addedNodes[i].className=='searchbar-textbox') {
addSearchbarClearButton();
break;
}
}
}
});
});
observers.observe(searchbar, {childList: true});
function addFindbarClearButton() {
var findbarTextBox = document.getElementsByClassName("findbar-container")[0];
var findhbarClearBtn = new createBtn();
findbarClearBtn.id = "findClearButton"
findbarTextBox.insertBefore(findbarClearBtn, findbarTextBox.firstChild);
}
var findbar = document.getElementById('panel-1-1');
var observerf=new window.MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if(mutation.addedNodes!==null) {
for (var i=0; i<mutation.addedNodes.length; i++) {
if (mutation.addedNodes[i].className=='findbar-textbox') {
addFindbarClearButton();
break;
}
}
}
});
});
observerf.observe(findbar, {childList: true});
createBtn();
})();