Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: migrate to vty-crossplatform and brick-2 #2128

Merged
merged 2 commits into from
Dec 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions hledger-ui/Hledger/UI/Editor.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import Safe
import System.Environment
import System.Exit
import System.FilePath
import System.Info (os)
import System.Process

import Hledger
Expand Down Expand Up @@ -123,13 +124,17 @@ editFileAtPositionCommand mpos f = do
return $ unwords $ cmd:args

-- | Get the user's preferred edit command. This is the value of the
-- $HLEDGER_UI_EDITOR environment variable, or of $EDITOR, or a
-- default ("emacsclient -a '' -nw", which starts/connects to an emacs
-- daemon in terminal mode).
-- $HLEDGER_UI_EDITOR environment variable, or of $EDITOR, or an OS-specific default.
--
-- For non-windows machines that would be "emacsclient -a '' -nw",
-- which starts/connects to an emacs daemon in terminal mode.
--
-- For windows the default is a plain "notepad.exe"
getEditCommand :: IO String
getEditCommand = do
hledger_ui_editor_env <- lookupEnv "HLEDGER_UI_EDITOR"
editor_env <- lookupEnv "EDITOR"
let Just cmd = hledger_ui_editor_env <|> editor_env <|> Just "emacsclient -a '' -nw"
let defaultEditor = Just $ if os == "mingw32" then "notepad.exe" else "emacsclient -a '' -nw"
let Just cmd = hledger_ui_editor_env <|> editor_env <|> defaultEditor
return cmd

3 changes: 2 additions & 1 deletion hledger-ui/Hledger/UI/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ import Data.List (find)
import Data.List.Extra (nubSort)
import Data.Maybe (fromMaybe)
import qualified Data.Text as T
import Graphics.Vty (mkVty, Mode (Mouse), Vty (outputIface), Output (setMode))
import Graphics.Vty (Mode (Mouse), Vty (outputIface), Output (setMode))
import Graphics.Vty.CrossPlatform (mkVty)
import Lens.Micro ((^.))
import System.Directory (canonicalizePath)
import System.Environment (withProgName)
Expand Down
16 changes: 7 additions & 9 deletions hledger-ui/hledger-ui.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ library
ansi-terminal >=0.9
, async
, base >=4.14 && <4.19
, brick >=1.5 && <2
, brick >=2.1.1 && <2.2
, cmdargs >=0.8
, containers >=0.5.9
, data-default
Expand All @@ -95,14 +95,16 @@ library
, text-zipper >=0.4
, time >=1.5
, transformers
, unix
, vector
, vty >=5.15 && <6
, vty ==6.1.*
, vty-crossplatform >=0.4.0.0 && <0.5.0.0
default-language: Haskell2010
if os(windows)
buildable: False
build-depends:
vty-windows >=0.2.0.1 && <0.3.0.0
else
buildable: True
build-depends:
unix

executable hledger-ui
main-is: hledger-ui.hs
Expand All @@ -116,9 +118,5 @@ executable hledger-ui
base >=4.14 && <4.19
, hledger-ui
default-language: Haskell2010
if os(windows)
buildable: False
else
buildable: True
if flag(threaded)
ghc-options: -threaded
25 changes: 14 additions & 11 deletions hledger-ui/package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ ghc-options:
dependencies:
- base >=4.14 && <4.19

when:
# curses is required to build terminfo for vty for hledger-ui.
# On POSIX systems it might be not present.
# On windows it's very likely not present, but possibly it could be.
Expand All @@ -61,12 +60,10 @@ when:
# curses
# default: True
# description:
# For now, just don't build hledger-ui on windows
- condition: os(windows)
then:
buildable: false
else:
buildable: true
#
# note on windows: the vty-windows (and hence hledger-ui) will reliably work only on the newer backends
# like Windows Terminal.
# mintty-based backends (default for cygwin/gitbash/msys2) are not supported (yet)

library:
source-dirs: .
Expand Down Expand Up @@ -101,10 +98,16 @@ library:
- time >=1.5
- transformers
- vector
# not installable on windows, cf buildable flag below
- brick >=1.5 && <2
- vty >=5.15 && <6
- unix
- brick >=2.1.1 && <2.2
- vty >=6.1 && <6.2
- vty-crossplatform >= 0.4.0.0 && < 0.5.0.0
simonmichael marked this conversation as resolved.
Show resolved Hide resolved
when:
- condition: os(windows)
then:
dependencies: vty-windows >= 0.2.0.1 && < 0.3.0.0
else:
dependencies: unix


executables:
hledger-ui:
Expand Down
7 changes: 7 additions & 0 deletions stack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,10 @@ nix:
# # "$targets": -Werror
# # "$everything": -O2
# # some-package: -DSOME_CPP_FLAG
extra-deps:
- vty-windows-0.2.0.1
- vty-crossplatform-0.4.0.0
simonmichael marked this conversation as resolved.
Show resolved Hide resolved
- brick-2.1.1
- vty-6.1
- vty-unix-0.2.0.0

8 changes: 6 additions & 2 deletions stack9.4.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ packages:
- hledger-ui
- hledger-web

# extra-deps:

extra-deps:
- vty-windows-0.2.0.1
- vty-crossplatform-0.4.0.0
- brick-2.1.1
- vty-6.1
- vty-unix-0.2.0.0
nix:
pure: false
packages: [perl gmp ncurses zlib]
Expand Down