rufio 0.83.1 → 0.90.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/rufio/multibyte_input_reader.rb +47 -0
- data/lib/rufio/terminal_ui.rb +5 -5
- data/lib/rufio/version.rb +1 -1
- data/lib/rufio.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f01cdc5788947872cf74f4a03e33aebe5d14d8077d141a5446c22a5ec5347567
|
|
4
|
+
data.tar.gz: 88ef6deb3513d4da16c74b1397bb3d0e23063fcb6cf94cf144694e7bd2754f2a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 03be7df8ea060bde82844aaab82fddc4d7d62dc5af7db7bb4d752d012a788486a54e53fcad7a9d671d62229da01b526b3472d1777fa67beb32e28496835fb68c
|
|
7
|
+
data.tar.gz: 87ad971cd279084cc2df4c955c93948444ac6736eb0d11fc35b1984a392aa4ec5946cc58363317317c8645abcf820397f365de2a00a5df741e6e9121362df5da
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@ All notable changes to rufio will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.90.0] - 2026-03-22
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **日本語入力(マルチバイト文字)対応**: コマンドモードおよびフィルターモードでマルチバイト文字(日本語等)の入力をサポート
|
|
12
|
+
- UTF-8マルチバイトシーケンスを正しく読み取り、コマンドバッファに追加
|
|
13
|
+
- `MultibyteInputReader` クラスを実装し、マルチバイト文字の読み取り・バリデーション・エラーハンドリングを担当
|
|
14
|
+
|
|
8
15
|
## [0.83.1] - 2026-03-20
|
|
9
16
|
|
|
10
17
|
### Changed
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rufio
|
|
4
|
+
# ターミナルからのマルチバイト入力(UTF-8)を読み込むクラス。
|
|
5
|
+
# read_nonblock(1) は1バイトずつしか読まないため、日本語などのマルチバイト文字が
|
|
6
|
+
# 複数のイベントに分割される問題を解決する。
|
|
7
|
+
class MultibyteInputReader
|
|
8
|
+
def initialize(io = STDIN)
|
|
9
|
+
@io = io
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# 1文字(マルチバイト対応)を読み込む。
|
|
13
|
+
# 読み込めない場合は nil を返す。
|
|
14
|
+
def read_char
|
|
15
|
+
byte = @io.read_nonblock(1)
|
|
16
|
+
return nil if byte.nil?
|
|
17
|
+
|
|
18
|
+
remaining = utf8_remaining_bytes(byte.ord)
|
|
19
|
+
return byte.force_encoding(Encoding::UTF_8) if remaining == 0
|
|
20
|
+
|
|
21
|
+
buf = byte.b
|
|
22
|
+
remaining.times do
|
|
23
|
+
next_byte = @io.read_nonblock(1)
|
|
24
|
+
return nil if next_byte.nil?
|
|
25
|
+
|
|
26
|
+
buf << next_byte.b
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
result = buf.force_encoding(Encoding::UTF_8)
|
|
30
|
+
result.valid_encoding? ? result : nil
|
|
31
|
+
rescue IO::WaitReadable, IO::EAGAINWaitReadable, EOFError
|
|
32
|
+
nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def utf8_remaining_bytes(byte_val)
|
|
38
|
+
case byte_val
|
|
39
|
+
when 0x00..0x7F then 0 # ASCII(ESC 0x1B を含む)
|
|
40
|
+
when 0xC0..0xDF then 1 # 2バイト文字
|
|
41
|
+
when 0xE0..0xEF then 2 # 3バイト文字(日本語など)
|
|
42
|
+
when 0xF0..0xF7 then 3 # 4バイト文字(絵文字など)
|
|
43
|
+
else 0
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/rufio/terminal_ui.rb
CHANGED
|
@@ -47,6 +47,7 @@ module Rufio
|
|
|
47
47
|
end
|
|
48
48
|
@running = false
|
|
49
49
|
@test_mode = test_mode
|
|
50
|
+
@multibyte_reader = MultibyteInputReader.new(STDIN)
|
|
50
51
|
@command_mode_active = false
|
|
51
52
|
@command_input = ""
|
|
52
53
|
@command_mode = CommandMode.new
|
|
@@ -437,9 +438,8 @@ module Rufio
|
|
|
437
438
|
end
|
|
438
439
|
|
|
439
440
|
begin
|
|
440
|
-
input =
|
|
441
|
-
|
|
442
|
-
return false
|
|
441
|
+
input = @multibyte_reader.read_char
|
|
442
|
+
return false if input.nil?
|
|
443
443
|
rescue Errno::ENOTTY, Errno::ENODEV
|
|
444
444
|
return false
|
|
445
445
|
end
|
|
@@ -777,8 +777,8 @@ module Rufio
|
|
|
777
777
|
# Backspace
|
|
778
778
|
@command_input.chop! unless @command_input.empty?
|
|
779
779
|
else
|
|
780
|
-
#
|
|
781
|
-
@command_input += input
|
|
780
|
+
# 通常の文字を追加(マルチバイト文字含む)
|
|
781
|
+
@command_input += input unless input.nil? || input.empty?
|
|
782
782
|
end
|
|
783
783
|
end
|
|
784
784
|
|
data/lib/rufio/version.rb
CHANGED
data/lib/rufio.rb
CHANGED
|
@@ -47,6 +47,7 @@ require_relative 'rufio/native_scanner_zig'
|
|
|
47
47
|
require_relative 'rufio/async_scanner_promise'
|
|
48
48
|
require_relative 'rufio/async_scanner_fiber'
|
|
49
49
|
require_relative 'rufio/parallel_scanner'
|
|
50
|
+
require_relative 'rufio/multibyte_input_reader'
|
|
50
51
|
require_relative 'rufio/screen'
|
|
51
52
|
require_relative 'rufio/renderer'
|
|
52
53
|
require_relative 'rufio/tab_mode_manager'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rufio
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.90.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- masisz
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-03-
|
|
11
|
+
date: 2026-03-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: io-console
|
|
@@ -182,6 +182,7 @@ files:
|
|
|
182
182
|
- lib/rufio/keybind_handler.rb
|
|
183
183
|
- lib/rufio/local_script_scanner.rb
|
|
184
184
|
- lib/rufio/logger.rb
|
|
185
|
+
- lib/rufio/multibyte_input_reader.rb
|
|
185
186
|
- lib/rufio/native/rufio_zig.bundle
|
|
186
187
|
- lib/rufio/native_scanner.rb
|
|
187
188
|
- lib/rufio/native_scanner_zig.rb
|