Agda-2.8.0: src/agda-mode/Main.hs
{-# OPTIONS_GHC -Wunused-imports #-}
-- | A program which either tries to add setup code for Agda's Emacs
-- mode to the users .emacs file, or provides information to Emacs
-- about where the Emacs mode is installed.
--
-- This executable is deprecated, its functionality covered since 2.8
-- by the @--emacs-mode@ flag of the agda executable.
--
-- However, we will continue to ship it with Agda
-- because the emacs mode of older Agda versions assumes its existence
-- for the version switching functionality @agda2-set-program-version@.
module Main (main) where
import System.Environment ( getArgs, getProgName )
import System.Exit ( exitFailure )
import System.FilePath ( takeFileName )
import Agda.Setup as Agda ( getDataDir, setup )
import Agda.Setup.EmacsMode
import Agda.Version ( version )
-- | The program.
main :: IO ()
main = do
self <- takeFileName <$> getProgName
args <- getArgs
case args of
[arg]
| arg == locateFlag -> do
-- Ensure that Agda has been setup so the Emacs mode is available.
Agda.setup False
printEmacsModeFile
| arg == setupFlag -> do
inform $ deprecation self
-- Ensure that Agda has been setup so the Emacs mode is available.
Agda.setup False
setupDotEmacs "agda"
| arg == compileFlag -> do
inform $ deprecation self
-- Ensure that Agda has been setup so the Emacs mode is available.
Agda.setup False
compileElispFiles
_ -> do
dir <- getDataDir
inform $ deprecation self
inform $ usage dir
exitFailure
-- | Usage information.
usage :: FilePath -> String
usage dataDir = unlines
[ "This program, which is part of Agda version " ++ version ++ ", can be run"
, "in three modes, depending on which option it is invoked with:"
, ""
, setupFlag
, ""
, " The program unloads Agda's data files, including the Emacs mode,"
, " to the following location:"
, ""
, " " ++ dataDir
, ""
, " It then tries to add setup code for Agda's Emacs mode to the"
, " current user's .emacs file. It is assumed that the .emacs file"
, " uses the character encoding specified by the locale."
, ""
, locateFlag
, ""
, " The path to the Emacs mode's main file is printed on standard"
, " output (using the UTF-8 character encoding and no trailing"
, " newline)."
, ""
, compileFlag
, ""
, " The program unloads Agda's data files, including the Emacs mode,"
, " to the following location:"
, ""
, " " ++ dataDir
, ""
, " It then tries to compile Agda's Emacs mode's source files."
, ""
, " WARNING: If you reinstall the Agda mode without recompiling the Emacs"
, " Lisp files, then Emacs may continue using the old, compiled files."
]
-- | Deprecation warning.
deprecation :: String -> String
deprecation self = unlines
[ "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
, "@ Warning: " ++ self ++ " has been deprecated with Agda 2.8.0 @"
, "@ and will be removed in the future. @"
, "@ From Agda 2.8.0 on, use `agda --emacs-mode` instead. @"
, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
, ""
]