안녕하세요.
컴퓨터를 사용하다 보면 화면을 캡쳐해서 캡쳐한 이미지를 사용해야 할 경우가 많습니다.
물론, 단축키를 지정해 클립보드로 저장, 파일로 저장을 별도로 할 수 있지만..
전 매번 단축키가 헷갈리기도 하고, 캡쳐하기 전에 신경써야 하는게 귀찮아서..
그냥 클립보드로 저장 단축키만 쓰는데..
캡쳐해서 다른 문서나 이미지에 붙여넣을땐 괜찮은데..
한번씩 캡쳐해서 바로 파일로 저장해야 할 경우 파인더에서 붙여넣기가 안돼서 불편했었는데..
바이브 코딩으로 하나 만들까 싶어서 클로드에게 물어보니..
이미 무료도구가 있더군요..
진작에 좀 알아볼껄 그랬네요.
편하고 좋습니다. ㅎㅎ
아래 코드 복사 붙여넣기 하셔서 첫번째 줄 경로에 파일 만들어 넣으시면 됩니다.
-- ~/.hammerspoon/init.lua
-- Finder에서 Cmd+V 로 클립보드 "이미지"를 현재 활성 Finder 창 폴더에 PNG 파일로 저장.
-- 클립보드에 이미지가 없으면(예: 복사한 파일/폴더) 원래 Cmd+V 동작을 그대로 통과시킨다.
-- 즉 "다른 기능 없이 Cmd+V 하나"만, 그것도 이미지일 때만 가로챈다.
local eventtap = hs.eventtap
local keycodes = hs.keycodes
-- 현재 최전면 Finder 창의 POSIX 경로 반환. 창이 없으면(데스크탑) 데스크탑 경로.
local function frontFinderPath()
local script = [[
tell application "Finder"
if (count of windows) > 0 then
try
return POSIX path of (target of front window as alias)
on error
return POSIX path of (path to desktop)
end try
else
return POSIX path of (path to desktop)
end if
end tell
]]
local ok, result = hs.osascript.applescript(script)
if ok and result and #result > 0 then
return result
end
return os.getenv("HOME") .. "/Desktop/"
end
-- 같은 이름 파일이 있으면 -1, -2 ... 붙여 충돌 회피
local function uniquePath(dir, base, ext)
if dir:sub(-1) ~= "/" then dir = dir .. "/" end
local path = dir .. base .. ext
local n = 1
while hs.fs.attributes(path) do
path = dir .. base .. "-" .. n .. ext
n = n + 1
end
return path
end
local function timestamp()
return os.date("%Y-%m-%d %H.%M.%S")
end
-- Cmd+V 가로채기
local pasteTap = eventtap.new({ eventtap.event.types.keyDown }, function(event)
-- 1) V 키인가
if event:getKeyCode() ~= keycodes.map["v"] then return false end
-- 2) Cmd 단독(Shift/Option/Ctrl 안 섞임)인가
if not event:getFlags():containExactly({ "cmd" }) then return false end
-- 3) 최전면 앱이 Finder 인가
local app = hs.application.frontmostApplication()
if not app or app:name() ~= "Finder" then return false end
-- 4) 클립보드에 이미지가 있는가 (없으면 원래 붙여넣기 통과)
local img = hs.pasteboard.readImage()
if not img then return false end
-- 현재 Finder 폴더에 PNG 저장
local dir = frontFinderPath()
local path = uniquePath(dir, "스크린샷 " .. timestamp(), ".png")
local saved = img:saveToFile(path) -- 확장자(.png)로 포맷 결정
if saved then
local name = path:match("[^/]+$")
hs.alert.show("📋 저장: " .. name)
-- 방금 저장한 파일을 Finder에서 선택해 바로 보이게
hs.timer.doAfter(0.15, function()
hs.osascript.applescript(string.format(
'tell application "Finder" to select (POSIX file "%s" as alias)',
path:gsub('"', '\\"')))
end)
else
hs.alert.show("⚠️ 이미지 저장 실패")
end
return true -- 원래 Cmd+V(파일 붙여넣기) 동작 차단
end)
pasteTap:start()
-- config 재로딩용: Cmd+Ctrl+R
hs.hotkey.bind({ "cmd", "ctrl" }, "r", function()
hs.reload()
end)
hs.alert.show("✅ Finder 이미지 붙여넣기 활성화")