แžšแŸ€แž”แž…แŸ†แž‘แŸ†แž“แžถแž€แŸ‹แž‘แŸ†แž“แž„แžฏแž€แžŸแžถแžšแžŠแŸ‚แž›แž’แŸ’แž›แžถแž”แŸ‹แžŸแŸ’แž‚แžถแž›แŸ‹แž—แŸ’แž›แžถแž˜แŸ—

แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž€แžถแžšแž—แŸ’แž‡แžถแž”แŸ‹แžฏแž€แžŸแžถแžšแžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžท แž–แŸ„แž›แž‚แžบแž‡แŸ’แžšแžพแžŸแžšแžพแžŸแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แž“แžนแž„แž”แžพแž€แžฏแž€แžŸแžถแžšแž–แžธ Explorer/Finder แŸ” แž แžพแž™แžแŸ’แž‰แžปแŸ†แž…แŸ‚แž€แžšแŸ†แž›แŸ‚แž€แŸ”

แž”แž‰แŸ’แž แžถแžŠแŸ†แž”แžผแž„แŸ” แžฏแž€แžŸแžถแžšแžŠแŸ‚แž›แž˜แžถแž“แž•แŸ’แž“แŸ‚แž€แž”แž“แŸ’แžแŸ‚แž˜แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž€แžถแžšแž…แŸ’แžšแžพแž“แžแŸ‚แž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž”แžพแž€แžŠแŸ„แž™แžขแŸ’แžœแžธแž‘แžถแŸ†แž„แžขแžŸแŸ‹แžแžถแž˜แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜ แž แžพแž™แž”แŸ’แžšแžŸแžทแž“แž”แžพแžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž”แžพแž€ แž“แŸ„แŸ‡แžแžถแž˜แžšแž™แŸˆ iTunes แž˜แžฝแž™แž…แŸ†แž“แžฝแž“แŸ” แž“แŸ…แž€แŸ’แžšแŸ„แž˜แžœแžธแž“แžŠแžผ แž‘แŸ†แž“แžถแž€แŸ‹แž‘แŸ†แž“แž„แž…แžถแŸ†แž”แžถแž…แŸ‹ แž–แŸแž›แžแŸ’แž›แŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แž”แžถแžแŸ‹แž”แž„แŸ‹แž‘แžถแŸ†แž„แžŸแŸ’แžšแžปแž„แž“แŸ…แž–แŸแž›แžŠแŸ†แžกแžพแž„ (แžฌแžŸแžผแž˜แŸ’แž”แžธแžแŸ‚แž›แžปแž”) แž€แž˜แŸ’แž˜แžœแžทแž’แžธแŸ– แž–แŸแž›แžแŸ’แž›แŸ‡แžขแŸ’แž“แž€แž›แžปแž” GIMP แž แžพแž™แžฏแž€แžŸแžถแžš ico แžแŸ’แžšแžผแžœแž”แžถแž“แž™แž€แž–แžธแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž˜แžพแž›แžฏแž€แžŸแžถแžšแž’แž˜แŸ’แž˜แžแžถแž‘แŸ…แžœแžทแž…แžทแžแŸ’แžšแžŸแžถแž›แžšแžผแž”แžแžแžŸแŸ’แžแž„แŸ‹แžŠแžถแžšแŸ” แž แŸแžแžปแžขแŸ’แžœแžธ? แžŠแžพแž˜แŸ’แž”แžธแžขแŸ’แžœแžธ? แž˜แžทแž“โ€‹แžŸแŸ’แž‚แžถแž›แŸ‹... แž…แžปแŸ‡โ€‹แž”แžพโ€‹แžแŸ’แž‰แžปแŸ†โ€‹แžšแž€โ€‹แžƒแžพแž‰โ€‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธโ€‹แž“แžทแž–แž“แŸ’แž’โ€‹แžแŸ’แž˜แžธ แžฌโ€‹แžŠแŸ„แž™โ€‹แž แŸแžแžปแž•แž›โ€‹แž•แŸ’แžŸแŸแž„แŸ— แž€แžถแžšแžŠแŸ†แžกแžพแž„โ€‹แžแŸ’แž˜แžธ? แž…แžปแŸ‡แž”แžพแž˜แžถแž“แž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแž›แžพแžŸแž–แžธแž˜แžฝแž™? แž‡แžถแž‘แžผแž‘แŸ… แž€แžถแžšแž…แžปแž…แž€แžŽแŸ’แžแžปแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแžŸแž“แŸ’แž‘แž“แžถแž‚แžบแž‡แžถแž€แžถแžšแž€แž˜แŸ’แžŸแžถแž“แŸ’แžแž”แŸ‚แž”แž“แŸแŸ‡แŸ”

แž‡แŸ†แž“แžฝแžŸแž˜แž€แžœแžทแž‰ แžแŸ’แž‰แžปแŸ†แž”แžถแž“แžšแž€แŸ’แžŸแžถแž‘แžปแž€แžฏแž€แžŸแžถแžšแž–แžธแžšแž“แŸ…แž›แžพ Dropbox แž แžพแž™แžฅแžกแžผแžœแž“แŸแŸ‡แžแŸ’แž‰แžปแŸ†แžขแžถแž…แž“แžถแŸ†แž–แžทแž—แž–แž›แŸ„แž€แž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแžแŸ’แžšแžกแž”แŸ‹แž‘แŸ…แž’แž˜แŸ’แž˜แžแžถแžœแžทแž‰แž—แŸ’แž›แžถแž˜แŸ—แŸ” แž แžพแž™แžขแŸ’แžœแžธแžŠแŸ‚แž›แžขแŸ’แž“แž€แž”แžถแž“แž‘แž“แŸ’แž‘แžนแž„แžšแž„แŸ‹แž…แžถแŸ†แžขแžŸแŸ‹แž‡แžถแž…แŸ’แžšแžพแž“แž†แŸ’แž“แžถแŸ†แž˜แž€แž“แŸแŸ‡... แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แž‚แžบแž‡แžถแžšแžผแž”แž˜แž“แŸ’แžแžŸแž˜แŸ’แžšแžถแž”แŸ‹ Windows แž“แžทแž„ macOSแŸ”

แž”แŸ’แžšแž–แŸแž“แŸ’แž’แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžš Windows

แž“แŸ…แž€แŸ’แž“แžปแž„แž€แžปแž„แžŸแžผแž›แžœแžธแž“แžŠแžผ cmd.exe แž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แž’แŸ’แžœแžพแž‡แžถแž–แžธแžšแžŠแŸ†แžŽแžถแž€แŸ‹แž€แžถแž›แŸ–

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

แž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž˜แžถแž“แž”แŸ’แžšแžŸแžทแž‘แŸ’แž’แž—แžถแž–แž—แŸ’แž›แžถแž˜แŸ—แŸ” แž‘แŸ„แŸ‡แž”แžธแž‡แžถแž€แžถแžšแž–แžทแžแžŠแŸ‚แž›แžแžถแžŸแž˜แžถแž‚แž˜แžแŸ’แžšแžผแžœแž”แžถแž“แž…แžปแŸ‡แžˆแŸ’แž˜แŸ„แŸ‡แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แž€แŸแžŠแŸ„แž™แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž แŸแžแžปแž•แž›แž˜แžฝแž™แž…แŸ†แž“แžฝแž“แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž‘แžถแŸ†แž„แž“แŸแŸ‡แž…แžถแŸ†แž”แžถแž…แŸ‹แžแŸ’แžšแžผแžœแžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‡แžถแžขแŸ’แž“แž€แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แŸ” แž แžพแž™แž€แžปแŸ†แž—แŸ’แž›แŸแž…แž”แž„แŸ’แž€แžพแž“แž“แžทแž˜แžทแžแŸ’แžแžŸแž‰แŸ’แž‰แžถแž—แžถแž‚แžšแž™แž‘แŸ’แžœแŸแžŠแž„ (%%1) แž“แŸ…แž–แŸแž›แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž–แžธแžฏแž€แžŸแžถแžš bat แŸ” แž–แžทแž—แž–แžœแŸแž‘แž˜แž“แŸ’แžแž“แŸƒ 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 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

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹