반응형

Mac, Ubuntu, CentOS에서 Terminal을 사용하다보면, 알록달록 Color가 들어간 Text를 보게 된다.

이렇게 색이 들어간 글자를 만들려면, ANSI escape code라는 표준 기술을 활용해야 한다.

ANSI escape code에 관한 자세한 내용은 이 글의 끝 부분에 있는 Reference Web Docs를 보길~~~

 

간단하게 터미널의 글자에 색을 넣는 방법만 보면 아래와 같다.

 

Mac iTerm2 터미널에 글자 컬러 넣기

 

 

ANSI escape code 확인하는 C source code

각 ANSI code가 어떤 color, font, effect를 보여주는지 확인하고 싶다면, 아래와 같이 짧게 코드를 작성해서 돌려보면 바로 감(느낌)을 찾을 수 있다.

##
## File name:  main.c
##

#include <stdio.h>

int main(void)
{
  int i, j, n;

  for (i = 0; i < 11; i++) {
    for (j = 0; j < 10; j++) {
      n = 10*i + j;
      if (n > 108) break;
      printf("\033[%dm %3d\033[m", n, n);
    }
    printf("\n");
  }
  return 0;
}

 

위 C source code를 작성하고, 아래와 같이 gcc 명령으로 compile하고 실행해보면, 각 ANSI code의 숫자가 어떤 색을 표현하는지 알 수 있다.

 

ANSI escape code 확인하는 Python source code

각 ANSI code가 어떤 color, font, effect를 보여주는지 확인하고 싶다면, 아래와 같이 짧게 코드를 작성해서 돌려보면 바로 감(느낌)을 찾을 수 있다.

##
## File name:  main.py
##

import sys
for i in range(0, 16):
    for j in range(0, 16):
        code = str(i * 16 + j)
        sys.stdout.write(u"\u001b[38;5;" + code + "m " + code.ljust(4))
    print u"\u001b[0m"

 

위 Python source code를 작성하고, 아래와 같이 실행해보면, 각 ANSI code의 숫자가 어떤 색을 표현하는지 알 수 있다.

 

 

 

import sys
for i in range(0, 16):
    for j in range(0, 16):
        code = str(i * 16 + j)
        sys.stdout.write(u"\u001b[48;5;" + code + "m " + code.ljust(4))
    print u"\u001b[0m"

 

 

 

 

ANSI escape code의 역사, 표준 정보, Example 등 자세한 내용은 아래 Reference Web Docs를 참고하길 ~~~

 

Reference

 

ANSI escape code - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Method used for display options on video text terminals ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on

en.wikipedia.org

 

 

ASCII Art Archive

A large collection of ASCII art drawings and other related ASCII art pictures.

www.asciiart.eu

 

※ 아래 Web Docs는 CLI 만들기에 필요한 다양한 Trick과 Tip이 있다.

※ CLI에 Progress Bar, Processing Status, Percentile 등 효과를 넣고 싶다면 아래 Web Docs를 참고할 것 !!!

 

Build your own Command Line with ANSI escape codes

Build your own Command Line with ANSI escape codes Everyone is used to programs printing out output in a terminal that scrolls as new text appears, but that's not all your can do: your program can color your text, move the cursor up, down, left or right, o

www.lihaoyi.com

 

반응형

 


작성일: 2024년 1월 9일

 

Macbook에 USB Keyboard나 Bluetooth Keyboard를 연결해서 사용하다보면, 

Home과 End Key가 MS Windows와 달라서 불편하다.

 

Karabiner-Elements App을 설치하면 원하는대로 Key를 변경할 수 있지만, 나는 Macbook에 이것저것 App 설치하는 것이 싫어서 설정 파일을 직접 작성해서 Home, End Key 설정을 변경했다.

 

나중에 까먹고, 또 검색하느라 시간을 허비할 것 같아서 여기에 메모해둔다.

 

##  아래의 순서로 명령을 실행한다.

$ cd ~/Library
$ mkdir KeyBindings
$ cd KeyBindings
$ cat << EOF >> DefaultKeyBinding.dict
{
/* Remap Home / End */
"\UF729" = "moveToBeginningOfLine:"; /* Home */
"\UF72B" = "moveToEndOfLine:"; /* End */
"$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
"$\UF72B" = "moveToEndOfLineAndModifySelection:"; /* Shift + End */
}
EOF
$

위와 같인 .dict 파일을 생성했으면, Log Out하고 다시 Log In 한다. 

그러면 Home Key와 End Key의 설정이 바뀌어 있을 것이다.

 

더 자세한 내용은 아래 Git 문서를 참고하기.

https://gist.github.com/trusktr/1e5e516df4e8032cbc3d

 

My DefaultKeyBinding.dict for Mac OS X

My DefaultKeyBinding.dict for Mac OS X. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

위 Git 문서에서 중요한 부분만 발췌했다.

/* ~/Library/KeyBindings/DefaultKeyBinding.Dict

This file remaps the key bindings of a single user on Mac OS X 10.5 to more
closely match default behavior on Windows systems. This makes the Command key
behave like Windows Control key. To use Control instead of Command, either swap
Control and Command in Apple->System Preferences->Keyboard->Modifier Keys...
or replace @ with ^ in this file.

Here is a rough cheatsheet for syntax.
Key Modifiers
^ : Ctrl
$ : Shift
~ : Option (Alt)
@ : Command (Apple)
# : Numeric Keypad

Non-Printable Key Codes

Standard
Up Arrow:     \UF700        Backspace:    \U0008        F1:           \UF704
Down Arrow:   \UF701        Tab:          \U0009        F2:           \UF705
Left Arrow:   \UF702        Escape:       \U001B        F3:           \UF706
Right Arrow:  \UF703        Enter:        \U000A        ...
Insert:       \UF727        Page Up:      \UF72C
Delete:       \UF728        Page Down:    \UF72D
Home:         \UF729        Print Screen: \UF72E
End:          \UF72B        Scroll Lock:  \UF72F
Break:        \UF732        Pause:        \UF730
SysReq:       \UF731        Menu:         \UF735
Help:         \UF746

OS X
delete:       \U007F

For a good reference see http://osxnotes.net/keybindings.html.

NOTE: typically the Windows 'Insert' key is mapped to what Macs call 'Help'.
Regular Mac keyboards don't even have the Insert key, but provide 'Fn' instead,
which is completely different.
*/

{
    "@\UF72B"  = "moveToEndOfDocument:";                         /* Cmd  + End   */
    "~@\UF703" = "moveToEndOfDocument:";                         /* Cmd + Option + Right Arrow */

    "@$\UF72B" = "moveToEndOfDocumentAndModifySelection:";       /* Shift + Cmd  + End */

    "@\UF729"  = "moveToBeginningOfDocument:";                   /* Cmd  + Home  */
    "~@\UF702" = "moveToBeginningOfDocument:";                   /* Cmd + Option + Left Arrow */

    "@$\UF729" = "moveToBeginningOfDocumentAndModifySelection:"; /* Shift + Cmd  + Home */

    "\UF729"   = "moveToBeginningOfLine:";                       /* Home         */
    "~\UF702"  = "moveToBeginningOfLine:";                       /* Option + Left Arrow */

    "$\UF729"  = "moveToBeginningOfLineAndModifySelection:";     /* Shift + Home */
    "$~\UF702" = "moveToBeginningOfLineAndModifySelection:";     /* Shift + Option + Right Arrow */

    "\UF72B"   = "moveToEndOfLine:";                             /* End          */
    "~\UF703"  = "moveToEndOfLine:";                             /* Option + Right Arrow */

    "$\UF72B"  = "moveToEndOfLineAndModifySelection:";           /* Shift + End  */
    "$~\UF703" = "moveToEndOfLineAndModifySelection:";           /* Shift + Option + Left Arrow  */

    "\UF72C"   = "pageUp:";                                      /* PageUp       */
    "\UF72D"   = "pageDown:";                                    /* PageDown     */
    "$\UF728"  = "cut:";                                         /* Shift + Del  */
    "$\UF727"  = "paste:";                                       /* Shift + Ins */
    "@\UF727"  = "copy:";                                        /* Cmd  + Ins  */
    "$\UF746"  = "paste:";                                       /* Shift + Help */
    "@\UF746"  = "copy:";                                        /* Cmd  + Help (Ins) */

    "~j"       = "moveBackward:";                                /* Option + j */
    "~l"       = "moveForward:";                                 /* Option + l */
    "~i"       = "moveUp:";                                      /* Option + i */
    "~k"       = "moveDown:";                                    /* Option + k */

    "@~i"      = ("moveUp:","moveUp:","moveUp:","moveUp:","moveUp:","moveUp:","moveUp:","moveUp:",);                            /* Cmd + Option + j */
    "@~k"      = ("moveDown:","moveDown:","moveDown:","moveDown:","moveDown:","moveDown:","moveDown:","moveDown:",);                            /* Cmd + Option + j */

    "@\UF702"  = "moveWordBackward:";                            /* Cmd  + LeftArrow */
    "@~j"      = "moveWordBackward:";                            /* Cmd + Option + j */
    "@\U007F"  = "deleteWordBackward:";                          /* Cmd  + Backspace */

    "@\UF703"  = "moveWordForward:";                             /* Cmd  + RightArrow */
    "@~l"      = "moveWordForward:";                             /* Cmd + Option + l */
    "@\UF728"  = "deleteWordForward:";                           /* Cmd  + Delete */

    "@$\UF702" = "moveWordBackwardAndModifySelection:";          /* Shift + Cmd  + Leftarrow */
    "@$\UF703" = "moveWordForwardAndModifySelection:";           /* Shift + Cmd  + Rightarrow */
}

 


 

반응형

들어가는 말

Kubernetes 명령 도구인 'kubectl'을 사용하다보면, 수많은 타이핑 때문에 손가락이 아프고, 전체 명령어를 다 외울 수 없어서 명령을 입력하다가 주저하는 경우가 있다.

이럴 때, kubectl bash auto-completion 기능을 활용하면 명령어 입력하는 것이 한결 쉬워진다.

kubectl의 auto-completion 기능에 대해서 설명한 Web docs는 많은데, 대부분 Ubuntu, CentOS 환경에서 사용하는 것을 가정하고 설명하다보니, Mac에서 Web docs의 설명과 같이 따라해보면 안 된다.

 

Bash 버전부터 업그레이드

2021년 현재 macOS에 기본 설치된 Bash는 v3.2이다. 이 Bash를 v4.1+으로 Upgrade해야 한다.

주의: Bash v3.2로는 kubectl auto-completion을 사용할 수 없다

MacOS에서 Bash를 upgrade하는 절차는 아래 Web docs에 잘 설명되어 있으므로, 이 순서를 따른다.

Upgrading Bash on macOS

 

위 Web docs를 명령만 요약해보면 이렇다.

##
## brew 명령으로 bash를 설치한다.
##
$  brew install bash
...
...

$  which -a bash
/usr/local/bin/bash
/bin/bash

$  /usr/local/bin/bash --version
GNU bash, version 5.1.8(1)-release (x86_64-apple-darwin20.3.0)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

##
## /etc/shells에 '/usr/local/bin/bash'를 추가한다.
##
$  sudo vim /etc/shells
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash       ## 이 라인을 추가한다.

##
## Set default shell
##
$  chsh -s /usr/local/bin/bash

## TODO: 위 chsh 명령을 수행한 후에
##       반드시 기존 iTerm2 터미널을 종료하고, 새로운 iTerm2 터미널을 열어야 
##       새로운 버전의 bash 명령을 사용할 수 있다.

$  echo $BASH_VERSION
5.1.8(1)-release

 

Bash auto-completion

MacOS에 설치된 Bash가 v4.1+ 인 것을 확인했다면, 아래 Web docs를 따라서 설정해주면 모든 것이 끝!

bash auto-completion on macOS

위 Web Site의 Docs를 읽으면서, 아래 내가 작성한 문서를 비교하면서 작업해야 한다. 

위 Web Docs만 따라하면 bash 패키지 설치 디렉토리가 설치 대상 장비마다 달라서, 잘못된 설정을 하게 된다.

##
## 아래 문서를 따라서 설정할 때, 주의할 점이 있다.
## https://kubernetes.io/docs/tasks/tools/included/optional-kubectl-configs-bash-mac/
## 위 문서의 설명을 따라하다보면, bash-completion@2를 설치하고 나서, 
## .bash_profile에 바로 bash_completion.sh 정보를 작성하라고 되어 있는데
## 이때, Web Docs에 있는 것을 Copy & Paste하면 안 된다.
## 왜냐고?
## bash-completion@2가 minor 버전이 릴리즈될 때마다 설치 디렉토리가
##   - /usr/local/etc/... 인 경우가 있고,
##   - /opt/homebrew/...  인 경우가 있기 때문에
## Web Docs만 따라하면 제대로 설정할 수 없다.
## 따라서 아래 설치 명령의 제일 밑에 출력되는 내용을 copy해서 .bash_profile에 붙여 넣어야 한다.
## 즉, 결론적으로
## Kubernetes의 Web Docs는 전체 절차만 이해하는 수준으로 읽고,
## 아래 명령의 출력 결과에 나오는 안내 글을 읽고 따라서 설정 작업을 해야 잘 동작한다.
##

$  brew install bash-completion@2
... 중간 생략 ...

## 주의: 바로 이 안내 글을 꼭 주의깊게 읽고, .bash_profile 설정 작업을 해야 한다.

Add the following line to your ~/.bash_profile:
  [[ -r "/opt/homebrew/etc/profile.d/bash_completion.sh" ]] && . "/opt/homebrew/etc/profile.d/bash_completion.sh"
==> Summary
🍺  /opt/homebrew/Cellar/bash-completion@2/2.11: 753 files, 1MB
$

 

 

 

블로그 작성자: sejong.jeonjo@gmail.com

+ Recent posts