2 pièce(s) jointe(s)
[crossterm crate] Comment faire pour que cela fonctionne sous Windows comme sous Linux ?
Bonjour,
Voici la partie de code qui m'intéresse... il est à noter que je ne sais pas installer Windows Terminal et que je me réfère à Power Shell et CMD pour déterminer si oui ou non cette application fonctionne.
A la base cette application est développée sous Linux, elle fonctionne -- du moins j'obtiens ce que je désire: je tape quelques lettres et l'application "popule" une liste d'éléments que je parcoure en appuyant sur certaines touches jusqu'à appuyer sur "return".
Je crosscompile et j'obtiens les erreurs suivantes:
Citation:
0110:err:module:import_dll Library bcryptprimitives.dll (which is needed by L"Z:\\target\\x86_64-pc-windows-gnu\\debug\\uep_NXTMTGASeeker.exe") not found
0110:err:module:LdrInitializeThunk Importing dlls for L"Z:\\target\\x86_64-pc-windows-gnu\\debug\\uep_NXTMTGASeeker.exe" failed, status c0000135
comme l'exécutable est présent je m'en fous et je le copie sur la partition lisible pour windows.
Je switch sur windows et là -- catastrophe -- j'obtiens rien de ce que j'obtiens sous Linux...
Pièce jointe 665465
Pièce jointe 665466
J'ai parcouru sur github la partie "issues" relative à crossterm, et je ne vois pas de description similaire du dysfonctionnement.
Sur CMD, je vois pas trop pourquoi ça déconne, je vais revoir mon code au cas où j'aurais oublié de changer le séparateur en fonction que l'on soit sous Linux ou Windows, mais il me semble que j'avais "prévu le coup"...
Sur powershell, bon il est normalement utf8 compliant et j'ai passé à '1' le paramètre qui est censé permettre à powershell de prendre les séquences ANSI en compte (virtual terminal level), apparemment c'est foireux...
Voici ce que nous devrions obtenir:
https://paste.opensuse.org/pastes/f86aebd94cab
SOURCE:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| pub fn Prompt(Liste:LinkedList<String>) -> String
{
let mut Command :String = String::new();
enable_raw_mode(); // Set up terminal
let mut stdout = io::stdout();
print!("{}","MTGASeeker> ".bright_blue());
stdout.flush().unwrap();
'principale: loop
{
if let Ok(Event::Key(KeyEvent { code, .. })) = event::read()
{
match code
{
KeyCode::Char(celuici) =>
{
Command.push(celuici);
print!("{}",celuici);
stdout.flush().unwrap();
let SubList = ConstructSubList(Command.clone(),Liste.clone());
for propositions in SubList
{
print!("{}",propositions.clone().italic().bold());
stdout.flush().unwrap();
if let Ok(Event::Key(matouche)) = event::read()
{
match matouche.code
{
KeyCode::Enter =>
{
for backspace in propositions.clone().chars()
{
print!("\x08 \x08");
stdout.flush().unwrap();
}
for backspace in Command.chars()
{
print!("\x08 \x08");
stdout.flush().unwrap();
}
Command = propositions;
break 'principale;
}
KeyCode::Down =>
{
for backspace in propositions.chars()
{
print!("\x08 \x08");
stdout.flush().unwrap();
}
stdout.flush().unwrap();
continue;
}
KeyCode::Char(celuici) =>
{
for backspace in propositions.chars()
{
print!("\x08 \x08");
stdout.flush().unwrap();
}
Command.push(celuici);
print!("{celuici}");
stdout.flush().unwrap();
continue 'principale;
}
KeyCode::Backspace =>
{
for backspace in propositions.chars()
{
print!("\x08 \x08");
stdout.flush().unwrap();
}
if Command.pop().is_some()
{
print!("\x08 \x08");
stdout.flush().unwrap();
}
}
_ =>
{
for backspace in propositions.chars()
{
print!("\x08 \x08");
stdout.flush().unwrap();
}
stdout.flush().unwrap();
continue;
}
} // end match
}
} // end for
}
KeyCode::Backspace =>
{
if Command.pop().is_some()
{
print!("\x08 \x08");
stdout.flush().unwrap();
}
}
KeyCode::Enter =>
{
break;
}
KeyCode::Esc =>
{
break;
}
_ => {}
} // end match
}
} // end loop
disable_raw_mode().unwrap();
stdout.flush().unwrap();
Command
} |
Pour le "invalid path"... j'obtiens la même chose sous Linux quand j'exécute le programme sur la partition windows, pourtant il me semble que dans mon fstab j'ai bien dit que cette partition devait être montée en utf8... faudra que je revérifie...
[EDIT]
Pour le "invalid path"... j'obtiens la même chose sous Linux quand j'exécute le programme sur la partition windows, pourtant il me semble que dans mon fstab j'ai bien dit que cette partition devait être montée en utf8... faudra que je revérifie...
Ca n'a rien à voir, dans une autre fonction j'utilisais un rfind() qui ne donnait rien... (None), je repars sur Windows pour voir comment se comporte cmd.exe avec l'application utilisant crossterm...