Profile img

이광효

@widehyo@hackers.pub · 1 following · 5 followers

터미널 실행시 첫 화면을 커스텀해보자

이광효 @widehyo@hackers.pub

WSL2 환경에서 C 드라이브와 같은 주요 디스크의 사용량을 효율적으로 관리하기 위해 터미널 접속 시마다 상태를 시각화해 보여주는 자동화 대시보드 구축 과정을 다룹니다. 리눅스의 df 명령어를 awk 스크립트로 전처리하여 데이터를 추출하고, 이를 경량 데이터베이스인 SQLite에 저장하여 일별 사용량 추이를 기록하는 체계를 마련합니다. 데이터 기록을 위한 셸 스크립트를 작성한 뒤, 저장된 정보를 바탕으로 터미널에서 막대그래프 형태의 바 플롯(bar plot)을 출력하는 대시보드 기능을 구현합니다. 마지막으로 ~/.bashrc 설정을 통해 터미널을 열 때마다 자동으로 최신 디스크 상태를 기록하고 확인할 수 있도록 자동화함으로써, 불필요한 파일 정리 시점을 직관적으로 파악하고 시스템 자원을 효율적으로 관리할 수 있는 환경을 제공합니다.

Read more →
1

terminal buffer를 통한 pwd sync

이광효 @widehyo@hackers.pub

이 글은 Vim의 `:terminal` 커맨드를 활용하여 터미널 버퍼를 효율적으로 사용하는 방법에 대한 여정을 담고 있습니다. `:terminal`로 열리는 터미널 버퍼는 `Terminal-Job`과 `Terminal-Normal` 모드를 지원하며, `tmap`을 통해 제어할 수 있습니다. 특히 `terminal-api`를 이용하면 터미널 모드에서 Vimscript를 호출하여 Vim의 기능을 확장할 수 있습니다. 글에서는 터미널 버퍼의 현재 디렉터리를 Vim의 현재 디렉터리와 동기화하는 방법, 그리고 이를 자동화하는 과정을 상세히 설명합니다. `.bashrc` 설정과 Vimscript 함수를 결합하여 터미널에서 파일 시스템을 탐색할 때마다 Vim의 현재 디렉터리도 함께 변경되도록 구성합니다. 또한, 내장 셸(`:sh`)과의 전환, REPL 환경에서의 사용, 일회성 명령 실행 등 다양한 사용 사례를 고려하여 터미널 사용 모드를 전환하는 기능까지 구현합니다. 이 포스팅은 Vim의 터미널 기능을 깊이 있게 활용하고자 하는 사용자에게 유용한 팁과 실질적인 설정 방법을 제공하며, Vim과 터미널을 더욱 긴밀하게 통합하여 생산성을 높이는 데 기여합니다.

Read more →
3

vim popup으로 floating window를 사용해보자

이광효 @widehyo@hackers.pub

Vim 8 이상에서 제공하는 `popup` 기능을 활용하여 플로팅 윈도우를 만드는 방법을 소개합니다. 특히 `popup_menu()`를 사용하여 리스트를 팝업 메뉴로 표시하고, `callback` 함수로 팝업 종료 동작을 변경하거나 `filter`를 통해 키 입력을 제어하는 방법을 설명합니다. Less 바인딩, visual mode, yank 기능을 포함한 `filter` 예시를 통해 `echomsg` 디버깅 내용을 쉽게 복사할 수 있도록 합니다. 또한, Ex 명령어나 시스템 명령의 결과를 플로팅 윈도우에서 편리하게 확인하는 함수를 제시하고, 자주 사용하는 명령에 대한 키 매핑 설정 방법을 안내합니다. Neovim에서는 플로팅 윈도우를 더 편리하게 사용할 수 있으며, Lua 스크립트를 통해 동일한 기능을 구현하는 방법을 소개합니다. 이를 통해 Vim과 Neovim에서 플로팅 윈도우를 활용하여 작업 효율성을 높일 수 있습니다.

Read more →
2

NFA를 이용한 정규표현식 구현

이광효 @widehyo@hackers.pub

이 글은 톰슨의 구성을 사용하여 정규표현식을 구현하는 과정을 상세히 설명합니다. 정규표현식을 후위표현식으로 변환하고, 이를 바탕으로 NFA(Non-deterministic Finite Automata) state diagram을 만드는 핵심 단계를 다룹니다. Aho-corasick 알고리즘과의 유사점을 언급하며, tri 구조에서 state diagram으로의 발전된 자료 구조 사용을 강조합니다. 코드 예시와 함께 `split` 및 `match` 노드를 포함한 special node와 정규표현식 operator에 대응하는 NFA fragment를 시각적으로 제시하여 이해를 돕습니다. 특히, 파이썬으로 구현된 `post2nfa` 함수는 후위표현식을 state로 변환하는 방법을 설명하며, `re2post` 함수는 정규표현식을 후위표현식으로 변환하는 과정을 상세히 다룹니다. 마지막으로, graphviz를 사용하여 NFA diagram을 시각화하는 방법을 제시하며, 실제 정규표현식 예제에 대한 결과물을 제공합니다. 이 글을 통해 독자는 정규표현식 엔진의 핵심 원리를 이해하고, NFA를 이용한 패턴 매칭 구현에 대한 깊이 있는 통찰력을 얻을 수 있습니다.

Read more →
2

functools.partial 구현기 (using awk)

이광효 @widehyo@hackers.pub

이 글은 `awk` 언어의 제약 사항을 극복하고 `functools.partial`과 유사한 기능을 구현하는 과정을 상세히 설명합니다. `awk`는 자료형, 함수, 변수 등 여러 면에서 제약이 많지만, 문자열 처리와 associative array를 활용하여 이를 극복합니다. 특히, 함수 시그니처를 문자열로 저장하고, global table을 이용하여 함수의 binding 정보를 관리하는 방식이 핵심입니다. `gawk`의 `@fn` 문법을 활용하여 함수 간접 호출을 구현하고, 런타임에서 필요한 정보를 담은 global variable을 직접 만들어 `functools.partial`의 기능을 흉내 냅니다. 이 글은 `awk`의 제약 속에서 창의적인 해결책을 찾아 함수형 프로그래밍의 가능성을 탐색하는 과정을 보여주며, `awk`에 대한 깊이 있는 이해와 응용력을 높이는 데 기여합니다.

Read more →
1