Skip to content

Commit

Permalink
Merge pull request #41 from blacknon/0.3.2
Browse files Browse the repository at this point in the history
0.3.2
  • Loading branch information
blacknon authored Feb 20, 2022
2 parents 36f11de + b545829 commit 5ff0c47
Show file tree
Hide file tree
Showing 9 changed files with 74 additions and 39 deletions.
File renamed without changes.
3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ keywords = ["watch", "command", "monitoring"]
license-file = "LICENSE"
name = "hwatch"
repository = "https://github.com/blacknon/hwatch"
version = "0.3.1"
version = "0.3.2"

[dependencies]
ansi-parser = "0.8.0"
Expand All @@ -24,3 +24,4 @@ serde_json = "1.0.44"
termwiz = "0.15.0"
# TODO: マージされたらバージョン上げる(0.16.0)
tui = {version = "0.14.0", default-features = false, features = ['crossterm']}
# tui = {version = "0.16.0", default-features = false, features = ['crossterm']}
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,25 @@ hwatch - alternative watch command.

## Install

### MacOS(brew)
### macOS (brew)

brew tap blacknon/hwatch
brew install hwatch

### macOS (MacPorts)

sudo port install hwatch

### Cargo Install

cargo install hwatch

## Usage

hwatch 0.3.1
hwatch 0.3.2
blacknon <[email protected]>
alternative watch command.
A modern alternative to the watch command, records the differences in execution results and can check this differences
at after.

USAGE:
hwatch [FLAGS] [OPTIONS] <command>...
Expand Down Expand Up @@ -72,4 +77,4 @@ watch window keybind
- <kbd>Tab</kbd> ... toggle select screen(history/watch).
- <kbd>/</kbd> ... filter history by string.
- <kbd>*</kbd> ... filter history by regex.
- <kbd>Tab</kbd> ... unfiltering.
- <kbd>Esc</kbd> ... unfiltering.
Binary file modified img/tty.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ use std::{
use tui::{
backend::Backend,
layout::{Constraint, Direction, Layout, Rect},
text::Spans,
Frame, Terminal,
};

Expand Down Expand Up @@ -272,7 +273,6 @@ impl<'a> App<'a> {
// text_dst ... new text.
let text_src: &str;
let text_dst: &str;
let mut output_data = vec![];

// set target number at new history.
let mut target_dst: usize = num;
Expand Down Expand Up @@ -303,6 +303,7 @@ impl<'a> App<'a> {
text_src = "";
}

let output_data: Vec<Spans>;
match self.diff_mode {
DiffMode::Disable => {
output_data = output::get_plane_output(
Expand Down
3 changes: 2 additions & 1 deletion src/header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ impl<'a> HeaderArea<'a> {
width - (WIDTH_TEXT_INTERVAL + command_width + help_message.len()) + 1;

// filter keyword.
let filter_keyword_width = width - POSITION_X_HELP_TEXT - 2 - 13;
let filter_keyword_width = width - POSITION_X_HELP_TEXT - 2 - 14;
let filter_keyword = format!("{:wid$}", self.input_text, wid = filter_keyword_width);
let filter_keyword_style: Style;

Expand Down Expand Up @@ -249,6 +249,7 @@ impl<'a> HeaderArea<'a> {
format!("{:wid$}", self.line_number, wid = 5),
Style::default().fg(is_line_number_enable_color),
),
Span::raw(" "),
// Color flag
Span::styled("Color: ", Style::default().add_modifier(Modifier::BOLD)),
Span::styled(
Expand Down
26 changes: 13 additions & 13 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,26 @@
// Use of this source code is governed by an MIT license
// that can be found in the LICENSE file.

// v0.3.2
// TODO(blakcnon): batch modeの実装(v0.3.2).
// TODO(blacknon): コマンドがエラーになった場合はそこで終了する機能の追加(v0.3.2)
// v0.3.3
// TODO(blakcnon): batch modeの実装(v0.3.3).
// TODO(blacknon): コマンドがエラーになった場合はそこで終了する機能の追加(v0.3.3)
// watchコマンドにもある(-e, --errexit)
// TODO(blacknon): 出力結果が変わった場合はそこで終了する機能の追加(v0.3.2)
// TODO(blacknon): 出力結果が変わった場合はそこで終了する機能の追加(v0.3.3)
// watchコマンドにもある(-g, --chgexit)
// TODO(blacknon): 出力結果が変わった場合はbeepを鳴らす機能の追加(v0.3.2)
// TODO(blacknon): 出力結果が変わった場合はbeepを鳴らす機能の追加(v0.3.3)
// watchコマンドにもある(-b, --beep)。微妙に機能としては違うものかも…?
// TODO(blacknon): 出力結果が変わった場合やコマンドの実行に失敗・成功した場合に、オプションで指定したコマンドをキックする機能を追加. (v0.3.2)
// TODO(blacknon): 出力結果が変わった場合やコマンドの実行に失敗・成功した場合に、オプションで指定したコマンドをキックする機能を追加. (v0.3.3)
// その際、環境変数をキックするコマンドに渡して実行結果や差分をキック先コマンドで扱えるようにする。

// v0.3.3
// TODO(blacknon): Windows対応(v0.3.3). 一応、あとはライブラリが対応すればイケる.
// TODO(blacknon): 任意時点間のdiffが行えるようにする(v0.3.3).
// TODO(blacknon): diffのある箇所だけを表示するモードの作成(v0.3.3).
// v0.3.4
// TODO(blacknon): Windows対応(v0.3.4). 一応、あとはライブラリが対応すればイケる.
// TODO(blacknon): 任意時点間のdiffが行えるようにする(v0.3.4).
// TODO(blacknon): diffのある箇所だけを表示するモードの作成(v0.3.4).
// `OnlyLine`, `OnlyWord` mode.
// TODO(blacknon): コマンドが終了していなくても、インターバル間隔でコマンドを実行する(v0.3.3)
// TODO(blacknon): コマンドが終了していなくても、インターバル間隔でコマンドを実行する(v0.3.4)
// (パラレルで実行してもよいコマンドじゃないといけないよ、という機能か。投げっぱなしにしてintervalで待つようにするオプションを付ける)
// TODO(blacknon): Rustのドキュメンテーションコメントを追加していく(v0.3.3)
// TODO(blacknon): マニュアル(manのデータ)を自動作成させる (v0.3.3)
// TODO(blacknon): Rustのドキュメンテーションコメントを追加していく(v0.3.4)
// TODO(blacknon): マニュアル(manのデータ)を自動作成させる (v0.3.4)
// https://github.com/rust-cli/man

#[warn(unused_doc_comments)]
Expand Down
64 changes: 45 additions & 19 deletions src/output.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub fn get_plane_output<'a>(
}
}

if is_filter {
if is_filter && !color {
// line_span is vec for span on a line-by-line basis
let mut line_span = vec![];

Expand Down Expand Up @@ -212,10 +212,7 @@ pub fn get_watch_diff<'a>(color: bool, line_number: bool, old: &str, new: &str)

match color {
false => line_data = get_watch_diff_line(old_vec[i], new_vec[i]),
true => {
// line_data = Spans::from(vec![]);
line_data = get_watch_diff_line_with_ansi(old_vec[i], new_vec[i])
}
true => line_data = get_watch_diff_line_with_ansi(old_vec[i], new_vec[i]),
}

if line_number {
Expand Down Expand Up @@ -247,25 +244,37 @@ fn get_watch_diff_line<'a>(old_line: &str, new_line: &str) -> Spans<'a> {
let mut old_line_chars: Vec<char> = old_line.chars().collect();
let mut new_line_chars: Vec<char> = new_line.chars().collect();

let space: char = ' ';
// 007f ... delete char.
// NOTE: Use hidden characters to branch processing because tui-rs skips space characters.
let space: char = '\u{007f}';
let max_char = cmp::max(old_line_chars.len(), new_line_chars.len());

let mut _result = vec![];
for x in 0..max_char {
if old_line_chars.len() <= x {
old_line_chars.push(space.clone());
old_line_chars.push(space);
}

if new_line_chars.len() <= x {
new_line_chars.push(space.clone());
new_line_chars.push(space);
}

if old_line_chars[x] != new_line_chars[x] {
let old_char = old_line_chars[x];
let new_char = new_line_chars[x];

if old_char != new_char {
let mut data: Span;
if new_char == space {
data = Span::from(' '.to_string());
data.style = Style::default().add_modifier(Modifier::REVERSED);
} else {
data = Span::styled(
new_line_chars[x].to_string(),
Style::default().add_modifier(Modifier::REVERSED),
);
}
// add span
_result.push(Span::styled(
new_line_chars[x].to_string(),
Style::default().add_modifier(Modifier::REVERSED),
));
_result.push(data);
} else {
// add span
_result.push(Span::styled(
Expand All @@ -275,6 +284,10 @@ fn get_watch_diff_line<'a>(old_line: &str, new_line: &str) -> Spans<'a> {
}
}

// last char
// NOTE: Added hidden characters as tui-rs forces trimming of end-of-line spaces.
_result.push(Span::styled(space.to_string(), Style::default()));

return Spans::from(_result);
}

Expand All @@ -301,33 +314,46 @@ fn get_watch_diff_line_with_ansi<'a>(old_line: &str, new_line: &str) -> Spans<'a
// break;
}

// 007f ... delete char.
// NOTE: Use hidden characters to branch processing because tui-rs skips space characters.
let space = '\u{007f}'.to_string();
let max_span = cmp::max(old_spans.len(), new_spans.len());
//
let mut _result = vec![];
for x in 0..max_span {
//
if old_spans.len() <= x {
old_spans.push(Span::from(" ".to_string()));
old_spans.push(Span::from(space.to_string()));
}

//
if new_spans.len() <= x {
new_spans.push(Span::from(" ".to_string()));
new_spans.push(Span::from(space.to_string()));
}

//
if old_spans[x].content != new_spans[x].content || old_spans[x].style != new_spans[x].style
{
// add span
new_spans[x].style = new_spans[x]
.style
.patch(Style::default().add_modifier(Modifier::REVERSED));
if new_spans[x].content == space {
let mut data = Span::from(' '.to_string());
data.style = Style::default().add_modifier(Modifier::REVERSED);
new_spans[x] = data;
} else {
// add span
new_spans[x].style = new_spans[x]
.style
.patch(Style::default().add_modifier(Modifier::REVERSED));
}
}

//
_result.push(new_spans[x].clone());
}

// last char
// NOTE: Added hidden characters as tui-rs forces trimming of end-of-line spaces.
_result.push(Span::styled(space.to_string(), Style::default()));

//
return Spans::from(_result);
}
Expand Down
1 change: 1 addition & 0 deletions src/view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ impl View {
execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
let _ = terminal.clear();

{
let input_tx = tx.clone();
Expand Down

0 comments on commit 5ff0c47

Please sign in to comment.