մաս առաջին՝ պատմական ակնարկ
դեռ 19֊րդ դարում օգտագործւում էր մորզէ կոդը՝ տեղեկատւութիւն տեղափոխելու համար։ մորզէն տպւում էր ոչ թէ a4
թղթերի վրայ, այլ թղթէ ժապաւէնի։ եւ խնդիր կար տողերն առանձնացնելու։ այդ համար օգտագործւում էր BT
յաջորդականութիւնը։ նշանակում էր՝ breat text
։ այսպէս էլ գրում էին տեքստի մէջ՝ BT
՝ բնաւ ոչ անտեսանելի։
յետոյ, երբ եկաւ տելետայպների եւ թուանշային գրամեքենաների ժամանակը, այդ տեսակ նիշերը թաքցուեցին, դարձան անտեսանելի։
այսպիմի նիշերից մէկն ա cr
֊ն, որը նշանակում ա՝ carriage return
՝ կրողի վերադարձ։ եթէ տեսել էք տպագրական մեքենայ, գուցէ նկատել էք որ մեքենայի մի մասը կրում ա թուղթը։
տպելիս կրող մասը շարժւում ա աջից ձախ (քանի որ մենք գրում ենք ձախից աջ) որ ամէն նոր նիշը տպուած լինի թղթի նոր տեղում։
եւ երբ տողն աւարտուած ա լինում, պէտք ա վերադարձնել թուղթը ելքային դիրք։
թուանշային տպագրական մեքենաներում այդ համար մտածել են հատուկ անտեսանելի նշան, անունը՝ cr
, որ երբ մեքենան հանդիպի այն, կրողը կը վերադարձնի թուղթը ելքային դիրք։ այդ անտեսանելի նիշի համարը ascii
աղիւսակում տասականով 13 ա, իսկ տասնվեցականով՝ 0d։
windows
֊ում տողադարձը նշւում ա երկու անտեսանելի նիշով, cr
ու lf
։ վերջինը նշանակում ա՝ line feed
։ եթէ cr
֊ը վերադարձնում ա թուղթը աջ, կամ հետեւաբար կուրսորը՝ ձախ, ապա lf
֊ն բարձրացնում ա տողը, կամ կարգիչներում՝ իջեցնում կուրսորը։
այս անտեսանելի նիշի համարն ա, տասականով՝ 10, տասնվեցականով՝ 0a։
իսկ իւնիքս համակարգերում ձեւաւորուեց այլ աւանդոյթ՝ ամէն տողի վերջում երկու բայթ չզբաղեցնելու համար պարզապէս օգտագործուել ա lf
֊ն՝ որպէս տողադարձի նշան, տողի վերջի նշան։
գոյութիւն ունի եւ երրորդ աւանդոյթ՝ գրել միայն cr
եւ հասկանալ նոյնը՝ տողադարձ։
այդպէս էր ընդունուած անել commodore
, spectrum
դասական ութ բիթանի համակարգիչներում, ու գուցէ այդ պատճառոջ էլ այդպէս էր ընդունուած apple ][
֊ում, իսկ հետագայում՝ macintosh
համակարգում։ խօսքը հին, այսօր «դասական» կոչուած macos
֊ի մասին ա։ cr
֊ն նաեւ օգտագործւում էր այսպէս կոչուած «լիսպ մեքենաներում», եւ՝ «օբերոն» օպերացիոն համակարգում։
նոյնիսկ վերջին թարմացման ժամանակ, project oberon 2013
֊ում, վիրտը կրկին օգտագործել ա 0d
֊ն որպէս տողի աւարտի նշան։
ահա, այս նիշքի սկզբում գրուած ա՝
TAB = 9X; CR = 0DX;
TextTag = 0F1X;
replace* = 0; insert* = 1; delete* = 2; unmark* = 3; (*op-codes*)
եւ գրել ա յատուկ Tools.convert() ֆունկցիան, որպէսզի 0d
տողադարձով նիշքերը փոխակերպի հրապարակման համար։
մինչ այդ, lilith
համակարգիչներում, ըստ երեւոյթին օգտագործւում էր lfcr
յաջորդականութիւնը՝ 0d
յետոյ 0a
։ յամենայն դէպս օրիգինալ կոմպիլեատորի ելատեքստում այդպէս ա։
այսպիսի փախած կոդաւորում էր միայն առաջին arm
համակարգիչներից մէկում՝ acorn bbc
֊ում, որ աշխատում էր risc os
֊ով։ այսօր risc os
֊ը կարելի ա օգտագործել raspberry pi
֊երի վրայ, զի arm
ա։
մաս երկրորդ՝ խնդիր եւ լուծում
իմ խնդիրն էր՝ ես ուզում էի խմբագրել, աշխատել օբերոն համակարգի ելատեքստերի վրայ եւ կարողանալ օգտագործել որեւէ control revision
կոդի համար։
օբերոն նիշքերն ունեն երկու հիմնական խնդիր՝
- առաջին տողը պարունակում ա բացատից փոքր համարով (տասական 32) նիշեր, ու
git
֊ն ընկալում ա ֆայլը որպէս բինար - տողադարձն, ինչպէս գիտենք,
cr
ա։
ի՞նչ եմ ուզում՝ ուզում եմ կարողանալ կոնսոլում անել git diff
ու համեմատել վարկածները։ որ github
֊ի, gitlab
֊ի, gitea
֊ի վեբ ինտերֆէյսները կը կարողանան ցոյց տալ ռեւիզիաների տարբերութիւնները՝ յոյս չէի փայփայում։ կոնսոլում աշխատի՝ լաւ ա։
git
֊ն ունի երկու մեզ հետաքրքիր հնարաւորութիւն՝ text
ու diff
։
text
֊ն այն մասին ա, ինչպէ՞ս պահել, ներմուծել նիշքը git
֊ի տուեալների բազա (այն որ .git
պանակի մէջ ա)։
diff
֊ն այն մասին՝ ինչպէս համեմատել տողեր։
ես սկզբից դա չէի հասկացել, ու փորձում էի աւելացնել .gitattributes
նիշքի մէջ՝
*.Mod text
*.Mod eol=cr
text eol=cr
առաջին տողով ուզում էի ասել, որ ֆայլը բինար չէ։ պարզուեց՝ անիմաստ, զի յետոյ հասկացայ, որ դա ընդամէնը կապ ունի նրա հետ, ինչպէս տեքստը լցնել տուեալների բազայի մէջ՝ կոնուերտե՞լ տողադարձը lf
թէ՞ չէ։ ըստ որում, պարզւում ա, cr
տարբերակը git
֊ը չի հասկանում։ կարելի ա ասել՝ crlf
, բայց մեր դէպքը ելատեքստում նախատեսուած չի։
նաեւ փորձեցի արդեօք կաշխատի diff
֊ը։ .gitattributes
֊ում այսպիսի տող փորձեցի՝
*.Mod diff eol=cr
ու չօգնեց, զի կրկին՝ cr
կարգաւորումը նախատեսուած չի, handle
չի լինում, ելատեքստում չկայ։
ահա այսպէս էր տարբերութիւնը ցոյց տալիս՝
ամբողջ ֆայլի պարունակութիւնը մի վարկածից ու մի տողով, ու յետոյ ամբողջ միւս ֆայլի պարունակութիւնը, մի տողով։
արդէն յուսահատուել էի։ git
֊ը կարգաւորում չունի։ մտածեցի՝ կարո՞ղ ա mercurial
֊ն ունենայ։
արագ գտայ, որ mercurial
֊ն ունի eol extension բայց, աւաղ՝
Older versions of Mac OS used CR (\r), but Mac OS X is Unix and uses LF. This extension does not support the old CR format.
չկպաւ։ :/
մտածեցի՝ բայց հին մակօսի կոդերի հետ մի ձեւ աշխատում են չէ՞։ ու սկսեցի փնտրել։ եւ գտայ այս շղթան։
այնտեղ առաջարկւում էր ստեղծել զտիչ՝ convert-cr
անունով, ու սահմանել այն։ նաեւ առանձին մեկնաբանութիւնը վերաբերում ա diff
֊ի համար կարգաւորմանը։
փորձում եմ, ինչպէս խորհուրդ ա տրւում, աւելացնել .git/config
նիշքում՝
[filter "convert-cr"]
clean = tr '\r' '\n'
smudge = tr '\n' '\r'
բայց ապա յետոյ git
֊ը չի աշխատում, ասում ա՝ կոնֆիգում սխալ կայ։
fatal: bad config line 13 in file .git/config
մտածում եմ, ո՞նց անել։
յետոյ ջոկեցի՝ աւելացրի հրամանային տողից այսպէս՝
git config filter.convert-cr.clean "tr '\r' '\n'"
git config filter.convert-cr.smudge "tr '\n' '\r'"
իսկ այս տողը շղթայում այսպէս էլ տուեցին՝
git config diff.cr.textconv "tr '\r' '\n' <"
դրանից ջոկեցի ինչպէս անել։
ահա, փաստօրէն .git/config
֊ում աւելացրել եմ՝
[diff "cr"]
textconv = tr '\\r' '\\n' <
[filter "convert-cr"]
clean = tr '\\r' '\\n'
smudge = tr '\\n' '\\r'
հետեւեալ հրամաններով՝
git config diff.cr.textconv "tr '\r' '\n' <"
git config filter.convert-cr.clean "tr '\r' '\n'"
git config filter.convert-cr.smudge "tr '\n' '\r'"
.gitattributes
֊ում գրեցի՝
*.Mod filter=convert-cr
*.Text filter=convert-cr
փորձեցի կրկին քոմիթ անել, ու համեմատել քոմիթը՝ չկպաւ։
ապա յիշեցի, այս անգամ աւելացրի .gitattributes
֊ում՝ *.Mod diff eol=cr
ու այն այսպիսի տեսք ունեցաւ՝
*.Mod filter=convert-cr
*.Text filter=convert-cr
*.Mod diff eol=cr
ու հա՛, աշխատե՛ց։
հիմա կարող եմ օբերոն ֆայլերի հետ գործ անել։
#օբերոն #էկրանահան #գիտ #ծրագրաւորում #պատմութիւն #հետազօտութիւն #տեք #կարգաւորում #ձեռնարկ #կարգիչ