@@ -13,7 +13,7 @@ import Control.Monad.Reader
1313import Data.List (mapAccumL)
1414import Data.Map.Ordered (OMap)
1515import qualified Data.Map.Ordered as OMap
16−import Data.Maybe (fromMaybe)
16+import Data.Maybe (fromMaybe, isNothing)
1717import Data.Ratio ((%))
1818import Data.Semigroup (First(..))
1919import Data.Set.Ordered (OSet)
@@ -164,7 +164,9 @@ runFocus (Focus x) = do
164164 f (fs, rf) mf = case getFirst rf of
165165 Refocus_Clear -> Nothing
166166 Refocus_Id fid -> Just fid
167− Refocus_Shift n -> shiftFS fs mf n
167+ Refocus_Shift n -> if n < 0 && isNothing mf
168+ then shiftFS fs (OSet.elemAt (unFocusSet fs) 0) n
169+ else shiftFS fs mf n
168170
169171-- | Runs an action in the focus monad, providing it with information about
170172-- whether any of the foci created within it are focused.