• R/O
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revision15 (tree)
Time2016-02-10 17:47:53
Authorki-chi

Log Message

ヒストリ機能を追加

Change Summary

Incremental Difference

--- trunk/src/com/nissy_ki_chi/ConsolePicocalc/Command.java (revision 14)
+++ trunk/src/com/nissy_ki_chi/ConsolePicocalc/Command.java (revision 15)
@@ -8,6 +8,7 @@
88 {".help", "doHelp", ".help\nヘルプを表示します。"},
99
1010 {".history", "doHistory", ".history\nコマンド履歴を表示します。"},
11+ {".!", "doExecHistory", ".! <[履歴番号]>\n指定した履歴番号の履歴を再実行します。"},
1112
1213 {".book.add", "doBookAdd", ".book.add <Book名>\n新しいブックを追加します。"},
1314 {".book.current", "doBookCurrent", ".book.current <Book名>\nカレントブックを変更します。"},
--- trunk/src/com/nissy_ki_chi/ConsolePicocalc/ConsolePicocalc.java (revision 14)
+++ trunk/src/com/nissy_ki_chi/ConsolePicocalc/ConsolePicocalc.java (revision 15)
@@ -39,6 +39,7 @@
3939
4040 LinkedList<String> cmdHistory = new LinkedList<>();
4141 LinkedList<String> aggregatedHistory = new LinkedList<>();
42+ String _nextCommand = "";
4243
4344 CommandFragment _commandStorage = new CommandFragment(".");
4445
@@ -51,7 +52,6 @@
5152 * @param args
5253 */
5354 public static void main(String[] args) {
54- // TODO 自動生成されたメソッド・スタブ
5555
5656 ConsolePicocalc cp = new ConsolePicocalc();
5757 cp.setup();
@@ -116,15 +116,21 @@
116116 String line;
117117 while(true) {
118118 try {
119- // プロンプト表示
120- Book currentBook = _books.get(_currentBookName);
121- System.out.print("[" + _currentBookName + "]" + currentBook.getResolver().getCurrentSheet().getName() + ": ");
122-
123119
124- System.out.println(Integer.toString(isr.read()));
125- // 入力がなくなったら終了
126- if ((line = br.readLine().trim()) == null) {
127- break;
120+ // ヒストリからの実行か?
121+ if (_nextCommand == null) {
122+ // ヒストリではない。
123+ // プロンプト表示
124+ Book currentBook = _books.get(_currentBookName);
125+ printPrompt(currentBook);
126+ // 入力がなくなったら終了
127+ if ((line = br.readLine().trim()) == null) {
128+ break;
129+ }
130+ } else {
131+ // ヒストリからの実行
132+ line = _nextCommand;
133+ _nextCommand = null;
128134 }
129135
130136 // 未入力だったら何もしない
@@ -137,6 +143,13 @@
137143 break;
138144 }
139145
146+ // ヒストリからの実行でない場合、入力内容を履歴に保持
147+ if (_nextCommand == null) {
148+ cmdHistory.add(line);
149+ aggregatedHistory.remove(line);
150+ aggregatedHistory.add(line);
151+ }
152+
140153 // 1文字目がドットか否かでコマンドもしくはセル入力を判断
141154 if (line.charAt(0) == '.') {
142155 processCommand(line);
@@ -143,10 +156,8 @@
143156 } else {
144157 _cellCommand.processCell(_books.get(_currentBookName), line);
145158 }
146- System.out.println(line);
147- cmdHistory.add(line);
148- aggregatedHistory.remove(line);
149- aggregatedHistory.add(line);
159+
160+
150161 } catch (Exception e) {
151162 e.printStackTrace();
152163 }
@@ -164,6 +175,11 @@
164175 }
165176
166177
178+ private void printPrompt(Book currentBook) {
179+ System.out.print("[" + _currentBookName + "]" + currentBook.getResolver().getCurrentSheet().getName() + ": ");
180+ }
181+
182+
167183 private void processCommand(String line) {
168184
169185 String cmdStr;
@@ -269,11 +285,29 @@
269285
270286 private void doHistory(String argStr) {
271287 StringBuilder sb = new StringBuilder();
288+ int cnt = 1;
272289 for (String s : cmdHistory) {
273- sb.append(s).append("\n");
290+ sb.append(cnt).append("\t").append(s).append("\n");
291+ cnt++;
274292 }
293+ if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '\n') {
294+ sb.deleteCharAt(sb.length() - 1);
295+ }
275296 System.out.println(sb);
276297 }
298+
299+ private void doExecHistory(String argStr) {
300+ int reqHistNo = 0;
301+ try {
302+ reqHistNo = Integer.parseInt(argStr);
303+ } catch (Exception e) {
304+ return;
305+ }
306+
307+ this._nextCommand = this.cmdHistory.get(reqHistNo - 1);
308+ System.out.println(_nextCommand);
309+
310+ }
277311
278312 private void doCellList(String argStr) {
279313 Sheet sheet = _books.get(_currentBookName).getResolver().getCurrentSheet();