āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻŽāĻŋāĻ¤āĻŋ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°ā§āĻ¨

āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸ā§‡āĻŸāĻŋāĻ‚ āĻĢāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻ¸ā§‹āĻ¸āĻŋāĻ¯āĻŧā§‡āĻļāĻ¨, āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻž āĻ¯āĻž āĻāĻ•ā§āĻ¸āĻĒā§āĻ˛ā§‹āĻ°āĻžāĻ°/āĻĢāĻžāĻ‡āĻ¨ā§āĻĄāĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻ–ā§āĻ˛āĻŦā§‡āĨ¤ āĻ†āĻ° āĻ†āĻŽāĻŋ āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻ•āĻ°āĻŋāĨ¤

āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĨ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ¸āĻš āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡ āĻ•āĻŋāĻ›ā§ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ–ā§‹āĻ˛āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ–ā§‹āĻ˛āĻž āĻšāĻ¯āĻŧ āĻ¤āĻŦā§‡ āĻ•āĻŋāĻ›ā§ āĻ†āĻ‡āĻŸāĻŋāĻ‰āĻ¨āĻ¸ āĻĻā§āĻŦāĻžāĻ°āĻžāĨ¤ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻœā§‡āĻ° āĻ…āĻ§ā§€āĻ¨ā§‡, āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ (āĻŦāĻž āĻāĻŽāĻ¨āĻ•āĻŋ āĻ†āĻ¨āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ) āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ—ā§āĻ˛āĻŋ āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧ: āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“ āĻ†āĻĒāĻ¨āĻŋ GIMP āĻ†āĻ¨āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ ico āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĢāĻžāĻ‡āĻ˛ āĻ­āĻŋāĻ‰āĻ¯āĻŧāĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĢāĻŸā§‹ āĻ—ā§āĻ¯āĻžāĻ˛āĻžāĻ°āĻŋāĻ¤ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻ•ā§‡āĻ¨? āĻ•āĻŋ āĻœāĻ¨ā§āĻ¯? āĻ…āĻœāĻžāĻ¨āĻž... āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ• āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻ‡ āĻŦāĻž, āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻžāĻ°āĻŖā§‡, āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ āĻĒāĻžāĻ‡? āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ° āĻĨāĻžāĻ•āĻ˛ā§‡ āĻ•āĻŋ āĻšāĻŦā§‡? āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, āĻ¸āĻ‚āĻ˛āĻžāĻĒā§‡ āĻ‡āĻāĻĻā§āĻ° āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°āĻž āĻ¯ā§‡āĻŽāĻ¨ āĻŦāĻŋāĻ¨ā§‹āĻĻāĻ¨āĨ¤

āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻ†āĻŽāĻŋ āĻĄā§āĻ°āĻĒāĻŦāĻ•ā§āĻ¸ā§‡ āĻĻā§āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻāĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ° āĻœāĻ—āĻ¤āĻ•ā§‡ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¨āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ¤ āĻŦāĻ›āĻ° āĻ§āĻ°ā§‡ āĻ•āĻŋāĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ›ā§‡āĻ¨... āĻāĻ° āĻĒāĻ°ā§‡ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻœ āĻāĻŦāĻ‚ āĻŽā§āĻ¯āĻžāĻ•ā§‹āĻ¸ā§‡āĻ° āĻ°ā§‡āĻ¸āĻŋāĻĒāĻŋāĨ¤

āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻœ

āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻœ āĻ•āĻ¨āĻ¸ā§‹āĻ˛ā§‡ cmd.exe āĻāĻŸāĻŋ āĻĻā§āĻŸāĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ:

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

āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻšāĻ¯āĻŧā§ˇ āĻ…ā§āĻ¯āĻžāĻ¸ā§‹āĻ¸āĻŋāĻ¯āĻŧā§‡āĻļāĻ¨āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŋāĻ¤ āĻšāĻ“āĻ¯āĻŧāĻž āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§‡āĻ“, āĻ•āĻŋāĻ›ā§ āĻ•āĻžāĻ°āĻŖā§‡ āĻāĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ• āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻžāĻŸ āĻĢāĻžāĻ‡āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻļāĻ¤āĻžāĻ‚āĻļ āĻšāĻŋāĻšā§āĻ¨ (%%1) āĻĻā§āĻŦāĻŋāĻ—ā§āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ­ā§āĻ˛āĻŦā§‡āĻ¨ āĻ¨āĻžāĨ¤ Windows 7 Ultimate 64-bit āĻāĻ° āĻœāĻžāĻĻā§āĻ•āĻ°ā§€ āĻœāĻ—āĻ¤â€Ļ

MacOS

MacOS-āĻ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻ¸ā§‹āĻ¸āĻŋāĻ¯āĻŧā§‡āĻļāĻ¨ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻ•āĻ°ā§āĻ¤āĻŦā§āĻ¯. āĻāĻŸāĻŋ āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ brew install duti. āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ:

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

āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻšāĻ¯āĻŧ, āĻ•ā§‹āĻ¨ sudo āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ "com.apple.TextEdit" āĻšāĻ˛ āĻ¤āĻĨāĻžāĻ•āĻĨāĻŋāĻ¤ "āĻŦāĻžāĻ¨ā§āĻĄā§‡āĻ˛ āĻ†āĻ‡āĻĄāĻŋ" āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ°āĨ¤ "āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ•" āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻšāĻ˛ āĻ…ā§āĻ¯āĻžāĻ¸ā§‹āĻ¸āĻŋāĻ¯āĻŧā§‡āĻļāĻ¨ā§‡āĻ° āĻ§āĻ°āĻ¨: āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ "āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ•", āĻĻā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ "āĻĻāĻ°ā§āĻļāĻ•", āĻ¸āĻŦāĻ•āĻŋāĻ›ā§āĻ° āĻœāĻ¨ā§āĻ¯ "āĻ¸āĻŦ"āĨ¤

āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡āĻ­āĻžāĻŦā§‡ "āĻŦāĻžāĻ¨ā§āĻĄā§‡āĻ˛ āĻ†āĻ‡āĻĄāĻŋ" āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨: āĻ¯āĻĻāĻŋ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° "/Applications/Sublime Text.app" āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ° āĻŦāĻžāĻ¨ā§āĻĄā§‡āĻ˛ āĻ†āĻ‡āĻĄāĻŋ āĻšāĻŦā§‡ "com.sublimetext.3", āĻŦāĻž āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨ā§‹:

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

MacOS āĻ¸āĻŋāĻ¯āĻŧā§‡āĻ°āĻžāĻ¤ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ (.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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨