Grab text from previous line when enter is pressed
This commit is contained in:
parent
136bb8b8d8
commit
bd41def541
|
@ -6,6 +6,7 @@ use crate::gdt;
|
|||
use pic8259::ChainedPics;
|
||||
use spin::Mutex;
|
||||
|
||||
|
||||
lazy_static! {
|
||||
static ref IDT: InterruptDescriptorTable = {
|
||||
let mut idt = InterruptDescriptorTable::new();
|
||||
|
@ -64,6 +65,19 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(_stack_frame: InterruptStac
|
|||
crate::vga_buffer::backspace();
|
||||
} else if character == '\u{9}' {
|
||||
print!(" ");
|
||||
} else if character == '\n' {
|
||||
use arrayvec::ArrayString;
|
||||
let writer = crate::vga_buffer::WRITER.lock();
|
||||
|
||||
let mut builder = ArrayString::<80>::new();
|
||||
for character in &writer.buffer.chars[crate::vga_buffer::BUFFER_HEIGHT - 1] {
|
||||
builder.push(character.read().ascii_character as char);
|
||||
}
|
||||
|
||||
unsafe {
|
||||
crate::vga_buffer::WRITER.force_unlock();
|
||||
}
|
||||
crate::shell::evaluate(&builder);
|
||||
} else {
|
||||
print!("{}", character)
|
||||
}
|
||||
|
|
|
@ -38,23 +38,23 @@ impl ColorCode {
|
|||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[repr(C)]
|
||||
struct ScreenChar {
|
||||
ascii_character: u8,
|
||||
pub struct ScreenChar {
|
||||
pub ascii_character: u8,
|
||||
color_code: ColorCode
|
||||
}
|
||||
|
||||
pub(crate) const BUFFER_HEIGHT: usize = 25;
|
||||
const BUFFER_WIDTH: usize = 80;
|
||||
pub(crate) const BUFFER_WIDTH: usize = 80;
|
||||
|
||||
#[repr(transparent)]
|
||||
struct Buffer {
|
||||
chars: [[Volatile<ScreenChar>; BUFFER_WIDTH]; BUFFER_HEIGHT]
|
||||
pub struct Buffer {
|
||||
pub chars: [[Volatile<ScreenChar>; BUFFER_WIDTH]; BUFFER_HEIGHT]
|
||||
}
|
||||
|
||||
pub struct Writer {
|
||||
pub column_position: usize,
|
||||
color_code: ColorCode,
|
||||
buffer: &'static mut Buffer
|
||||
pub buffer: &'static mut Buffer
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue