packages feed

termonad 1.3.0.0 → 2.0.0.0

raw patch · 12 files changed

+371/−46 lines, 12 filesdep +inline-cdep +textPVP ok

version bump matches the API change (PVP)

Dependencies added: inline-c, text

API changes (from Hackage documentation)

- Termonad.Config.Vec: [Abs_6989586621679476215Sym0KindInference] :: forall a6989586621679476214 arg_a1XkZ. SameKind (Apply Abs_6989586621679476215Sym0 arg_a1XkZ) (Abs_6989586621679476215Sym1 arg_a1XkZ) => Abs_6989586621679476215Sym0 a6989586621679476214
- Termonad.Config.Vec: [Compare_6989586621679474935Sym0KindInference] :: forall a6989586621679474933 arg_a1X0m. SameKind (Apply Compare_6989586621679474935Sym0 arg_a1X0m) (Compare_6989586621679474935Sym1 arg_a1X0m) => Compare_6989586621679474935Sym0 a6989586621679474933
- Termonad.Config.Vec: [Compare_6989586621679474935Sym1KindInference] :: forall a6989586621679474933 a6989586621679474934 arg_a1X0l. SameKind (Apply (Compare_6989586621679474935Sym1 a6989586621679474933) arg_a1X0l) (Compare_6989586621679474935Sym2 a6989586621679474933 arg_a1X0l) => Compare_6989586621679474935Sym1 a6989586621679474933 a6989586621679474934
- Termonad.Config.Vec: [FromInteger_6989586621679476238Sym0KindInference] :: forall a6989586621679476237 arg_a1Xlm. SameKind (Apply FromInteger_6989586621679476238Sym0 arg_a1Xlm) (FromInteger_6989586621679476238Sym1 arg_a1Xlm) => FromInteger_6989586621679476238Sym0 a6989586621679476237
- Termonad.Config.Vec: [Let6989586621679476227Scrutinee_6989586621679461448Sym0KindInference] :: forall n6989586621679476226 arg_a1Xla. SameKind (Apply Let6989586621679476227Scrutinee_6989586621679461448Sym0 arg_a1Xla) (Let6989586621679476227Scrutinee_6989586621679461448Sym1 arg_a1Xla) => Let6989586621679476227Scrutinee_6989586621679461448Sym0 n6989586621679476226
- Termonad.Config.Vec: [Let6989586621679476231Scrutinee_6989586621679461450Sym0KindInference] :: forall n6989586621679476226 arg_a1Xle. SameKind (Apply Let6989586621679476231Scrutinee_6989586621679461450Sym0 arg_a1Xle) (Let6989586621679476231Scrutinee_6989586621679461450Sym1 arg_a1Xle) => Let6989586621679476231Scrutinee_6989586621679461450Sym0 n6989586621679476226
- Termonad.Config.Vec: [ShowsPrec_6989586621679475636Sym0KindInference] :: forall a6989586621679475633 arg_a1XbG. SameKind (Apply ShowsPrec_6989586621679475636Sym0 arg_a1XbG) (ShowsPrec_6989586621679475636Sym1 arg_a1XbG) => ShowsPrec_6989586621679475636Sym0 a6989586621679475633
- Termonad.Config.Vec: [ShowsPrec_6989586621679475636Sym1KindInference] :: forall a6989586621679475633 a6989586621679475634 arg_a1XbF. SameKind (Apply (ShowsPrec_6989586621679475636Sym1 a6989586621679475633) arg_a1XbF) (ShowsPrec_6989586621679475636Sym2 a6989586621679475633 arg_a1XbF) => ShowsPrec_6989586621679475636Sym1 a6989586621679475633 a6989586621679475634
- Termonad.Config.Vec: [ShowsPrec_6989586621679475636Sym2KindInference] :: forall a6989586621679475633 a6989586621679475634 a6989586621679475635 arg_a1XbE. SameKind (Apply (ShowsPrec_6989586621679475636Sym2 a6989586621679475633 a6989586621679475634) arg_a1XbE) (ShowsPrec_6989586621679475636Sym3 a6989586621679475633 a6989586621679475634 arg_a1XbE) => ShowsPrec_6989586621679475636Sym2 a6989586621679475633 a6989586621679475634 a6989586621679475635
- Termonad.Config.Vec: [Signum_6989586621679476221Sym0KindInference] :: forall a6989586621679476220 arg_a1Xl5. SameKind (Apply Signum_6989586621679476221Sym0 arg_a1Xl5) (Signum_6989586621679476221Sym1 arg_a1Xl5) => Signum_6989586621679476221Sym0 a6989586621679476220
- Termonad.Config.Vec: [TFHelper_6989586621679476173Sym0KindInference] :: forall a6989586621679476171 arg_a1Xkk. SameKind (Apply TFHelper_6989586621679476173Sym0 arg_a1Xkk) (TFHelper_6989586621679476173Sym1 arg_a1Xkk) => TFHelper_6989586621679476173Sym0 a6989586621679476171
- Termonad.Config.Vec: [TFHelper_6989586621679476173Sym1KindInference] :: forall a6989586621679476171 a6989586621679476172 arg_a1Xkj. SameKind (Apply (TFHelper_6989586621679476173Sym1 a6989586621679476171) arg_a1Xkj) (TFHelper_6989586621679476173Sym2 a6989586621679476171 arg_a1Xkj) => TFHelper_6989586621679476173Sym1 a6989586621679476171 a6989586621679476172
- Termonad.Config.Vec: [TFHelper_6989586621679476189Sym0KindInference] :: forall a6989586621679476187 arg_a1XkA. SameKind (Apply TFHelper_6989586621679476189Sym0 arg_a1XkA) (TFHelper_6989586621679476189Sym1 arg_a1XkA) => TFHelper_6989586621679476189Sym0 a6989586621679476187
- Termonad.Config.Vec: [TFHelper_6989586621679476189Sym1KindInference] :: forall a6989586621679476187 a6989586621679476188 arg_a1Xkz. SameKind (Apply (TFHelper_6989586621679476189Sym1 a6989586621679476187) arg_a1Xkz) (TFHelper_6989586621679476189Sym2 a6989586621679476187 arg_a1Xkz) => TFHelper_6989586621679476189Sym1 a6989586621679476187 a6989586621679476188
- Termonad.Config.Vec: [TFHelper_6989586621679476205Sym0KindInference] :: forall a6989586621679476203 arg_a1XkQ. SameKind (Apply TFHelper_6989586621679476205Sym0 arg_a1XkQ) (TFHelper_6989586621679476205Sym1 arg_a1XkQ) => TFHelper_6989586621679476205Sym0 a6989586621679476203
- Termonad.Config.Vec: [TFHelper_6989586621679476205Sym1KindInference] :: forall a6989586621679476203 a6989586621679476204 arg_a1XkP. SameKind (Apply (TFHelper_6989586621679476205Sym1 a6989586621679476203) arg_a1XkP) (TFHelper_6989586621679476205Sym2 a6989586621679476203 arg_a1XkP) => TFHelper_6989586621679476205Sym1 a6989586621679476203 a6989586621679476204
- Termonad.Config.Vec: data Abs_6989586621679476215Sym0 :: (~>) Peano Peano
- Termonad.Config.Vec: data Compare_6989586621679474935Sym0 :: (~>) Peano ((~>) Peano Ordering)
- Termonad.Config.Vec: data Compare_6989586621679474935Sym1 (a6989586621679474933 :: Peano) :: (~>) Peano Ordering
- Termonad.Config.Vec: data FromInteger_6989586621679476238Sym0 :: (~>) Nat Peano
- Termonad.Config.Vec: data Let6989586621679476227Scrutinee_6989586621679461448Sym0 n6989586621679476226
- Termonad.Config.Vec: data Let6989586621679476231Scrutinee_6989586621679461450Sym0 n6989586621679476226
- Termonad.Config.Vec: data ShowsPrec_6989586621679475636Sym0 :: (~>) Nat ((~>) Peano ((~>) Symbol Symbol))
- Termonad.Config.Vec: data ShowsPrec_6989586621679475636Sym1 (a6989586621679475633 :: Nat) :: (~>) Peano ((~>) Symbol Symbol)
- Termonad.Config.Vec: data ShowsPrec_6989586621679475636Sym2 (a6989586621679475633 :: Nat) (a6989586621679475634 :: Peano) :: (~>) Symbol Symbol
- Termonad.Config.Vec: data Signum_6989586621679476221Sym0 :: (~>) Peano Peano
- Termonad.Config.Vec: data TFHelper_6989586621679476173Sym0 :: (~>) Peano ((~>) Peano Peano)
- Termonad.Config.Vec: data TFHelper_6989586621679476173Sym1 (a6989586621679476171 :: Peano) :: (~>) Peano Peano
- Termonad.Config.Vec: data TFHelper_6989586621679476189Sym0 :: (~>) Peano ((~>) Peano Peano)
- Termonad.Config.Vec: data TFHelper_6989586621679476189Sym1 (a6989586621679476187 :: Peano) :: (~>) Peano Peano
- Termonad.Config.Vec: data TFHelper_6989586621679476205Sym0 :: (~>) Peano ((~>) Peano Peano)
- Termonad.Config.Vec: data TFHelper_6989586621679476205Sym1 (a6989586621679476203 :: Peano) :: (~>) Peano Peano
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.AddPeanoSym1 a6989586621679473193)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.Compare_6989586621679474935Sym1 a6989586621679474933)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.MultPeanoSym1 a6989586621679473200)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.ShowsPrec_6989586621679475636Sym1 a6989586621679475633)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.ShowsPrec_6989586621679475636Sym2 a6989586621679475634 a6989586621679475633)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.SubtractPeanoSym1 a6989586621679473186)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.TFHelper_6989586621679476173Sym1 a6989586621679476171)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.TFHelper_6989586621679476189Sym1 a6989586621679476187)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.TFHelper_6989586621679476205Sym1 a6989586621679476203)
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Abs_6989586621679476215Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Compare_6989586621679474935Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.FromInteger_6989586621679476238Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Let6989586621679476227Scrutinee_6989586621679461448Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Let6989586621679476231Scrutinee_6989586621679461450Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.ShowsPrec_6989586621679475636Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Signum_6989586621679476221Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.TFHelper_6989586621679476173Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.TFHelper_6989586621679476189Sym0
- Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.TFHelper_6989586621679476205Sym0
- Termonad.Config.Vec: type Abs_6989586621679476215Sym1 (a6989586621679476214 :: Peano) = Abs_6989586621679476215 a6989586621679476214
- Termonad.Config.Vec: type Compare_6989586621679474935Sym2 (a6989586621679474933 :: Peano) (a6989586621679474934 :: Peano) = Compare_6989586621679474935 a6989586621679474933 a6989586621679474934
- Termonad.Config.Vec: type FromInteger_6989586621679476238Sym1 (a6989586621679476237 :: Nat) = FromInteger_6989586621679476238 a6989586621679476237
- Termonad.Config.Vec: type Let6989586621679476227Scrutinee_6989586621679461448Sym1 n6989586621679476226 = Let6989586621679476227Scrutinee_6989586621679461448 n6989586621679476226
- Termonad.Config.Vec: type Let6989586621679476231Scrutinee_6989586621679461450Sym1 n6989586621679476226 = Let6989586621679476231Scrutinee_6989586621679461450 n6989586621679476226
- Termonad.Config.Vec: type ShowsPrec_6989586621679475636Sym3 (a6989586621679475633 :: Nat) (a6989586621679475634 :: Peano) (a6989586621679475635 :: Symbol) = ShowsPrec_6989586621679475636 a6989586621679475633 a6989586621679475634 a6989586621679475635
- Termonad.Config.Vec: type Signum_6989586621679476221Sym1 (a6989586621679476220 :: Peano) = Signum_6989586621679476221 a6989586621679476220
- Termonad.Config.Vec: type TFHelper_6989586621679476173Sym2 (a6989586621679476171 :: Peano) (a6989586621679476172 :: Peano) = TFHelper_6989586621679476173 a6989586621679476171 a6989586621679476172
- Termonad.Config.Vec: type TFHelper_6989586621679476189Sym2 (a6989586621679476187 :: Peano) (a6989586621679476188 :: Peano) = TFHelper_6989586621679476189 a6989586621679476187 a6989586621679476188
- Termonad.Config.Vec: type TFHelper_6989586621679476205Sym2 (a6989586621679476203 :: Peano) (a6989586621679476204 :: Peano) = TFHelper_6989586621679476205 a6989586621679476203 a6989586621679476204
+ Termonad.App: doFind :: TMState -> IO ()
+ Termonad.App: findAbove :: TMState -> IO ()
+ Termonad.App: findBelow :: TMState -> IO ()
+ Termonad.App: showFindDialog :: Application -> IO (Maybe Text)
+ Termonad.Config.Vec: [Abs_6989586621679478956Sym0KindInference] :: forall a6989586621679478955 arg_a1Y3c. SameKind (Apply Abs_6989586621679478956Sym0 arg_a1Y3c) (Abs_6989586621679478956Sym1 arg_a1Y3c) => Abs_6989586621679478956Sym0 a6989586621679478955
+ Termonad.Config.Vec: [Compare_6989586621679477676Sym0KindInference] :: forall a6989586621679477674 arg_a1XIz. SameKind (Apply Compare_6989586621679477676Sym0 arg_a1XIz) (Compare_6989586621679477676Sym1 arg_a1XIz) => Compare_6989586621679477676Sym0 a6989586621679477674
+ Termonad.Config.Vec: [Compare_6989586621679477676Sym1KindInference] :: forall a6989586621679477674 a6989586621679477675 arg_a1XIy. SameKind (Apply (Compare_6989586621679477676Sym1 a6989586621679477674) arg_a1XIy) (Compare_6989586621679477676Sym2 a6989586621679477674 arg_a1XIy) => Compare_6989586621679477676Sym1 a6989586621679477674 a6989586621679477675
+ Termonad.Config.Vec: [FromInteger_6989586621679478979Sym0KindInference] :: forall a6989586621679478978 arg_a1Y3z. SameKind (Apply FromInteger_6989586621679478979Sym0 arg_a1Y3z) (FromInteger_6989586621679478979Sym1 arg_a1Y3z) => FromInteger_6989586621679478979Sym0 a6989586621679478978
+ Termonad.Config.Vec: [Let6989586621679478968Scrutinee_6989586621679464273Sym0KindInference] :: forall n6989586621679478967 arg_a1Y3n. SameKind (Apply Let6989586621679478968Scrutinee_6989586621679464273Sym0 arg_a1Y3n) (Let6989586621679478968Scrutinee_6989586621679464273Sym1 arg_a1Y3n) => Let6989586621679478968Scrutinee_6989586621679464273Sym0 n6989586621679478967
+ Termonad.Config.Vec: [Let6989586621679478972Scrutinee_6989586621679464275Sym0KindInference] :: forall n6989586621679478967 arg_a1Y3r. SameKind (Apply Let6989586621679478972Scrutinee_6989586621679464275Sym0 arg_a1Y3r) (Let6989586621679478972Scrutinee_6989586621679464275Sym1 arg_a1Y3r) => Let6989586621679478972Scrutinee_6989586621679464275Sym0 n6989586621679478967
+ Termonad.Config.Vec: [ShowsPrec_6989586621679478377Sym0KindInference] :: forall a6989586621679478374 arg_a1XTT. SameKind (Apply ShowsPrec_6989586621679478377Sym0 arg_a1XTT) (ShowsPrec_6989586621679478377Sym1 arg_a1XTT) => ShowsPrec_6989586621679478377Sym0 a6989586621679478374
+ Termonad.Config.Vec: [ShowsPrec_6989586621679478377Sym1KindInference] :: forall a6989586621679478374 a6989586621679478375 arg_a1XTS. SameKind (Apply (ShowsPrec_6989586621679478377Sym1 a6989586621679478374) arg_a1XTS) (ShowsPrec_6989586621679478377Sym2 a6989586621679478374 arg_a1XTS) => ShowsPrec_6989586621679478377Sym1 a6989586621679478374 a6989586621679478375
+ Termonad.Config.Vec: [ShowsPrec_6989586621679478377Sym2KindInference] :: forall a6989586621679478374 a6989586621679478375 a6989586621679478376 arg_a1XTR. SameKind (Apply (ShowsPrec_6989586621679478377Sym2 a6989586621679478374 a6989586621679478375) arg_a1XTR) (ShowsPrec_6989586621679478377Sym3 a6989586621679478374 a6989586621679478375 arg_a1XTR) => ShowsPrec_6989586621679478377Sym2 a6989586621679478374 a6989586621679478375 a6989586621679478376
+ Termonad.Config.Vec: [Signum_6989586621679478962Sym0KindInference] :: forall a6989586621679478961 arg_a1Y3i. SameKind (Apply Signum_6989586621679478962Sym0 arg_a1Y3i) (Signum_6989586621679478962Sym1 arg_a1Y3i) => Signum_6989586621679478962Sym0 a6989586621679478961
+ Termonad.Config.Vec: [TFHelper_6989586621679478914Sym0KindInference] :: forall a6989586621679478912 arg_a1Y2x. SameKind (Apply TFHelper_6989586621679478914Sym0 arg_a1Y2x) (TFHelper_6989586621679478914Sym1 arg_a1Y2x) => TFHelper_6989586621679478914Sym0 a6989586621679478912
+ Termonad.Config.Vec: [TFHelper_6989586621679478914Sym1KindInference] :: forall a6989586621679478912 a6989586621679478913 arg_a1Y2w. SameKind (Apply (TFHelper_6989586621679478914Sym1 a6989586621679478912) arg_a1Y2w) (TFHelper_6989586621679478914Sym2 a6989586621679478912 arg_a1Y2w) => TFHelper_6989586621679478914Sym1 a6989586621679478912 a6989586621679478913
+ Termonad.Config.Vec: [TFHelper_6989586621679478930Sym0KindInference] :: forall a6989586621679478928 arg_a1Y2N. SameKind (Apply TFHelper_6989586621679478930Sym0 arg_a1Y2N) (TFHelper_6989586621679478930Sym1 arg_a1Y2N) => TFHelper_6989586621679478930Sym0 a6989586621679478928
+ Termonad.Config.Vec: [TFHelper_6989586621679478930Sym1KindInference] :: forall a6989586621679478928 a6989586621679478929 arg_a1Y2M. SameKind (Apply (TFHelper_6989586621679478930Sym1 a6989586621679478928) arg_a1Y2M) (TFHelper_6989586621679478930Sym2 a6989586621679478928 arg_a1Y2M) => TFHelper_6989586621679478930Sym1 a6989586621679478928 a6989586621679478929
+ Termonad.Config.Vec: [TFHelper_6989586621679478946Sym0KindInference] :: forall a6989586621679478944 arg_a1Y33. SameKind (Apply TFHelper_6989586621679478946Sym0 arg_a1Y33) (TFHelper_6989586621679478946Sym1 arg_a1Y33) => TFHelper_6989586621679478946Sym0 a6989586621679478944
+ Termonad.Config.Vec: [TFHelper_6989586621679478946Sym1KindInference] :: forall a6989586621679478944 a6989586621679478945 arg_a1Y32. SameKind (Apply (TFHelper_6989586621679478946Sym1 a6989586621679478944) arg_a1Y32) (TFHelper_6989586621679478946Sym2 a6989586621679478944 arg_a1Y32) => TFHelper_6989586621679478946Sym1 a6989586621679478944 a6989586621679478945
+ Termonad.Config.Vec: data Abs_6989586621679478956Sym0 :: (~>) Peano Peano
+ Termonad.Config.Vec: data Compare_6989586621679477676Sym0 :: (~>) Peano ((~>) Peano Ordering)
+ Termonad.Config.Vec: data Compare_6989586621679477676Sym1 (a6989586621679477674 :: Peano) :: (~>) Peano Ordering
+ Termonad.Config.Vec: data FromInteger_6989586621679478979Sym0 :: (~>) Nat Peano
+ Termonad.Config.Vec: data Let6989586621679478968Scrutinee_6989586621679464273Sym0 n6989586621679478967
+ Termonad.Config.Vec: data Let6989586621679478972Scrutinee_6989586621679464275Sym0 n6989586621679478967
+ Termonad.Config.Vec: data ShowsPrec_6989586621679478377Sym0 :: (~>) Nat ((~>) Peano ((~>) Symbol Symbol))
+ Termonad.Config.Vec: data ShowsPrec_6989586621679478377Sym1 (a6989586621679478374 :: Nat) :: (~>) Peano ((~>) Symbol Symbol)
+ Termonad.Config.Vec: data ShowsPrec_6989586621679478377Sym2 (a6989586621679478374 :: Nat) (a6989586621679478375 :: Peano) :: (~>) Symbol Symbol
+ Termonad.Config.Vec: data Signum_6989586621679478962Sym0 :: (~>) Peano Peano
+ Termonad.Config.Vec: data TFHelper_6989586621679478914Sym0 :: (~>) Peano ((~>) Peano Peano)
+ Termonad.Config.Vec: data TFHelper_6989586621679478914Sym1 (a6989586621679478912 :: Peano) :: (~>) Peano Peano
+ Termonad.Config.Vec: data TFHelper_6989586621679478930Sym0 :: (~>) Peano ((~>) Peano Peano)
+ Termonad.Config.Vec: data TFHelper_6989586621679478930Sym1 (a6989586621679478928 :: Peano) :: (~>) Peano Peano
+ Termonad.Config.Vec: data TFHelper_6989586621679478946Sym0 :: (~>) Peano ((~>) Peano Peano)
+ Termonad.Config.Vec: data TFHelper_6989586621679478946Sym1 (a6989586621679478944 :: Peano) :: (~>) Peano Peano
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.AddPeanoSym1 a6989586621679475934)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.Compare_6989586621679477676Sym1 a6989586621679477674)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.MultPeanoSym1 a6989586621679475941)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.ShowsPrec_6989586621679478377Sym1 a6989586621679478374)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.ShowsPrec_6989586621679478377Sym2 a6989586621679478375 a6989586621679478374)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.SubtractPeanoSym1 a6989586621679475927)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.TFHelper_6989586621679478914Sym1 a6989586621679478912)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.TFHelper_6989586621679478930Sym1 a6989586621679478928)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Termonad.Config.Vec.TFHelper_6989586621679478946Sym1 a6989586621679478944)
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Abs_6989586621679478956Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Compare_6989586621679477676Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.FromInteger_6989586621679478979Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Let6989586621679478968Scrutinee_6989586621679464273Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Let6989586621679478972Scrutinee_6989586621679464275Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.ShowsPrec_6989586621679478377Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.Signum_6989586621679478962Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.TFHelper_6989586621679478914Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.TFHelper_6989586621679478930Sym0
+ Termonad.Config.Vec: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Termonad.Config.Vec.TFHelper_6989586621679478946Sym0
+ Termonad.Config.Vec: type Abs_6989586621679478956Sym1 (a6989586621679478955 :: Peano) = Abs_6989586621679478956 a6989586621679478955
+ Termonad.Config.Vec: type Compare_6989586621679477676Sym2 (a6989586621679477674 :: Peano) (a6989586621679477675 :: Peano) = Compare_6989586621679477676 a6989586621679477674 a6989586621679477675
+ Termonad.Config.Vec: type FromInteger_6989586621679478979Sym1 (a6989586621679478978 :: Nat) = FromInteger_6989586621679478979 a6989586621679478978
+ Termonad.Config.Vec: type Let6989586621679478968Scrutinee_6989586621679464273Sym1 n6989586621679478967 = Let6989586621679478968Scrutinee_6989586621679464273 n6989586621679478967
+ Termonad.Config.Vec: type Let6989586621679478972Scrutinee_6989586621679464275Sym1 n6989586621679478967 = Let6989586621679478972Scrutinee_6989586621679464275 n6989586621679478967
+ Termonad.Config.Vec: type ShowsPrec_6989586621679478377Sym3 (a6989586621679478374 :: Nat) (a6989586621679478375 :: Peano) (a6989586621679478376 :: Symbol) = ShowsPrec_6989586621679478377 a6989586621679478374 a6989586621679478375 a6989586621679478376
+ Termonad.Config.Vec: type Signum_6989586621679478962Sym1 (a6989586621679478961 :: Peano) = Signum_6989586621679478962 a6989586621679478961
+ Termonad.Config.Vec: type TFHelper_6989586621679478914Sym2 (a6989586621679478912 :: Peano) (a6989586621679478913 :: Peano) = TFHelper_6989586621679478914 a6989586621679478912 a6989586621679478913
+ Termonad.Config.Vec: type TFHelper_6989586621679478930Sym2 (a6989586621679478928 :: Peano) (a6989586621679478929 :: Peano) = TFHelper_6989586621679478930 a6989586621679478928 a6989586621679478929
+ Termonad.Config.Vec: type TFHelper_6989586621679478946Sym2 (a6989586621679478944 :: Peano) (a6989586621679478945 :: Peano) = TFHelper_6989586621679478946 a6989586621679478944 a6989586621679478945
+ Termonad.Pcre: inline_c_ffi_6989586621679113076 :: IO CUInt
+ Termonad.Pcre: pcre2Multiline :: CUInt
+ Termonad.Prelude: hPutStrLn :: MonadIO m => Handle -> Text -> m ()
+ Termonad.Term: addPage :: TMState -> TMNotebookTab -> Box -> IO ()
+ Termonad.Term: computeTabLabel :: Int -> Maybe Text -> Text
+ Termonad.Term: createAndInitVteTerm :: FontDescription -> ConfigOptions -> IO Terminal
+ Termonad.Term: getCWDFromFocusedTab :: TMNotebook -> IO (Maybe Text)
+ Termonad.Term: launchShell :: Terminal -> Maybe Text -> IO Int
+ Termonad.Term: setFocusOn :: ApplicationWindow -> Terminal -> IO ()
- Termonad.Config.Colour: lensBackgroundColour :: forall c_a2BbE. Lens' (ColourConfig c_a2BbE) (Option c_a2BbE)
+ Termonad.Config.Colour: lensBackgroundColour :: forall c_a2BFz. Lens' (ColourConfig c_a2BFz) (Option c_a2BFz)
- Termonad.Config.Colour: lensCursorBgColour :: forall c_a2BbE. Lens' (ColourConfig c_a2BbE) (Option c_a2BbE)
+ Termonad.Config.Colour: lensCursorBgColour :: forall c_a2BFz. Lens' (ColourConfig c_a2BFz) (Option c_a2BFz)
- Termonad.Config.Colour: lensCursorFgColour :: forall c_a2BbE. Lens' (ColourConfig c_a2BbE) (Option c_a2BbE)
+ Termonad.Config.Colour: lensCursorFgColour :: forall c_a2BFz. Lens' (ColourConfig c_a2BFz) (Option c_a2BFz)
- Termonad.Config.Colour: lensForegroundColour :: forall c_a2BbE. Lens' (ColourConfig c_a2BbE) (Option c_a2BbE)
+ Termonad.Config.Colour: lensForegroundColour :: forall c_a2BFz. Lens' (ColourConfig c_a2BFz) (Option c_a2BFz)
- Termonad.Config.Colour: lensPalette :: forall c_a2BbE. Lens' (ColourConfig c_a2BbE) (Palette c_a2BbE)
+ Termonad.Config.Colour: lensPalette :: forall c_a2BFz. Lens' (ColourConfig c_a2BFz) (Palette c_a2BFz)
- Termonad.Config.Vec: [AddPeanoSym0KindInference] :: forall a6989586621679473193 arg_a1Wyg. SameKind (Apply AddPeanoSym0 arg_a1Wyg) (AddPeanoSym1 arg_a1Wyg) => AddPeanoSym0 a6989586621679473193
+ Termonad.Config.Vec: [AddPeanoSym0KindInference] :: forall a6989586621679475934 arg_a1Xgt. SameKind (Apply AddPeanoSym0 arg_a1Xgt) (AddPeanoSym1 arg_a1Xgt) => AddPeanoSym0 a6989586621679475934
- Termonad.Config.Vec: [AddPeanoSym1KindInference] :: forall a6989586621679473193 a6989586621679473194 arg_a1Wyf. SameKind (Apply (AddPeanoSym1 a6989586621679473193) arg_a1Wyf) (AddPeanoSym2 a6989586621679473193 arg_a1Wyf) => AddPeanoSym1 a6989586621679473193 a6989586621679473194
+ Termonad.Config.Vec: [AddPeanoSym1KindInference] :: forall a6989586621679475934 a6989586621679475935 arg_a1Xgs. SameKind (Apply (AddPeanoSym1 a6989586621679475934) arg_a1Xgs) (AddPeanoSym2 a6989586621679475934 arg_a1Xgs) => AddPeanoSym1 a6989586621679475934 a6989586621679475935
- Termonad.Config.Vec: [MultPeanoSym0KindInference] :: forall a6989586621679473200 arg_a1Wyn. SameKind (Apply MultPeanoSym0 arg_a1Wyn) (MultPeanoSym1 arg_a1Wyn) => MultPeanoSym0 a6989586621679473200
+ Termonad.Config.Vec: [MultPeanoSym0KindInference] :: forall a6989586621679475941 arg_a1XgA. SameKind (Apply MultPeanoSym0 arg_a1XgA) (MultPeanoSym1 arg_a1XgA) => MultPeanoSym0 a6989586621679475941
- Termonad.Config.Vec: [MultPeanoSym1KindInference] :: forall a6989586621679473200 a6989586621679473201 arg_a1Wym. SameKind (Apply (MultPeanoSym1 a6989586621679473200) arg_a1Wym) (MultPeanoSym2 a6989586621679473200 arg_a1Wym) => MultPeanoSym1 a6989586621679473200 a6989586621679473201
+ Termonad.Config.Vec: [MultPeanoSym1KindInference] :: forall a6989586621679475941 a6989586621679475942 arg_a1Xgz. SameKind (Apply (MultPeanoSym1 a6989586621679475941) arg_a1Xgz) (MultPeanoSym2 a6989586621679475941 arg_a1Xgz) => MultPeanoSym1 a6989586621679475941 a6989586621679475942
- Termonad.Config.Vec: [SSym0KindInference] :: forall t6989586621679473184 arg_a1Wy5. SameKind (Apply SSym0 arg_a1Wy5) (SSym1 arg_a1Wy5) => SSym0 t6989586621679473184
+ Termonad.Config.Vec: [SSym0KindInference] :: forall t6989586621679475925 arg_a1Xgi. SameKind (Apply SSym0 arg_a1Xgi) (SSym1 arg_a1Xgi) => SSym0 t6989586621679475925
- Termonad.Config.Vec: [SubtractPeanoSym0KindInference] :: forall a6989586621679473186 arg_a1Wy9. SameKind (Apply SubtractPeanoSym0 arg_a1Wy9) (SubtractPeanoSym1 arg_a1Wy9) => SubtractPeanoSym0 a6989586621679473186
+ Termonad.Config.Vec: [SubtractPeanoSym0KindInference] :: forall a6989586621679475927 arg_a1Xgm. SameKind (Apply SubtractPeanoSym0 arg_a1Xgm) (SubtractPeanoSym1 arg_a1Xgm) => SubtractPeanoSym0 a6989586621679475927
- Termonad.Config.Vec: [SubtractPeanoSym1KindInference] :: forall a6989586621679473186 a6989586621679473187 arg_a1Wy8. SameKind (Apply (SubtractPeanoSym1 a6989586621679473186) arg_a1Wy8) (SubtractPeanoSym2 a6989586621679473186 arg_a1Wy8) => SubtractPeanoSym1 a6989586621679473186 a6989586621679473187
+ Termonad.Config.Vec: [SubtractPeanoSym1KindInference] :: forall a6989586621679475927 a6989586621679475928 arg_a1Xgl. SameKind (Apply (SubtractPeanoSym1 a6989586621679475927) arg_a1Xgl) (SubtractPeanoSym2 a6989586621679475927 arg_a1Xgl) => SubtractPeanoSym1 a6989586621679475927 a6989586621679475928
- Termonad.Config.Vec: data AddPeanoSym1 (a6989586621679473193 :: Peano) :: (~>) Peano Peano
+ Termonad.Config.Vec: data AddPeanoSym1 (a6989586621679475934 :: Peano) :: (~>) Peano Peano
- Termonad.Config.Vec: data MultPeanoSym1 (a6989586621679473200 :: Peano) :: (~>) Peano Peano
+ Termonad.Config.Vec: data MultPeanoSym1 (a6989586621679475941 :: Peano) :: (~>) Peano Peano
- Termonad.Config.Vec: data SubtractPeanoSym1 (a6989586621679473186 :: Peano) :: (~>) Peano Peano
+ Termonad.Config.Vec: data SubtractPeanoSym1 (a6989586621679475927 :: Peano) :: (~>) Peano Peano
- Termonad.Config.Vec: sAddPeano :: forall (t_a1Xlx :: Peano) (t_a1Xly :: Peano). Sing t_a1Xlx -> Sing t_a1Xly -> Sing (Apply (Apply AddPeanoSym0 t_a1Xlx) t_a1Xly :: Peano)
+ Termonad.Config.Vec: sAddPeano :: forall (t_a1Y3K :: Peano) (t_a1Y3L :: Peano). Sing t_a1Y3K -> Sing t_a1Y3L -> Sing (Apply (Apply AddPeanoSym0 t_a1Y3K) t_a1Y3L :: Peano)
- Termonad.Config.Vec: sMultPeano :: forall (t_a1XlB :: Peano) (t_a1XlC :: Peano). Sing t_a1XlB -> Sing t_a1XlC -> Sing (Apply (Apply MultPeanoSym0 t_a1XlB) t_a1XlC :: Peano)
+ Termonad.Config.Vec: sMultPeano :: forall (t_a1Y3O :: Peano) (t_a1Y3P :: Peano). Sing t_a1Y3O -> Sing t_a1Y3P -> Sing (Apply (Apply MultPeanoSym0 t_a1Y3O) t_a1Y3P :: Peano)
- Termonad.Config.Vec: sSubtractPeano :: forall (t_a1Xlt :: Peano) (t_a1Xlu :: Peano). Sing t_a1Xlt -> Sing t_a1Xlu -> Sing (Apply (Apply SubtractPeanoSym0 t_a1Xlt) t_a1Xlu :: Peano)
+ Termonad.Config.Vec: sSubtractPeano :: forall (t_a1Y3G :: Peano) (t_a1Y3H :: Peano). Sing t_a1Y3G -> Sing t_a1Y3H -> Sing (Apply (Apply SubtractPeanoSym0 t_a1Y3G) t_a1Y3H :: Peano)
- Termonad.Config.Vec: type AddPeanoSym2 (a6989586621679473193 :: Peano) (a6989586621679473194 :: Peano) = AddPeano a6989586621679473193 a6989586621679473194
+ Termonad.Config.Vec: type AddPeanoSym2 (a6989586621679475934 :: Peano) (a6989586621679475935 :: Peano) = AddPeano a6989586621679475934 a6989586621679475935
- Termonad.Config.Vec: type MultPeanoSym2 (a6989586621679473200 :: Peano) (a6989586621679473201 :: Peano) = MultPeano a6989586621679473200 a6989586621679473201
+ Termonad.Config.Vec: type MultPeanoSym2 (a6989586621679475941 :: Peano) (a6989586621679475942 :: Peano) = MultPeano a6989586621679475941 a6989586621679475942
- Termonad.Config.Vec: type SSym1 (t6989586621679473184 :: Peano) = S t6989586621679473184
+ Termonad.Config.Vec: type SSym1 (t6989586621679475925 :: Peano) = S t6989586621679475925
- Termonad.Config.Vec: type SubtractPeanoSym2 (a6989586621679473186 :: Peano) (a6989586621679473187 :: Peano) = SubtractPeano a6989586621679473186 a6989586621679473187
+ Termonad.Config.Vec: type SubtractPeanoSym2 (a6989586621679475927 :: Peano) (a6989586621679475928 :: Peano) = SubtractPeano a6989586621679475927 a6989586621679475928

Files

.nix-helpers/nixpkgs.nix view
@@ -10,6 +10,9 @@   nixpkgs ? null , # Additional overlays to apply when importing nixpkgs.   additionalOverlays ? []+, # Build all the examples bundled with termonad.  Normally this is only used+  # in CI for testing that the examples all still compile.+  buildExamples ? false }:  let@@ -32,18 +35,37 @@         super.haskell.packageOverrides hself hsuper // {           termonad =             let+              filesToIgnore = [+                ".git"+                ".nix-helpers"+                "result"+                ".stack-work"+                ".travis.yml"+              ];+               src =                 builtins.filterSource                   (path: type: with self.stdenv.lib;-                    ! elem (baseNameOf path) [ ".git" "result" ".stack-work" ".nix-helpers" ] &&+                    ! elem (baseNameOf path) filesToIgnore &&                     ! any (flip hasPrefix (baseNameOf path)) [ "dist" ".ghc" ]                   )                   ./..;++              extraCabal2nixOptions =+                self.lib.optionalString buildExamples "-fbuildexamples";++              termonadDrv =+                hself.callCabal2nixWithOptions+                  "termonad"+                  src+                  extraCabal2nixOptions+                  {+                    inherit (self.gnome3) gtk3;+                    libpcre2 = self.pcre2;+                    vte_291 = self.gnome3.vte;+                  };             in-            hself.callCabal2nix "termonad" src {-              inherit (self.gnome3) gtk3;-              vte_291 = self.gnome3.vte;-            };+            termonadDrv;         };     }; 
.nix-helpers/termonad-with-packages.nix view
@@ -98,12 +98,13 @@ in  { extraHaskellPackages ? defaultPackages-, compiler ? null , nixpkgs ? null , additionalOverlays ? []+, compiler ? null+, buildExamples ? false }@args: -with (import ./nixpkgs.nix { inherit compiler nixpkgs additionalOverlays; });+with (import ./nixpkgs.nix { inherit compiler nixpkgs additionalOverlays buildExamples; });  let   # GHC environment that has termonad available, as well as the packages
CHANGELOG.md view
@@ -1,3 +1,10 @@+## 2.0.0.0++* Added menu option to search for a regex within the terminal output.+  This removes support for versions of VTE-2.91 older than 0.46.+  This means that compiling on older versions of Debian and Ubuntu may no+  longer work. [#118](https://github.com/cdepillabout/termonad/pull/118)+ ## 1.3.0.0  * Change all uses of
README.md view
@@ -226,6 +226,9 @@ |------------|--------| | <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>t</kbd> | Open new tab. | | <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>w</kbd> | Close tab. |+| <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>f</kbd> | Open Find dialog for searching for a regex. |+| <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>p</kbd> | Find the regex **above** the current position. |+| <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>i</kbd> | Find the regex **below** the current position. | | <kbd>Ctrl</kbd> <kbd>+</kbd> | Increase font size. | | <kbd>Ctrl</kbd> <kbd>-</kbd> | Decrease font size. | | <kbd>Alt</kbd> <kbd>(number key)</kbd> | Switch to tab `number`.  For example, <kbd>Alt</kbd> <kbd>2</kbd> switches to tab 2. |
default.nix view
@@ -17,7 +17,11 @@ # # $ nix-env --file default.nix --install -{ compiler ? null, nixpkgs ? null, additionalOverlays ? [] }@args:+{ nixpkgs ? null+, additionalOverlays ? []+, compiler ? null+, buildExamples ? false+}@args:  import .nix-helpers/termonad-with-packages.nix args 
src/Termonad/App.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE ForeignFunctionInterface #-}  module Termonad.App where @@ -23,6 +24,7 @@   ( Application   , ApplicationWindow(ApplicationWindow)   , Box(Box)+  , PositionType(PositionTypeRight)   , ResponseType(ResponseTypeNo, ResponseTypeYes)   , ScrolledWindow(ScrolledWindow)   , pattern STYLE_PROVIDER_PRIORITY_APPLICATION@@ -40,10 +42,16 @@   , dialogAddButton   , dialogGetContentArea   , dialogNew+  , dialogResponse   , dialogRun+  , entryGetText+  , entryNew+  , gridAttachNextTo+  , gridNew   , labelNew   , notebookGetNPages   , notebookNew+  , onEntryActivate   , onNotebookPageRemoved   , onNotebookPageReordered   , onNotebookSwitchPage@@ -72,8 +80,14 @@   , fontDescriptionSetAbsoluteSize   ) import GI.Vte-  ( terminalCopyClipboard+  ( catchRegexError+  , regexNewForSearch+  , terminalCopyClipboard   , terminalPasteClipboard+  , terminalSearchFindNext+  , terminalSearchFindPrevious+  , terminalSearchSetRegex+  , terminalSearchSetWrapAround   , terminalSetFont   ) @@ -106,6 +120,7 @@   , newEmptyTMState   , tmNotebookTabTermContainer   , tmNotebookTabs+  , tmStateApp   , tmStateNotebook   ) import Termonad.XML (interfaceText, menuText)@@ -309,11 +324,6 @@       else setShowTabs tmConfig note    void $ onNotebookSwitchPage note $ \_ pageNum -> do-    maybeRes <- tryTakeMVar mvarTMState-    case maybeRes of-      Nothing -> pure ()-      Just val -> do-        putMVar mvarTMState val     modifyMVar_ mvarTMState $ \tmState -> do       let notebook = tmStateNotebook tmState           tabs = tmNotebookTabs notebook@@ -393,8 +403,23 @@   actionMapAddAction app reduceFontAction   applicationSetAccelsForAction app "app.reducefont" ["<Ctrl>minus"] +  findAction <- simpleActionNew "find" Nothing+  void $ onSimpleActionActivate findAction $ \_ -> doFind mvarTMState+  actionMapAddAction app findAction+  applicationSetAccelsForAction app "app.find" ["<Shift><Ctrl>F"]++  findAboveAction <- simpleActionNew "findabove" Nothing+  void $ onSimpleActionActivate findAboveAction $ \_ -> findAbove mvarTMState+  actionMapAddAction app findAboveAction+  applicationSetAccelsForAction app "app.findabove" ["<Shift><Ctrl>P"]++  findBelowAction <- simpleActionNew "findbelow" Nothing+  void $ onSimpleActionActivate findBelowAction $ \_ -> findBelow mvarTMState+  actionMapAddAction app findBelowAction+  applicationSetAccelsForAction app "app.findbelow" ["<Shift><Ctrl>I"]+   aboutAction <- simpleActionNew "about" Nothing-  void $ onSimpleActionActivate aboutAction (const $ showAboutDialog app)+  void $ onSimpleActionActivate aboutAction $ \_ -> showAboutDialog app   actionMapAddAction app aboutAction    when (tmConfig ^. lensOptions . lensShowMenu) $ do@@ -439,6 +464,122 @@   windowSetTransientFor aboutDialog win   void $ dialogRun aboutDialog   widgetDestroy aboutDialog++showFindDialog :: Application -> IO (Maybe Text)+showFindDialog app = do+  win <- applicationGetActiveWindow app+  dialog <- dialogNew+  box <- dialogGetContentArea dialog+  grid <- gridNew++  searchForLabel <- labelNew (Just "Search for regex:")+  containerAdd grid searchForLabel+  widgetShow searchForLabel+  setWidgetMargin searchForLabel 10++  searchEntry <- entryNew+  gridAttachNextTo grid searchEntry (Just searchForLabel) PositionTypeRight 1 1+  widgetShow searchEntry+  setWidgetMargin searchEntry 10+  -- setWidgetMarginBottom searchEntry 20+  void $+    onEntryActivate searchEntry $+      dialogResponse dialog (fromIntegral (fromEnum ResponseTypeYes))++  void $+    dialogAddButton+      dialog+      "Close"+      (fromIntegral (fromEnum ResponseTypeNo))+  void $+    dialogAddButton+      dialog+      "Find"+      (fromIntegral (fromEnum ResponseTypeYes))++  containerAdd box grid+  widgetShow grid+  windowSetTransientFor dialog win+  res <- dialogRun dialog++  searchString <- entryGetText searchEntry+  let maybeSearchString =+        case toEnum (fromIntegral res) of+          ResponseTypeYes -> Just searchString+          _ -> Nothing++  widgetDestroy dialog++  pure maybeSearchString++doFind :: TMState -> IO ()+doFind mvarTMState = do+  tmState <- readMVar mvarTMState+  let app = tmStateApp tmState+  maybeSearchString <- showFindDialog app+  -- putStrLn $ "trying to find: " <> tshow maybeSearchString+  maybeTerminal <- getFocusedTermFromState mvarTMState+  case (maybeSearchString, maybeTerminal) of+    (Just searchString, Just terminal) -> do+      -- TODO: Figure out how to import the correct pcre flags.+      --+      -- If you don't pass the pcre2Multiline flag, VTE gives+      -- the following warning:+      --+      -- (termonad-linux-x86_64:18792): Vte-WARNING **:+      -- 21:56:31.193: (vtegtk.cc:2269):void+      -- vte_terminal_search_set_regex(VteTerminal*,+      -- VteRegex*, guint32): runtime check failed:+      -- (regex == nullptr ||+      -- _vte_regex_get_compile_flags(regex) & PCRE2_MULTILINE)+      --+      -- However, if you do add the pcre2Multiline flag,+      -- the terminalSearchSetRegex appears to just completely+      -- not work.+      let pcreFlags = 0+      let newRegex =+            regexNewForSearch+              searchString+              (fromIntegral $ length searchString)+              pcreFlags+      eitherRegex <-+        catchRegexError+          (fmap Right newRegex)+          (\_ errMsg -> pure (Left errMsg))+      case eitherRegex of+        Left errMsg -> do+          let msg = "error when creating regex: " <> errMsg+          hPutStrLn stderr msg+        Right regex -> do+          terminalSearchSetRegex terminal (Just regex) pcreFlags+          terminalSearchSetWrapAround terminal True+          _matchFound <- terminalSearchFindPrevious terminal+          -- TODO: Setup an actual logging framework to show these+          -- kinds of log messages.  Also make a similar change in+          -- findAbove and findBelow.+          -- putStrLn $ "was match found: " <> tshow matchFound+          pure ()+    _ -> pure ()++findAbove :: TMState -> IO ()+findAbove mvarTMState = do+  maybeTerminal <- getFocusedTermFromState mvarTMState+  case maybeTerminal of+    Nothing -> pure ()+    Just terminal -> do+      _matchFound <- terminalSearchFindPrevious terminal+      -- putStrLn $ "was match found: " <> tshow matchFound+      pure ()++findBelow :: TMState -> IO ()+findBelow mvarTMState = do+  maybeTerminal <- getFocusedTermFromState mvarTMState+  case maybeTerminal of+    Nothing -> pure ()+    Just terminal -> do+      _matchFound <- terminalSearchFindNext terminal+      -- putStrLn $ "was match found: " <> tshow matchFound+      pure ()  appStartup :: Application -> IO () appStartup _app = pure ()
+ src/Termonad/Pcre.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE TemplateHaskell #-}++module Termonad.Pcre where++import Foreign.C (CUInt)+import qualified Language.C.Inline as C++C.verbatim "#define PCRE2_CODE_UNIT_WIDTH 0"+C.include "<pcre2.h>"++pcre2Multiline :: CUInt+pcre2Multiline = [C.pure| unsigned int { PCRE2_MULTILINE } |]
src/Termonad/Prelude.hs view
@@ -1,11 +1,16 @@ module Termonad.Prelude   ( module X+  , hPutStrLn   , whenJust   ) where  import Control.Lens as X ((&)) import ClassyPrelude as X import Data.Proxy as X+import qualified Data.Text.IO as TextIO  whenJust :: Monoid m => Maybe a -> (a -> m) -> m whenJust = flip foldMap++hPutStrLn :: MonadIO m => Handle -> Text -> m ()+hPutStrLn hndl = liftIO . TextIO.hPutStrLn hndl
src/Termonad/Term.hs view
@@ -23,6 +23,7 @@   ) import GI.Gtk   ( Align(AlignFill)+  , ApplicationWindow   , Box   , Button   , IconSize(IconSizeMenu)@@ -68,7 +69,7 @@   , windowSetFocus   , windowSetTransientFor   )-import GI.Pango (EllipsizeMode(EllipsizeModeMiddle))+import GI.Pango (EllipsizeMode(EllipsizeModeMiddle), FontDescription) import GI.Vte   ( PtyFlags(PtyFlagsDefault)   , Terminal@@ -106,6 +107,7 @@   , ShowScrollbar(..)   , ShowTabBar(..)   , TMConfig(hooks, options)+  , TMNotebook   , TMNotebookTab   , TMState   , TMState'(TMState, tmStateAppWin, tmStateConfig, tmStateFontDesc, tmStateNotebook)@@ -202,12 +204,36 @@           term' = tmNotebookTab ^. lensTMNotebookTabTerm . lensTerm       relabelTab notebook label scrolledWin term' +-- | Compute the text for a 'Label' for a GTK Notebook tab.+--+-- >>> computeTabLabel 0 (Just "me@machine:~")+-- "1. me@machine:~"+--+-- >>> computeTabLabel 5 (Just "bash process")+-- "6. bash process"+--+-- >>> computeTabLabel 2 Nothing+-- "3. shell"+computeTabLabel+  :: Int+  -- ^ Tab number.  0 is used for the first tab, 1 for the second, etc.+  -> Maybe Text+  -- ^ A possible title for a tab.  If this is 'Nothing', then the string+  -- @shell@ will be used.+  -> Text+computeTabLabel pageNum maybeTitle =+  let title = fromMaybe "shell" maybeTitle+  in tshow (pageNum + 1) <> ". " <> title++-- | Update the given 'Label' for a GTK Notebook tab.+--+-- The new text for the label is determined by the 'computeTabLabel' function. relabelTab :: Notebook -> Label -> ScrolledWindow -> Terminal -> IO () relabelTab notebook label scrolledWin term' = do-  pageNum <- notebookPageNum notebook scrolledWin+  tabNum <- notebookPageNum notebook scrolledWin   maybeTitle <- terminalGetWindowTitle term'-  let title = fromMaybe "shell" maybeTitle-  labelSetLabel label $ tshow (pageNum + 1) <> ". " <> title+  let labelText = computeTabLabel (fromIntegral tabNum) maybeTitle+  labelSetLabel label labelText  showScrollbarToPolicy :: ShowScrollbar -> PolicyType showScrollbarToPolicy ShowScrollbarNever = PolicyTypeNever@@ -217,7 +243,8 @@ createScrolledWin :: TMState -> IO ScrolledWindow createScrolledWin mvarTMState = do   tmState <- readMVar mvarTMState-  let showScrollbarVal = tmState ^. lensTMStateConfig . lensOptions . lensShowScrollbar+  let showScrollbarVal =+        tmState ^. lensTMStateConfig . lensOptions . lensShowScrollbar       vScrollbarPolicy = showScrollbarToPolicy showScrollbarVal   scrolledWin <- scrolledWindowNew noAdjustment noAdjustment   widgetShow scrolledWin@@ -286,27 +313,47 @@ #endif #endif +-- | Get the current working directory from the shell in the focused tab of a+-- notebook.+--+-- Returns 'Nothing' if there is no focused tab of the notebook, or the+-- current working directory could not be detected for the shell.+getCWDFromFocusedTab :: TMNotebook -> IO (Maybe Text)+getCWDFromFocusedTab currNote = do+  let maybeFocusedTab = getFocusItemFL (tmNotebookTabs currNote)+  case maybeFocusedTab of+    Nothing -> pure Nothing+    Just focusedNotebookTab -> do+      let shellPid = pid (tmNotebookTabTerm focusedNotebookTab)+      cwdOfPid shellPid -createTerm :: (TMState -> EventKey -> IO Bool) -> TMState -> IO TMTerm-createTerm handleKeyPress mvarTMState = do-  assertInvariantTMState mvarTMState-  scrolledWin <- createScrolledWin mvarTMState-  TMState{tmStateAppWin, tmStateFontDesc, tmStateConfig, tmStateNotebook=currNote} <--    readMVar mvarTMState-  let maybeCurrFocusedTabPid = pid . tmNotebookTabTerm <$> getFocusItemFL (tmNotebookTabs currNote)-  maybeCurrDir <- maybe (pure Nothing) cwdOfPid maybeCurrFocusedTabPid+-- | Create the VTE 'Terminal', set the fonts and options+createAndInitVteTerm :: FontDescription -> ConfigOptions -> IO Terminal+createAndInitVteTerm tmStateFontDesc curOpts = do   vteTerm <- terminalNew   terminalSetFont vteTerm (Just tmStateFontDesc)-  let curOpts = options tmStateConfig   terminalSetWordCharExceptions vteTerm $ wordCharExceptions curOpts   terminalSetScrollbackLines vteTerm (fromIntegral (scrollbackLen curOpts))   terminalSetCursorBlinkMode vteTerm (cursorBlinkMode curOpts)   widgetShow vteTerm+  pure vteTerm++-- | Starts a shell in a terminal and return a new TMTerm+launchShell+  :: Terminal+  -- ^ GTK 'Terminal' to spawn the shell in.+  -> Maybe Text+  -- ^ An optional path to the current working directory to start the+  -- shell in.  If 'Nothing', use the current working directory of the+  -- termonad process.+  -> IO Int+launchShell vteTerm maybeCurrDir = do   -- Should probably use GI.Vte.Functions.getUserShell, but contrary to its   -- documentation it raises an exception rather wrap in Maybe.   mShell <- lookupEnv "SHELL"   let argv = fromMaybe ["/usr/bin/env", "bash"] (pure <$> mShell)-  terminalProcPid <-+  -- Launch the shell+  shellPid <-     terminalSpawnSync       vteTerm       [PtyFlagsDefault]@@ -316,28 +363,83 @@       ([SpawnFlagsDefault] :: [SpawnFlags])       Nothing       noCancellable-  tmTerm <- newTMTerm vteTerm (fromIntegral terminalProcPid)-  containerAdd scrolledWin vteTerm-  (tabLabelBox, tabLabel, tabCloseButton) <- createNotebookTabLabel-  let notebookTab = createTMNotebookTab tabLabel scrolledWin tmTerm-  void $-    onButtonClicked tabCloseButton $-      termClose notebookTab mvarTMState-  mvarReturnAction <--    modifyMVar mvarTMState $ \tmState -> do+  pure (fromIntegral shellPid)++-- | Add a page to the notebook and switch to it.+addPage+  :: TMState+  -> TMNotebookTab+  -> Box+  -- ^ The GTK Object holding the label we want to show for the tab of the+  -- newly created page of the notebook.+  -> IO ()+addPage mvarTMState notebookTab tabLabelBox = do+  -- Append a new notebook page and update the TMState to reflect this.+  (note, pageIndex) <- modifyMVar mvarTMState appendNotebookPage++  -- Switch the current Notebook page to the the newly added page.+  notebookSetCurrentPage note pageIndex+  where+    appendNotebookPage :: TMState' -> IO (TMState', (Notebook, Int32))+    appendNotebookPage tmState = do       let notebook = tmStateNotebook tmState           note = tmNotebook notebook           tabs = tmNotebookTabs notebook+          scrolledWin = tmNotebookTabTermContainer notebookTab       pageIndex <- notebookAppendPage note scrolledWin (Just tabLabelBox)       notebookSetTabReorderable note scrolledWin True       setShowTabs (tmState ^. lensTMStateConfig) note       let newTabs = appendFL tabs notebookTab           newTMState =             tmState & lensTMStateNotebook . lensTMNotebookTabs .~ newTabs-          mvarReturnAction = notebookSetCurrentPage note pageIndex-      pure (newTMState, mvarReturnAction)-  mvarReturnAction+      pure (newTMState, (note, pageIndex))++-- | Set the keyboard focus on a vte terminal+setFocusOn :: ApplicationWindow -> Terminal -> IO()+setFocusOn tmStateAppWin vteTerm = do+  widgetGrabFocus vteTerm+  windowSetFocus tmStateAppWin (Just vteTerm)++-- | Create a new 'TMTerm', setting it up and adding it to the GTKNotebook.+createTerm+  :: (TMState -> EventKey -> IO Bool)+  -- ^ Funtion for handling key presses on the terminal.+  -> TMState+  -> IO TMTerm+createTerm handleKeyPress mvarTMState = do+  -- Check preconditions+  assertInvariantTMState mvarTMState++  -- Read needed data in TMVar+  TMState{tmStateAppWin, tmStateFontDesc, tmStateConfig, tmStateNotebook=currNote} <-+    readMVar mvarTMState++  -- Create a new terminal and launch a shell in it+  vteTerm <- createAndInitVteTerm tmStateFontDesc (options tmStateConfig)+  maybeCurrDir <- getCWDFromFocusedTab currNote+  termShellPid <- launchShell vteTerm maybeCurrDir+  tmTerm <- newTMTerm vteTerm termShellPid++  -- Create the container add the VTE term in it+  scrolledWin <- createScrolledWin mvarTMState+  containerAdd scrolledWin vteTerm++  -- Create the GTK widget for the Notebook tab+  (tabLabelBox, tabLabel, tabCloseButton) <- createNotebookTabLabel++  -- Create notebook state+  let notebookTab = createTMNotebookTab tabLabel scrolledWin tmTerm++  -- Add the new notebooktab to the notebook.+  addPage mvarTMState notebookTab tabLabelBox++  -- Setup the initial label for the notebook tab.  This needs to happen+  -- after we add the new page to the notebook, so that the page can get labelled+  -- appropriately.   relabelTab (tmNotebook currNote) tabLabel scrolledWin vteTerm++  -- Connect callbacks+  void $ onButtonClicked tabCloseButton $ termClose notebookTab mvarTMState   void $ onTerminalWindowTitleChanged vteTerm $ do     TMState{tmStateNotebook} <- readMVar mvarTMState     let notebook = tmNotebook tmStateNotebook@@ -345,8 +447,13 @@   void $ onWidgetKeyPressEvent vteTerm $ handleKeyPress mvarTMState   void $ onWidgetKeyPressEvent scrolledWin $ handleKeyPress mvarTMState   void $ onTerminalChildExited vteTerm $ \_ -> termExit notebookTab mvarTMState-  widgetGrabFocus vteTerm-  windowSetFocus tmStateAppWin (Just vteTerm)++  -- Put the keyboard focus on the term+  setFocusOn tmStateAppWin vteTerm++  -- Make sure the state is still right   assertInvariantTMState mvarTMState++  -- Run user-defined hooks for modifying the newly-created VTE Terminal.   createTermHook (hooks tmStateConfig) mvarTMState vteTerm   pure tmTerm
src/Termonad/XML.hs view
@@ -91,6 +91,21 @@           </item>         </submenu>         <submenu>+          <attribute name="label" translatable="yes">Search</attribute>+          <item>+            <attribute name="label" translatable="yes">_Find...</attribute>+            <attribute name="action">app.find</attribute>+          </item>+          <item>+            <attribute name="label" translatable="yes">Find Above</attribute>+            <attribute name="action">app.findabove</attribute>+          </item>+          <item>+            <attribute name="label" translatable="yes">Find Below</attribute>+            <attribute name="action">app.findbelow</attribute>+          </item>+        </submenu>+        <submenu>           <attribute name="label" translatable="yes">Help</attribute>           <item>             <attribute name="label" translatable="yes">_About</attribute>
termonad.cabal view
@@ -1,5 +1,5 @@ name:                termonad-version:             1.3.0.0+version:             2.0.0.0 synopsis:            Terminal emulator configurable in Haskell description:         Please see <https://github.com/cdepillabout/termonad#readme README.md>. homepage:            https://github.com/cdepillabout/termonad@@ -46,6 +46,7 @@                      , Termonad.Gtk                      , Termonad.Keys                      , Termonad.Lenses+                     , Termonad.Pcre                      , Termonad.Prelude                      , Termonad.Term                      , Termonad.Types@@ -70,11 +71,13 @@                      , gi-pango                      , gi-vte >= 2.91.19                      , haskell-gi-base >= 0.21.2+                     , inline-c                      , lens                      , mono-traversable                      , pretty-simple                      , QuickCheck                      , singletons+                     , text                      , xml-conduit                      , xml-html-qq   default-language:    Haskell2010@@ -112,7 +115,8 @@   other-extensions:    TemplateHaskell                      , UndecidableInstances   pkgconfig-depends:   gtk+-3.0-                     , vte-2.91+                     , libpcre2-8+                     , vte-2.91 >= 0.46  executable termonad   main-is:             Main.hs
test/readme/README.lhs view
@@ -226,6 +226,9 @@ |------------|--------| | <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>t</kbd> | Open new tab. | | <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>w</kbd> | Close tab. |+| <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>f</kbd> | Open Find dialog for searching for a regex. |+| <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>p</kbd> | Find the regex **above** the current position. |+| <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>i</kbd> | Find the regex **below** the current position. | | <kbd>Ctrl</kbd> <kbd>+</kbd> | Increase font size. | | <kbd>Ctrl</kbd> <kbd>-</kbd> | Decrease font size. | | <kbd>Alt</kbd> <kbd>(number key)</kbd> | Switch to tab `number`.  For example, <kbd>Alt</kbd> <kbd>2</kbd> switches to tab 2. |