From 7dc0446c5c31a2b1dc5d0539c88624b4e931b880 Mon Sep 17 00:00:00 2001
From: Johannes Altmanninger <aclopte@gmail.com>
Date: Sat, 20 Apr 2024 10:49:13 +0200
Subject: [PATCH] Match stdlib strip_prefix return value

---
 src/key.rs       | 2 +-
 src/wchar_ext.rs | 9 +++------
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/key.rs b/src/key.rs
index 6ff0c02ba..380d92d85 100644
--- a/src/key.rs
+++ b/src/key.rs
@@ -291,7 +291,7 @@ pub(crate) fn parse_keys(value: &wstr) -> Result<Vec<Key>, WString> {
                     codepoint,
                 })?
             } else if codepoint.is_none() && key_name.starts_with('F') && key_name.len() <= 3 {
-                let num = key_name.strip_prefix('F');
+                let num = key_name.strip_prefix('F').unwrap();
                 let codepoint = match fish_wcstoi(num) {
                     Ok(n) if (1..=12).contains(&n) => function_key(u32::try_from(n).unwrap()),
                     _ => {
diff --git a/src/wchar_ext.rs b/src/wchar_ext.rs
index 45c463caa..b07b14cf8 100644
--- a/src/wchar_ext.rs
+++ b/src/wchar_ext.rs
@@ -277,14 +277,11 @@ pub trait WExt {
         iter_prefixes_iter(prefix.chars(), self.as_char_slice().iter().copied())
     }
 
-    fn strip_prefix<Prefix: IntoCharIter>(&self, prefix: Prefix) -> &wstr {
+    fn strip_prefix<Prefix: IntoCharIter>(&self, prefix: Prefix) -> Option<&wstr> {
         let iter = prefix.chars();
         let prefix_len = iter.clone().count();
-        if iter_prefixes_iter(iter, self.as_char_slice().iter().copied()) {
-            self.slice_from(prefix_len)
-        } else {
-            self.slice_from(0)
-        }
+        iter_prefixes_iter(iter, self.as_char_slice().iter().copied())
+            .then(|| self.slice_from(prefix_len))
     }
 
     /// \return whether we end with a given Suffix.