diff --git a/app/src/main/assets/install-zsh.sh b/app/src/main/assets/install-zsh.sh deleted file mode 100755 index 09afd1d..0000000 --- a/app/src/main/assets/install-zsh.sh +++ /dev/null @@ -1,125 +0,0 @@ -main() { - # Use colors, but only if connected to a terminal, and that terminal - # supports them. - if which tput >/dev/null 2>&1; then - ncolors=$(tput colors) - fi - if [ -t 1 ] && [ -n "$ncolors" ] && [ "$ncolors" -ge 8 ]; then - RED="$(tput setaf 1)" - GREEN="$(tput setaf 2)" - YELLOW="$(tput setaf 3)" - BLUE="$(tput setaf 4)" - BOLD="$(tput bold)" - NORMAL="$(tput sgr0)" - else - RED="" - GREEN="" - YELLOW="" - BLUE="" - BOLD="" - NORMAL="" - fi - - # Only enable exit-on-error after the non-critical colorization stuff, - # which may fail on systems lacking tput or terminfo - set -e - - # There's no shells in /etc/ - # Just skip it - # ---- By NeoTerm - # - # CHECK_ZSH_INSTALLED=$(grep /zsh$ /etc/shells | wc -l) - # if [ ! $CHECK_ZSH_INSTALLED -ge 1 ]; then - # printf "${YELLOW}Zsh is not installed!${NORMAL} Please install zsh first!\n" - # exit - # fi - # unset CHECK_ZSH_INSTALLED - - if [ ! -n "$ZSH" ]; then - ZSH=~/.oh-my-zsh - fi - - if [ -d "$ZSH" ]; then - printf "${YELLOW}You already have Oh My Zsh installed.${NORMAL}\n" - printf "You'll need to remove $ZSH if you want to re-install.\n" - exit - fi - - # Prevent the cloned repository from having insecure permissions. Failing to do - # so causes compinit() calls to fail with "command not found: compdef" errors - # for users with insecure umasks (e.g., "002", allowing group writability). Note - # that this will be ignored under Cygwin by default, as Windows ACLs take - # precedence over umasks except for filesystems mounted with option "noacl". - umask g-w,o-w - - printf "${BLUE}Cloning Oh My Zsh...${NORMAL}\n" - hash git >/dev/null 2>&1 || { - echo "Error: git is not installed" - exit 1 - } - # The Windows (MSYS) Git is not compatible with normal use on cygwin - if [ "$OSTYPE" = cygwin ]; then - if git --version | grep msysgit > /dev/null; then - echo "Error: Windows/MSYS Git is not supported on Cygwin" - echo "Error: Make sure the Cygwin git package is installed and is first on the path" - exit 1 - fi - fi - env git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git $ZSH || { - printf "Error: git clone of oh-my-zsh repo failed\n" - exit 1 - } - - - printf "${BLUE}Looking for an existing zsh config...${NORMAL}\n" - if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then - printf "${YELLOW}Found ~/.zshrc.${NORMAL} ${GREEN}Backing up to ~/.zshrc.pre-oh-my-zsh${NORMAL}\n"; - mv ~/.zshrc ~/.zshrc.pre-oh-my-zsh; - fi - - printf "${BLUE}Using the Oh My Zsh template file and adding it to ~/.zshrc${NORMAL}\n" - cp $ZSH/templates/zshrc.zsh-template ~/.zshrc - sed "/^export ZSH=/ c\\ - export ZSH=$ZSH - " ~/.zshrc > ~/.zshrc-omztemp - mv -f ~/.zshrc-omztemp ~/.zshrc - - # If this user's login shell is not already "zsh", attempt to switch. - TEST_CURRENT_SHELL=$(expr "$SHELL" : '.*/\(.*\)') - if [ "$TEST_CURRENT_SHELL" != "zsh" ]; then - # If this platform provides a "chsh" command (not Cygwin), do it, man! - if hash chsh >/dev/null 2>&1; then - printf "${BLUE}Time to change your default shell to zsh!${NORMAL}\n" - chsh -s $(grep /zsh$ /etc/shells | tail -1) - # Else, suggest the user do so manually. - else - printf "I can't change your shell automatically because this system does not have chsh.\n" - printf "${BLUE}Please manually change your default shell to zsh!${NORMAL}\n" - fi - fi - - printf "${GREEN}" - echo ' __ __ ' - echo ' ____ / /_ ____ ___ __ __ ____ _____/ /_ ' - echo ' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ ' - echo '/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / ' - echo '\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ ' - echo ' /____/ ....is now installed!' - echo '' - echo '' - echo 'Please look over the ~/.zshrc file to select plugins, themes, and options.' - echo '' - echo 'p.s. Follow us at https://twitter.com/ohmyzsh.' - echo '' - echo 'p.p.s. Get stickers and t-shirts at http://shop.planetargon.com.' - echo '' - printf "${NORMAL}" - env zsh -} - -echo "[1/2] Installing essential packages" -apt update -apt install -y git zsh - -echo "[2/2] Installing oh-my-zsh" -main diff --git a/app/src/main/java/io/neoterm/customize/setup/BaseFileInstaller.java b/app/src/main/java/io/neoterm/customize/setup/BaseFileInstaller.java index 7a65ffe..b093ace 100644 --- a/app/src/main/java/io/neoterm/customize/setup/BaseFileInstaller.java +++ b/app/src/main/java/io/neoterm/customize/setup/BaseFileInstaller.java @@ -44,7 +44,6 @@ public final class BaseFileInstaller { } final File PREFIX_FILE = new File(NeoTermPath.USR_PATH); - installHomeFiles(activity); final ProgressDialog progress = makeProgressDialog(activity); progress.setMax(100); @@ -172,26 +171,6 @@ public final class BaseFileInstaller { }.start(); } - private static void installHomeFiles(final Activity activity) { - File HOME_PATH = new File(NeoTermPath.HOME_PATH); - File ZSH_INSTALLER = new File(HOME_PATH, "install-zsh.sh"); - - if (!HOME_PATH.exists()) { - HOME_PATH.mkdirs(); - } - - if (!ZSH_INSTALLER.exists()) { - try { - InputStream inputStream = activity.getAssets().open("install-zsh.sh"); - FileUtils.INSTANCE.writeFile(ZSH_INSTALLER, inputStream); - inputStream.close(); - - Os.chmod(ZSH_INSTALLER.getAbsolutePath(), 0700); - } catch (Exception ignore) { - } - } - } - private static URL determineZipUrl() throws MalformedURLException { String archName = determineArchName(); String baseUrl = NeoTermPath.INSTANCE.getSERVER_BOOT_URL(); diff --git a/app/src/main/java/io/neoterm/ui/settings/UISettingsActivity.kt b/app/src/main/java/io/neoterm/ui/settings/UISettingsActivity.kt index da6ab69..0778722 100644 --- a/app/src/main/java/io/neoterm/ui/settings/UISettingsActivity.kt +++ b/app/src/main/java/io/neoterm/ui/settings/UISettingsActivity.kt @@ -5,6 +5,10 @@ import android.os.Bundle import android.support.v7.app.AppCompatPreferenceActivity import android.view.MenuItem import io.neoterm.R +import io.neoterm.backend.TerminalSession +import io.neoterm.preference.NeoPreference +import io.neoterm.preference.NeoTermPath +import io.neoterm.view.TerminalDialog /** * @author kiva @@ -17,17 +21,34 @@ class UISettingsActivity : AppCompatPreferenceActivity() { supportActionBar.setDisplayHomeAsUpEnabled(true) addPreferencesFromResource(R.xml.settings_ui) findPreference(getString(R.string.key_ui_suggestions)) - .setOnPreferenceChangeListener({_, newValue -> - if (newValue as Boolean) { + .setOnPreferenceChangeListener({ _, newValue -> + if (newValue is Boolean && newValue) { AlertDialog.Builder(this@UISettingsActivity) - .setMessage(R.string.installer_install_zsh_manually) - .setPositiveButton(android.R.string.yes, null) + .setMessage(R.string.installer_install_zsh_required) + .setPositiveButton(android.R.string.yes, { _, _ -> + installOhMyZsh() + }) + .setNegativeButton(android.R.string.no, null) .show() } return@setOnPreferenceChangeListener true }) } + private fun installOhMyZsh() { + TerminalDialog(this) + .onFinish(object : TerminalDialog.SessionFinishedCallback { + override fun onSessionFinished(dialog: TerminalDialog, finishedSession: TerminalSession?) { + dialog.dismiss() + if (finishedSession?.exitStatus == 0) { + NeoPreference.store(R.string.key_general_shell, "zsh") + } + } + }) + .execute(NeoTermPath.APT_BIN_PATH, arrayOf("apt", "install", "-y", "oh-my-zsh")) + .show("Installing oh-my-zsh") + } + override fun onBuildHeaders(target: MutableList
?) { } diff --git a/app/src/main/java/io/neoterm/ui/setup/SetupActivity.kt b/app/src/main/java/io/neoterm/ui/setup/SetupActivity.kt index 386ac34..60940fb 100644 --- a/app/src/main/java/io/neoterm/ui/setup/SetupActivity.kt +++ b/app/src/main/java/io/neoterm/ui/setup/SetupActivity.kt @@ -63,7 +63,7 @@ class SetupActivity : AppCompatActivity() { } TerminalDialog(this@SetupActivity) - .onCancel(DialogInterface.OnCancelListener { + .onDismiss(DialogInterface.OnCancelListener { if (withShell != null) { NeoPreference.store(R.string.key_general_shell, withShell!!) } diff --git a/app/src/main/java/io/neoterm/view/TerminalDialog.kt b/app/src/main/java/io/neoterm/view/TerminalDialog.kt index 18c4ba3..6977e78 100644 --- a/app/src/main/java/io/neoterm/view/TerminalDialog.kt +++ b/app/src/main/java/io/neoterm/view/TerminalDialog.kt @@ -61,7 +61,7 @@ class TerminalDialog(val context: Context) { return this } - fun onCancel(cancelListener: DialogInterface.OnCancelListener?): TerminalDialog { + fun onDismiss(cancelListener: DialogInterface.OnCancelListener?): TerminalDialog { this.cancelListener = cancelListener return this } diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index affc586..3ab0f7a 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -37,7 +37,7 @@ 界面设置 Shell %s 未找到, 请先安装. 正在安装 - 你可以通过执行以下命令来配置 zsh 和快捷提示 ~/install-zsh.sh + 将要安装 oh-my-zsh 并将您的登录 shell 切换到 zsh 全屏模式已改变,请重启 NeoTerm NeoTerm 无法取得必需的权限,正在退出 还有这种操作? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4faef54..ae60227 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,7 +42,7 @@ Install Color Scheme Installing - You may install zsh and setup suggestions by executing: ~/install-zsh.sh + We are about to install oh-my-zsh and switch your login shell to zsh Bell Bell when receiving \'\\a\' diff --git a/app/src/main/res/xml/settings_ui.xml b/app/src/main/res/xml/settings_ui.xml index 72bf508..bb4f589 100644 --- a/app/src/main/res/xml/settings_ui.xml +++ b/app/src/main/res/xml/settings_ui.xml @@ -18,7 +18,7 @@ android:title="@string/pref_ui_close_tab_anim_next_tab" />