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 +27/−5
- .nix-helpers/termonad-with-packages.nix +3/−2
- CHANGELOG.md +7/−0
- README.md +3/−0
- default.nix +5/−1
- src/Termonad/App.hs +148/−7
- src/Termonad/Pcre.hs +13/−0
- src/Termonad/Prelude.hs +5/−0
- src/Termonad/Term.hs +136/−29
- src/Termonad/XML.hs +15/−0
- termonad.cabal +6/−2
- test/readme/README.lhs +3/−0
.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. |