diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 9f357d8d3..3f20be1c2 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1,159 +1,437 @@ { - "createTab_s": { "message": "Create new tab" }, - "goBack_s": { "message": "Go back in history" }, - "goForward_s": { "message": "Go forward in history" }, - "previousTab_s": { "message": "Go one tab left" }, - "quickNext_s": { "message": "Go one tab right" }, - "reloadTab_s": { "message": "Reload tab" }, - "userCustomized": { "message": "Custom shortcut" }, - "name": { "message": "Vimium C - All by Keyboard" }, - "description": { "message": -"A keyboard shortcut tool for keyboard-based page navigation and browser tab operations with an advanced omnibar and global shortcuts" - }, - "lang1": { "message": "" }, - "i18n": { "message": "" }, - "i18nAll": { "message": "zh fr sp zh-TW" }, - "noActiveState": { "message": "As configured, here's no active state" }, - "vblank": { "message": "" }, - "voptions": { "message": "" }, - "vshow": { "message": "" }, - "Close": { "message": "" }, - "Toggle_Dark": { "message": "" }, - "Search": { "message": "" }, - "Go": { "message": "" }, - "1": { "message": "$1" }, - "4": { "message": "The last element is unhovered" }, - "5": { "message": "No matching targets found" }, - "6": { "message": "No pass keys" }, - "7": { "message": "Normal mode (pass keys disabled)$1" }, - "8": { "message": ": $1 times" }, - "9": { "message": "Pass next keys$1" }, - "10": { "message": "No links to go $1" }, - "11": { "message": "Nothing was focused" }, - "12": { "message": "The last focused is hidden" }, - "13": { "message": "There are no inputs to focus on" }, - "14": { "message": "No URL found!" }, - "15": { "message": "No text found!" }, - "17": { "message": "A child frame just got replaced" }, - "20": { "message": "Copied: $1" }, - "21": { "message": "Sorry, Vomnibar page seems to fail to load" }, - "22": { "message": "Too many links to select" }, - "23": { "message": "Search has arrived at the $1" }, - "24": { "message": "start" }, - "25": { "message": "end" }, - "26": { "message": "($1 matches)" }, - "27": { "message": "(1 match)" }, - "28": { "message": "(Some matches)" }, - "29": { "message": "(No matches)" }, - "30": { "message": " (modal UI)" }, - "31": { "message": "Please type: $1" }, - "39": { "message": "Sorry, Vimium C cannot open a HUD on this page" }, - "41": { "message": "No old queries to find" }, - "43": { "message": "Selected line boundary" }, - "47": { "message": "Re-downloading…" }, - "55": { "message": "Create a selection before entering visual mode" }, - "63": { "message": "Hit to proceed…" }, - "68": { "message": "Visual" }, - "69": { "message": "Line" }, - "70": { "message": "Caret" }, - "71": { "message": "No links to select" }, - "72": { "message": "LinkHints exits because you're typing" }, - "73": { "message": "The link has been removed from the page" }, - "74": { "message": "Not an image" }, - "75": { "message": "Hover to scroll" }, - "76": { "message": "Sorry, Vimium C won't copy any password" }, - "77": { "message": "Nothing new to copy" }, - "78": { "message": "Download: $1" }, - "79": { "message": "(Paused)" }, - "80": { "message": "To trigger key: $1" }, - "81": { "message": "No matches for \"$1\"" }, - "82": { "message": "$1 mode" }, - "83": { "message": "No usable selection, entering caret mode…" }, - "84": { "message": "Selection has been lost" }, - "85": { "message": ":is(a,area,link)[rel~=$1 i]" }, - "86": { "message": "(forced-colors:active)" }, - "87": { "message": "input,textarea,[contenteditable]" }, - "88": { "message": "document.currentScript.remove()" }, - "89": { "message": "event.target.remove()" }, - "90": { "message": "a,button,input,frame,iframe" }, - "91": { "message": "^url\\(\\s?['\"]?((?:\\\\['\"]|[^'\"])+?)['\"]?\\s?\\)" }, - "92": { "message": "(?:(?<=\\b|_)(?:b(?:utto|t)n|close|hate|like)|B(?:utto|t)n|Close)(?=$$|[-\\sA-Z_])" }, - "93": { "message": "(?:(?:\\b|_)(?:b(?:utto|t)n|close|hate|like)|B(?:utto|t)n|Close)(?=$$|[-\\sA-Z_])" }, - "94": { "message": "^(?:button|checkbox|link|radio|tab)$$|^menuitem" }, - "95": { "message": "^[^\\w\\x80-\\uffff]+|[^!-~À-üЂ-џºء-ي]+" }, - "96": { "message": "[^0-9a-z_ß-üа-џºء-ي]+" }, - "97": { "message": "\\b(device-width|initial-scale)\\b" }, - "98": { "message": "0\\.01|/\\*!DPI\\*/[\\d.]+" }, - "99": { "message": ":scope>:not(link):not(style)" }, - "100": { "message": "^void\\s*\\( ?0 ?\\)\\s*;?$$|^;?$$" }, - "101": { "message": "^http://(?!localhost[:/])" }, - "102": { "message": -"^(new\\.|www\\.|)reddit\\.com$$###overlayScrollContainer;^twitter\\.com$$##div.permalink-container div.permalink[role=main];^web\\.telegram\\.org$$##.MessageList" - }, - "103": { "message": "(^|-)(button|a$$)" }, - "104": { "message": "\\b(?:[Cc]lose)(?:$$|[-\\sA-Z_])" }, - "105": { "message": "(-ms-high-contrast:active)" }, - "106": { "message": "script,style,title,textarea" }, - "107": { "message": "\\.(?:avif|bmp|gif|icon?|jpe?g|a?png|svg|tiff?|webp)\\b" }, - "108": { "message": -"\\bgoogle##.g;bing.com##.b_algo;baidu.com##.c-container;mail.ru##.SnippetResultInfo-favicon" - }, - "109": { "message": "twitter.com##[href$$=\\/trends],[data-testid=app-bar-back]" }, - "110": { "message": -"beforecopy beforecut beforeinput compositionend compositionstart compositionupdate contextmenu copy cut keypress mouseup paste selectionchange selectstart textInput " - }, - "111": { "message": "Vimium C uses the built-in Vomnibar page because the preferred is too old." }, - "112": { "message": "Some functions of Vimium C may not work because %o is sandboxed at %o." }, - "113": { "message": "Vimium C blocks auto-focusing on %s at %o." }, - "114": { "message": "prev" }, - "115": { "message": "next" }, - "116": { "message": "^(canvas|embed|i?frame|img|video|object)$" }, - "117": { "message": ".monaco-editor//textarea.monaco-mouse-cursor-text//" }, - "118": { "message": "weibo.com##.expand,.collapse;learn.microsoft.com##.tree-expander" }, - "119": { "message": "Readonly text box is focused" }, - "120": { "message": -"#read-only-cursor-text-area,.monaco-mouse-cursor-text[aria-autocomplete=none],.CodeMirror>div>textarea[readonly=''][style]" - }, - "121": { "message": -"[aria-controls],[role=combobox],#kw.s_ipt,input[placeholder$$=搜索],input[type=search][name=q],input[role=searchbox],.monaco-inputbox>div>textarea[style]" - }, - "122": { "message": "Veuillez sélectionner un mot" }, - "123": { "message": "Veuillez sélectionner du texte" }, - "200": { "message": "http://www.w3.org/1999/xhtml" }, - "0": { "message": "Open link in current tab" }, - "2": { "message": "Open link in new tab" }, - "3": { "message": "Open link in new active tab" }, - "16": { "message": "Open multiple links in current tab" }, - "18": { "message": "Open multiple links in new tabs" }, - "19": { "message": "Activate link and hold on" }, - "32": { "message": "Hover over node" }, - "33": { "message": "Simulate mouse leaving link" }, - "34": { "message": "Focus node" }, - "35": { "message": "Download media" }, - "36": { "message": "Copy image to Clipboard" }, - "37": { "message": "Open image" }, - "38": { "message": "Search selected text" }, - "40": { "message": "Copy link text to Clipboard" }, - "42": { "message": "Copy link URL to Clipboard" }, - "44": { "message": "Download link" }, - "45": { "message": "Open link in incognito window" }, - "46": { "message": "Open URL directly" }, - "48": { "message": "Hover over nodes continuously" }, - "49": { "message": "Simulate mouse leaving continuously" }, - "50": { "message": "Focus nodes continuously" }, - "51": { "message": "Download multiple media" }, - "52": { "message": "Copy multiple images" }, - "53": { "message": "Open multiple images" }, - "54": { "message": "Search link text one by one" }, - "56": { "message": "Copy link text one by one" }, - "57": { "message": "Copy link text list" }, - "58": { "message": "Copy link URL one by one" }, - "59": { "message": "Copy link URL list" }, - "60": { "message": "Download multiple links" }, - "61": { "message": "Open multiple incognito tabs" }, - "62": { "message": "Open multiple URLs directly" }, - "64": { "message": "Edit link URL on Vomnibar" }, - "65": { "message": "Edit link text on Vomnibar" }, - "66": { "message": "Select text and enter visual mode" }, - "67": { "message": "Select an editable area" } + "createTab_s": { + "message": "Create new tab" + }, + "goBack_s": { + "message": "Go back in history" + }, + "goForward_s": { + "message": "Go forward in history" + }, + "previousTab_s": { + "message": "Go one tab left" + }, + "quickNext_s": { + "message": "Go one tab right" + }, + "reloadTab_s": { + "message": "Reload tab" + }, + "userCustomized": { + "message": "Custom shortcut" + }, + "name": { + "message": "ebyvim" + }, + "description": { + "message": "A keyboard shortcut tool for keyboard-based page navigation and browser tab operations with an advanced omnibar and global shortcuts" + }, + "lang1": { + "message": "" + }, + "i18n": { + "message": "" + }, + "i18nAll": { + "message": "zh fr sp zh-TW" + }, + "noActiveState": { + "message": "As configured, here's no active state" + }, + "vblank": { + "message": "" + }, + "voptions": { + "message": "" + }, + "vshow": { + "message": "" + }, + "Close": { + "message": "" + }, + "Toggle_Dark": { + "message": "" + }, + "Search": { + "message": "" + }, + "Go": { + "message": "" + }, + "1": { + "message": "$1" + }, + "4": { + "message": "The last element is unhovered" + }, + "5": { + "message": "No matching targets found" + }, + "6": { + "message": "No pass keys" + }, + "7": { + "message": "Normal mode (pass keys disabled)$1" + }, + "8": { + "message": ": $1 times" + }, + "9": { + "message": "Pass next keys$1" + }, + "10": { + "message": "No links to go $1" + }, + "11": { + "message": "Nothing was focused" + }, + "12": { + "message": "The last focused is hidden" + }, + "13": { + "message": "There are no inputs to focus on" + }, + "14": { + "message": "No URL found!" + }, + "15": { + "message": "No text found!" + }, + "17": { + "message": "A child frame just got replaced" + }, + "20": { + "message": "Copied: $1" + }, + "21": { + "message": "Sorry, Vomnibar page seems to fail to load" + }, + "22": { + "message": "Too many links to select" + }, + "23": { + "message": "Search has arrived at the $1" + }, + "24": { + "message": "start" + }, + "25": { + "message": "end" + }, + "26": { + "message": "($1 matches)" + }, + "27": { + "message": "(1 match)" + }, + "28": { + "message": "(Some matches)" + }, + "29": { + "message": "(No matches)" + }, + "30": { + "message": " (modal UI)" + }, + "31": { + "message": "Please type: $1" + }, + "39": { + "message": "Sorry, Vimium C cannot open a HUD on this page" + }, + "41": { + "message": "No old queries to find" + }, + "43": { + "message": "Selected line boundary" + }, + "47": { + "message": "Re-downloading…" + }, + "55": { + "message": "Create a selection before entering visual mode" + }, + "63": { + "message": "Hit to proceed…" + }, + "68": { + "message": "Visual" + }, + "69": { + "message": "Line" + }, + "70": { + "message": "Caret" + }, + "71": { + "message": "No links to select" + }, + "72": { + "message": "LinkHints exits because you're typing" + }, + "73": { + "message": "The link has been removed from the page" + }, + "74": { + "message": "Not an image" + }, + "75": { + "message": "Hover to scroll" + }, + "76": { + "message": "Sorry, Vimium C won't copy any password" + }, + "77": { + "message": "Nothing new to copy" + }, + "78": { + "message": "Download: $1" + }, + "79": { + "message": "(Paused)" + }, + "80": { + "message": "To trigger key: $1" + }, + "81": { + "message": "No matches for \"$1\"" + }, + "82": { + "message": "$1 mode" + }, + "83": { + "message": "No usable selection, entering caret mode…" + }, + "84": { + "message": "Selection has been lost" + }, + "85": { + "message": ":is(a,area,link)[rel~=$1 i]" + }, + "86": { + "message": "(forced-colors:active)" + }, + "87": { + "message": "input,textarea,[contenteditable]" + }, + "88": { + "message": "document.currentScript.remove()" + }, + "89": { + "message": "event.target.remove()" + }, + "90": { + "message": "a,button,input,frame,iframe" + }, + "91": { + "message": "^url\\(\\s?['\"]?((?:\\\\['\"]|[^'\"])+?)['\"]?\\s?\\)" + }, + "92": { + "message": "(?:(?<=\\b|_)(?:b(?:utto|t)n|close|hate|like)|B(?:utto|t)n|Close)(?=$$|[-\\sA-Z_])" + }, + "93": { + "message": "(?:(?:\\b|_)(?:b(?:utto|t)n|close|hate|like)|B(?:utto|t)n|Close)(?=$$|[-\\sA-Z_])" + }, + "94": { + "message": "^(?:button|checkbox|link|radio|tab)$$|^menuitem" + }, + "95": { + "message": "^[^\\w\\x80-\\uffff]+|[^!-~À-üЂ-џºء-ي]+" + }, + "96": { + "message": "[^0-9a-z_ß-üа-џºء-ي]+" + }, + "97": { + "message": "\\b(device-width|initial-scale)\\b" + }, + "98": { + "message": "0\\.01|/\\*!DPI\\*/[\\d.]+" + }, + "99": { + "message": ":scope>:not(link):not(style)" + }, + "100": { + "message": "^void\\s*\\( ?0 ?\\)\\s*;?$$|^;?$$" + }, + "101": { + "message": "^http://(?!localhost[:/])" + }, + "102": { + "message": "^(new\\.|www\\.|)reddit\\.com$$###overlayScrollContainer;^twitter\\.com$$##div.permalink-container div.permalink[role=main];^web\\.telegram\\.org$$##.MessageList" + }, + "103": { + "message": "(^|-)(button|a$$)" + }, + "104": { + "message": "\\b(?:[Cc]lose)(?:$$|[-\\sA-Z_])" + }, + "105": { + "message": "(-ms-high-contrast:active)" + }, + "106": { + "message": "script,style,title,textarea" + }, + "107": { + "message": "\\.(?:avif|bmp|gif|icon?|jpe?g|a?png|svg|tiff?|webp)\\b" + }, + "108": { + "message": "\\bgoogle##.g;bing.com##.b_algo;baidu.com##.c-container;mail.ru##.SnippetResultInfo-favicon" + }, + "109": { + "message": "twitter.com##[href$$=\\/trends],[data-testid=app-bar-back]" + }, + "110": { + "message": "beforecopy beforecut beforeinput compositionend compositionstart compositionupdate contextmenu copy cut keypress mouseup paste selectionchange selectstart textInput " + }, + "111": { + "message": "Vimium C uses the built-in Vomnibar page because the preferred is too old." + }, + "112": { + "message": "Some functions of Vimium C may not work because %o is sandboxed at %o." + }, + "113": { + "message": "Vimium C blocks auto-focusing on %s at %o." + }, + "114": { + "message": "prev" + }, + "115": { + "message": "next" + }, + "116": { + "message": "^(canvas|embed|i?frame|img|video|object)$" + }, + "117": { + "message": ".monaco-editor//textarea.monaco-mouse-cursor-text//" + }, + "118": { + "message": "weibo.com##.expand,.collapse;learn.microsoft.com##.tree-expander" + }, + "119": { + "message": "Readonly text box is focused" + }, + "120": { + "message": "#read-only-cursor-text-area,.monaco-mouse-cursor-text[aria-autocomplete=none],.CodeMirror>div>textarea[readonly=''][style]" + }, + "121": { + "message": "[aria-controls],[role=combobox],#kw.s_ipt,input[placeholder$$=搜索],input[type=search][name=q],input[role=searchbox],.monaco-inputbox>div>textarea[style]" + }, + "122": { + "message": "Veuillez sélectionner un mot" + }, + "123": { + "message": "Veuillez sélectionner du texte" + }, + "200": { + "message": "http://www.w3.org/1999/xhtml" + }, + "0": { + "message": "Open link in current tab" + }, + "2": { + "message": "Open link in new tab" + }, + "3": { + "message": "Open link in new active tab" + }, + "16": { + "message": "Open multiple links in current tab" + }, + "18": { + "message": "Open multiple links in new tabs" + }, + "19": { + "message": "Activate link and hold on" + }, + "32": { + "message": "Hover over node" + }, + "33": { + "message": "Simulate mouse leaving link" + }, + "34": { + "message": "Focus node" + }, + "35": { + "message": "Download media" + }, + "36": { + "message": "Copy image to Clipboard" + }, + "37": { + "message": "Open image" + }, + "38": { + "message": "Search selected text" + }, + "40": { + "message": "Copy link text to Clipboard" + }, + "42": { + "message": "Copy link URL to Clipboard" + }, + "44": { + "message": "Download link" + }, + "45": { + "message": "Open link in incognito window" + }, + "46": { + "message": "Open URL directly" + }, + "48": { + "message": "Hover over nodes continuously" + }, + "49": { + "message": "Simulate mouse leaving continuously" + }, + "50": { + "message": "Focus nodes continuously" + }, + "51": { + "message": "Download multiple media" + }, + "52": { + "message": "Copy multiple images" + }, + "53": { + "message": "Open multiple images" + }, + "54": { + "message": "Search link text one by one" + }, + "56": { + "message": "Copy link text one by one" + }, + "57": { + "message": "Copy link text list" + }, + "58": { + "message": "Copy link URL one by one" + }, + "59": { + "message": "Copy link URL list" + }, + "60": { + "message": "Download multiple links" + }, + "61": { + "message": "Open multiple incognito tabs" + }, + "62": { + "message": "Open multiple URLs directly" + }, + "64": { + "message": "Edit link URL on Vomnibar" + }, + "65": { + "message": "Edit link text on Vomnibar" + }, + "66": { + "message": "Select text and enter visual mode" + }, + "67": { + "message": "Select an editable area" + } } diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json index cd61b0614..1238c7dea 100644 --- a/_locales/fr/messages.json +++ b/_locales/fr/messages.json @@ -1,106 +1,308 @@ { - "createTab_s": { "message": "Créer un nouvel onglet" }, - "goBack_s": { "message": "Remonter dans l'historique" }, - "goForward_s": { "message": "Avancer dans l'historique" }, - "previousTab_s": { "message": "Aller à gauche de un onglet" }, - "quickNext_s": { "message": "Aller à droite de un onglet" }, - "reloadTab_s": { "message": "Recharger l'onglet" }, - "userCustomized": { "message": "Raccourci personnalisé" }, - "name": { "message": "Vimium C - Tout par le clavier" }, - "description": { "message": -"Outil de raccourcis clavier pour une navigation de page centrée sur l'usage du clavier, des opérations sur les onglets du navigateur avec une omnibar avancée ainsi que des raccourcis globaux" - }, - "lang1": { "message": "fr" }, - "i18n": { "message": "options=fr,en show=en" }, - "noActiveState": { "message": "Tel que configuré, pas d'état actif présent" }, - "Close": { "message": "Cacher" }, - "Toggle_Dark": { "message": "Basculez le mode sombre" }, - "Search": { "message": "Rechercher" }, - "Go": { "message": "Aller" }, - "4": { "message": "Le dernier élément est dé-survolé" }, - "5": { "message": "Aucune cible correspondante trouvée" }, - "6": { "message": "Aucune touche transmise" }, - "7": { "message": "Mode normal (touches transmises désactivées)$1" }, - "8": { "message": ": $1 fois" }, - "9": { "message": "Envoyez les prochaines touches$1" }, - "10": { "message": "Aucun lien pour aller $1" }, - "11": { "message": "Rien n'a le focus" }, - "12": { "message": "Le dernier élement en focus est caché" }, - "13": { "message": "Il n'y a aucun champ de saisie sur lequel mettre le focus" }, - "14": { "message": "Aucune URL trouvée !" }, - "15": { "message": "Aucun texte trouvé !" }, - "17": { "message": "Une frame fille vient juste d'être remplacé" }, - "20": { "message": "Copié : $1" }, - "21": { "message": "Désolé, le chargement de la Vomnibar semble échouer" }, - "22": { "message": "Trop de liens à sélectionner" }, - "23": { "message": "La recherche est arrivée $1" }, - "24": { "message": "à la fin" }, - "25": { "message": "au début" }, - "26": { "message": "($1 correspondances)" }, - "27": { "message": "(1 correspondance)" }, - "28": { "message": "(Quelques correspondances)" }, - "29": { "message": "(Pas de correspondances)" }, - "30": { "message": " (IHM modale)" }, - "31": { "message": "Veuillez saisir: $1" }, - "39": { "message": "Désolé, Vimium C ne peut pas ouvrir de HUD sur cette page" }, - "41": { "message": "Aucune ancienne requête à trouver" }, - "43": { "message": "Ligne de bordure sélectionnée" }, - "47": { "message": "Télécharge…" }, - "55": { "message": "Créez une sélection avant d'entrer en mode visuel" }, - "63": { "message": "Pressez pour continuer…" }, - "68": { "message": "Visuel" }, - "69": { "message": "Ligne" }, - "70": { "message": "Curseur" }, - "71": { "message": "Aucun lien à sélectionner" }, - "72": { "message": "Les LinkHints existent parce que vous tapez au clavier" }, - "73": { "message": "Le lien a été supprimé de la page" }, - "74": { "message": "Pas une image" }, - "75": { "message": "Survole pour dérouler" }, - "76": { "message": "Désolé, Vimium C ne copiera aucun mot de passe" }, - "77": { "message": "Rien de nouveau à copier" }, - "78": { "message": "Télécharge: $1" }, - "79": { "message": "(En pause)" }, - "80": { "message": "Pour déclencher la touche: $1" }, - "81": { "message": "Aucune correspondance pour \"$1\"" }, - "83": { "message": "Aucune sélection utilisable, entrée en mode curseur…" }, - "84": { "message": "Sélection perdue" }, - "114": { "message": "précedent" }, - "115": { "message": "suivant" }, - "119": { "message": "Le texte en lecture seule est ciblé" }, - "0": { "message": "Ouvre le lien dans l'onglet courant" }, - "2": { "message": "Ouvre le lien dans un nouvel onglet" }, - "3": { "message": "Ouvre le lien dans un nouvel onglet actif" }, - "16": { "message": "Ouvre de multiples liens dans l'onglet courant" }, - "18": { "message": "Ouvre de multiples liens dans de nouveaux onglets" }, - "19": { "message": "Active le lien et attend" }, - "32": { "message": "Survole le lien" }, - "33": { "message": "Simule la souris qui quitte le lien" }, - "34": { "message": "Met le focus sur le noeud" }, - "35": { "message": "Télécharge le média" }, - "36": { "message": "Copie l'image" }, - "37": { "message": "Ouvre l'image" }, - "38": { "message": "Cherche le texte sélectionné" }, - "40": { "message": "Copie le texte du lien dans le presse-papiers" }, - "42": { "message": "Copie le lien de l'URL dans le presse-papiers" }, - "44": { "message": "Télécharge le lien" }, - "45": { "message": "Ouvre le lien dans une fenêtre incognito" }, - "46": { "message": "Ouvrir l'URL directement" }, - "48": { "message": "Survole les noeuds continuellement" }, - "49": { "message": "Simule la souris quittant continuellement" }, - "50": { "message": "Met le focus sur les noeuds continuellement" }, - "51": { "message": "Télécharge de multiples médias" }, - "52": { "message": "Copie de multiples images" }, - "53": { "message": "Ouvre de multiples images" }, - "54": { "message": "Cherche le texte du lien un à un" }, - "56": { "message": "Copie le texte du lien un à un" }, - "57": { "message": "Copie la liste du texte de liens" }, - "58": { "message": "Copie l'URL du lien un à un" }, - "59": { "message": "Copie la liste d'URL du lien" }, - "60": { "message": "Télécharge de multiples liens" }, - "61": { "message": "Ouvre de multiples onglets en incognito" }, - "62": { "message": "Ouvrir plusieurs URL directement" }, - "64": { "message": "Edite l'URL du lien dans la Vomnibar" }, - "65": { "message": "Edite le texte du lien dans la Vomnibar" }, - "66": { "message": "Sélectionner du texte pour passer en mode visuel" }, - "67": { "message": "Sélectionne une zone d'édition" } + "createTab_s": { + "message": "Créer un nouvel onglet" + }, + "goBack_s": { + "message": "Remonter dans l'historique" + }, + "goForward_s": { + "message": "Avancer dans l'historique" + }, + "previousTab_s": { + "message": "Aller à gauche de un onglet" + }, + "quickNext_s": { + "message": "Aller à droite de un onglet" + }, + "reloadTab_s": { + "message": "Recharger l'onglet" + }, + "userCustomized": { + "message": "Raccourci personnalisé" + }, + "name": { + "message": "ebyvim" + }, + "description": { + "message": "Outil de raccourcis clavier pour une navigation de page centrée sur l'usage du clavier, des opérations sur les onglets du navigateur avec une omnibar avancée ainsi que des raccourcis globaux" + }, + "lang1": { + "message": "fr" + }, + "i18n": { + "message": "options=fr,en show=en" + }, + "noActiveState": { + "message": "Tel que configuré, pas d'état actif présent" + }, + "Close": { + "message": "Cacher" + }, + "Toggle_Dark": { + "message": "Basculez le mode sombre" + }, + "Search": { + "message": "Rechercher" + }, + "Go": { + "message": "Aller" + }, + "4": { + "message": "Le dernier élément est dé-survolé" + }, + "5": { + "message": "Aucune cible correspondante trouvée" + }, + "6": { + "message": "Aucune touche transmise" + }, + "7": { + "message": "Mode normal (touches transmises désactivées)$1" + }, + "8": { + "message": ": $1 fois" + }, + "9": { + "message": "Envoyez les prochaines touches$1" + }, + "10": { + "message": "Aucun lien pour aller $1" + }, + "11": { + "message": "Rien n'a le focus" + }, + "12": { + "message": "Le dernier élement en focus est caché" + }, + "13": { + "message": "Il n'y a aucun champ de saisie sur lequel mettre le focus" + }, + "14": { + "message": "Aucune URL trouvée !" + }, + "15": { + "message": "Aucun texte trouvé !" + }, + "17": { + "message": "Une frame fille vient juste d'être remplacé" + }, + "20": { + "message": "Copié : $1" + }, + "21": { + "message": "Désolé, le chargement de la Vomnibar semble échouer" + }, + "22": { + "message": "Trop de liens à sélectionner" + }, + "23": { + "message": "La recherche est arrivée $1" + }, + "24": { + "message": "à la fin" + }, + "25": { + "message": "au début" + }, + "26": { + "message": "($1 correspondances)" + }, + "27": { + "message": "(1 correspondance)" + }, + "28": { + "message": "(Quelques correspondances)" + }, + "29": { + "message": "(Pas de correspondances)" + }, + "30": { + "message": " (IHM modale)" + }, + "31": { + "message": "Veuillez saisir: $1" + }, + "39": { + "message": "Désolé, Vimium C ne peut pas ouvrir de HUD sur cette page" + }, + "41": { + "message": "Aucune ancienne requête à trouver" + }, + "43": { + "message": "Ligne de bordure sélectionnée" + }, + "47": { + "message": "Télécharge…" + }, + "55": { + "message": "Créez une sélection avant d'entrer en mode visuel" + }, + "63": { + "message": "Pressez pour continuer…" + }, + "68": { + "message": "Visuel" + }, + "69": { + "message": "Ligne" + }, + "70": { + "message": "Curseur" + }, + "71": { + "message": "Aucun lien à sélectionner" + }, + "72": { + "message": "Les LinkHints existent parce que vous tapez au clavier" + }, + "73": { + "message": "Le lien a été supprimé de la page" + }, + "74": { + "message": "Pas une image" + }, + "75": { + "message": "Survole pour dérouler" + }, + "76": { + "message": "Désolé, Vimium C ne copiera aucun mot de passe" + }, + "77": { + "message": "Rien de nouveau à copier" + }, + "78": { + "message": "Télécharge: $1" + }, + "79": { + "message": "(En pause)" + }, + "80": { + "message": "Pour déclencher la touche: $1" + }, + "81": { + "message": "Aucune correspondance pour \"$1\"" + }, + "83": { + "message": "Aucune sélection utilisable, entrée en mode curseur…" + }, + "84": { + "message": "Sélection perdue" + }, + "114": { + "message": "précedent" + }, + "115": { + "message": "suivant" + }, + "119": { + "message": "Le texte en lecture seule est ciblé" + }, + "0": { + "message": "Ouvre le lien dans l'onglet courant" + }, + "2": { + "message": "Ouvre le lien dans un nouvel onglet" + }, + "3": { + "message": "Ouvre le lien dans un nouvel onglet actif" + }, + "16": { + "message": "Ouvre de multiples liens dans l'onglet courant" + }, + "18": { + "message": "Ouvre de multiples liens dans de nouveaux onglets" + }, + "19": { + "message": "Active le lien et attend" + }, + "32": { + "message": "Survole le lien" + }, + "33": { + "message": "Simule la souris qui quitte le lien" + }, + "34": { + "message": "Met le focus sur le noeud" + }, + "35": { + "message": "Télécharge le média" + }, + "36": { + "message": "Copie l'image" + }, + "37": { + "message": "Ouvre l'image" + }, + "38": { + "message": "Cherche le texte sélectionné" + }, + "40": { + "message": "Copie le texte du lien dans le presse-papiers" + }, + "42": { + "message": "Copie le lien de l'URL dans le presse-papiers" + }, + "44": { + "message": "Télécharge le lien" + }, + "45": { + "message": "Ouvre le lien dans une fenêtre incognito" + }, + "46": { + "message": "Ouvrir l'URL directement" + }, + "48": { + "message": "Survole les noeuds continuellement" + }, + "49": { + "message": "Simule la souris quittant continuellement" + }, + "50": { + "message": "Met le focus sur les noeuds continuellement" + }, + "51": { + "message": "Télécharge de multiples médias" + }, + "52": { + "message": "Copie de multiples images" + }, + "53": { + "message": "Ouvre de multiples images" + }, + "54": { + "message": "Cherche le texte du lien un à un" + }, + "56": { + "message": "Copie le texte du lien un à un" + }, + "57": { + "message": "Copie la liste du texte de liens" + }, + "58": { + "message": "Copie l'URL du lien un à un" + }, + "59": { + "message": "Copie la liste d'URL du lien" + }, + "60": { + "message": "Télécharge de multiples liens" + }, + "61": { + "message": "Ouvre de multiples onglets en incognito" + }, + "62": { + "message": "Ouvrir plusieurs URL directement" + }, + "64": { + "message": "Edite l'URL du lien dans la Vomnibar" + }, + "65": { + "message": "Edite le texte du lien dans la Vomnibar" + }, + "66": { + "message": "Sélectionner du texte pour passer en mode visuel" + }, + "67": { + "message": "Sélectionne une zone d'édition" + } } diff --git a/_locales/sp/messages.json b/_locales/sp/messages.json index 24182c87e..b733e27e1 100644 --- a/_locales/sp/messages.json +++ b/_locales/sp/messages.json @@ -1,109 +1,317 @@ { - "createTab_s": { "message": "Crear nueva pestaña" }, - "goBack_s": { "message": "Retroceder en el historial" }, - "goForward_s": { "message": "Avanzar en el historial" }, - "previousTab_s": { "message": "Ir una pestaña a la izquierda" }, - "quickNext_s": { "message": "Ir una pestaña a la derecha" }, - "reloadTab_s": { "message": "Recargar pestaña" }, - "userCustomized": { "message": "Acceso directo personalizado" }, - "name": { "message": "Vimium C - Todo vía teclado" }, - "description": { "message": -"Una herramienta de atajos de teclado para navegación de páginas basada en el teclado y operaciones con pestañas del navegador con un omnibar avanzado y atajos globales" - }, - "lang1": { "message": "sp" }, - "noActiveState": { "message": "Según lo configurado, aquí no hay estado activo" }, - "vblank": { "message": "Página en blanco" }, - "voptions": { "message": "Opciones" }, - "vshow": { "message": "Anexo" }, - "Close": { "message": "Cerrar" }, - "Toggle_Dark": { "message": "Alternar modo oscuro" }, - "Search": { "message": "Buscar" }, - "Go": { "message": "Ir" }, - "4": { "message": "El último elemento está sin descubrir" }, - "5": { "message": "No se han encontrado resultados coincidentes" }, - "6": { "message": "Sin teclas de acceso" }, - "7": { "message": "Modo normal (teclas de acceso deshabilitadas)$1" }, - "8": { "message": ": $1 veces" }, - "9": { "message": "Pasar las siguientes teclas$1" }, - "10": { "message": "Sin enlaces para ir $1" }, - "11": { "message": "Nada estaba enfocado" }, - "12": { "message": "El último enfocado está oculto" }, - "13": { "message": "No hay entradas en las que centrarse" }, - "14": { "message": "No se encuentra URL!" }, - "15": { "message": "No se encuentra texto!" }, - "17": { "message": "Se acaba de sustituir un marco" }, - "20": { "message": "Copiado: $1" }, - "21": { "message": "Lo siento, parece que la página de Vomnibar no se puede cargar" }, - "22": { "message": "Demasiados enlaces para seleccionar" }, - "23": { "message": "La búsqueda ha llegado a $1" }, - "24": { "message": "inicio" }, - "25": { "message": "fin" }, - "26": { "message": "($1 coincidencias)" }, - "27": { "message": "(1 coincidencia)" }, - "28": { "message": "(Algunas coincidencias)" }, - "29": { "message": "(Sin coincidencias)" }, - "30": { "message": " (Interfaz modal)" }, - "31": { "message": "Por favor tipee: $1" }, - "39": { "message": "Lo sentimos, Vimium C no puede abrir un HUD en esta página" }, - "41": { "message": "Sin consultas antiguas que encontrar" }, - "43": { "message": "Límite de línea seleccionado" }, - "47": { "message": "Re-descargando…" }, - "55": { "message": "Crear una selección antes de entrar en modo visual" }, - "63": { "message": "Presione para continuar…" }, - "68": { "message": "Visual" }, - "69": { "message": "Línea" }, - "70": { "message": "Signo de intercalación" }, - "71": { "message": "No hay enlaces que seleccionar" }, - "72": { "message": "LinkHints sale porque está escribiendo" }, - "73": { "message": "El enlace ha sido eliminado de la página" }, - "74": { "message": "No es una imagen" }, - "75": { "message": "Colocar el cursor para desplazarse" }, - "76": { "message": "Perdón, Vimium C no copiará ninguna contraseña" }, - "77": { "message": "Nada nuevo para copiar" }, - "78": { "message": "Descarga: $1" }, - "79": { "message": "(Pausado)" }, - "80": { "message": "Para activar la tecla: $1" }, - "81": { "message": "Sin coincidencias para \"$1\"" }, - "82": { "message": "modo $1" }, - "83": { "message": "No hay selección utilizable, entrando en modo de signo de intercalación…" }, - "84": { "message": "Lo seleccionado se ha perdido" }, - "114": { "message": "anterior" }, - "115": { "message": "siguiente" }, - "119": { "message": "El texto de solo lectura está enfocado" }, - "0": { "message": "Abrir enlace en la pestaña actual" }, - "2": { "message": "Abrir enlace en nueva pestaña" }, - "3": { "message": "Abrir enlace en una nueva pestaña activa" }, - "16": { "message": "Abrir varios enlaces en la pestaña actual" }, - "18": { "message": "Abrir varios enlaces en nuevas pestañas" }, - "19": { "message": "Activar enlace y mantener pulsado" }, - "32": { "message": "Pasar el cursor sobre el nodo" }, - "33": { "message": "Simular que el ratón abandona el enlace" }, - "34": { "message": "Nodo de enfoque" }, - "35": { "message": "Descargar medios" }, - "36": { "message": "Copiar imagen al Portapapeles" }, - "37": { "message": "Abrir enlace" }, - "38": { "message": "Buscar texto seleccionado" }, - "40": { "message": "Copiar el texto del enlace al Portapapeles" }, - "42": { "message": "Copiar la URL del enlace en el portapapeles" }, - "44": { "message": "Descargar enlace" }, - "45": { "message": "Abrir enlace en pantalla en modo incógnito" }, - "46": { "message": "Abrir URL directamente" }, - "48": { "message": "Pasar el ratón continuamente por encima de los nodos" }, - "49": { "message": "Simular que el ratón se va continuamente" }, - "50": { "message": "Nodos de enfoque continuo" }, - "51": { "message": "Descargar varios soportes" }, - "52": { "message": "Copiar varias imágenes" }, - "53": { "message": "Abrir varias imágenes" }, - "54": { "message": "Buscar texto de enlace uno por uno" }, - "56": { "message": "Copiar el texto del enlace uno por uno" }, - "57": { "message": "Copiar lista de textos de enlaces" }, - "58": { "message": "Copiar la URL del enlace una por una" }, - "59": { "message": "Copiar la lista de URL de enlaces" }, - "60": { "message": "Descargar varios enlaces" }, - "61": { "message": "Abrir varias pestañas en modo incógnito" }, - "62": { "message": "Abrir varias URLs directamente" }, - "64": { "message": "Editar el URL del enlace en Vomnibar" }, - "65": { "message": "Editar el texto del enlace en Vomnibar" }, - "66": { "message": "Seleccionar texto e ingresar al modo visual" }, - "67": { "message": "Seleccionar un área editable" } + "createTab_s": { + "message": "Crear nueva pestaña" + }, + "goBack_s": { + "message": "Retroceder en el historial" + }, + "goForward_s": { + "message": "Avanzar en el historial" + }, + "previousTab_s": { + "message": "Ir una pestaña a la izquierda" + }, + "quickNext_s": { + "message": "Ir una pestaña a la derecha" + }, + "reloadTab_s": { + "message": "Recargar pestaña" + }, + "userCustomized": { + "message": "Acceso directo personalizado" + }, + "name": { + "message": "ebyvim" + }, + "description": { + "message": "Una herramienta de atajos de teclado para navegación de páginas basada en el teclado y operaciones con pestañas del navegador con un omnibar avanzado y atajos globales" + }, + "lang1": { + "message": "sp" + }, + "noActiveState": { + "message": "Según lo configurado, aquí no hay estado activo" + }, + "vblank": { + "message": "Página en blanco" + }, + "voptions": { + "message": "Opciones" + }, + "vshow": { + "message": "Anexo" + }, + "Close": { + "message": "Cerrar" + }, + "Toggle_Dark": { + "message": "Alternar modo oscuro" + }, + "Search": { + "message": "Buscar" + }, + "Go": { + "message": "Ir" + }, + "4": { + "message": "El último elemento está sin descubrir" + }, + "5": { + "message": "No se han encontrado resultados coincidentes" + }, + "6": { + "message": "Sin teclas de acceso" + }, + "7": { + "message": "Modo normal (teclas de acceso deshabilitadas)$1" + }, + "8": { + "message": ": $1 veces" + }, + "9": { + "message": "Pasar las siguientes teclas$1" + }, + "10": { + "message": "Sin enlaces para ir $1" + }, + "11": { + "message": "Nada estaba enfocado" + }, + "12": { + "message": "El último enfocado está oculto" + }, + "13": { + "message": "No hay entradas en las que centrarse" + }, + "14": { + "message": "No se encuentra URL!" + }, + "15": { + "message": "No se encuentra texto!" + }, + "17": { + "message": "Se acaba de sustituir un marco" + }, + "20": { + "message": "Copiado: $1" + }, + "21": { + "message": "Lo siento, parece que la página de Vomnibar no se puede cargar" + }, + "22": { + "message": "Demasiados enlaces para seleccionar" + }, + "23": { + "message": "La búsqueda ha llegado a $1" + }, + "24": { + "message": "inicio" + }, + "25": { + "message": "fin" + }, + "26": { + "message": "($1 coincidencias)" + }, + "27": { + "message": "(1 coincidencia)" + }, + "28": { + "message": "(Algunas coincidencias)" + }, + "29": { + "message": "(Sin coincidencias)" + }, + "30": { + "message": " (Interfaz modal)" + }, + "31": { + "message": "Por favor tipee: $1" + }, + "39": { + "message": "Lo sentimos, Vimium C no puede abrir un HUD en esta página" + }, + "41": { + "message": "Sin consultas antiguas que encontrar" + }, + "43": { + "message": "Límite de línea seleccionado" + }, + "47": { + "message": "Re-descargando…" + }, + "55": { + "message": "Crear una selección antes de entrar en modo visual" + }, + "63": { + "message": "Presione para continuar…" + }, + "68": { + "message": "Visual" + }, + "69": { + "message": "Línea" + }, + "70": { + "message": "Signo de intercalación" + }, + "71": { + "message": "No hay enlaces que seleccionar" + }, + "72": { + "message": "LinkHints sale porque está escribiendo" + }, + "73": { + "message": "El enlace ha sido eliminado de la página" + }, + "74": { + "message": "No es una imagen" + }, + "75": { + "message": "Colocar el cursor para desplazarse" + }, + "76": { + "message": "Perdón, Vimium C no copiará ninguna contraseña" + }, + "77": { + "message": "Nada nuevo para copiar" + }, + "78": { + "message": "Descarga: $1" + }, + "79": { + "message": "(Pausado)" + }, + "80": { + "message": "Para activar la tecla: $1" + }, + "81": { + "message": "Sin coincidencias para \"$1\"" + }, + "82": { + "message": "modo $1" + }, + "83": { + "message": "No hay selección utilizable, entrando en modo de signo de intercalación…" + }, + "84": { + "message": "Lo seleccionado se ha perdido" + }, + "114": { + "message": "anterior" + }, + "115": { + "message": "siguiente" + }, + "119": { + "message": "El texto de solo lectura está enfocado" + }, + "0": { + "message": "Abrir enlace en la pestaña actual" + }, + "2": { + "message": "Abrir enlace en nueva pestaña" + }, + "3": { + "message": "Abrir enlace en una nueva pestaña activa" + }, + "16": { + "message": "Abrir varios enlaces en la pestaña actual" + }, + "18": { + "message": "Abrir varios enlaces en nuevas pestañas" + }, + "19": { + "message": "Activar enlace y mantener pulsado" + }, + "32": { + "message": "Pasar el cursor sobre el nodo" + }, + "33": { + "message": "Simular que el ratón abandona el enlace" + }, + "34": { + "message": "Nodo de enfoque" + }, + "35": { + "message": "Descargar medios" + }, + "36": { + "message": "Copiar imagen al Portapapeles" + }, + "37": { + "message": "Abrir enlace" + }, + "38": { + "message": "Buscar texto seleccionado" + }, + "40": { + "message": "Copiar el texto del enlace al Portapapeles" + }, + "42": { + "message": "Copiar la URL del enlace en el portapapeles" + }, + "44": { + "message": "Descargar enlace" + }, + "45": { + "message": "Abrir enlace en pantalla en modo incógnito" + }, + "46": { + "message": "Abrir URL directamente" + }, + "48": { + "message": "Pasar el ratón continuamente por encima de los nodos" + }, + "49": { + "message": "Simular que el ratón se va continuamente" + }, + "50": { + "message": "Nodos de enfoque continuo" + }, + "51": { + "message": "Descargar varios soportes" + }, + "52": { + "message": "Copiar varias imágenes" + }, + "53": { + "message": "Abrir varias imágenes" + }, + "54": { + "message": "Buscar texto de enlace uno por uno" + }, + "56": { + "message": "Copiar el texto del enlace uno por uno" + }, + "57": { + "message": "Copiar lista de textos de enlaces" + }, + "58": { + "message": "Copiar la URL del enlace una por una" + }, + "59": { + "message": "Copiar la lista de URL de enlaces" + }, + "60": { + "message": "Descargar varios enlaces" + }, + "61": { + "message": "Abrir varias pestañas en modo incógnito" + }, + "62": { + "message": "Abrir varias URLs directamente" + }, + "64": { + "message": "Editar el URL del enlace en Vomnibar" + }, + "65": { + "message": "Editar el texto del enlace en Vomnibar" + }, + "66": { + "message": "Seleccionar texto e ingresar al modo visual" + }, + "67": { + "message": "Seleccionar un área editable" + } } diff --git a/_locales/zh/messages.json b/_locales/zh/messages.json index 09ccaa4e1..0e9d0bf75 100644 --- a/_locales/zh/messages.json +++ b/_locales/zh/messages.json @@ -1,112 +1,326 @@ { - "createTab_s": { "message": "打开新的标签页" }, - "goBack_s": { "message": "在历史记录中后退" }, - "goForward_s": { "message": "在历史记录中前进" }, - "previousTab_s": { "message": "切换到左侧标签页" }, - "quickNext_s": { "message": "切换到右侧标签页" }, - "reloadTab_s": { "message": "刷新整个页面" }, - "userCustomized": { "message": "自定义快捷键" }, - "name": { "message": "Vimium C - 全键盘操作浏览器" }, - "description": { "message": - "一款支持全键盘操作浏览器的辅助工具,只用键盘即可点击任意链接、切换标签页和快速搜索任意内容,支持自定义快捷键和调整操作细节" - }, - "lang1": { "message": "zh" }, - "noActiveState": { "message": "已设置不显示工作状态" }, - "vblank": { "message": "空白页" }, - "voptions": { "message": "设置" }, - "vshow": { "message": "展示" }, - "Close": { "message": "关闭" }, - "Toggle_Dark": { "message": "切换深色模式" }, - "Search": { "message": "搜索" }, - "Go": { "message": "前往" }, - "4": { "message": "模拟了鼠标从上次选中内容上移出" }, - "5": { "message": "没有找到符合条件的页面对象" }, - "6": { "message": "没有快捷键被停用" }, - "7": { "message": "临时启用所有按键$1" }, - "8": { "message": ":剩余 $1 次" }, - "9": { "message": "临时停用所有快捷键$1" }, - "10": { "message": "没有找到“$1”对应的按钮或链接" }, - "11": { "message": "没有文本框获得过键盘焦点" }, - "12": { "message": "上次有键盘焦点的文本框现在不可见" }, - "13": { "message": "没有找到可以输入的文本框" }, - "14": { "message": "没有发现网址!" }, - "15": { "message": "没有发现文字内容!" }, - "17": { "message": "某个页面刚刚被替换了" }, - "20": { "message": "已复制:$1" }, - "21": { "message": "很抱歉,搜索框页面在当前网页上加载失败了" }, - "22": { "message": "可点击的页面对象过多" }, - "23": { "message": "搜索已到达网页$1" }, - "24": { "message": "开头" }, - "25": { "message": "末尾" }, - "26": { "message": "($1 处)" }, - "27": { "message": "(1 处)" }, - "28": { "message": "(一些)" }, - "29": { "message": "(未找到)" }, - "30": { "message": "(置顶模式)" }, - "31": { "message": "请输入:$1" }, - "39": { "message": "很抱歉,无法为当前网页显示页内查找浮层" }, - "41": { "message": "页内查找历史为空" }, - "43": { "message": "已选择到行边界" }, - "47": { "message": "正在下载……" }, - "55": { "message": "在进入文字选择模式之前请先给出一个选区" }, - "63": { "message": "请按回车键继续……" }, - "68": { "message": "自由选择" }, - "69": { "message": "整行选择" }, - "70": { "message": "光标" }, - "71": { "message": "没有找到可点击的页面对象" }, - "72": { "message": "检测到文字输入,自动退出选择模式" }, - "73": { "message": "所选对象已经被网页自身移除了" }, - "74": { "message": "所选对象不是一个有效的图片" }, - "75": { "message": "已选中此可滚动区域" }, - "76": { "message": "出错了,不应使用Vimium C复制网页中的密码" }, - "77": { "message": "此内容已经在剪贴板了" }, - "78": { "message": "将要下载:$1" }, - "79": { "message": "(已暂停)" }, - "80": { "message": "将要触发:$1" }, - "81": { "message": "没有找到“$1”" }, - "82": { "message": "$1模式" }, - "83": { "message": "没有找到可选择的文字,自动进入光标模式" }, - "84": { "message": "旧的选区已丢失,请重新选取文字" }, - "113": { "message": "Vimium C 拦截了加载时的文本框自动聚焦:网址 = %s,时刻 = %o。" }, - "114": { "message": "上一页" }, - "115": { "message": "下一页" }, - "119": { "message": "聚焦到只读文本框" }, - "122": { "message": "请先选择一个词" }, - "123": { "message": "请先选择一段文字" }, - "0": { "message": "在当前页面打开链接" }, - "2": { "message": "在新标签页中打开链接" }, - "3": { "message": "切换到新标签页来打开链接" }, - "16": { "message": "在当前页面打开多个链接" }, - "18": { "message": "在新标签页中打开多个链接" }, - "19": { "message": "切换到新标签页来打开链接(不退出选择模式)" }, - "32": { "message": "模拟鼠标移动到网页内容上" }, - "33": { "message": "模拟鼠标从网页内容上移出" }, - "34": { "message": "设置键盘焦点到网页内容上" }, - "35": { "message": "下载图片等多媒体文件" }, - "36": { "message": "选择图片以复制" }, - "37": { "message": "在新标签页中展示图片" }, - "38": { "message": "选择文字以搜索" }, - "40": { "message": "选择文字以复制到剪贴板" }, - "42": { "message": "选择链接以复制网址" }, - "44": { "message": "选择链接以下载" }, - "45": { "message": "在无痕窗口中打开链接" }, - "46": { "message": "直接打开链接" }, - "48": { "message": "不断模拟鼠标移动到网页内容上" }, - "49": { "message": "不断模拟鼠标从网页内容上移出" }, - "50": { "message": "不断设置键盘焦点到新的网页内容上" }, - "51": { "message": "下载多个多媒体文件" }, - "52": { "message": "依次复制多张图片" }, - "53": { "message": "选择并展示多张图片" }, - "54": { "message": "依次搜索多条文字" }, - "56": { "message": "依次复制选中的文字" }, - "57": { "message": "依次选择文字并复制为多行文本" }, - "58": { "message": "依次复制链接网址" }, - "59": { "message": "依次选择链接并复制网址为多行文本" }, - "60": { "message": "选择并下载多个链接" }, - "61": { "message": "在无痕窗口中打开多个链接" }, - "62": { "message": "直接打开多个链接" }, - "64": { "message": "在搜索框中编辑链接网址" }, - "65": { "message": "在搜索框中编辑链接文字" }, - "66": { "message": "选择文字以进入自由选择模式" }, - "67": { "message": "选择一个文本框" } -} \ No newline at end of file + "createTab_s": { + "message": "打开新的标签页" + }, + "goBack_s": { + "message": "在历史记录中后退" + }, + "goForward_s": { + "message": "在历史记录中前进" + }, + "previousTab_s": { + "message": "切换到左侧标签页" + }, + "quickNext_s": { + "message": "切换到右侧标签页" + }, + "reloadTab_s": { + "message": "刷新整个页面" + }, + "userCustomized": { + "message": "自定义快捷键" + }, + "name": { + "message": "ebyvim" + }, + "description": { + "message": "一款支持全键盘操作浏览器的辅助工具,只用键盘即可点击任意链接、切换标签页和快速搜索任意内容,支持自定义快捷键和调整操作细节" + }, + "lang1": { + "message": "zh" + }, + "noActiveState": { + "message": "已设置不显示工作状态" + }, + "vblank": { + "message": "空白页" + }, + "voptions": { + "message": "设置" + }, + "vshow": { + "message": "展示" + }, + "Close": { + "message": "关闭" + }, + "Toggle_Dark": { + "message": "切换深色模式" + }, + "Search": { + "message": "搜索" + }, + "Go": { + "message": "前往" + }, + "4": { + "message": "模拟了鼠标从上次选中内容上移出" + }, + "5": { + "message": "没有找到符合条件的页面对象" + }, + "6": { + "message": "没有快捷键被停用" + }, + "7": { + "message": "临时启用所有按键$1" + }, + "8": { + "message": ":剩余 $1 次" + }, + "9": { + "message": "临时停用所有快捷键$1" + }, + "10": { + "message": "没有找到“$1”对应的按钮或链接" + }, + "11": { + "message": "没有文本框获得过键盘焦点" + }, + "12": { + "message": "上次有键盘焦点的文本框现在不可见" + }, + "13": { + "message": "没有找到可以输入的文本框" + }, + "14": { + "message": "没有发现网址!" + }, + "15": { + "message": "没有发现文字内容!" + }, + "17": { + "message": "某个页面刚刚被替换了" + }, + "20": { + "message": "已复制:$1" + }, + "21": { + "message": "很抱歉,搜索框页面在当前网页上加载失败了" + }, + "22": { + "message": "可点击的页面对象过多" + }, + "23": { + "message": "搜索已到达网页$1" + }, + "24": { + "message": "开头" + }, + "25": { + "message": "末尾" + }, + "26": { + "message": "($1 处)" + }, + "27": { + "message": "(1 处)" + }, + "28": { + "message": "(一些)" + }, + "29": { + "message": "(未找到)" + }, + "30": { + "message": "(置顶模式)" + }, + "31": { + "message": "请输入:$1" + }, + "39": { + "message": "很抱歉,无法为当前网页显示页内查找浮层" + }, + "41": { + "message": "页内查找历史为空" + }, + "43": { + "message": "已选择到行边界" + }, + "47": { + "message": "正在下载……" + }, + "55": { + "message": "在进入文字选择模式之前请先给出一个选区" + }, + "63": { + "message": "请按回车键继续……" + }, + "68": { + "message": "自由选择" + }, + "69": { + "message": "整行选择" + }, + "70": { + "message": "光标" + }, + "71": { + "message": "没有找到可点击的页面对象" + }, + "72": { + "message": "检测到文字输入,自动退出选择模式" + }, + "73": { + "message": "所选对象已经被网页自身移除了" + }, + "74": { + "message": "所选对象不是一个有效的图片" + }, + "75": { + "message": "已选中此可滚动区域" + }, + "76": { + "message": "出错了,不应使用Vimium C复制网页中的密码" + }, + "77": { + "message": "此内容已经在剪贴板了" + }, + "78": { + "message": "将要下载:$1" + }, + "79": { + "message": "(已暂停)" + }, + "80": { + "message": "将要触发:$1" + }, + "81": { + "message": "没有找到“$1”" + }, + "82": { + "message": "$1模式" + }, + "83": { + "message": "没有找到可选择的文字,自动进入光标模式" + }, + "84": { + "message": "旧的选区已丢失,请重新选取文字" + }, + "113": { + "message": "Vimium C 拦截了加载时的文本框自动聚焦:网址 = %s,时刻 = %o。" + }, + "114": { + "message": "上一页" + }, + "115": { + "message": "下一页" + }, + "119": { + "message": "聚焦到只读文本框" + }, + "122": { + "message": "请先选择一个词" + }, + "123": { + "message": "请先选择一段文字" + }, + "0": { + "message": "在当前页面打开链接" + }, + "2": { + "message": "在新标签页中打开链接" + }, + "3": { + "message": "切换到新标签页来打开链接" + }, + "16": { + "message": "在当前页面打开多个链接" + }, + "18": { + "message": "在新标签页中打开多个链接" + }, + "19": { + "message": "切换到新标签页来打开链接(不退出选择模式)" + }, + "32": { + "message": "模拟鼠标移动到网页内容上" + }, + "33": { + "message": "模拟鼠标从网页内容上移出" + }, + "34": { + "message": "设置键盘焦点到网页内容上" + }, + "35": { + "message": "下载图片等多媒体文件" + }, + "36": { + "message": "选择图片以复制" + }, + "37": { + "message": "在新标签页中展示图片" + }, + "38": { + "message": "选择文字以搜索" + }, + "40": { + "message": "选择文字以复制到剪贴板" + }, + "42": { + "message": "选择链接以复制网址" + }, + "44": { + "message": "选择链接以下载" + }, + "45": { + "message": "在无痕窗口中打开链接" + }, + "46": { + "message": "直接打开链接" + }, + "48": { + "message": "不断模拟鼠标移动到网页内容上" + }, + "49": { + "message": "不断模拟鼠标从网页内容上移出" + }, + "50": { + "message": "不断设置键盘焦点到新的网页内容上" + }, + "51": { + "message": "下载多个多媒体文件" + }, + "52": { + "message": "依次复制多张图片" + }, + "53": { + "message": "选择并展示多张图片" + }, + "54": { + "message": "依次搜索多条文字" + }, + "56": { + "message": "依次复制选中的文字" + }, + "57": { + "message": "依次选择文字并复制为多行文本" + }, + "58": { + "message": "依次复制链接网址" + }, + "59": { + "message": "依次选择链接并复制网址为多行文本" + }, + "60": { + "message": "选择并下载多个链接" + }, + "61": { + "message": "在无痕窗口中打开多个链接" + }, + "62": { + "message": "直接打开多个链接" + }, + "64": { + "message": "在搜索框中编辑链接网址" + }, + "65": { + "message": "在搜索框中编辑链接文字" + }, + "66": { + "message": "选择文字以进入自由选择模式" + }, + "67": { + "message": "选择一个文本框" + } +} diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index 07e58fd74..04f69f276 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -1,9 +1,11 @@ { - "name": { - "message": "Vimium C - 全键盘操作浏览器" - }, - "description": { - "message": "一款支持全键盘操作浏览器的辅助工具,只用键盘即可点击任意链接、切换标签页和快速搜索任意内容,支持自定义快捷键和调整操作细节" - }, - "i18n": { "message": "zh" } -} \ No newline at end of file + "name": { + "message": "ebyvim" + }, + "description": { + "message": "一款支持全键盘操作浏览器的辅助工具,只用键盘即可点击任意链接、切换标签页和快速搜索任意内容,支持自定义快捷键和调整操作细节" + }, + "i18n": { + "message": "zh" + } +} diff --git a/_locales/zh_TW/messages.json b/_locales/zh_TW/messages.json index 864d92ce6..6d4cc4e58 100644 --- a/_locales/zh_TW/messages.json +++ b/_locales/zh_TW/messages.json @@ -1,112 +1,326 @@ { - "createTab_s": { "message": "打開新的分頁" }, - "goBack_s": { "message": "在歷史記錄中後退" }, - "goForward_s": { "message": "在歷史記錄中前進" }, - "previousTab_s": { "message": "切換到左側分頁" }, - "quickNext_s": { "message": "切換到右側分頁" }, - "reloadTab_s": { "message": "刷新整個頁面" }, - "userCustomized": { "message": "自訂快速鍵" }, - "name": { "message": "Vimium C - 全鍵盤操作瀏覽器" }, + "createTab_s": { + "message": "打開新的分頁" + }, + "goBack_s": { + "message": "在歷史記錄中後退" + }, + "goForward_s": { + "message": "在歷史記錄中前進" + }, + "previousTab_s": { + "message": "切換到左側分頁" + }, + "quickNext_s": { + "message": "切換到右側分頁" + }, + "reloadTab_s": { + "message": "刷新整個頁面" + }, + "userCustomized": { + "message": "自訂快速鍵" + }, + "name": { + "message": "ebyvim" + }, "description": { "message": "一款支持全鍵盤操作瀏覽器的輔助工具,只用鍵盤即可點擊任意連結、切換分頁和快速搜索任意內容,支持自訂快速鍵和調整操作細節" }, - "lang1": { "message": "zh" }, - "noActiveState": { "message": "已設定不顯示工作狀態" }, - "vblank": { "message": "空白頁" }, - "voptions": { "message": "設定" }, - "vshow": { "message": "展示" }, - "Close": { "message": "關閉" }, - "Toggle_Dark": { "message": "切換深色模式" }, - "Search": { "message": "搜索" }, - "Go": { "message": "前往" }, - "4": { "message": "模擬了滑鼠從上次選中內容上移出" }, - "5": { "message": "沒有找到符合條件的頁面對象" }, - "6": { "message": "沒有快速鍵被停用" }, - "7": { "message": "臨時啟用所有按鍵$1" }, - "8": { "message": ":剩餘 $1 次" }, - "9": { "message": "臨時停用所有快速鍵$1" }, - "10": { "message": "沒有找到“$1”對應的按鈕或連結" }, - "11": { "message": "沒有輸入框獲得過鍵盤焦點" }, - "12": { "message": "上次有鍵盤焦點的輸入框現在不可見" }, - "13": { "message": "沒有找到可以輸入的輸入框" }, - "14": { "message": "沒有發現網址!" }, - "15": { "message": "沒有發現文字內容!" }, - "17": { "message": "某個頁面剛剛被替換了" }, - "20": { "message": "已複製:$1" }, - "21": { "message": "很抱歉,搜索框頁面在當前網頁上加載失敗了" }, - "22": { "message": "可點擊的頁面對象過多" }, - "23": { "message": "搜索已到達網頁$1" }, - "24": { "message": "開頭" }, - "25": { "message": "末尾" }, - "26": { "message": "($1 處)" }, - "27": { "message": "(1 處)" }, - "28": { "message": "(一些)" }, - "29": { "message": "(未找到)" }, - "30": { "message": "(置頂模式)" }, - "31": { "message": "請輸入:$1" }, - "39": { "message": "很抱歉,無法為當前網頁顯示頁內查找浮層" }, - "41": { "message": "頁內查找歷史為空" }, - "43": { "message": "已選擇到行邊界" }, - "47": { "message": "正在下載……" }, - "55": { "message": "在進入文字選擇模式之前請先給出一個選區" }, - "63": { "message": "請按 Enter 鍵繼續……" }, - "68": { "message": "自由選擇" }, - "69": { "message": "整行選擇" }, - "70": { "message": "游標" }, - "71": { "message": "沒有找到可點擊的頁面對象" }, - "72": { "message": "檢測到文字輸入,自動退出選擇模式" }, - "73": { "message": "所選對象已經被網頁自身移除了" }, - "74": { "message": "所選對象不是一個有效的圖片" }, - "75": { "message": "已選中此可滾動區域" }, - "76": { "message": "出錯了,不應使用Vimium C複製網頁中的密碼" }, - "77": { "message": "此內容已經在剪貼簿了" }, - "78": { "message": "將要下載:$1" }, - "79": { "message": "(已暫停)" }, - "80": { "message": "將要觸發:$1" }, - "81": { "message": "沒有找到“$1”" }, - "82": { "message": "$1模式" }, - "83": { "message": "沒有找到可選擇的文字,自動進入游標模式" }, - "84": { "message": "舊的選區已丟失,請重新選取文字" }, - "114": { "message": "上一頁" }, - "115": { "message": "下一頁" }, - "119": { "message": "聚焦到只讀輸入框" }, - "122": { "message": "請先選擇一個詞" }, - "123": { "message": "請先選擇一段文字" }, - "0": { "message": "在當前頁面打開連結" }, - "2": { "message": "在新分頁中打開連結" }, - "3": { "message": "切換到新分頁來打開連結" }, - "16": { "message": "在當前頁面打開多個連結" }, - "18": { "message": "在新分頁中打開多個連結" }, - "19": { "message": "切換到新分頁來打開連結(不退出選擇模式)" }, - "32": { "message": "模擬滑鼠移動到網頁內容上" }, - "33": { "message": "模擬滑鼠從網頁內容上移出" }, - "34": { "message": "設定鍵盤焦點到網頁內容上" }, - "35": { "message": "下載圖片等多媒體文件" }, - "36": { "message": "選擇圖片以複製" }, - "37": { "message": "在新分頁中展示圖片" }, - "38": { "message": "選擇文字以搜索" }, - "40": { "message": "選擇文字以複製到剪貼簿" }, - "42": { "message": "選擇連結以複製網址" }, - "44": { "message": "選擇連結以下載" }, - "45": { "message": "在無痕窗口中打開連結" }, - "46": { "message": "直接打開連結" }, - "48": { "message": "不斷模擬滑鼠移動到網頁內容上" }, - "49": { "message": "不斷模擬滑鼠從網頁內容上移出" }, - "50": { "message": "不斷設定鍵盤焦點到新的網頁內容上" }, - "51": { "message": "下載多個多媒體文件" }, - "52": { "message": "依次複製多張圖片" }, - "53": { "message": "選擇並展示多張圖片" }, - "54": { "message": "依次搜索多條文字" }, - "56": { "message": "依次複製選中的文字" }, - "57": { "message": "依次選擇文字並複製為多行文本" }, - "58": { "message": "依次複製連結網址" }, - "59": { "message": "依次選擇連結並複製網址為多行文本" }, - "60": { "message": "選擇並下載多個連結" }, - "61": { "message": "在無痕窗口中打開多個連結" }, - "62": { "message": "直接打開多個連結" }, - "64": { "message": "在搜索框中編輯連結網址" }, - "65": { "message": "在搜索框中編輯連結文字" }, - "66": { "message": "選擇文字以進入自由選擇模式" }, - "67": { "message": "選擇一個輸入框" }, - "i18n": { "message": "zh_TW" } + "lang1": { + "message": "zh" + }, + "noActiveState": { + "message": "已設定不顯示工作狀態" + }, + "vblank": { + "message": "空白頁" + }, + "voptions": { + "message": "設定" + }, + "vshow": { + "message": "展示" + }, + "Close": { + "message": "關閉" + }, + "Toggle_Dark": { + "message": "切換深色模式" + }, + "Search": { + "message": "搜索" + }, + "Go": { + "message": "前往" + }, + "4": { + "message": "模擬了滑鼠從上次選中內容上移出" + }, + "5": { + "message": "沒有找到符合條件的頁面對象" + }, + "6": { + "message": "沒有快速鍵被停用" + }, + "7": { + "message": "臨時啟用所有按鍵$1" + }, + "8": { + "message": ":剩餘 $1 次" + }, + "9": { + "message": "臨時停用所有快速鍵$1" + }, + "10": { + "message": "沒有找到“$1”對應的按鈕或連結" + }, + "11": { + "message": "沒有輸入框獲得過鍵盤焦點" + }, + "12": { + "message": "上次有鍵盤焦點的輸入框現在不可見" + }, + "13": { + "message": "沒有找到可以輸入的輸入框" + }, + "14": { + "message": "沒有發現網址!" + }, + "15": { + "message": "沒有發現文字內容!" + }, + "17": { + "message": "某個頁面剛剛被替換了" + }, + "20": { + "message": "已複製:$1" + }, + "21": { + "message": "很抱歉,搜索框頁面在當前網頁上加載失敗了" + }, + "22": { + "message": "可點擊的頁面對象過多" + }, + "23": { + "message": "搜索已到達網頁$1" + }, + "24": { + "message": "開頭" + }, + "25": { + "message": "末尾" + }, + "26": { + "message": "($1 處)" + }, + "27": { + "message": "(1 處)" + }, + "28": { + "message": "(一些)" + }, + "29": { + "message": "(未找到)" + }, + "30": { + "message": "(置頂模式)" + }, + "31": { + "message": "請輸入:$1" + }, + "39": { + "message": "很抱歉,無法為當前網頁顯示頁內查找浮層" + }, + "41": { + "message": "頁內查找歷史為空" + }, + "43": { + "message": "已選擇到行邊界" + }, + "47": { + "message": "正在下載……" + }, + "55": { + "message": "在進入文字選擇模式之前請先給出一個選區" + }, + "63": { + "message": "請按 Enter 鍵繼續……" + }, + "68": { + "message": "自由選擇" + }, + "69": { + "message": "整行選擇" + }, + "70": { + "message": "游標" + }, + "71": { + "message": "沒有找到可點擊的頁面對象" + }, + "72": { + "message": "檢測到文字輸入,自動退出選擇模式" + }, + "73": { + "message": "所選對象已經被網頁自身移除了" + }, + "74": { + "message": "所選對象不是一個有效的圖片" + }, + "75": { + "message": "已選中此可滾動區域" + }, + "76": { + "message": "出錯了,不應使用Vimium C複製網頁中的密碼" + }, + "77": { + "message": "此內容已經在剪貼簿了" + }, + "78": { + "message": "將要下載:$1" + }, + "79": { + "message": "(已暫停)" + }, + "80": { + "message": "將要觸發:$1" + }, + "81": { + "message": "沒有找到“$1”" + }, + "82": { + "message": "$1模式" + }, + "83": { + "message": "沒有找到可選擇的文字,自動進入游標模式" + }, + "84": { + "message": "舊的選區已丟失,請重新選取文字" + }, + "114": { + "message": "上一頁" + }, + "115": { + "message": "下一頁" + }, + "119": { + "message": "聚焦到只讀輸入框" + }, + "122": { + "message": "請先選擇一個詞" + }, + "123": { + "message": "請先選擇一段文字" + }, + "0": { + "message": "在當前頁面打開連結" + }, + "2": { + "message": "在新分頁中打開連結" + }, + "3": { + "message": "切換到新分頁來打開連結" + }, + "16": { + "message": "在當前頁面打開多個連結" + }, + "18": { + "message": "在新分頁中打開多個連結" + }, + "19": { + "message": "切換到新分頁來打開連結(不退出選擇模式)" + }, + "32": { + "message": "模擬滑鼠移動到網頁內容上" + }, + "33": { + "message": "模擬滑鼠從網頁內容上移出" + }, + "34": { + "message": "設定鍵盤焦點到網頁內容上" + }, + "35": { + "message": "下載圖片等多媒體文件" + }, + "36": { + "message": "選擇圖片以複製" + }, + "37": { + "message": "在新分頁中展示圖片" + }, + "38": { + "message": "選擇文字以搜索" + }, + "40": { + "message": "選擇文字以複製到剪貼簿" + }, + "42": { + "message": "選擇連結以複製網址" + }, + "44": { + "message": "選擇連結以下載" + }, + "45": { + "message": "在無痕窗口中打開連結" + }, + "46": { + "message": "直接打開連結" + }, + "48": { + "message": "不斷模擬滑鼠移動到網頁內容上" + }, + "49": { + "message": "不斷模擬滑鼠從網頁內容上移出" + }, + "50": { + "message": "不斷設定鍵盤焦點到新的網頁內容上" + }, + "51": { + "message": "下載多個多媒體文件" + }, + "52": { + "message": "依次複製多張圖片" + }, + "53": { + "message": "選擇並展示多張圖片" + }, + "54": { + "message": "依次搜索多條文字" + }, + "56": { + "message": "依次複製選中的文字" + }, + "57": { + "message": "依次選擇文字並複製為多行文本" + }, + "58": { + "message": "依次複製連結網址" + }, + "59": { + "message": "依次選擇連結並複製網址為多行文本" + }, + "60": { + "message": "選擇並下載多個連結" + }, + "61": { + "message": "在無痕窗口中打開多個連結" + }, + "62": { + "message": "直接打開多個連結" + }, + "64": { + "message": "在搜索框中編輯連結網址" + }, + "65": { + "message": "在搜索框中編輯連結文字" + }, + "66": { + "message": "選擇文字以進入自由選擇模式" + }, + "67": { + "message": "選擇一個輸入框" + }, + "i18n": { + "message": "zh_TW" + } } diff --git a/background/help_dialog.ts b/background/help_dialog.ts index f73f3949c..216914eb8 100644 --- a/background/help_dialog.ts +++ b/background/help_dialog.ts @@ -274,6 +274,7 @@ const commandGroups_: { , "copyCurrentTitle" , "switchFocus", "$flash, select=\"\"/all/all-line/start/end" , "focusInput", "$keep, select=\"\"/all/all-line/start/end" + , "focusScrollable" , "LinkHints.activateCopyLinkUrl" , "LinkHints.activateCopyLinkText", "$join:boolean/string" , "openCopiedUrlInCurrentTab" diff --git a/background/key_mappings.ts b/background/key_mappings.ts index 12fa43837..a4358faa6 100644 --- a/background/key_mappings.ts +++ b/background/key_mappings.ts @@ -749,6 +749,7 @@ export const availableCommands_: { readonly [key in kCName]: CommandsNS.Descript findSelectedBackwards: [ kBgCmd.performFind, kCxt.bg, 0, { selected: "line", $count: -1 } ], firstTab: [ kBgCmd.goToTab, kCxt.bg, 0, { absolute: true } ], focusInput: [ kFgCmd.focusInput, kCxt.fg, 0 ], + focusScrollable: [ kFgCmd.focusScrollable, kCxt.fg, 0 ], focusOrLaunch: [ kBgCmd.openUrl, kCxt.bg, 1, { reuse: ReuseType.reuse } ], goBack: [ kFgCmd.framesGoBack, kCxt.fg, 0, { $count: -1 } ], goForward: [ kFgCmd.framesGoBack, kCxt.fg, 0 ], diff --git a/background/run_commands.ts b/background/run_commands.ts index ccdc4bf3e..7973c6e4e 100644 --- a/background/run_commands.ts +++ b/background/run_commands.ts @@ -234,6 +234,7 @@ export const executeCommand = (registryEntry: CommandsNS.Item, count: number, la const { alias_: fgAlias } = registryEntry, wantCSS = (kFgCmd.END <= 32 || fgAlias < 32) && ((( (1 << kFgCmd.linkHints) | (1 << kFgCmd.marks) | (1 << kFgCmd.passNextKey) | (1 << kFgCmd.focusInput) + | (1 << kFgCmd.focusScrollable) ) >> fgAlias) & 1) || fgAlias === kFgCmd.scroll && (!!options && (options as CmdOptions[kFgCmd.scroll]).keepHover === false) set_cPort(port!) diff --git a/background/settings.ts b/background/settings.ts index 51ee8bf5a..1246a16d0 100644 --- a/background/settings.ts +++ b/background/settings.ts @@ -359,7 +359,7 @@ nickyfeng@edgetranslate.com saladict@crimx.com` : "", filterLinkHints: false, - grabBackFocus: false, + grabBackFocus: true, hideHud: false, ignoreReadonly: GlobalConsts.kCssDefault as const || "#read-only-cursor-text-area" // GitHub source file content diff --git a/background/typed_commands.d.ts b/background/typed_commands.d.ts index 704b5b036..6a9df6026 100644 --- a/background/typed_commands.d.ts +++ b/background/typed_commands.d.ts @@ -416,6 +416,7 @@ interface CmdNameIds { findSelectedBackwards: kBgCmd.performFind firstTab: kBgCmd.goToTab focusInput: kFgCmd.focusInput + focusScrollable: kFgCmd.focusScrollable focusOrLaunch: kBgCmd.openUrl goBack: kFgCmd.framesGoBack goForward: kFgCmd.framesGoBack diff --git a/content/async_dispatcher.ts b/content/async_dispatcher.ts index 92f962530..e1284f183 100644 --- a/content/async_dispatcher.ts +++ b/content/async_dispatcher.ts @@ -9,7 +9,7 @@ import { } from "../lib/dom_utils" import { suppressTail_ } from "../lib/keyboard_utils" import { Point2D, center_, getVisibleClientRect_, view_, selRange_, isContaining_ } from "../lib/rect" -import { insert_Lock_ } from "./insert" +import { allowEditableFocus_, insert_Lock_ } from "./insert" import { post_, send_ } from "./port" import { flash_, getSelected, getSelectionBoundingBox_, moveSel_s_throwable } from "./dom_ui" import { coreHints, hintApi, hintManager, mode1_ as hintMode1_, hintOptions, isHintsActive } from "./link_hints" @@ -521,6 +521,7 @@ export const select_ = (element: LockableElement, rect?: Rect | null, show_flash const range = sel && selRange_(sel) const focusedRange = range && range.cloneRange() const focusedRect = focusedRange && getSelectionBoundingBox_(focusedRange.collapse(!1), 0, focusedRange) + allowEditableFocus_(element) return catchAsyncErrorSilently(click_async(element , focusedRect && (!rect || isContaining_(rect, focusedRect)) ? focusedRect : rect, 1)).then((): void => { view_(element, !show_flash, y) diff --git a/content/commands.ts b/content/commands.ts index 04489b15c..d9fd4296f 100644 --- a/content/commands.ts +++ b/content/commands.ts @@ -42,10 +42,10 @@ import { insert_global_, insert_last2_, set_insert_last2_, insert_last_mutable, resetInsertAndScrolling } from "./insert" import { activate as visualActivate, deactivate as visualDeactivate } from "./visual" -import { activate as scActivate, onActivate, currentScrolling, setNewScrolling, scrollTick } from "./scroller" +import { activate as scActivate, onActivate, currentScrolling, setNewScrolling, scrollTick, scrolled, suppressScroll } from "./scroller" import { activate as omniActivate, hide as omniHide } from "./omni" import { findNextInText, findNextInRel } from "./pagination" -import { traverse, getEditable, filterOutNonReachable } from "./local_links" +import { traverse, getEditable, getScrollable, filterOutNonReachable } from "./local_links" import { select_, unhover_async, set_lastHovered_, lastHovered_, catchAsyncErrorSilently, setupIDC_cr, click_async, wrap_enable_bubbles, set_lastBubbledHovered_ @@ -395,6 +395,29 @@ set_contentCommands_([ }) }) }, + /* kFgCmd.focusScrollable: */ (options: CmdOptions[kFgCmd.focusScrollable], count: number): void => { + set_cropNotReady_(2) + const areas = traverse(kSafeAllSelector, options, getScrollable) as Hint[] + scrolled === 1 && suppressScroll() + if (!areas.length) { + return runFallbackKey(options, kTip.noTargets) + } + const cur = derefInDoc_(currentScrolling), len = areas.length + let index = count > 0 ? -1 : 0 + if (cur) { + for (let i = 0; i < len; i++) { + if (areas[i][0] === cur || contains_s(areas[i][0], cur)) { + index = i + break + } + } + } + index = ((index + count) % len + len) % len + const element = areas[index][0] + setNewScrolling(element) + flash_(element) + runFallbackKey(options, 0) + }, /* kFgCmd.editText: */ (options: CmdOptions[kFgCmd.editText], count: number) => { const editable = insert_Lock_() && getEditableType_<0>(raw_insert_lock!) > EditableType.MaxNotEditableElement ? raw_insert_lock as TextElement : 0, html = isHTML_(); diff --git a/content/hint_filters.ts b/content/hint_filters.ts index 9baac0cff..2577cdcd2 100644 --- a/content/hint_filters.ts +++ b/content/hint_filters.ts @@ -1,4 +1,4 @@ -import { chromeVer_, createRegExp, Lower, math, max_, OnChrome, OnEdge, OnFirefox } from "../lib/utils" +import { chromeVer_, createRegExp, Lower, math, max_, min_, OnChrome, OnEdge, OnFirefox } from "../lib/utils" import { createElement_, querySelector_unsafe_, htmlTag_, docEl_unsafe_, removeEl_s, ALA, attr_s, contains_s, setClassName_s, setVisibility_s, toggleClass_s, textContent_s, appendNode_s, hasTag_ @@ -7,7 +7,7 @@ import { HintItem, FilteredHintItem, MarkerElement, HintText, isHC_, hintMode_, useFilter_, hintKeyStatus, KeyStatus, hintChars, allHints, setMode, resetMode, hintOptions } from "./link_hints" -import { bZoom_, boundingRect_, dimSize_, WithOldZoom, } from "../lib/rect" +import { bZoom_, boundingRect_, dimSize_, Point2D, wndSize_, WithOldZoom, } from "../lib/rect" import { BSP, DEL, ENTER, SPC } from "../lib/keyboard_utils" import { ClickType, closableClasses_, maxLeft_, maxRight_, maxTop_ } from "./local_links" import { ui_root } from "./dom_ui" @@ -428,6 +428,42 @@ export const renderMarkers = (hintItemArray: readonly HintItem[]): void => { } } +export const spreadOverlappingMarkers = (hintItemArray: readonly HintItem[]): void => { + const placed: Rect[] = [], gap = 2, vw = wndSize_(1), vh = wndSize_() + const overlaps = (a: Rect, b: Rect): boolean => + a.r + gap > b.l && a.l < b.r + gap && a.b + gap > b.t && a.t < b.b + gap + for (const hint of hintItemArray) { + const marker = hint.m + if (marker.style.visibility) { continue } + const rect = boundingRect_(marker) + const width = rect.r - rect.l, height = rect.b - rect.t + if (width < 1 || height < 1) { continue } + const baseLeft = parseFloat(marker.style.left || "0") || 0, baseTop = parseFloat(marker.style.top || "0") || 0 + let bestRect = rect, bestDx = 0, bestDy = 0 + if (placed.some(overlaps.bind(0, rect))) { + const stepX = min_(max_(width + gap, 12), 48), stepY = min_(max_(height + gap, 12), 32) + const shifts: readonly Point2D[] = [ + [0, stepY], [stepX, 0], [0, -stepY], [-stepX, 0], + [stepX, stepY], [-stepX, stepY], [stepX, -stepY], [-stepX, -stepY], + [0, stepY * 2], [stepX * 2, 0], [0, -stepY * 2], [-stepX * 2, 0] + ] + for (const [dx, dy] of shifts) { + const candidate = { l: rect.l + dx, t: rect.t + dy, r: rect.r + dx, b: rect.b + dy } + if (candidate.l >= 0 && candidate.t >= 0 && candidate.r <= vw && candidate.b <= vh + && !placed.some(overlaps.bind(0, candidate))) { + bestRect = candidate; bestDx = dx; bestDy = dy + break + } + } + if (bestDx || bestDy) { + marker.style.left = baseLeft + bestDx + "px" + marker.style.top = baseTop + bestDy + "px" + } + } + placed.push(bestRect) + } +} + export const initAlphabetEngine = (hintItems: readonly HintItem[]): void => { const step = hintChars.length, chars2 = " " + hintChars, count = hintItems.length, start = (math.ceil((count - 1) / (step - 1)) | 0) || 1, diff --git a/content/insert.ts b/content/insert.ts index 38a7dfd60..e2d6c6432 100644 --- a/content/insert.ts +++ b/content/insert.ts @@ -40,6 +40,8 @@ let onExitSuppress: ((this: void) => void) | 0 | undefined let onWndBlur2: ((this: void) => void) | undefined | null let passAsNormal: BOOL = 0 let readonlyFocused_: 0 | 1 | -1 = 0 +let allowedEditableFocus: LockableElement | null = null +let allowedEditableFocusUntil = 0 export { lock_ as raw_insert_lock, insert_global_, passAsNormal, readonlyFocused_, @@ -56,6 +58,21 @@ export function set_grabBackFocus (_newGrabBackFocus: typeof grabBackFocus): voi export function set_onWndBlur2 (_newOnBlur: typeof onWndBlur2): void { onWndBlur2 = _newOnBlur } export function set_passAsNormal (_newNormal: BOOL): void { passAsNormal = _newNormal } export function set_readonlyFocused_ (_newRoFocused: 0 | 1 | -1): 0 | 1 | -1 { return readonlyFocused_ = _newRoFocused } +export function allowEditableFocus_ (element: LockableElement): void { + allowedEditableFocus = element + allowedEditableFocusUntil = getTime() + 1500 +} +export const onEditableMouseDown = (event: Event): void => { + if (!isEnabled_ || (!OnChrome || Build.MinCVer >= BrowserVer.Min$Event$$IsTrusted + ? !event.isTrusted : event.isTrusted === false)) { return } + let target = event.target as EventTarget | Element | null + if (target && target !== ui_box && getEditableType_(target)) { + allowEditableFocus_(target as LockableElement) + } else { + allowedEditableFocus = null + allowedEditableFocusUntil = getTime() + 1500 + } +} // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion export const insertInit = (doesGrab?: boolean | null, inLoading?: 1): void => { @@ -262,7 +279,12 @@ export const onFocus = (event: Event | FocusEvent): void => { if (type = getEditableType_(target)) { if (grabBackFocus) { (grabBackFocus as Exclude)(event, target); + } else if (target !== allowedEditableFocus && getTime() > allowedEditableFocusUntil) { + Stop_(event) + ; (target as LockableElement).blur() + if (lock_ === target) { lock_ = null } } else { + allowedEditableFocus = null esc!(HandlerResult.Nothing) lock_ = target // here ignore the rare case of an XMLDocument with a editable node on Firefox, for smaller code diff --git a/content/link_hints.ts b/content/link_hints.ts index 43d00f3b9..dfba14f2c 100644 --- a/content/link_hints.ts +++ b/content/link_hints.ts @@ -117,7 +117,8 @@ import { } from "./local_links" import { matchHintsByKey, zIndexes_, rotate1, initFilterEngine, initAlphabetEngine, renderMarkers, generateHintText, - getMatchingHints, activeHint_, hintFilterReset, set_maxPrefixLen_, set_zIndexes_, adjustMarkers_old_cr_edge, + getMatchingHints, activeHint_, hintFilterReset, set_maxPrefixLen_, set_zIndexes_, spreadOverlappingMarkers, + adjustMarkers_old_cr_edge, createHint } from "./hint_filters" import { executeHintInOfficer, removeFlash, set_removeFlash } from "./link_actions" @@ -307,6 +308,7 @@ const render: BaseHintWorker["r"] = (hints, arr: FrameHintsInfo["v"], raw_apis): manager_ || setMode(mode_) if (hints.length) { box_ = addElementList(hints, arr, ((managerOrA.d satisfies 0 | 1 | 3) | coreHints.d) as typeof managerOrA.d) + spreadOverlappingMarkers(hints) } else if (!manager_) { adjustUI(); } diff --git a/content/local_links.ts b/content/local_links.ts index 039a8dc8f..f22487bdb 100644 --- a/content/local_links.ts +++ b/content/local_links.ts @@ -276,6 +276,21 @@ export const getEditable = (hints: Hint[], element: SafeHTMLElement): void => { } } +export const getScrollable = (hints: Hint[], element: SafeHTMLElement): void => { + const rect = getVisibleClientRect_(element, null) + if (!rect) { return } + const width = rect.r - rect.l, height = rect.b - rect.t + if (height > GlobalConsts.MinScrollableAreaSizeForDetection - 1 + && element.clientHeight + 5 < element.scrollHeight + && shouldScroll_s(element, kDim.byY, 0) > 0) { + hints.push([element, rect, ClickType.scrollY]) + } else if (width > GlobalConsts.MinScrollableAreaSizeForDetection - 1 + && element.clientWidth + 5 < element.scrollWidth + && shouldScroll_s(element, kDim.byX, 0) > 0) { + hints.push([element, rect, ClickType.scrollX]) + } +} + const getIfOnlyVisible = (hints: (Hint | Hint0)[], element: SafeElement): void => { const arr = getVisibleClientRect_(element, null) arr && hints.push([element as SafeElementForMouse diff --git a/content/request_handlers.ts b/content/request_handlers.ts index 1e27ba130..aa2623048 100644 --- a/content/request_handlers.ts +++ b/content/request_handlers.ts @@ -9,7 +9,8 @@ import { set_keyIdCorrectionOffset_old_cr_, handler_stack, suppressTail_ } from import { editableTypes_, markFramesetTagUnsafe_old_cr, OnDocLoaded_, BU, docHasFocus_, deepActiveEl_unsafe_, hasTag_, querySelector_unsafe_, isHTML_, createElement_, setClassName_s, onReadyState_, MayWoPopover, withoutPopover_, - docEl_unsafe_, scrollIntoView_, CLK, ElementProto_not_ff, isIFrameElement, DAC, removeEl_s, toggleClass_s, getElDesc_ + docEl_unsafe_, scrollIntoView_, CLK, ElementProto_not_ff, isIFrameElement, DAC, MDW, removeEl_s, toggleClass_s, + getElDesc_ } from "../lib/dom_utils" import { set_isOldZoom_, WithOldZoom } from "../lib/rect" import { @@ -30,7 +31,9 @@ import { dispatchMark } from "./marks" import { set_findCSS, styleInHUD, deactivate as findExit, toggleSelectableStyle, styleSelColorIn, styleSelColorOut } from "./mode_find" -import { exitGrab, grabBackFocus, insertInit, set_grabBackFocus, onFocus, onBlur, insert_Lock_ } from "./insert" +import { + exitGrab, grabBackFocus, insertInit, set_grabBackFocus, onFocus, onBlur, onEditableMouseDown, insert_Lock_ +} from "./insert" import { onActivate, setNewScrolling } from "./scroller" import { hide as omniHide } from "./omni" @@ -304,6 +307,7 @@ set_hookOnWnd((function (action: HookAction): void { OnChrome && f(CLK, anyClickHandler, t) f(OnChrome ? DAC: CLK, onActivate, t) if (action !== HookAction.Suppress) { + f(MDW, onEditableMouseDown, t) f("focus", onFocus, t) // https://developer.chrome.com/blog/page-lifecycle-api/ OnChrome && f("freeze", onFreezePort, t) diff --git a/i18n/en/help_dialog.json b/i18n/en/help_dialog.json index b4f626766..50ed9ed1f 100644 --- a/i18n/en/help_dialog.json +++ b/i18n/en/help_dialog.json @@ -94,6 +94,7 @@ "findSelectedBackwards": "Find the selected text, searching backwards", "firstTab": "Go to the first N-th tab", "focusInput": "Focus the N-th visible text box on the page and cycle using tab", + "focusScrollable": "Focus the next visible scrollable area", "focusOrLaunch": "Focus a tab with given URL or open it", "goBack": "Go back in history", "goForward": "Go forward in history", diff --git a/i18n/fr/help_dialog.json b/i18n/fr/help_dialog.json index 16d62644a..6b89ee833 100644 --- a/i18n/fr/help_dialog.json +++ b/i18n/fr/help_dialog.json @@ -95,6 +95,7 @@ "findSelectedBackwards": "Rechercher le texte sélectionné en recherchant vers l'arrière", "firstTab": "Aller au Nième onglet", "focusInput": "Mettre le focus sur la Nième zone de texte visible sur la page et parcourir en utilisant TAB", + "focusScrollable": "Focus the next visible scrollable area", "focusOrLaunch": "Mettre le focus sur un onglet avec l'URL donnée et l'ouvrir", "goBack": "Remonter dans l'historique", "goForward": "Avancer dans l'historique", diff --git a/i18n/zh/help_dialog.json b/i18n/zh/help_dialog.json index d52a9e15f..0bfdf0813 100644 --- a/i18n/zh/help_dialog.json +++ b/i18n/zh/help_dialog.json @@ -101,6 +101,7 @@ "findSelected": "查找选择的词语", "findSelectedBackwards": "向上查找选择的词语", "focusInput": "进入文本框选择模式(Tab 切换)", + "focusScrollable": "Focus the next visible scrollable area", "focusOrLaunch": "切换到或新建指定网址的标签页", "goBack": "在历史记录中后退", "goForward": "在历史记录中前进", diff --git a/i18n/zh_TW/help_dialog.json b/i18n/zh_TW/help_dialog.json index 362dda938..408a7a547 100644 --- a/i18n/zh_TW/help_dialog.json +++ b/i18n/zh_TW/help_dialog.json @@ -101,6 +101,7 @@ "findSelectedBackwards": "向上查找選擇的詞語", "firstTab": "切換到左起指定位置的分頁", "focusInput": "進入輸入框選擇模式(Tab 切換)", + "focusScrollable": "Focus the next visible scrollable area", "focusOrLaunch": "切換到或新建指定網址的分頁", "goBack": "在歷史記錄中後退", "goForward": "在歷史記錄中前進", diff --git a/manifest.json b/manifest.json index 62d5b49c3..2e7ef7e5c 100644 --- a/manifest.json +++ b/manifest.json @@ -121,7 +121,7 @@ "tabs", "webNavigation" ], - "short_name": "Vimium C", + "short_name": "ebyvim", "update_url": "https://clients2.google.com/service/update2/crx", "version": "2.12.3", "version_name": "2.12.2", @@ -130,4 +130,4 @@ "matches": [ "", "chrome-extension://*/*" ], "use_dynamic_url": false } ] -} \ No newline at end of file +} diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index cc9613359..c99a5911a 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -152,7 +152,7 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "dependencies": { @@ -169,7 +169,7 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { @@ -178,7 +178,7 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { @@ -187,13 +187,13 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { @@ -207,7 +207,7 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { @@ -219,7 +219,7 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { @@ -233,7 +233,7 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { "@jridgewell/set-array": "^1.0.1", @@ -246,7 +246,7 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "engines": { "node": ">=6.0.0" @@ -254,7 +254,7 @@ }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "engines": { "node": ">=6.0.0" @@ -262,7 +262,7 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", - "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -271,12 +271,12 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", @@ -285,7 +285,7 @@ }, "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@nodelib/fs.scandir": { @@ -322,7 +322,7 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "optional": true, @@ -566,7 +566,7 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "devOptional": true, "engines": { @@ -1043,7 +1043,7 @@ }, "node_modules/bindings": { "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, "optional": true, @@ -1187,7 +1187,7 @@ }, "node_modules/chokidar/node_modules/fsevents": { "version": "1.2.13", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", "dev": true, @@ -1220,7 +1220,7 @@ }, "node_modules/clean-css": { "version": "5.3.2", - "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, "dependencies": { @@ -1608,7 +1608,7 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, @@ -2104,7 +2104,7 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, "optional": true @@ -2309,7 +2309,7 @@ }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "optional": true, "dependencies": { @@ -2354,7 +2354,7 @@ }, "node_modules/foreground-child": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { @@ -2404,7 +2404,7 @@ }, "node_modules/fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, @@ -3280,7 +3280,7 @@ }, "node_modules/jackspeak": { "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", "dev": true, "dependencies": { @@ -3760,7 +3760,7 @@ }, "node_modules/minipass": { "version": "7.0.2", - "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.0.2.tgz", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", "dev": true, "engines": { @@ -3816,7 +3816,7 @@ }, "node_modules/nan": { "version": "2.17.0", - "resolved": "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "dev": true, "optional": true @@ -4281,7 +4281,7 @@ }, "node_modules/path-scurry": { "version": "1.10.1", - "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.10.1.tgz", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "dependencies": { @@ -4294,7 +4294,7 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.0.0.tgz", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", "dev": true, "engines": { @@ -4408,7 +4408,7 @@ }, "node_modules/pngjs": { "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-7.0.0.tgz", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", "engines": { "node": ">=14.19.0" @@ -4915,7 +4915,7 @@ }, "node_modules/rimraf": { "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", "dev": true, "dependencies": { @@ -4930,7 +4930,7 @@ }, "node_modules/rimraf/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { @@ -4939,7 +4939,7 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "10.3.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-10.3.3.tgz", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { @@ -4958,7 +4958,7 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { @@ -4970,7 +4970,7 @@ }, "node_modules/rollup": { "version": "3.26.2", - "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.26.2.tgz", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.2.tgz", "integrity": "sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==", "dev": true, "bin": { @@ -5100,7 +5100,7 @@ }, "node_modules/signal-exit": { "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, "engines": { @@ -5280,7 +5280,7 @@ }, "node_modules/source-map-support": { "version": "0.5.20", - "resolved": "https://registry.nlark.com/source-map-support/download/source-map-support-0.5.20.tgz", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha1-EhZgifj15ejFaSazd2Mzkt0stsk=", "dependencies": { "buffer-from": "^1.0.0", @@ -5432,7 +5432,7 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { @@ -5446,7 +5446,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "devOptional": true, "dependencies": { @@ -5459,7 +5459,7 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { @@ -5549,7 +5549,7 @@ }, "node_modules/terser": { "version": "5.19.0", - "resolved": "https://registry.npmmirror.com/terser/-/terser-5.19.0.tgz", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.0.tgz", "integrity": "sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q==", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -5566,7 +5566,7 @@ }, "node_modules/terser/node_modules/acorn": { "version": "8.10.0", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "bin": { "acorn": "bin/acorn" @@ -5856,7 +5856,7 @@ }, "node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "bin": { "tsc": "bin/tsc", @@ -6181,7 +6181,7 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { diff --git a/typings/messages.d.ts b/typings/messages.d.ts index 183d115f6..a41a91d1d 100644 --- a/typings/messages.d.ts +++ b/typings/messages.d.ts @@ -252,7 +252,7 @@ declare const enum kBgCmd { declare const enum kFgCmd { callTee, findMode, linkHints, marks, scroll, visualMode, vomnibar, insertMode, toggle, - passNextKey, goNext, autoOpen, focusInput, editText, scrollSelect, toggleStyle, dispatchEventCmd, showHelpDialog, + passNextKey, goNext, autoOpen, focusInput, focusScrollable, editText, scrollSelect, toggleStyle, dispatchEventCmd, showHelpDialog, framesGoBack, goToMark, END, ENDS = "END", } @@ -490,6 +490,8 @@ interface CmdOptions { reachable?: boolean | number; // default to true prefer?: string; } & CSSOptions & Req.FallbackOptions + [kFgCmd.focusScrollable]: { + } & CSSOptions & Req.FallbackOptions [kFgCmd.editText]: { dom?: boolean; run: string | string[]