Vimium: 'LinkHints.activateModeToTriggerRightClickAction' ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” [์—ฌ๊ธฐ](https://github.com/mrmr1993/vimium/tree/right-click-linkhint) ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 09์›” 24์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: philc/vimium

์ด๊ฒƒ์€ ์ƒ๋‹นํžˆ ์ˆ˜์š”๊ฐ€ ์ ์€ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ๊ณง ์ถœ์‹œ๋œ ๋ฒ„์ „์—์„œ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

_์›๋ž˜ https://github.com/philc/vimium/issues/874#issuecomment -63235870์˜ @ mrmr1993์ด ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ๊ฑฐ์˜ 1๋…„ ๋™์•ˆ Vimium์—์„œ ์ผํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๋‚˜๋ฅผ ํ–ฅํ•œ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค...

Chrome์˜ ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ๋ถ„๊ธฐ ๋Š” ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ ๋˜๋Š” contextmenu ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด click / mousedown / mouseup ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€๋กœ์ฑ„๋„๋ก ์„ค์ •๋œ javascript ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์›ํ•˜๋Š” ๊ฒฝ์šฐ ae829c8cf8d2bc507653451d9ad940dc5e47d96f(ํ•ด๋‹น ๋ถ„๊ธฐ์˜ ์ปค๋ฐ‹) ๋ฐ ํ˜„์žฌ ๋งˆ์Šคํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด๊ณ  ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • background_scripts/commands.coffee ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง์ ‘ ์ ์šฉ
  • lib/dom_utils.coffee ์ถ”๊ฐ€๋œ simulateContextMenuEvent ๋ณต์‚ฌ
  • ๋ฒ„ํŠผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ simulateClick ์ถ”๊ฐ€ํ•˜๊ณ (ํ•ด๋‹น ์ปค๋ฐ‹์—์„œ์™€ ๊ฐ™์ด) simulateMouseEvent ์—๋„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งˆ์ง€๋ง‰ 0 ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” mouseEvent.initMouseEvent ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ์กฐ๊ฑด๋ฌธ ์–ด๋”˜๊ฐ€์— button == 0 ์— ๋Œ€ํ•œ ์ˆ˜ํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
  • content_scripts/link_hints.coffee ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ๋ผ์ธ ๊ทผ์ฒ˜:
RIGHT_CLICK = 
  name: "right-click"
  indicator: "Right click"
  linkActivator: (link) ->
    DomUtils.simulateClick(link, {
      altKey: false,
      ctrlKey: false,
      metaKey: false }, 2)
    DomUtils.simulateContextMenuEvent link
  • content_scripts/link_hints.coffee available_modes ์— RIGHT_CLICK ์ถ”๊ฐ€
  • activateModeToTriggerRightClickAction (count) -> <strong i="37">@activateMode</strong> count, mode: RIGHT_CLICK ์˜ ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ๋ผ์ธ ๊ทผ์ฒ˜์— content_scripts/link_hints.coffee

๋‚˜๋Š” ์ด๊ฒƒ์— ๊ด€์—ฌํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ๋Œ€๋‹ตํ•˜์ง€ ์•Š๊ฒ ์ง€๋งŒ ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค!

๋ชจ๋“  3 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” ์œ„์˜ ๋ช…๋ น์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? vimium์—์„œ ๋งํฌ๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ํด๋ฆญํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

๋‚˜๋Š” ๊ฑฐ์˜ 1๋…„ ๋™์•ˆ Vimium์—์„œ ์ผํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๋‚˜๋ฅผ ํ–ฅํ•œ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค...

Chrome์˜ ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ๋ถ„๊ธฐ ๋Š” ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ ๋˜๋Š” contextmenu ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด click / mousedown / mouseup ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€๋กœ์ฑ„๋„๋ก ์„ค์ •๋œ javascript ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์›ํ•˜๋Š” ๊ฒฝ์šฐ ae829c8cf8d2bc507653451d9ad940dc5e47d96f(ํ•ด๋‹น ๋ถ„๊ธฐ์˜ ์ปค๋ฐ‹) ๋ฐ ํ˜„์žฌ ๋งˆ์Šคํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด๊ณ  ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • background_scripts/commands.coffee ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง์ ‘ ์ ์šฉ
  • lib/dom_utils.coffee ์ถ”๊ฐ€๋œ simulateContextMenuEvent ๋ณต์‚ฌ
  • ๋ฒ„ํŠผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ simulateClick ์ถ”๊ฐ€ํ•˜๊ณ (ํ•ด๋‹น ์ปค๋ฐ‹์—์„œ์™€ ๊ฐ™์ด) simulateMouseEvent ์—๋„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งˆ์ง€๋ง‰ 0 ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” mouseEvent.initMouseEvent ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ์กฐ๊ฑด๋ฌธ ์–ด๋”˜๊ฐ€์— button == 0 ์— ๋Œ€ํ•œ ์ˆ˜ํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
  • content_scripts/link_hints.coffee ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ๋ผ์ธ ๊ทผ์ฒ˜:
RIGHT_CLICK = 
  name: "right-click"
  indicator: "Right click"
  linkActivator: (link) ->
    DomUtils.simulateClick(link, {
      altKey: false,
      ctrlKey: false,
      metaKey: false }, 2)
    DomUtils.simulateContextMenuEvent link
  • content_scripts/link_hints.coffee available_modes ์— RIGHT_CLICK ์ถ”๊ฐ€
  • activateModeToTriggerRightClickAction (count) -> <strong i="37">@activateMode</strong> count, mode: RIGHT_CLICK ์˜ ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ๋ผ์ธ ๊ทผ์ฒ˜์— content_scripts/link_hints.coffee

๋‚˜๋Š” ์ด๊ฒƒ์— ๊ด€์—ฌํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ๋Œ€๋‹ตํ•˜์ง€ ์•Š๊ฒ ์ง€๋งŒ ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค!

+1 ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํŠนํžˆ vimium์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜๋งŽ์€ ์•ฑ์˜ ์›น ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์Šฌํ”„๊ฒŒ๋„ ์ผ๋ถ€๋Š” ์™„์ „ํžˆ ์ž‘๋™ํ•˜๋ ค๋ฉด ์˜ค๋ฅธ์ชฝ ํด๋ฆญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(Spotify๋ฅผ ๋ณด๊ณ  ์žˆ์Œ).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰