рддреБрд░реБрдиреНрддреИ рдкрд░рд┐рдЪрд┐рдд рдлрд╛рдЗрд▓ рд╕рдВрдШрд╣рд░реВ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реЗрдЯрд┐рдЩ рдлрд╛рдЗрд▓ рдПрд╕реЛрд╕рд┐рдПрд╢рдирд╣рд░реВ, рддреНрдпреЛ рд╣реЛ, рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░/рдлрд╛рдЗрдиреНрдбрд░рдмрд╛рдЯ рдлрд╛рдЗрд▓ рдЦреЛрд▓реНрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрдпрди рдЧрд░реНрджреИред рд░ рд╕рд╛рдЭрд╛ рдЧрд░реНрдЫреБред

рдкрд╣рд┐рд▓реЗ рд╕рдорд╕реНрдпрд╛рд╣рд░реВред рдЖрд╡рд╢реНрдпрдХ рдПрдХреНрд╕рдЯреЗрдиреНрд╕рди рднрдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рд╛рдпрдГ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдХреБрдиреИ рдкрдирд┐ рдХреБрд░рд╛рд▓реЗ рдЦреЛрд▓реНрджреИрдирдиреН, рд░ рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рдЦреЛрд▓рд┐рдПрдХрд╛ рдЫрдиреН рднрдиреЗ, рдХреЗрд╣реА iTunes рджреНрд╡рд╛рд░рд╛ред рд╡рд┐рдиреНрдбреЛрдЬ рдЕрдиреНрддрд░реНрдЧрдд, рдкреНрд░реЛрдЧреНрд░рд╛рдорд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджрд╛ (рд╡рд╛ рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдЧрд░реНрджрд╛) рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдЖрд╡рд╢реНрдпрдХ рд╕рдЩреНрдЧрдардирд╣рд░реВ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╣рд░рд╛рдЗрдиреНрдЫ: рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рддрдкрд╛рдИрдВрд▓реЗ GIMP рдЕрдирдЗрдиреНрд╕реНрдЯрд▓ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рд░ ico рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдп рдлрд╛рдЗрд▓ рджрд░реНрд╢рдХрдмрд╛рдЯ рдорд╛рдирдХ рдлреЛрдЯреЛ рдЧреНрдпрд╛рд▓реЗрд░реАрдорд╛ рд▓рд┐рдЗрдиреНрдЫред рдХрд┐рди? рдХреЗ рдХреЛ рд▓рд╛рдЧрд┐? рдЕрдЬреНрдЮрд╛рдд... рдХреЗ рд╣реБрдиреНрдЫ рдпрджрд┐ рдореИрд▓реЗ рдирдпрд╛рдБ рд╕рдореНрдкрд╛рджрдХ рдлреЗрд▓рд╛ рдкрд╛рд░реЗ рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгрд▓реЗ, рдирдпрд╛рдБ рд╕реНрдерд╛рдкрдирд╛? рдПрдХрднрдиреНрджрд╛ рдмрдвреА рдХрдореНрдкреНрдпреБрдЯрд░ рднрдП рдХреЗ рд╣реБрдиреНрдЫ? рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╕рдВрд╡рд╛рджрд╣рд░реВрдорд╛ рдореБрд╕рд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБ рднрдиреЗрдХреЛ рдордиреЛрд░рдЮреНрдЬрди рд╣реЛред

рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛, рдореИрд▓реЗ рдбреНрд░рдкрдмрдХреНрд╕рдорд╛ рджреБрдИ рдлрд╛рдЗрд▓рд╣рд░реВ рдмрдЪрдд рдЧрд░реЗрдВ рд░ рдЕрдм рдо рдХрдореНрдкреНрдпреБрдЯрд░ рд╕рдВрд╕рд╛рд░рд▓рд╛рдИ рддреБрд░реБрдиреНрддреИ рд╕рд╛рдорд╛рдиреНрдпрдорд╛ рд▓реНрдпрд╛рдЙрди рд╕рдХреНрдЫреБред рд░ рддрдкрд╛рдИрд▓реЗ рдзреЗрд░реИ рд╡рд░реНрд╖рджреЗрдЦрд┐ рдХреЗ рдкрд░реНрдЦрд┐рд░рд╣рдиреБ рднрдПрдХреЛ рдЫ... рдЕрд░реНрдХреЛ рд╡рд┐рдиреНрдбреЛрдЬ рд░ macOS рдХреЛ рд▓рд╛рдЧрд┐ рд░реЗрд╕рд┐рдкреА рд╣реЛред

Windows

рд╡рд┐рдиреНрдбреЛрдЬ рдХрдиреНрд╕реЛрд▓рдорд╛ cmd.exe рдпреЛ рджреБрдИ рдЪрд░рдгрд╣рд░реВрдорд╛ рдЧрд░рд┐рдиреНрдЫ:

ftype my_file_txt="C:Windowsnotepad.exe" "%1"
assoc .txt=my_file_txt

рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рддреБрд░реБрдиреНрддреИ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫрдиреНред рддрдереНрдпрдХреЛ рдмрд╛рд╡рдЬреБрдж рд╕рдВрдШ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рджрд░реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдХреЗрд╣рд┐ рдХрд╛рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдпреА рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рд╢рд╛рд╕рдХрдХреЛ рд░реВрдкрдорд╛ рдЪрд▓рд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд░ рдмреНрдпрд╛рдЯ рдлрд╛рдЗрд▓рдмрд╛рдЯ рдЪрд▓реНрджрд╛ рдкреНрд░рддрд┐рд╢рдд рдкреНрд░рддреАрдХ (%%1) рджреЛрдмреНрдмрд░ рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реНред Windows 7 Ultimate 64-bit рдХреЛ рдЬрд╛рджреБрдИ рд╕рдВрд╕рд╛рд░тАж

MacOS

MacOS рдорд╛ рдпреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдВрдШрд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫ dutiред рдорд╛рд░реНрдлрдд рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ brew install dutiред рдкреНрд░рдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:

duti -s com.apple.TextEdit .txt "editor"

рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рддреБрд░реБрдиреНрддреИ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫрдиреН, рдХреБрдиреИ sudo рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред рдпрд╣рд╛рдБ рддрд░реНрдХ "com.apple.TextEdit" рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдордХреЛ рддрдерд╛рдХрдерд┐рдд "рдмрдиреНрдбрд▓ рдЖрдИрдбреА" рд╣реЛред "рд╕рдореНрдкрд╛рджрдХ" рддрд░реНрдХ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдкреНрд░рдХрд╛рд░ рд╣реЛ: рд╕рдореНрдкрд╛рджрдирдХреЛ рд▓рд╛рдЧрд┐ "рд╕рдореНрдкрд╛рджрдХ", рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ "рджрд░реНрд╢рдХ", рд╕рдмреИ рдХреБрд░рд╛рдХреЛ рд▓рд╛рдЧрд┐ "рд╕рдмреИ"ред

рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд░реА "рдмрдиреНрдбрд▓ рдЖрдИрдбреА" рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: рдпрджрд┐ рддреЗрд╕реНрд░реЛ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ "/Applications/Sublime Text.app" рдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рдХреЛ рдмрдиреНрдбрд▓ ID "com.sublimetext.3", рд╡рд╛ рдЕрдиреНрдп рдХреБрдиреИ рдПрдХ рд╣реБрдиреЗрдЫ:

> osascript -e 'id of app "Sublime Text"'
com.sublimetext.3

macOS Sierra рдорд╛ рдкрд░реАрдХреНрд╖рдг рдЧрд░рд┐рдпреЛред

Windows (.bat) рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреНрддрд┐рдо рд▓рд┐рдкрд┐

@echo off

set XNVIEW=C:Program Files (x86)XnViewxnview.exe
set SUBLIME=C:Program FilesSublime Text 3sublime_text.exe
set FOOBAR=C:Program Files (x86)foobar2000foobar2000.exe

call :assoc_ext "%SUBLIME%" txt md js json css java sh yaml
call :assoc_ext "%XNVIEW%" png gif jpg jpeg tiff bmp ico
call :assoc_ext "%FOOBAR%" flac fla ape wav mp3 wma m4a ogg ac3

goto :eof

:assoc_ext
  set EXE=%1
  shift
  :loop
  if "%1" neq "" (
    ftype my_file_%1=%EXE% "%%1"
    assoc .%1=my_file_%1
    shift
    goto :loop
  )
goto :eof

macOS (.sh) рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреНрддрд┐рдо рд▓рд┐рдкрд┐

#!/bin/bash

# this allows us terminate the whole process from within a function
trap "exit 1" TERM
export TERM_PID=$$

# check `duti` installed
command -v duti >/dev/null 2>&1 || 
  { echo >&2 "duti required: brew install duti"; exit 1; }

get_bundle_id() {
    osascript -e "id of app """ || kill -s TERM $TERM_PID;
}

assoc() {
    bundle_id=$1; shift
    role=$1; shift
    while [ -n "$1" ]; do
        echo "setting file assoc: $bundle_id .$1 $role"
        duti -s "$bundle_id" "." "$role"
        shift
    done
}

SUBLIME=$(get_bundle_id "Sublime Text")
TEXT_EDIT=$(get_bundle_id "TextEdit")
MPLAYERX=$(get_bundle_id "MPlayerX")

assoc "$SUBLIME" "editor" txt md js jse json reg bat ps1 cfg sh bash yaml
assoc "$MPLAYERX" "viewer" mkv mp4 avi mov webm
assoc "$MPLAYERX" "viewer" flac fla ape wav mp3 wma m4a ogg ac3

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди