v0.109 (F-Droid only)
Change Log:
- Updated bootstrap archives.
- Lots of fixes and improvements (see expandable list below).
Full change log
Added
-
Added
SettingsActivity(Termux Settings)which can be accessed byLong pressing terminal view->More->Settings. This will allow GUI based management of settings in future, like keyboard key mapping, etc. Currently supports controlling log level, plugin errors and softkeyboard state. (d39972b) -
Add
SettingsActivityto launcher shortcuts. (2b3f681, 325a6f7) -
Added
ReportActivityandReportInfoto be used as base for showing reports to users. Currently supports plugin errors, app crashes and issue reports. (9d36e9a) -
Added centralized
Loggingframework to the entire app andterminal-viewandterminal-emulatorlibraries which has 4 levels,Off,Normal(default),Debug,Verbosewhich can be used by users vialogcatto debug problems. Users can set the log level fromTermux Settings->Debugging->Log Level. Terminal view key logging can now also be enabled with theTerminal View Key Loggingtoggle without having to recompile the app. Support for writing to files in addition to writing tologcatwill/can be added in future. (d39972b) -
Added logging for termux bootstrap package installation and setup of storage symlinks. (92b804d).
-
Requested
android.permission.DUMP permissionso that users can usedumsyscommands without root after runningadb shell pm grant com.termux android.permission.DUMP. (356a442) -
Requested
android.permission.REQUEST_INSTALL_PACKAGES permissionto allow users to accessAndroid/obbon android 11 after explicitly granting Termux the permission by going to TermuxApp Infoin AndroidSettings->Advance->Install unknown apps. (93a5bf8) -
Added support to warn users if
Draw over other apps permissionis missing when attempting to start Termux foreground session from the background with plugin commands, like forRUN_COMMANDintent. Check android background restrictions for more info. Now, the Termux foreground session will not even be attempted to be started if permission is missing since it would fail randomly otherwise and users would report bugs for it. (d3ddb21) -
Added
hide-soft-keyboard-on-startuptermux.propertiesproperty which when set totruewill automatically hide the soft keyboard on Termux startup to solve issues for when users use hardware keyboard and soft keyboard wastes screen space. Fixes #1978. (1ef8eb9) -
Added support for disabling soft keyboard completely for when users use hardware keyboard. Users can toggle the state from
Termux Settings->Keyboard I/O->Soft Keyboardtoggle. (2a8d5e2) -
Added support for adjusting termux toolbar height with
terminal-toolbar-heighttermux.propertiesproperty. The user can set a float value between0.4and3.0which will be used as the scaling factor for the default height. The default scaling factor is1. So adding an entry liketerminal-toolbar-height=2.0totermux.propertiesfile will make the toolbar height twice its original height. Fixes #1857. (ff0440d) -
Added executable and working directory validation for
RUN_COMMANDintent. The working directory will also also be created if its underTermuxConstants.TERMUX_FILES_DIR_PATH. (b4995ef) -
Added support for session actions for foreground session commands received via
RUN_COMMANDintent ortermux-tasker. (ec7568d) -
Added support for sending back background and foreground command results for
RUN_COMMANDintent and foreground command results forTermux:Tasker. CheckRUN_COMMANDIntent Wiki for more info. (a2209dd) -
Added support to notify users of errors via flashes and notifications for plugin commands, like for
allow-external-appsnot set totruewhenRUN_COMMANDintent is received. Clicking the notification will open theReportActivityto show the report. The flashes and notifications can be controlled with theTermux Settings->Debugging->Plugin Error Notificationstoggle. (8612a1d, 31371b5) -
Added support for
stdinfor backgroundRUN_COMMANDintent,TERMUX_SERVICE.ACTION_SERVICE_EXECUTEandTermux:Tasker(will require update) commands. This will allow users to pass (bash,python, etc) scripts or other data viastdinto the executable. Arguments would still be passed to the executable and not the script. (192b208, f1034c2) -
Added crash reporting so that whenever the Termux app crashes, the crash report (stacktrace, app and device info) will be logged to
~/crash_log.mdfile in markdown format. When the user will reopen the app, a notification will be shown which when clicked will show the crash report content inReportActivity. The activity will have important links like email (termuxreports@groups.io), reddit, github issues of termux app and packages at which the user can optionally report an issue if necessary after copying the crash report text. The~/crash_log.mdfile will be moved to~/crash_log-backup.mdso that a notification is not shown again on next startup and can be viewed again viaSAF, etc. The notifications can be controlled with theTermux Settings->Debugging->Crash Report Notificationstoggle. (69e4b57, cf5bb69) -
Added support to allow users to report an issue based on terminal transcript with
Long pressing terminal view->More->Report Issue. Selecting the option will open theReportActivitywith the terminal transcript, app device and APT info with important links like email (termuxreports@groups.io), reddit, github issues of termux app and packages at which the user can optionally report an issue after copying the report text. The report text will be in markdown format so that it is more readable and will take a few seconds to generate. (939338a, df4d8ac, 6293f5f) -
Added
termux-sharedlibrary. This defines shared constants and utils of Termux app and its plugins. This allows for removal of all hardcoded paths in Termux app. The termux plugins should use this in future as well. (682ce08) -
Added
TermuxConstantsclass to store all shared constants of Termux app and its plugins. This also has info on what changes need to be made if forking Termux app and changing its package name. (14c4986, 0225a8b) -
Added
TermuxPropertyConstantsclass that defines shared constants ofSharedPropertiesused by Termux app and its plugins. Also addedTermuxSharedPropertiesclass that acts as manager for handling termux properties. (7b4acb5) -
Added
TermuxPreferenceConstantsclass that defines shared constants of theSharedPreferencesused by Termux app and its plugins. Also addedTermuxSharedPreferencesclass that acts as manager for handling termux preferences. (93b506a, 9e82561) -
Added
SharedPropertiesclass which is an implementation similar to android'sSharedPreferencesinterface for reading from.propertiesfiles which also maintains an in-memory cache for the key/value pairs. Write support is currently not there since.propertiesfiles also have comments and escapes, so in-place editing would be required to update values. For this apron library could be looked into. (7b4acb5) -
Added
ExecutionCommandto stores all data related to an execution command. This allows easier management and passing of execution command data between classes and management of it, like post processing and failure management. (bccc35b, 31371b5, 1b5e5b5) -
Added
ShellUtilsto provide utilities for shell related stuff, since they don't belong inBackgroundJobwhich has been removed. (dff2794, 249f7c6, 8598b92) -
Added the
TermuxSessionclass for linking aTerminalSessionto anExecutionCommandand to maintain info for foreground Termux sessions. (78a99fd, 0cd7cb8) -
Added the
TermuxTaskclass for linking aProcessto anExecutionCommandand to maintain info for background Termux tasks. It also supports synchronous command execution as well to run shell commands and scripts from anywhere for internal use by termux app and its plugins. (f62febb, 0cd7cb8) -
Added
StreamGobblerclass which has been imported from libsuperuser and partially modified to readstdoutandstderrof background commands. (f62febb) -
Added interface methods to
TerminalViewClientinterminal-viewlibrary so that it becomes agnostic oftermux.propertiesfiles. (10d6eaa) -
Added
MarkdownUtitlsto provide utilities for markdown support in the app, like for error and crash reports. It uses the commonmark-spec via the markwon library. (131f481) -
Added
ShareUtilsto provide utilities for sharing data from termux apps. It will also try to preventandroid.os.TransactionTooLargeExceptionexceptions when sharing large data. (c28990a) -
Added
TermuxUtilsto provide utilities for termux app specific operations, like getting termux app info, device info, report info,Contextobject of each termux plugin app, etc. (c9e18e5, 3491956, 69e4b57, 15eb56d) -
Added
NotificationUtilsto provide utilities to build and manage notifications. (20d20f4) -
Added
PackageUtilsto provide utilities to get various package related info. This will be used to get info based on appContextobjects instead of usingBuildConfigwhich wouldn't have been available across termux plugins. (15eb56d) -
Added
FileUtilsto provide utilities to safely manage files. Also added support to get detailedUNIXfile attributes by porting classes from android'slibcore/ojluni. (d4fc34c)
Changed
-
Refactored
TermuxActivity. Dedicated classes and functions have been created for various actions and commands. (c9e18e5) -
The dedicated
TerminalToolbarViewPagerclass has been created to handle the now called toolbar that shows on the bottom of the terminal view. (c9e18e5) -
The dedicated
TermuxSessionsListViewControllerclass has been created to handle view related functionality of the termux sessions list shown in the left drawer. (c9e18e5) -
The dedicated
TermuxTerminalSessionClientclass has been created to handleTerminalSessionclassTerminalSessionClientinterface (previouslySessionChangedCallback). (c9e18e5, 824b3e6) -
Refactored
TermuxService. Dedicated classes and functions have been created for various actions and commands. (d9b5344) -
Refactored
terminal-view. Dedicated classes and functions have been created for various actions and commands. (ada5087) -
The dedicated
CursorController,TextSelectionCursorController(previouslySelectionModifierCursorController) andTextSelectionHandleView(previouslyHandleView) classes have been created to handle text selection and have been moved fromTerminalView. (ada5087) -
Get
TERMUX_VERSIONwhile building shell environment via Termux package context instead ofBuildConfigso that termux plugin apps can use it too. (d4653d0) -
Use
FileUtilsfor bootstrap and shared storage symlinks setup. (b2cd20c) -
Use
FileUtilsfor clearingTMPDIRand move clearing function toShellUtilsfromTermuxService. (8598b92) -
Disable obfuscation of termux-app in release builds without disabling optimizations and shrinking to allow stacktraces to have full class and method names when a crash report is generated. (067709b)
-
Changed
compileSdkVersion(NOTtargetSdkVersion) to29so that newer APIs can be used. (8e80e88) -
Moved activities and fragments to respective packages. (b856e16)
-
Fixed string resources naming convention. (eeb8554)
Fixed
-
Fixed
Duplicate finish request for ActivityRecorderrors. (f50d15d) -
Fixed executable and working directory path expansion in
RunCommandServicewhere it was not expanding path if exactly$PREFIXis passed and was adding extra trailing slashes in some cases. (80858ba) -
Fixed the issue when
cwdis empty and is passed toRuntime.getRuntime().exec(progArray, env, new File(cwd));, it raises theNo such file or directoryexceptions when targeting sdk29. (85b2c44) -
Fixed non-crashing
NoClassDefFoundErrorexceptions forTermuxActivity. (9fd2cf9) -
Fixed few potential
nullpointer exceptions (and probably added a few more). (dbf8477) -
Fix old issue where termux app would crash if sessions list
ListViewwas not notified of new sessions. (ae260fa) -
Fixed issue which caused the
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.exception to be thrown when long pressing the down key while simultaneously long pressing the terminal view for text selection and crashed the app. Fixes #1501. (ada5087) -
Fixed issue to restore keyboard input into terminal view when toggling extra-keys slider input with
VOL_UP+q. Fixes #1420. (395759c) -
Fixed
TermuxActivityBroadcastReceiverwrongly designed intent actions and extras. (e5c5174) -
Fixed potential crashes of
TermuxServicedue tostartForeground()andstopForeground()not being called in all the right places. (d9b5344) -
Fixed performance degradation of background commands since logging of every line separately was enabled. They will now only be logged if log level is set to verbose. This will also prevent potentially private user data from being sent to
logcatby default. (f62febb) -
Fixed issue where
TermuxServicewas stopped and Termux notification canceled if background tasks were still running but all sessions had been closed. (f888f35) -
Fixed issue where
Termux:Taskerwould hang indefinitely when the command was executed withRuntime.getRuntime().exec()and it raised an exception, like for invalid or missing interpreter errors andTermux:Taskerwas not notified of it. Now theerrmsgwill be used to send any exceptions back toTermux:Taskerand other 3rd party calls. (f62febb) -
Fixed issue where
stdoutorstderrwere too large in size and theTransactionTooLargeExceptionexception was raised and result of background commands was not sent back to the caller. This previously only applied toTermux:Taskerwhich would hang indefinitely. Nowstdoutandstderrwill be truncated from the start to max100KBcombined. The original size ofstdoutandstderrwill now also be sent to the caller so that they can check if either of them were truncated, these additional variables need to be implemented inTermux:Taskerbut will be available for the now supportedRUN_COMMANDintent results. Theerrmsgwill also be truncated from end to max25KBto preserve start of stacktraces. (f62febb) -
Fixed issue where
Termux:Taskerwould hang indefinitely for background commands whenTermuxServicewas killed before the commands completed or before they even started becauseTermuxServicewas about to be killed sinceTermux:Taskerwas not notified of it. Now,TermuxServicewill kill all background commands started by plugins for which the result is expect back via a pending intent before it is destroyed and notifyTermux:Tasker. For commands that have not even started,Termux:Taskerwill be notified that they have been canceled. This previously only applied toTermux:Taskerand notRUN_COMMANDintent, but now will apply to the later as well if result is expected back. Note that there may still be cases whereTermuxServiceis killed without even having the chance to notify the command sender, in which case reasonable timeout values should be used, like the one available forTaskeractions. (0cd7cb8)
Deprecated
TERMUX_ACTIVITY.EXTRA_RELOAD_STYLE(com.termux.app.reload_style) which was previously used for requesting storage permissions if its value equaledstoragehas been deprecated. (e5c5174)