ddakong v0.0.8 릴리즈: 안정화 및 플러그인 시스템


릴리즈 v0.0.8

안정화/문서화하고, 이제 플러그인 시스템을 도입해서 원하는대로 hackable🪓🔥한 터미널용 입력기가 되었다.

플러그인 작성해서:

  1. 한글만이 아니라 다른 언어 입력기로 사용할 수도 있음.
  2. UTF-8 이외에 다른 인코딩으로 출력가능함. (예: EUC-KR, EUC-JP …)
  3. 토글키(Control-H) 마음에 안들면 바꾸면 됨.
  4. 등등등

오늘 한 작업들은:

  1. 안정화 많이 진행했다.
  2. 코드 문서화 주석작성 다 했다.
  3. cross-platform build 자동화해서 릴리즈 때 편해졌다.

    • armhf (raspberry pi 32bit), aarch64 (raspberry pi 64bit), i386 (32bit), x86_64 모두 릴리즈하고 있다.
    • ..혹시나 어디선가 i386 기계 터미널에서 한글을 입력하고 싶은 사람이 있을거 같아서.

ddakong 한글입력기 릴리즈


https://github.com/ageldama/term-ddakong

일단 내가 fbterm에서 가볍게 한글쓰고 싶어서 만듦.

ansi c99만으로 가볍게 작성했다. 다른 라이브러리 의존않고. 만족스럽다. 빌드하니까 25 KB 정도 나오네. 만족.

더 했으면 하는 일들은:

  1. lua -or- dlopen 등으로 다른 입력기 지원하기 (예: 3벌식)
  2. utf-8 이외의 인코딩 지원하기
  3. raspberry pi 32/64 바이너리 릴리즈 (armhf, arm64)
  4. 소스코드 조금 포매팅, 주석작성, 문서화
  5. 빌드개선 : 사용하는 함수 등 체크하기 강화 (예: epoll …어차피 거의 다 있지만.)
  6. 스크린샷? ㅎㅎ

i3 키바인딩을 rofi으로 확인하고 실행하기


i3wm 써서 매일 리눅스 사용.

키보드만 써서 사용하는건 좋은데, 키바인딩이 늘어나서 맨날 i3 키바인딩 까먹음.

그래서 만들어봤다:

  1. 현재 i3 config에 등록된 키바인딩 자동으로 표시 🖥️
  2. rofi에서 선택하면, 그걸 또 실행까지 해줌 🚀

/2025-04apr/i3-bindsyms-rofi-dmenu.png

gist: https://gist.github.com/ageldama/377d00159cfe0cb387f20297ca6a5e6b

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  #!/usr/bin/env perl

  use strict;
  use warnings;
  use Carp;
  use IPC::Open2;


  sub escape_html {
    $_ = shift;
    s/&/&/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    s/'"'/&quot;/g;
    return $_;
  }

  my @bindsyms = 
    grep(/^bindsym/, # only `bindsym`-s.
         grep(!/(^#)|(^\s*$)/, # omit comment or empty lines.
              qx<i3-msg -t get_config>));

  chomp @bindsyms;

  map { s/^bindsym //g } @bindsyms;

  my @key_to_cmd = map {
    my @m = $_ =~ /^(?<key>\S+)\s+(?<cmd>.+)$/;
    \@m;
  } @bindsyms;

  my @dmenu_items = map {
    my ($key, $cmd) = ($_->[0], $_->[1]);

    $key = escape_html($key);
    $key = "<span size='large' weight='heavy'>$key</span>";

    $cmd = escape_html($cmd);
    $cmd = "\t\t$cmd";

    my $result = join "\n", $key, $cmd;
    $result .= "\0";
    $result;
  } @key_to_cmd;

  # p @dmenu_items;

  my $pid = open2(
    my $stdout, my $stdin,
    "rofi -dmenu -p 'i3 keybindings' -sep '\\0' -eh 2 -markup-rows -format i"
   ) or confess;

  foreach (@dmenu_items) {
    print $stdin $_;
    # print $_;
  }
  close($stdin);

  my $stdout_ = do { local($/); <$stdout> };
  close($stdout);

  waitpid($pid, 0);
  my $exit_code = $? >> 8;
  # print STDERR "exit_code: $exit_code\n";

  if ($exit_code == 0) {
    chomp $stdout_;
    my $cmd = $key_to_cmd[$stdout_]->[1];
    print STDERR "STDOUT: [$stdout_] => [$cmd]\n";
    `i3-msg '$cmd'`;
  } else {
    print STDERR "EXIT: $exit_code\n";
  }

요걸 저장하고, $HOME/.config/i3/config 에 다음을 추가하여 ⌨️ Super+F1 으로 등록: