@@ -184,26 +184,26 @@ void Term::print_left_curly_bracket(Term::Window& scr, const std::size_t& x, con
184
184
}
185
185
}
186
186
187
- void Term::render (Term::Window& scr, const Model& m , const std::size_t & cols)
187
+ void Term::render (Term::Window& scr, const Model& model , const std::size_t & cols)
188
188
{
189
189
scr.clear ();
190
- print_left_curly_bracket (scr, cols, 1 , m .lines .size ());
191
- scr.print_str (cols - 6 , m .lines .size (), std::to_string (m .cursor_row ) + " ," + std::to_string (m .cursor_col ));
192
- for (std::size_t j = 0 ; j < m .lines .size (); j++)
190
+ print_left_curly_bracket (scr, cols, 1 , model .lines .size ());
191
+ scr.print_str (cols - 6 , model .lines .size (), std::to_string (model .cursor_row ) + " ," + std::to_string (model .cursor_col ));
192
+ for (std::size_t j = 0 ; j < model .lines .size (); j++)
193
193
{
194
194
if (j == 0 )
195
195
{
196
- scr.fill_fg (1 , j + 1 , m .prompt_string .size (), m .lines .size (), Term::Color::Name::Green);
197
- scr.fill_style (1 , j + 1 , m .prompt_string .size (), m .lines .size (), Term::Style::Bold);
198
- scr.print_str (1 , j + 1 , m .prompt_string );
196
+ scr.fill_fg (1 , j + 1 , model .prompt_string .size (), model .lines .size (), Term::Color::Name::Green);
197
+ scr.fill_style (1 , j + 1 , model .prompt_string .size (), model .lines .size (), Term::Style::Bold);
198
+ scr.print_str (1 , j + 1 , model .prompt_string );
199
199
}
200
200
else
201
201
{
202
- for (std::size_t i = 0 ; i < m .prompt_string .size () - 1 ; i++) { scr.set_char (i + 1 , j + 1 , ' .' ); }
202
+ for (std::size_t i = 0 ; i < model .prompt_string .size () - 1 ; i++) { scr.set_char (i + 1 , j + 1 , ' .' ); }
203
203
}
204
- scr.print_str (m .prompt_string .size () + 1 , j + 1 , m .lines [j]);
204
+ scr.print_str (model .prompt_string .size () + 1 , j + 1 , model .lines [j]);
205
205
}
206
- scr.set_cursor_pos (m .prompt_string .size () + m .cursor_col , m .cursor_row );
206
+ scr.set_cursor_pos (model .prompt_string .size () + model .cursor_col , model .cursor_row );
207
207
}
208
208
209
209
std::string Term::prompt_multiline (const std::string& prompt_string, std::vector<std::string>& m_history, std::function<bool (std::string)>& iscomplete)
@@ -217,18 +217,18 @@ std::string Term::prompt_multiline(const std::string& prompt_string, std::vector
217
217
screen = screen_size ();
218
218
}
219
219
220
- Model m ;
221
- m .prompt_string = prompt_string;
220
+ Model model ;
221
+ model .prompt_string = prompt_string;
222
222
223
223
// Make a local copy of history that can be modified by the user. All
224
224
// changes will be forgotten once a command is submitted.
225
225
std::vector<std::string> history = m_history;
226
226
std::size_t history_pos = history.size ();
227
- history.push_back (concat (m .lines )); // Push back empty input
227
+ history.push_back (concat (model .lines )); // Push back empty input
228
228
229
229
Term::Window scr (screen.columns (), 1 );
230
230
Term::Key key;
231
- render (scr, m , screen.columns ());
231
+ render (scr, model , screen.columns ());
232
232
std::cout << scr.render (1 , cursor.row (), term_attached) << std::flush;
233
233
bool not_complete = true ;
234
234
while (not_complete)
@@ -237,123 +237,123 @@ std::string Term::prompt_multiline(const std::string& prompt_string, std::vector
237
237
if (key == Term::Key::NoKey) continue ;
238
238
if (key.isprint ())
239
239
{
240
- std::string before = m .lines [m .cursor_row - 1 ].substr (0 , m .cursor_col - 1 );
240
+ std::string before = model .lines [model .cursor_row - 1 ].substr (0 , model .cursor_col - 1 );
241
241
std::string newchar;
242
242
newchar.push_back (static_cast <char >(key));
243
- std::string after = m .lines [m .cursor_row - 1 ].substr (m .cursor_col - 1 );
244
- m .lines [m .cursor_row - 1 ] = before += newchar += after;
245
- m .cursor_col ++;
243
+ std::string after = model .lines [model .cursor_row - 1 ].substr (model .cursor_col - 1 );
244
+ model .lines [model .cursor_row - 1 ] = before += newchar += after;
245
+ model .cursor_col ++;
246
246
}
247
247
else if (key == Key::Ctrl_D)
248
248
{
249
- if (m .lines .size () == 1 && m .lines [m .cursor_row - 1 ].empty ())
249
+ if (model .lines .size () == 1 && model .lines [model .cursor_row - 1 ].empty ())
250
250
{
251
- m .lines [m .cursor_row - 1 ].push_back (static_cast <char >(Key::Ctrl_D));
251
+ model .lines [model .cursor_row - 1 ].push_back (static_cast <char >(Key::Ctrl_D));
252
252
std::cout << " \n " << std::flush;
253
- m_history.push_back (m .lines [0 ]);
254
- return m .lines [0 ];
253
+ m_history.push_back (model .lines [0 ]);
254
+ return model .lines [0 ];
255
255
}
256
256
}
257
257
else
258
258
{
259
259
switch (key)
260
260
{
261
261
case Key::Enter:
262
- not_complete = !iscomplete (concat (m .lines ));
262
+ not_complete = !iscomplete (concat (model .lines ));
263
263
if (not_complete) key = Key (static_cast <Term::Key>(Term::MetaKey::Value::Alt + Term::Key::Enter));
264
264
else
265
265
break ;
266
266
CPP_TERMINAL_FALLTHROUGH;
267
267
case Key::Backspace:
268
- if (m .cursor_col > 1 )
268
+ if (model .cursor_col > 1 )
269
269
{
270
- std::string before = m .lines [m .cursor_row - 1 ].substr (0 , m .cursor_col - 2 );
271
- std::string after = m .lines [m .cursor_row - 1 ].substr (m .cursor_col - 1 );
272
- m .lines [m .cursor_row - 1 ] = before + after;
273
- m .cursor_col --;
270
+ std::string before = model .lines [model .cursor_row - 1 ].substr (0 , model .cursor_col - 2 );
271
+ std::string after = model .lines [model .cursor_row - 1 ].substr (model .cursor_col - 1 );
272
+ model .lines [model .cursor_row - 1 ] = before + after;
273
+ model .cursor_col --;
274
274
}
275
- else if (m .cursor_col == 1 && m .cursor_row > 1 )
275
+ else if (model .cursor_col == 1 && model .cursor_row > 1 )
276
276
{
277
- m .cursor_col = m .lines [m .cursor_row - 2 ].size () + 1 ;
278
- m .lines [m .cursor_row - 2 ] += m .lines [m .cursor_row - 1 ];
279
- m .lines .erase (m .lines .begin () + static_cast <long >(m .cursor_row ) - 1 );
280
- m .cursor_row --;
277
+ model .cursor_col = model .lines [model .cursor_row - 2 ].size () + 1 ;
278
+ model .lines [model .cursor_row - 2 ] += model .lines [model .cursor_row - 1 ];
279
+ model .lines .erase (model .lines .begin () + static_cast <long >(model .cursor_row ) - 1 );
280
+ model .cursor_row --;
281
281
}
282
282
break ;
283
283
case Key::Del:
284
- if (m .cursor_col <= m .lines [m .cursor_row - 1 ].size ())
284
+ if (model .cursor_col <= model .lines [model .cursor_row - 1 ].size ())
285
285
{
286
- std::string before = m .lines [m .cursor_row - 1 ].substr (0 , m .cursor_col - 1 );
287
- std::string after = m .lines [m .cursor_row - 1 ].substr (m .cursor_col );
288
- m .lines [m .cursor_row - 1 ] = before + after;
286
+ std::string before = model .lines [model .cursor_row - 1 ].substr (0 , model .cursor_col - 1 );
287
+ std::string after = model .lines [model .cursor_row - 1 ].substr (model .cursor_col );
288
+ model .lines [model .cursor_row - 1 ] = before + after;
289
289
}
290
290
break ;
291
291
case Key::ArrowLeft:
292
- if (m .cursor_col > 1 ) { m .cursor_col --; }
292
+ if (model .cursor_col > 1 ) { model .cursor_col --; }
293
293
break ;
294
294
case Key::ArrowRight:
295
- if (m .cursor_col <= m .lines [m .cursor_row - 1 ].size ()) { m .cursor_col ++; }
295
+ if (model .cursor_col <= model .lines [model .cursor_row - 1 ].size ()) { model .cursor_col ++; }
296
296
break ;
297
- case Key::Home: m .cursor_col = 1 ; break ;
298
- case Key::End: m .cursor_col = m .lines [m .cursor_row - 1 ].size () + 1 ; break ;
297
+ case Key::Home: model .cursor_col = 1 ; break ;
298
+ case Key::End: model .cursor_col = model .lines [model .cursor_row - 1 ].size () + 1 ; break ;
299
299
case Key::ArrowUp:
300
- if (m .cursor_row == 1 )
300
+ if (model .cursor_row == 1 )
301
301
{
302
302
if (history_pos > 0 )
303
303
{
304
- history[history_pos] = concat (m .lines );
304
+ history[history_pos] = concat (model .lines );
305
305
history_pos--;
306
- m .lines = split (history[history_pos]);
307
- m .cursor_row = m .lines .size ();
308
- if (m .cursor_col > m .lines [m .cursor_row - 1 ].size () + 1 ) { m .cursor_col = m .lines [m .cursor_row - 1 ].size () + 1 ; }
309
- if (m .lines .size () > scr.get_h ()) { scr.set_h (m .lines .size ()); }
306
+ model .lines = split (history[history_pos]);
307
+ model .cursor_row = model .lines .size ();
308
+ if (model .cursor_col > model .lines [model .cursor_row - 1 ].size () + 1 ) { model .cursor_col = model .lines [model .cursor_row - 1 ].size () + 1 ; }
309
+ if (model .lines .size () > scr.get_h ()) { scr.set_h (model .lines .size ()); }
310
310
}
311
311
}
312
312
else
313
313
{
314
- m .cursor_row --;
315
- if (m .cursor_col > m .lines [m .cursor_row - 1 ].size () + 1 ) { m .cursor_col = m .lines [m .cursor_row - 1 ].size () + 1 ; }
314
+ model .cursor_row --;
315
+ if (model .cursor_col > model .lines [model .cursor_row - 1 ].size () + 1 ) { model .cursor_col = model .lines [model .cursor_row - 1 ].size () + 1 ; }
316
316
}
317
317
break ;
318
318
case Key::ArrowDown:
319
- if (m .cursor_row == m .lines .size ())
319
+ if (model .cursor_row == model .lines .size ())
320
320
{
321
321
if (history_pos < history.size () - 1 )
322
322
{
323
- history[history_pos] = concat (m .lines );
323
+ history[history_pos] = concat (model .lines );
324
324
history_pos++;
325
- m .lines = split (history[history_pos]);
326
- m .cursor_row = 1 ;
327
- if (m .cursor_col > m .lines [m .cursor_row - 1 ].size () + 1 ) { m .cursor_col = m .lines [m .cursor_row - 1 ].size () + 1 ; }
328
- if (m .lines .size () > scr.get_h ()) { scr.set_h (m .lines .size ()); }
325
+ model .lines = split (history[history_pos]);
326
+ model .cursor_row = 1 ;
327
+ if (model .cursor_col > model .lines [model .cursor_row - 1 ].size () + 1 ) { model .cursor_col = model .lines [model .cursor_row - 1 ].size () + 1 ; }
328
+ if (model .lines .size () > scr.get_h ()) { scr.set_h (model .lines .size ()); }
329
329
}
330
330
}
331
331
else
332
332
{
333
- m .cursor_row ++;
334
- if (m .cursor_col > m .lines [m .cursor_row - 1 ].size () + 1 ) { m .cursor_col = m .lines [m .cursor_row - 1 ].size () + 1 ; }
333
+ model .cursor_row ++;
334
+ if (model .cursor_col > model .lines [model .cursor_row - 1 ].size () + 1 ) { model .cursor_col = model .lines [model .cursor_row - 1 ].size () + 1 ; }
335
335
}
336
336
break ;
337
337
case Key::Ctrl_N:
338
338
{
339
- std::string before = m .lines [m .cursor_row - 1 ].substr (0 , m .cursor_col - 1 );
340
- std::string after = m .lines [m .cursor_row - 1 ].substr (m .cursor_col - 1 );
341
- m .lines [m .cursor_row - 1 ] = before;
342
- if (m .cursor_row < m .lines .size ())
339
+ std::string before = model .lines [model .cursor_row - 1 ].substr (0 , model .cursor_col - 1 );
340
+ std::string after = model .lines [model .cursor_row - 1 ].substr (model .cursor_col - 1 );
341
+ model .lines [model .cursor_row - 1 ] = before;
342
+ if (model .cursor_row < model .lines .size ())
343
343
{
344
344
// Not at the bottom row, can't push back
345
- m .lines .insert (m .lines .begin () + static_cast <long >(m .cursor_row ), after);
345
+ model .lines .insert (model .lines .begin () + static_cast <long >(model .cursor_row ), after);
346
346
}
347
- else { m .lines .push_back (after); }
348
- m .cursor_col = 1 ;
349
- m .cursor_row ++;
350
- if (m .lines .size () > scr.get_h ()) { scr.set_h (m .lines .size ()); }
347
+ else { model .lines .push_back (after); }
348
+ model .cursor_col = 1 ;
349
+ model .cursor_row ++;
350
+ if (model .lines .size () > scr.get_h ()) { scr.set_h (model .lines .size ()); }
351
351
break ;
352
352
}
353
353
default : break ;
354
354
}
355
355
}
356
- render (scr, m , screen.columns ());
356
+ render (scr, model , screen.columns ());
357
357
std::cout << scr.render (1 , cursor.row (), term_attached) << std::flush;
358
358
if (cursor.row () + (int )scr.get_h () - 1 > screen.rows ())
359
359
{
@@ -362,8 +362,8 @@ std::string Term::prompt_multiline(const std::string& prompt_string, std::vector
362
362
}
363
363
}
364
364
std::string line_skips;
365
- for (std::size_t i = 0 ; i <= m .lines .size () - m .cursor_row ; i++) { line_skips += " \n " ; }
365
+ for (std::size_t i = 0 ; i <= model .lines .size () - model .cursor_row ; i++) { line_skips += " \n " ; }
366
366
std::cout << line_skips << std::flush;
367
- m_history.push_back (concat (m .lines ));
368
- return concat (m .lines );
367
+ m_history.push_back (concat (model .lines ));
368
+ return concat (model .lines );
369
369
}
0 commit comments