From 7ce4816725617c821e460c2e35b61a29077455f4 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 01:42:38 -0700 Subject: [PATCH 01/52] docs: add Termux app issue triage --- TERMUX_APP_FIRST_BATCH_PLAN.md | 28 ++ TERMUX_APP_ISSUE_LEDGER.md | 490 ++++++++++++++++++++++++ generate_ledger_and_batch.ps1 | 71 ++++ issue-data/issues_utf8.jsonl | 474 +++++++++++++++++++++++ issue-data/termux-app-open-issues.jsonl | Bin 0 -> 1487522 bytes 5 files changed, 1063 insertions(+) create mode 100644 TERMUX_APP_FIRST_BATCH_PLAN.md create mode 100644 TERMUX_APP_ISSUE_LEDGER.md create mode 100644 generate_ledger_and_batch.ps1 create mode 100644 issue-data/issues_utf8.jsonl create mode 100644 issue-data/termux-app-open-issues.jsonl diff --git a/TERMUX_APP_FIRST_BATCH_PLAN.md b/TERMUX_APP_FIRST_BATCH_PLAN.md new file mode 100644 index 00000000000..cff2b345d3b --- /dev/null +++ b/TERMUX_APP_FIRST_BATCH_PLAN.md @@ -0,0 +1,28 @@ +# TERMUX_APP_FIRST_BATCH_PLAN + +## Selected Issues (Buckets A & B) + +- Bucket A: #: [Bug]: Ctrl+PgUp Not registering + +- Bucket A: #: [Bug]: pkg update && pkg upgrade failed + +- Bucket A: #: [Bug]: + +- Bucket A: #: [Bug]: Crash for termux-notification + +- Bucket A: #: [Bug]: Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() on IOException + +- Bucket A: #: [Bug]: Termux Usr Share Fonts Ttf Bug + +- Bucket A: #: [Bug]: google-genai installation fails on Termux + +- Bucket A: #: [Bug]: error completing install of intltool + +- Bucket A: #: [Bug]:Serious 404 Repository Errors and Environment Crashes on Android + +- Bucket A: #: [Bug]: the control character "^[" (ESC unicode: 27) crash termux when pasted + + +### Rationale +Issues chosen per lane priority: high‑confidence bugs first, then low‑risk clean‑ups, up to 10 items. + diff --git a/TERMUX_APP_ISSUE_LEDGER.md b/TERMUX_APP_ISSUE_LEDGER.md new file mode 100644 index 00000000000..17edbe7ad3c --- /dev/null +++ b/TERMUX_APP_ISSUE_LEDGER.md @@ -0,0 +1,490 @@ +# TERMUX_APP_ISSUE_LEDGER +## Bucket A +- #: [Bug]: Ctrl+PgUp Not registering +- #: [Bug]: pkg update && pkg upgrade failed +- #: [Bug]: +- #: [Bug]: Crash for termux-notification +- #: [Bug]: Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() on IOException +- #: [Bug]: Termux Usr Share Fonts Ttf Bug +- #: [Bug]: google-genai installation fails on Termux +- #: [Bug]: error completing install of intltool +- #: [Bug]:Serious 404 Repository Errors and Environment Crashes on Android +- #: [Bug]: the control character "^[" (ESC unicode: 27) crash termux when pasted +- #: Fixed: sha256sums typo in debug_build.yml +- #: [Bug]: termux-storage-get hangs, never prompts for a file +- #: [Bug]: Potential main-thread blocking risk +- #: [Bug]: Yet another potential ANR / main-thread blocking risk +- #: [Bug]: UI Flicker in Session Tab When Switching Sessions While Running Codex CLI +- #: [Bug]: Samsung OneUI 8.x: Performance issue with Termux app in the background +- #: [Bug] or [Feature]?: Distorted semigraphics (triangles) +- #: [Bug]: ctrl+j to enter via KDE Connect is not working +- #: [Bug]: GPG signiatures broken or missing, dpkg extremely outdated +- #: [Bug]: Terminal session notification does not update session name when renamed via long-press +- #: [Bug]:Missing PendingIntent.FLAG_IMMUTABLE causes crash on Android 12+ (API 31+) +- #: [Bug]: One UI 8.x: big CPU cores are never used in tested Termux/proot workloads +- #: [Bug]: Termux 0.118.3 crashes on startup after fresh install [Android 16] +- #: [Bug]: Crashed +- #: [Bug]: No Keyboard overlay after Mainline Services update on Android 16. +- #: [Bug]: Help Failed to download and build `cffi==2.0.0` +- #: [Bug]: Soft keyboard flickers and disappears when returning to Termux +- #: [Bug]: Syncthing fails after upgrade to version 2.0.15 +- #: [Bug]: can't be install in phone second space +- #: [Bug]: crash report +- #: [Bug]: ZWJ is broken +- #: [Bug]: Weird visual spacing of italicized text in a text editor +- #: [Bug]: Grapheme cluster rendering faulty / inconsitent +- #: [Bug]: Termux refuses to open / download files. +- #: [Bug]: Termux startup scripts and crond behavior issues on Android 13 +- #: [Bug]: App crashes when trying to install nix inside of debian proot-distro +- #: [Bug]: Cumulative ghost space in sd card +- #: Crash +- #: [Bug]: The. l2 s.coreutils's error is due to a problem with the Link2symlink mechanism of the termux. +- #: [Bug]: Extra keys glyph rendering inconsistent +- #: [Bug]: Crash Message Unknown package com.termux.api +- #: [Bug]:Cannot hide extra-key +- #: [Bug]: Bad Address, can't cd into /sdcard !! +- #: [Bug]: Background color not respected when started with scripts +- #: [Bug]: emacs tutorilal alt-v with external keybolard comes out clipboard +- #: [Bug]: termux-setup-storage doesnΓÇÖt create external-1 for USB drive on GrapheneOS +- #: [Bug]: suddenly close +- #: [Fix]: Share data between Termux and Android applications +- #: [Bug]: Report Crash When After Exiting Neovim +- #: [Bug]: zsh colors +- #: [Bug]: Crash when switching between Dex and non-Dex +- #: [Bug]: pip install psutil doesn't work +- #: [Bug]: Affects both Termux's Ubuntu & Arch, so it's a Termux bug: Julia's binary aarch64 now can't compile many packages. +- #: [Bug]: +- #: [Bug]: escape-seq styling lost after resizing +- #: [Bug]: MIUI/Xiaomi HyperOS Mini Window Flickering Issue +- #: [Bug]: ctrl space as prefix doesnot work in tmux +- #: [Bug]: Selecting text in `tilde` editor doesn't work properly +- #: [Bug]: Software keyboard won't show at startup if "use-black-ui = true" in latest CI build +- #: [Bug]: pasting ESC char crashes the app +- #: [Bug]: Termux randomly crashes without any error message when a minecraft server is running +- #: "extra-keys" of "termux.properties" malfunctioning +- #: [Bug]: Termux Setup Storage Error Error Code: 200 Error Message (FileUtils Error): Creating ~/storage directory file at path "/data +- #: [Bug]: Error in ResultReturner +- #: [Bug]: weird thing happened and then app crashed +- #: [Bug]: Termux app crash when sharing text with very long title +- #: [Bug]: UI misalignment on "New named session" / "Set session name" screen +- #: [Bug]: termux-reload-settings doesn't apply configuration in termux.properties (even after device restart) +- #: Bad mirrors are still detected as available +- #: [Bug]: `termux-change-repo` dies with -9 (oom?) +- #: [Bug]: GPG Error during Termux Update in WSA Environment (Subprocess apt-key exited unexpectedly) +- #: [Bug]: Devan─ügar─½ characters not rendered correctly +- #: [Bug]: Symlinking `~/downloads` results in truncated shared file +- #: [Bug]: An error returned when use SSH with key in Tergent after update +- #: Bug:multiple keys press +- #: [Bug]: termux-job-scheduler crashes? +- #: [Bug]: sshd no longer works +- #: [Bug]: Unable to Type in Termux with Microsoft SwiftKey +- #: [Bug]: Multiple " - " whenever I use termux +- #: [Bug]: The command "termux-setup-storage" is not working +- #: [Bug]: Termux doesn't apply colors.properties +- #: kbdless manpage +- #: [Bug]: Flask Server in Termux Requires Focus Switch to Process Requests +- #: [Bug]: `extra-keys` configuration fails to parse backslash (`\`) character in `termux.properties` +- #: [Feature report]: self-updatable application +- #: rc funct keys +- #: [Bug]: Character offset issue +- #: [Bug]: Termux XFCE installation failing in version 118.0 +- #: [Bug]: termux-setup-storage fails silently and randomly +- #: [Bug]: Random crash +- #: [Bug]: Crashing after running wine(and opening wps program) in proot-distro (such as debian) using DE XFCE +- #: [Bug]: termux not recognizing caps-lock as ctrl on physical keyboard +- #: [Bug]: expand/collapse notification-bar using `cmd` failed +- #: [Bug]: the public key is not available +- #: [Bug]: Slightly misaligned powershell symbols +- #: Text formatting breaking when phone rotated and copy has additional spaces +- #: [Bug]: virtual keyboard: Ctrl key followed by characters in the extra keys row is not detected +- #: [Bug]: too many letters +- #: [Bug]: Unable to type in termux using external braille keyboard +- #: [Bug]: Termux fails to start after a few days of being installed with bindService crash +- #: [Bug]: Closing termux android window just kills termux +- #: [Bug][Proposal]: New Termux app versionCode spec to solve app store issues +- #: [Bug]: Some characters are squished when using certain fonts +- #: Arrow keys not working on samsung keyboard[Bug]: +- #: [Bug]: First word repeats when using "swype" to type. +- #: [Bug]: Memory +- #: [Bug]: termux-file-editor running after sharing links with unknown/not included uri schemes +- #: [Bug]: Keyboard hides when copying text to clipboard in Termux +- #: [Bug]: text input view cannot work when bluetooth keyboard is connected +- #: strange glitch happening when using buttons +- #: [Bug]: termux crash +- #: Scrolling through terminal output is hard +- #: [Bug]: Fullscreen don't work with android 13 +- #: Cursor colour turns grayish black on turning on dark mode. +- #: [Bug]: Termux terminal focus reporting is a bug or not implemented +- #: [Bug]: +- #: [Bug]: when signature termux-app with system key, it seems not work. +- #: [Bug]: termux-open does not seem to work with Android 13 (should it?) +- #: [Bug]: Incorrect handling of "Erase in Line" on wrapped line +- #: [Bug]: Why can't my computer connect to termux with ssh? +- #: [Bug]: termux inconsistently crashes when resizing +- #: [Bug]: Termux Auto Crash +- #: [Bug]: Termux text select -> copy removes newlines +- #: [Bug]: `termux-open-url` opens 1 page when called rapidly, and sometimes crashes +- #: [Bug]: "soft keyboard only if no hardware keyboard" doesn't always work +- #: [Bug]: sometimes backspace deletes many characters +- #: dpkg: error: cannot access archive '/data/data/com.termux/cache/apt/archives/less_633-1_aarch64.deb' +- #: [Bug]: ^\ (SIGQUIT) shortcut doesn't work on QWERTZ layout +- #: [Bug]: DocumentsUI crash +- #: [Bug]: onHandleIntent not firing when calling RUN_COMMAND service from module +- #: [Bug]: Error while run script php +- #: [Bug]: When a hardware keyboard is connected and Termux is in the foreground, if Home or Recent apps buttons are pressed then the software keyboard becomes unresponsive +- #: [Bug]: xdg-open can't open files containing % character. +- #: [Bug]: its a wierd bug. Pasting an emoji with openboard crashes termux. +- #: [Bug]: terminal characters shaking (video) +- #: [Bug]: The LICENSE file describing termux-shared does not appear to allow the use case described in the wiki. +- #: [Bug]: last character gets stripped on STDIN +- #: [Bug]: with a hardware keyboard, random missing key presses / keys swapped +- #: Can't start or uninstall termux +- #: [Bug]: Termux crashed. +- #: Access to Termux private storage directory on External Storage (SD card) stopped working +- #: [Bug]: Invisible session number text in toast message +- #: [Bug]: termux-usb -l loads infinity +- #: [Bug]: The bootstrap package should be built along with the apk in F-Droid build +- #: [Bug]: Text input mode cannot be changed +- #: [Feature]: add timestamps to crash report filename. +- #: This is a question +- #: [Bug]: Termux randomly starts itself +- #: [Bug]: Termux can't connect to internet anyway +- #: [Bug]: Wrong TERM set +- #: [Bug]: Termux-storage-setup Crash +- #: [Bug]: Termux special keys comes with a big black space +- #: [Bug]: Cannot ping domains with roman symbols? +- #: [Bug]: physical keyboard Fn key not work +- #: [Bug]: Hardware keyboard Alt+Ctrl+key is not working +- #: [Bug]: Keyboard sometimes does not pop up +- #: [Bug]: F-Droid signatures +- #: [Bug]: Written file corrupted via Storage Access Framework on Android 11 +- #: [Bug]: terminal newlines sometimes after switching back from long time get messed upa +- #: [Bug]: spaces in commands get deleted +- #: [Bug]: Can't manipulate files from external app +- #: [Bug]: TMPDIR is not wiped correctly +- #: [Bug]: Key press bug +- #: ╦ïCTRL ALT -╦ï dont change font size +- #: Termux does not work on MiReader +- #: Continuous haptic bell / ^[OS characters inserted +- #: Line breaks and copy issues +- #: Extra key view not rescaling after termux-reload-settings +- #: Termux Android Things Crash First Launch +- #: Termux doesn't terminate ssh connection on exit +- #: Force closes on external 4k display on a Chromebook +- #: bidi behavior inconsistent; possibility to enable/disable bidi in termux settings? +- #: ChromeOS set to Dvorak, Termux uses Qwerty +- #: Keyboard backspace key sends DEL +- #: Powerline fonts doesn't work when using Tmux remotely within a local Tmux session +- #: Letters being added after any commands not in the dictionary (Samsung keyboard with "Auto check spelling" enabled) +- #: Ctrl+Alt shortcut modifier change breaks Pixel C Keyboard +- #: Holding any key on chrome OS doesn't send repeated key presses +- #: big crash bug +- #: halfwidth/fullwidth key doesn't work since 0.38 +- #: Font broken on "i" and "l" +- #: termux cannot take the underlined candidates with soft keyboards +- #: Blackberry Priv keyboard problem (Alt sends escape) +- #: Ctrl key with Sogou Pinyin doesn't work +- #: ESC key does not work with bluetooth keyboard and Google Pinyin input + +## Bucket B +- #: [Feature]: Stylize GitHub as "GitHub" in the app and in related resources +- #: [Feature]: terminal-view Documentation not available +- #: [Bug]: termux.properties doesn't work when it's a symlink +- #: [Feature]: A developer-signed, non-debuggable variant of Termux on GitHub Releases +- #: [Feature]: Ability to use emacs shortcuts +- #: [Feature]: OSC sequence to change soft keyboard mode +- #: [Feature]: Confirmation when exiting from notification +- #: FIDO2/Webauthn support +- #: [Feature]: Add Blink Text Support to Termux Shell +- #: [Bug]: Run KMM on termux +- #: [Feature]: add support for right-to-left languages +- #: [Feature]: Support protocol scheme / Android App Links +- #: How to remap volume keys? +- #: Integrated graphics (VNC/SDL2) +- #: Terminal emulation: allow configuration of string sent by backspace key +- #: Kotlin adoption +- #: feature request: request for some accessibility impruvments +- #: Mouse tracking translates dragging with finger down to scroll wheel events +- #: Configuration to invert tap and long press actions in Select URL +- #: set custom brightness for termux +- #: Automatic reading of output with a screenreader +- #: Hardware Keyboard Mapping +- #: Use same color for bold text +- #: [Feature Request] Double tap word selection. +- #: Showing realtime images/videos with Termux? +- #: Add right-to-left languages support +- #: Are javadocs for termux source online anywhere? +- #: True italic font support +- #: Notify user whenever background session buffer changes +- #: [Feature Request] Termux as a downloader +- #: Change location of ~/bin/termux-url-opener +- #: Allow adjusting line-height +- #: Make the ~/bin/termux-url-opener script run in background +- #: Unable to use ctrl emulation if volume keys are used for navigation +- #: Add Talkback support +- #: Can termux access phone's bluetooth adapter? +- #: Feature Request: Recognize URL's to open in browser +- #: Multiplex control key +- #: launcher mode support? +- #: chromecast support +- #: Feature Request: sixel graphics mode +- #: Hide extra keys row when Keyboard is hidden +- #: Add "volup key" to new extra keys panel +- #: Enable Smooth Scrolling +- #: Support for terminal bell as a notification +- #: pageUp/Down gesture supported as pageUp/Down keys (or mouse wheel) +- #: Change keyboard type when asking for a password +- #: VR mode: Support for Steroscopic viewing and head tracking +- #: Add swipe gestures to switch between open terminals +- #: Option to get previous behavior with respect to hiding keyboard and entering ESC +- #: Add support for mouse gestures. + +## Bucket C +- #: [Feature]: CLI commands to manage sessions +- #: [Feature]: Please Add Support For Bun.js Runtime +- #: [Feature]: when i install homeassistant : pip subprocess to install build dependencies did not run successfully. exit code:1 +- #: [Feature]: refreshing repo and upgrading after unpacking a bootstrap. +- #: [Feature]: Different font sizes for each session. +- #: [Feature]: add shortcuts to open existing session by index +- #: [Feature]: Exit sessions through the toolbar +- #: [Feature]: non-primary user bootstrap functionality +- #: Terminal Sessions change number +- #: Gesture navigation makes opening session drawer nearly impossible +- #: Option to disable/customise heads-up notification for background sessions +- #: With no menu button, I can't find a way to close a session +- #: termux-clipboard is not so easy to install (in order to support copy paste via pbcopy, pbpaste commands) +- #: Inconsistent touch response behavior within multiple pane screen session + +## Bucket D +- #: [Feature]: Separate nonfree packages into a distinct Termux repository +- #: [Feature]: Ability to inject `init.sh` or `boot.sh` into the APK +- #: [Bug]: Termux auto delete application on PM2 after reboot device +- #: [Feature]: Is it possible to build termux-app with pacman as the default package manager? +- #: Feature: Lightweight flavor of the app without package management +- #: {Idea} is it possible to keep termux boot services open? +- #: Want To Close Termux-API When We Exit Termux + +## Bucket E +- #: [Feature]: App Report Issue feature should include detailed CPU information +- #: Report Text +- #: [README] Bintray repository hosting shut down | Error 403 Forbidden | Error 404 +- #: TIOCGWINSZ reports zero window rows/cols until screen is rotated + +## Bucket F +- #: [Feature]: Optional Camera and Microphone Permission Toggles +- #: [Feature]: declare MANAGE_VIRTUAL_MACHINE permission +- #: [Feature]: Auto-generate PIN and Enhanced Device Management +- #: [Feature]: Support to run scripts when invoked through sharing to Termux from other apps (Android Go) +- #: Two changes for Android/Fire TV users +- #: [Feature]: Automatically update Termux on Android 14 with F-Droid +- #: [Feature]: Render the "Device Info" and "App Info" sections as tables, not lists. +- #: [Feature]: See a list of apps that have permission to access termux storage, and manage the permission +- #: [Feature]: Zoom on device without touchscreen (WSA) +- #: Revisit the Android W^X problem +- #: Audio not working when connected to Android Auto +- #: Not able to connect Mosquitto which is running On ANDROID(TERMUX) +- #: Termux in android TV not working as should be + +## Bucket G +- #: External Compatibility Testing for Newer Build JDKs in termux-app +- #: [Feature]: Flick down on extra-keys row +- #: Vertical swipe close keyboard +- #: [Feature]: Add parameter --display to `am start` +- #: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps +- #: Add shortcut.toggle-input-mode (HW keyboard shortcut for extras-row Γçä text-input swipe) +- #: [Feature]: Make terminal toolbar toggle scriptable +- #: IME switching fails when an external keyboard is attached +- #: JIS external keyboard keys (YEN/RO/HENKAN/MUHENKAN/ZENKAKU_HANKAKU) are still not handled in current Termux +- #: [Feature]: Support the Kitty image protocol to show images +- #: [Feature]: termux-file-editor: default filename +- #: [Feature]: Drag and drop support +- #: [Feature]: Stream execution results for run command +- #: Feature request: per-app orientation lock in Settings UI +- #: [Feature]: please improve survival rate +- #: [Feature]: Allow arbitrary key code (sequence) as special key +- #: [Feature]: Allow apps to enable long-press right-click emulation +- #: [Feature]: Configure Text Input View +- #: [Feature]: dynamic shortcuts for main termux-app icon +- #: [Feature]: termux passwordless ssh server +- #: [Feature]: Use the de-facto standard VGA color palette as the default color scheme for termux +- #: [Feature]: Wear OS Companion +- #: [Feature]: Bypassing Phantom Killer Using a LADB-Like Solution +- #: [Feature]: Indicate `stty size` While Resizing +- #: [Feature]: claude code key mapping +- #: [Feature]: mouse supporting in shell readline +- #: [Feature]: Accessibility Improvements +- #: [Feature]: Support swipe.down on extra-keys for Ctrl+C +- #: [Feature]: Search in terminal contents (program output) +- #: [Feature]: Move termux.properties and related file preferences into Termux's settings +- #: [Feature]: Use sentence case for regular non-terminal view text +- #: [Feature]: interactive RUN_COMMAND +- #: [Feature]: Pass URI Intent as Text to Termux +- #: [Feature]: Camera access +- #: [Feature]: MainActivity should accept the RUN_COMMAND intent. +- #: [Feature]: publish Termux on Accrescent +- #: [Feature]: Close app window on logout from shell +- #: [Bug]: can't change shell to zsh +- #: [Feature]: termux-app should detect phantom process killer enabled +- #: [Feature]: Multiple Extra Key Panels? +- #: [Feature]: Toggle over keyboard keys +- #: Use SwiftTerm instead? +- #: [Feature]: Enhancing Termux Accessibility for Visually Impaired Users +- #: [Feature]: Mouse tracking shouldn't block scrollback +- #: Screen Zoom support for one hand use +- #: [Feature]: colors.properties separate for light and dark theme +- #: [Feature]: Hack key bindings +- #: [Feature]: remove from the recent tasks list on exit +- #: [Feature]: Make the color of the extra buttons changeable +- #: [Feature]: Actual Navigation with Touch Screen +- #: Proposal for adding accessibility in Termux +- #: [Feature]: Enable "paste" keys of "Unexpected Keyboard" +- #: [Feature]: Custom hard keyboard key repeat speed +- #: [Feature]: Support pasting with Ctrl + shift + V +- #: [Feature]: `termux-about.log` should be `termux-about.md`. +- #: [Feature] Support secondary display +- #: [Feature]: Support "termux:" scheme when temux-scheme-opener script is created. +- #: [Feature]: Change the mouse wheel scroll rate. +- #: [Feature]: overlay for preventing termux-app from going to background +- #: CTRL + space bar should become CTRL-@ +- #: [Feature]: Material 3 design +- #: [Feature]: Screen dimming in Termux settings +- #: [Feature]: Custom bell sound +- #: [Feature]: over-scroll and nested-scrolling animation in termux terminal-emulator +- #: [Feature]: allow changing max terminals limit +- #: [Feature]: incremental wakelock +- #: [Feature]: Support for multiple sets of extra-keys +- #: [Feature]: Expand soft keyboard popups to radial menus +- #: Scrolling screenshot +- #: [Feature]: Remove window from the recent apps menu on ctrl-d +- #: Fire TV support? +- #: [Feature]: Corrective releases (revisions?) +- #: [Feature]: add support to connect with usb-serial instead of pseudo-tty +- #: Double Typing Characters when using Hardware Keyboard +- #: [Feature]: option to hide extra key bar when IME is hidden +- #: [Feature]: Need Double-width rendering of ambiguous characters +- #: [Feature]: hide plugin desktop icon +- #: [Feature]: shell cmd to hide soft keyboard +- #: [Feature]: Allow different zoom levels in Samsung DeX / phone screen +- #: [Feature]: Urls/Links Receiver +- #: [Feature]: Support for CSI 14 +- #: [Feature]: Self-update +- #: [Feature]: terminal background image support +- #: [Feature]: Use same directory to resotore config file of termux, not seperately +- #: [Feature]: request navigation bar +- #: [Feature]: Multi-user support +- #: [Feature]: Ability to handle termux terminal resolution inside ~/.termux/termux.properties +- #: [Feature]: Support secondary users via binary patching and extra slashes +- #: [Feature]:copy content from termux to other app +- #: [Feature]: pass to URI to `termux-file-editor` which enables file saving +- #: [Feature]: Need CSI 5 m (blink) support +- #: [Feature]: Plugins without shared UID +- #: [Feature]: A key for extra-keys which opens a menu to select a less commonly used `supported keys` +- #: [Feature]: termux-file-editor +- #: [Feature]: Add multiple popup keys for the extra keys +- #: [Feature]: Support NerdFont double-width characters +- #: [NOTICE] 2022-02-15 Termux Apps Vulnerability Disclosures +- #: Let screen readers catch cursor position +- #: [Feature]: separate termux for root +- #: [Feature]: add 'Autofill password' to terminal toolbar +- #: [Feature]: Add rebinding of hardware shortcuts. +- #: [Feature]: cursor navigation by holding/pressing spacebar +- #: [Feature]: add `TextInput` to extra key row +- #: [Feature]: add single button arrow keys in overlay keyboard +- #: [Feature]: Scrolling by swiping in programs which expect and key presses for that +- #: [Feature]: Enable Seedvault encrypted backups +- #: [Feature]: Multiple file sharing to termux +- #: [Feature]: Override the color of the status and navigation bar s +- #: Presence of a border when running cli apps in termux +- #: Autorepeat gets stuck when pressing two arrows or arrow+DEL/BKSP at the same time on extra keys bar +- #: Asking for an 1x1 font (size) +- #: Feature Request : Auto adjust font and app element sizes when Display Density (DPI) changed +- #: copied text includes whitespace +- #: Stop fling scroll anytime +- #: Run termux-url-opener without opening terminal in background +- #: Feature request: USB and getty +- #: Python speech recognition not working. +- #: Optionally send raw file data to termux-file-editor +- #: Remove file save dialog before termux-file-editor call +- #: Weird rendering when using specific shell theme and then recalling command history with long commands +- #: Typing in Korean with an external keyboard +- #: Please make shourcut icons adaptive +- #: termux-url-opener just flashes when termux is currently open +- #: hardware keyboard - modifier keys not delivered with cursor keys and page up / down +- #: support for the Samsung S-pen button +- #: touchscreen ime keyboard key"enter" and "backspace" invalid sometimes +- #: Selection popup not visible at small font + bottom of screen +- #: Text file navigation: keep cursor moving when holding VolUp+WASD +- #: can no longer produce modifier Alt + Shift +- #: URL picker: cannot copy multiline url +- #: [RFE] Allow Termux Styles to define a color for extra keys background +- #: Gboard keyboard can not be used properly in termux +- #: Termux does not support immersive mode properly on Samsung One UI +- #: German keyboard layout problem: '<' and '>' keys wrongly mapped +- #: Toggling services like location services +- #: Add ability to set combination prefix for hardware keyboard +- #: Hardware Blackberry keyboard and CTRL+Y +- #: can we set *keep screen on* option through command line ? +- #: Some Termux key-bindings don't work on Chromebook (with hardware keyboard) +- #: Virtual keyboard doesn't load in Chrome Tab 10 +- #: Termux not recognizing " character and ' character on chromebook os 77 +- #: On ChromeOS, in full-screen mode, with "shelf" auto-hiding enabled, Termux has a big chunk of unused space at the bottom of its display +- #: Samsung Dex support - multiple windows +- #: Horizontal scrolling for vi +- #: Long lines with \r are not handled properly +- #: Adaptive icons in application shortcuts +- #: double∩╝ìclick trigger tab +- #: Unable to pause autoscrolling +- #: default to the default key line when the property read for extra-keys fails +- #: Text selection does not invert pure white characters +- #: Turn off vibrate when using Extra Keys +- #: Fingerprint reader proceseses as swung dash keystroke ~ +- #: Chromebook: single keystroke lag +- #: Set term size via termux.properties +- #: Physical keyboard: buttons CTRL, ESC, SHIFT are not working +- #: [Feature Request] Keyboard autocomplete suggestions +- #: Increase scrollback +- #: Adaptive icon looks bad on the dark background +- #: Cannot share files with specific app +- #: Notification text is too dark +- #: Termux on rasperrby pi 3 with 7" screen aliasing +- #: Support styled underlines +- #: I can't write / +- #: Scrolling sideways when autowrap is disabled +- #: Visible bell? +- #: Allowing to adjust line-height of termux +- #: termux-file-editor does not modify original file but a copy in downloads +- #: Request: horizontal mouse wheel (from left/right touch swipes) +- #: Software keyboard+ extra rows takes too much screen estate +- #: chromeos: better support for using terminal mouse events AND selection/copy? +- #: Alt-V volume keybinding interferes with readline +- #: Allow swipes to perform custom actions +- #: Add hundreds of downloadable fonts to termux (discussion) +- #: Console renders standard variants as emoji's +- #: Request: Option to open Help Pages in Browser +- #: WebView disappear after exiting and re-entering app +- #: Illegible background using "Black on white" or "White on black" themes +- #: Termux:Sudo Addon proposal +- #: more Mouse Click events +- #: Bold text enforces bright colours +- #: Handling ACTION_EDIT in TermuxOpenReceiver +- #: Better hotkey support for hardware keyboards +- #: Add a custom url handler +- #: keyboard overlapping cli input +- #: Support multicast DNS (mdns) via MulticastLock +- #: Configure what volume buttons do? +- #: Fullscreen / immersive mode option is gone +- #: Not able to access SDCard on Chromebook. +- #: Chromebook Flip in tablet mode: on-screen keyboard does not appear +- #: Convert text navigation gestures into arrow key inputs +- #: Auto-set TZ environment variable +- #: Key Enter is sent repeatedly after start on chromebook after chsh -s zsh and back to bash +- #: Launch scripts via app shortcuts +- #: cut and paste on chromebook +- #: Wallpaper +- #: floating button idea +- #: Small bar at top of terminal for the title +- #: Support for disabling softkeyboard in case bluetoothkeyboard is present +- #: Suggestion: pass in additional text in `termux-url-opener` +- #: Caps lock key not working. + + diff --git a/generate_ledger_and_batch.ps1 b/generate_ledger_and_batch.ps1 new file mode 100644 index 00000000000..1d3ba1a254b --- /dev/null +++ b/generate_ledger_and_batch.ps1 @@ -0,0 +1,71 @@ +# PowerShell script to generate TERMUX_APP_ISSUE_LEDGER.md and TERMUX_APP_FIRST_BATCH_PLAN.md +$issueFile = Join-Path $PSScriptRoot 'issue-data\issues_utf8.jsonl' +$ledgerPath = Join-Path $PSScriptRoot 'TERMUX_APP_ISSUE_LEDGER.md' +$batchPath = Join-Path $PSScriptRoot 'TERMUX_APP_FIRST_BATCH_PLAN.md' + +# Initialize buckets +$buckets = @{ A = @(); B = @(); C = @(); D = @(); E = @(); F = @(); G = @() } + +function Get-Bucket($issue) { + $title = if ($issue.title) { $issue.title } else { '' } + $title = $title.ToLower() + $body = if ($issue.body) { $issue.body } else { '' } + $body = $body.ToLower() + $labels = ($issue.labels -join ',').ToLower() + # Bucket A – high confidence bugs + if ($title -match 'crash' -or $labels -match 'bug') { + if ($body -match 'stack trace|exception|caused by|fatal error' -or $title -match 'crash') { return 'A' } + return 'A' + } + # Bucket B – low risk fixes + if ($title -match 'typo|null|leak|resource|doc|documentation') { return 'B' } + if ($labels -match 'enhancement|documentation|question|lint') { return 'B' } + # Bucket C – needs runtime stack + if ($title -match 'session|install|bootstrap|runtime') { return 'C' } + if ($labels -match 'runtime|session|install|bootstrap') { return 'C' } + # Bucket D – belongs elsewhere + if ($title -match 'package|api|x11|widget|boot') { return 'D' } + if ($labels -match 'termux-packages|termux-api|widget|boot|x11') { return 'D' } + # Bucket E – mirror/network/env + if ($title -match 'mirror|network|repo|hash') { return 'E' } + if ($labels -match 'mirror|network|repo') { return 'E' } + # Bucket F – Android/device specific + if ($title -match 'android|oem|permission|device') { return 'F' } + if ($labels -match 'android|oem|permission|device') { return 'F' } + return 'G' +} + +Get-Content $issueFile -Encoding utf8 | ForEach-Object { + $issue = $_ | ConvertFrom-Json -ErrorAction SilentlyContinue + if (-not $issue) { return } + $bucket = Get-Bucket $issue + $buckets[$bucket] += "#${($issue.number)}: $($issue.title)" +} + +# Write ledger +if (Test-Path $ledgerPath) { Remove-Item -Path $ledgerPath -Force } +$ledgerContent = "# TERMUX_APP_ISSUE_LEDGER`n" +foreach ($b in 'A','B','C','D','E','F','G') { + $ledgerContent += "## Bucket $b`n" + foreach ($line in $buckets[$b]) { $ledgerContent += "- $line`n" } + $ledgerContent += "`n" +} +$ledgerTmp = "$ledgerPath.tmp" +$ledgerContent | Set-Content -Path $ledgerTmp -Encoding utf8 -Force +Move-Item -Path $ledgerTmp -Destination $ledgerPath -Force + +# Prepare first batch plan (up to 10 from A and B) +if (Test-Path $batchPath) { Remove-Item -Path $batchPath -Force } +$selected = @() +foreach ($b in 'A','B') { + foreach ($line in $buckets[$b]) { + if ($selected.Count -ge 10) { break } + $selected += "Bucket ${b}: $line" + } + if ($selected.Count -ge 10) { break } +} +"# TERMUX_APP_FIRST_BATCH_PLAN`n`n## Selected Issues (Buckets A & B)`n" | Set-Content -Path $batchPath -Encoding utf8 +$selected | ForEach-Object { "- $_`n" | Add-Content -Path $batchPath -Encoding utf8 } +"`n### Rationale`nIssues chosen per lane priority: high‑confidence bugs first, then low‑risk clean‑ups, up to 10 items.`n" | Add-Content -Path $batchPath -Encoding utf8 + +Write-Host "Ledger and batch plan generated." diff --git a/issue-data/issues_utf8.jsonl b/issue-data/issues_utf8.jsonl new file mode 100644 index 00000000000..f724fd8903c --- /dev/null +++ b/issue-data/issues_utf8.jsonl @@ -0,0 +1,474 @@ +{"author":"TakemiSora","body":"### Problem description\n\nAttempting to press Ctrl and/or Alt with PgUp/PgDown does not send the correct keys to the shell.\n\nIn the video, the other app besides termux is AVNC client connected to vncserver from termux. Where you can see that pressing ctrl+pgup makes `^[[5;5~` appear where as in termux it just sends the PgUp.\n\nhttps://github.com/user-attachments/assets/bb016b9c-cafb-4d69-8fa1-167c9674bac3\n\n### Steps to reproduce the behavior.\n\n- Open Termux App\n- Use `showkey -a` or `cat -v`\n- Attempt to press Ctrl and then PgUp (and also just PgUp)\n- Both will return the same output\n\n### What is the expected behavior?\n\nThe correct keys should be sent.\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 16\n* Device model: Motorola Edge 50 Fusion\n","comments":2,"created_at":"2026-06-09T00:44:26Z","labels":["bug report"],"number":5148,"title":"[Bug]: Ctrl+PgUp Not registering","updated_at":"2026-06-09T01:59:35Z"} +{"author":"rami1101492-collab","body":"### Problem description\n\nΓò░ΓöÇΓ¥» pkg update \u0026\u0026 pkg upgrade -y Γ£ÿ 100\nChecking availability of current mirror:\n[*] https://nl.mirror.flokinet.net/termux/termux-main: ok\nHit:1 https://nl.mirror.flokinet.net/termux/termux-main stable InRelease\nHit:2 https://nl.mirror.flokinet.net/termux/termux-x11 x11 InRelease\nGet:3 https://tur.kcubeterm.com tur-packages InRelease\nGet:4 https://tur.kcubeterm.com tur-packages/tur aarch64 Packages [84.4 kB]\nErr:4 https://tur.kcubeterm.com tur-packages/tur aarch64 Packages\n Hash Sum mismatch\n Hashes of expected file:\n - Filesize:84406 [weak]\n - SHA512:6e0839f0ac61023499b5b8ebe60b852e6ab03b90aae9c65cffa72462ce810590d269d7eeffd852186f71c7b32a4db4543403443dae910bbb35f6cb8551b65b0f\n - SHA256:f085295dbd010f856d50070e564d56bca3db78e4d279d6111d2a2730073e38b2\n - SHA1:07c3fa1a69c4a3c9d22a87a20cf937ac4a95ce11 [weak]\n Hashes of received file:\n - SHA512:f996698fced1b1b2b716238c5b880804033f552675bd4d66b2a776cf95a8fdcbd37db7a1f5df5ad18ddb2c24ecf55909edb8ef9d3cb1b0dc116908f285b20c49\n - SHA256:758b0dfe04851d5cdc584f394208c0a11d3cf452c4c172f78b04e022c19ec85e\n - SHA1:0618ab592994c9b2e8c52a1e4f326ed71ed01e4f [weak]\n - Filesize:84406 [weak]\n Last modification reported: Sun, 07 Jun 2026 13:24:35 +0000\n Release file created at: Sun, 07 Jun 2026 19:16:16 +0000\nFetched 103 kB in 3s (33.3 kB/s)\nReading package lists... Done\nE: Failed to fetch https://tur.kcubeterm.com/dists/tur-packages/tur/binary-aarch64/Packages.gz Hash Sum mismatch\n Hashes of expected file:\n - Filesize:84406 [weak]\n - SHA512:6e0839f0ac61023499b5b8ebe60b852e6ab03b90aae9c65cffa72462ce810590d269d7eeffd852186f71c7b32a4db4543403443dae910bbb35f6cb8551b65b0f\n - SHA256:f085295dbd010f856d50070e564d56bca3db78e4d279d6111d2a2730073e38b2\n - SHA1:07c3fa1a69c4a3c9d22a87a20cf937ac4a95ce11 [weak]\n Hashes of received file:\n - SHA512:f996698fced1b1b2b716238c5b880804033f552675bd4d66b2a776cf95a8fdcbd37db7a1f5df5ad18ddb2c24ecf55909edb8ef9d3cb1b0dc116908f285b20c49\n - SHA256:758b0dfe04851d5cdc584f394208c0a11d3cf452c4c172f78b04e022c19ec85e\n - SHA1:0618ab592994c9b2e8c52a1e4f326ed71ed01e4f [weak]\n - Filesize:84406 [weak]\n Last modification reported: Sun, 07 Jun 2026 13:24:35 +0000\n Release file created at: Sun, 07 Jun 2026 19:16:16 +0000\nE: Some index files failed to download. They have been ignored, or old ones used instead.\n\n### Steps to reproduce the behavior.\n\ntermux # pkg update \u0026\u0026 pkg upgrade -y\n\n### What is the expected behavior?\n\nupdate failed\n\n### System information\n\n* Termux application version: 0.119.0-beta.3\n* Android OS version: 16\n* Device model: Samsung Galaxy A55\n","comments":3,"created_at":"2026-06-07T19:25:18Z","labels":["bug report"],"number":5147,"title":"[Bug]: pkg update \u0026\u0026 pkg upgrade failed","updated_at":"2026-06-09T12:18:00Z"} +{"author":"arfoxcode","body":"### Problem description\n\n## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxActivity` \n**Report Timestamp**: `2026-06-05 02:56:01.058 UTC` \n##\n\n## Crash Details\n\n**Crash Thread**: `Thread[Thread-4,5,main]` \n**Crash Timestamp**: `2026-06-05 02:43:34.428 UTC` \n\n**Crash Message**:\n```\nPackage com.termux.styling does not belong to 10208\n```\n\n\n### Stacktrace\n\n```\njava.lang.SecurityException: Package com.termux.styling does not belong to 10208\n\tat android.os.Parcel.createExceptionOrNull(Parcel.java:2456)\n\tat android.os.Parcel.createException(Parcel.java:2440)\n\tat android.os.Parcel.readException(Parcel.java:2423)\n\tat android.os.Parcel.readException(Parcel.java:2365)\n\tat android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:3462)\n\tat android.app.NotificationManager.notifyAsUser(NotificationManager.java:683)\n\tat android.app.NotificationManager.notify(NotificationManager.java:633)\n\tat android.app.NotificationManager.notify(NotificationManager.java:609)\n\tat com.termux.shared.termux.crash.TermuxCrashUtils.sendCrashReportNotification(TermuxCrashUtils.java:367)\n\tat com.termux.shared.termux.crash.TermuxCrashUtils.notifyAppCrashFromCrashLogFileInner(TermuxCrashUtils.java:198)\n\tat com.termux.shared.termux.crash.TermuxCrashUtils.access$000(TermuxCrashUtils.java:34)\n\tat com.termux.shared.termux.crash.TermuxCrashUtils$1.run(TermuxCrashUtils.java:164)\nCaused by: android.os.RemoteException: Remote stack trace:\n\tat android.app.AppOpsManager.checkPackage(AppOpsManager.java:8686)\n\tat com.android.server.notification.NotificationManagerService.isCallerInstantApp(NotificationManagerService.java:9646)\n\tat com.android.server.notification.NotificationManagerService.checkDisqualifyingFeatures(NotificationManagerService.java:6821)\n\tat com.android.server.notification.NotificationManagerService.enqueueNotificationInternal(NotificationManagerService.java:6557)\n\tat com.android.server.notification.NotificationManagerService.enqueueNotificationInternal(NotificationManagerService.java:6394)\n\n\n```\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.3` \n**VERSION_CODE**: `1022` \n**UID**: `10208` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c208,c256,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c208,c256,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `4.19.191-gd7bb700cdd52-dirty` \n**SDK_INT**: `31` \n**RELEASE**: `12` \n**ID**: `SP1A.210812.016` \n**DISPLAY**: `X6823C-H6513FGHIJK-SGo-GL-240509V1267` \n**INCREMENTAL**: `240509V1267` \n**SECURITY_PATCH**: `2024-05-05` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: - (*Requires `DUMP` and `PACKAGE_USAGE_STATS` permission*) \n**MONITOR_PHANTOM_PROCS**: `\u003cunsupported\u003e` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `INFINIX` \n**BRAND**: `Infinix` \n**MODEL**: `Infinix X6823C` \n**PRODUCT**: `X6823C-GL` \n**BOARD**: `Infinix-X6823C` \n**HARDWARE**: `mt6762G` \n**DEVICE**: `Infinix-X6823C` \n**SUPPORTED_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_32_BIT_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_64_BIT_ABIS**: \n##\n\n### Steps to reproduce the behavior.\n\nI user termux-notification and using termux:widget\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.119.0-beta-3\n* Android OS version: 12\n* Device model: Infinix smart 6 plus\n","comments":2,"created_at":"2026-06-05T03:02:27Z","labels":["bug report"],"number":5146,"title":"[Bug]:","updated_at":"2026-06-06T08:43:01Z"} +{"author":"arfoxcode","body":"### Problem description\n\n## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxActivity` \n**Report Timestamp**: `2026-06-05 02:56:01.058 UTC` \n##\n\n## Crash Details\n\n**Crash Thread**: `Thread[Thread-4,5,main]` \n**Crash Timestamp**: `2026-06-05 02:43:34.428 UTC` \n\n**Crash Message**:\n```\nPackage com.termux.styling does not belong to 10208\n```\n\n\n### Stacktrace\n\n```\njava.lang.SecurityException: Package com.termux.styling does not belong to 10208\n\tat android.os.Parcel.createExceptionOrNull(Parcel.java:2456)\n\tat android.os.Parcel.createException(Parcel.java:2440)\n\tat android.os.Parcel.readException(Parcel.java:2423)\n\tat android.os.Parcel.readException(Parcel.java:2365)\n\tat android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:3462)\n\tat android.app.NotificationManager.notifyAsUser(NotificationManager.java:683)\n\tat android.app.NotificationManager.notify(NotificationManager.java:633)\n\tat android.app.NotificationManager.notify(NotificationManager.java:609)\n\tat com.termux.shared.termux.crash.TermuxCrashUtils.sendCrashReportNotification(TermuxCrashUtils.java:367)\n\tat com.termux.shared.termux.crash.TermuxCrashUtils.notifyAppCrashFromCrashLogFileInner(TermuxCrashUtils.java:198)\n\tat com.termux.shared.termux.crash.TermuxCrashUtils.access$000(TermuxCrashUtils.java:34)\n\tat com.termux.shared.termux.crash.TermuxCrashUtils$1.run(TermuxCrashUtils.java:164)\nCaused by: android.os.RemoteException: Remote stack trace:\n\tat android.app.AppOpsManager.checkPackage(AppOpsManager.java:8686)\n\tat com.android.server.notification.NotificationManagerService.isCallerInstantApp(NotificationManagerService.java:9646)\n\tat com.android.server.notification.NotificationManagerService.checkDisqualifyingFeatures(NotificationManagerService.java:6821)\n\tat com.android.server.notification.NotificationManagerService.enqueueNotificationInternal(NotificationManagerService.java:6557)\n\tat com.android.server.notification.NotificationManagerService.enqueueNotificationInternal(NotificationManagerService.java:6394)\n\n\n```\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.3` \n**VERSION_CODE**: `1022` \n**UID**: `10208` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c208,c256,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c208,c256,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `4.19.191-gd7bb700cdd52-dirty` \n**SDK_INT**: `31` \n**RELEASE**: `12` \n**ID**: `SP1A.210812.016` \n**DISPLAY**: `X6823C-H6513FGHIJK-SGo-GL-240509V1267` \n**INCREMENTAL**: `240509V1267` \n**SECURITY_PATCH**: `2024-05-05` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: - (*Requires `DUMP` and `PACKAGE_USAGE_STATS` permission*) \n**MONITOR_PHANTOM_PROCS**: `\u003cunsupported\u003e` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `INFINIX` \n**BRAND**: `Infinix` \n**MODEL**: `Infinix X6823C` \n**PRODUCT**: `X6823C-GL` \n**BOARD**: `Infinix-X6823C` \n**HARDWARE**: `mt6762G` \n**DEVICE**: `Infinix-X6823C` \n**SUPPORTED_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_32_BIT_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_64_BIT_ABIS**: \n##\n\n### Steps to reproduce the behavior.\n\nI user termux-notification and using termux:widget\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.119.0-beta-3\n* Android OS version: 12\n* Device model: Infinix smart 6 plus\n","comments":0,"created_at":"2026-06-05T03:02:19Z","labels":["bug report"],"number":5145,"title":"[Bug]: Crash for termux-notification","updated_at":"2026-06-05T03:02:19Z"} +{"author":"CyberSecurity-NCC","body":"### Problem description\n\n## Summary\n\nWhen an `IOException` occurs inside `AndroidUtils.getSystemProperties()` ΓÇô for example while reading lines from the process input via `BufferedReader.readLine()` ΓÇô the code jumps directly to the `catch` block. This leaves the `BufferedReader`, the underlying `InputStreamReader` and `InputStream`, **and** the `Process` itself unclosed / undestroyed, leaking both stream resources and native process handles.\n\n## Impact\n\n- **Stream leak:** An unclosed `BufferedReader` (and the wrapped stream chain) holds native file descriptors that will not be released until the garbage collector performs finalization, which is unpredictable.\n- **Process leak:** The `Process` handle is not destroyed in the error path, so the native system process may remain as a zombie until the VM cleans it up.\n- **Severity: Low** ΓÇô `getSystemProperties()` is typically called only when building device information Markdown (for example, from a UI action), so the leak is unlikely to accumulate under normal usage. Nevertheless, correct resourc management is important for code health and prevents potential issues in edge cases or when the pattern is copied elsewhere.\n\n\n## Code Analysis\n\n**File:** `com.termux.shared.android.AndroidUtils` \n**Method:** `getSystemProperties()`\n\n```java\ntry {\n Process process = new ProcessBuilder()\n .command(\"/system/bin/getprop\")\n .redirectErrorStream(true)\n .start();\n\n InputStream inputStream = process.getInputStream();\n BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));\n String line, key, value;\n while ((line = bufferedReader.readLine()) != null) {\n // ...\n }\n\n bufferedReader.close();\n process.destroy();\n} catch (IOException e) {\n Logger.logStackTraceWithMessage(..., e);\n}\n```\n\nWhen `BufferedReader.readLine()` throws an `IOException`, execution jumps directly to the `catch` block. The calls to `bufferedReader.close()` and `process.destroy()` are bypassed, leaving the reader, the wrapped streams, and the subprocess open. The `InputStream` and `InputStreamReader` are also not explicitly closed, so they are leaked as well.\n\n## Suggested Fix\n\nWrap the `BufferedReader` in a **try-with-resources** block (which will close the entire stream chain) and ensure the `Process` is destroyed in a `finally` block so it always executes, even if an exception occurs.\n\n```java\npublic static Properties getSystemProperties() {\n Properties systemProperties = new Properties();\n Pattern propertiesPattern = Pattern.compile(\"^\\\\[([^]]+)]: \\\\[(.+)]$\");\n Process process = null;\n try {\n process = new ProcessBuilder()\n .command(\"/system/bin/getprop\")\n .redirectErrorStream(true)\n .start();\n\n try (BufferedReader reader = new BufferedReader(\n new InputStreamReader(process.getInputStream()))) {\n String line, key, value;\n while ((line = reader.readLine()) != null) {\n Matcher matcher = propertiesPattern.matcher(line);\n if (matcher.matches()) {\n key = matcher.group(1);\n value = matcher.group(2);\n if (key != null \u0026\u0026 value != null \u0026\u0026 !key.isEmpty() \u0026\u0026 !value.isEmpty())\n systemProperties.put(key, value);\n }\n }\n }\n } catch (IOException e) {\n Logger.logStackTraceWithMessage(\n \"Failed to run \\\"/system/bin/getprop\\\" to get system properties.\", e);\n } finally {\n if (process != null) {\n process.destroy();\n }\n }\n return systemProperties;\n}\n```\n\nThis guarantees that the `BufferedReader` (and all chained streams) is closed in every case, and that the subprocess is always destroyed, regardless of whether an `IOException` is thrown.\n\n## Context \u0026 Acknowledgement\n\nThis issue was identified during our academic research on Java resource management. We have manually reviewed this finding to ensure its validity. Thank you for maintaining this open-source project! We hope this report helps.\n\n### Steps to reproduce the behavior.\n\nWe identified this issue with static code analysis.\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: master-branch\n* Android OS version: Android 8+\n* Device model:\n","comments":1,"created_at":"2026-06-04T15:29:55Z","labels":["bug report"],"number":5144,"title":"[Bug]: Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() on IOException","updated_at":"2026-06-04T23:13:24Z"} +{"author":"GG-Feng","body":"### Feature description\n\nHi everyone,\n\nI would like to share an idea about doing some compatibility validation work around possible future JDK baseline upgrades for `termux-app`.\n\nThis idea is not coming out of nowhere. Looking at the current project setup, `termux-app` already uses JDK 17 in its CI/build workflow, and the project has previously handled Gradle build compatibility issues related to JDK 17. At the same time, the Android code still keeps its source/target compatibility at Java 8.\n\nBecause of that, I think it is possible that a baseline upgrade may eventually become part of future maintenance work. If so, it may be useful to prepare for possible future JDK baseline upgrades in advance, instead of only dealing with migration issues when an upgrade becomes necessary. This could help make future maintenance work smoother and more efficient.\n\nTo be clear, this proposal is not asking the upstream project to change its official Java source baseline right now. It is also not asking the project to maintain multiple codebases, create Java-specific official releases, replace the existing test suite, or maintain a performance-focused fork.\n\nMy goal is to do early compatibility validation against newer build JDK environments and possible future baseline changes. For example, this could include testing with JDK 17, JDK 21, or later LTS releases, while still respecting the fact that the current source/target compatibility may remain unchanged unless the project decides otherwise.\n\nIf the project later considers moving its build setup, toolchain, or parts of its source baseline to a newer JDK, this work may help surface issues earlier, such as:\n\n* Build or compilation failures\n* Test failures\n* Runtime behavior differences\n* Dependency or Gradle / Android Gradle Plugin compatibility issues\n* CI and environment setup problems\n* Issues that users or contributors may encounter when building with newer Java runtimes\n\nMy current idea is to maintain a small number of experimental compatibility branches externally. The upstream main branch can continue normal development based on the current official setup, while we take responsibility for syncing, testing, and maintaining those experimental branches.\n\nThese branches are not intended to become official separate codebases unless the project and community later find clear value in them. At this stage, their main purpose is to validate compatibility, collect feedback, and prepare useful migration reference information.\n\nIf there is sustained community interest, we may maintain two or three external compatibility branches targeting newer JDK environments over the long term and report useful findings back upstream. When appropriate, we would submit small, focused PRs for concrete compatibility issues instead of asking the project to review or maintain a large fork.\n\nThe goal of this early-stage idea is to reduce future migration risk and provide useful compatibility information without adding extra maintenance burden to the official project.\n\nThanks for your time, and thanks for maintaining Termux.\n\n\n### Additional information\n\nempty","comments":1,"created_at":"2026-06-02T01:36:38Z","labels":[],"number":5142,"title":"External Compatibility Testing for Newer Build JDKs in termux-app","updated_at":"2026-06-02T01:41:21Z"} +{"author":"malik-mohamed-2009","body":"### Problem description\n\nWhen I put legal font on usr/share/fonts/TTF, Programmed the fc-cache -fv and This is the bug in This image \n\nSources : https://fonts.google.com/specimen/Montserrat montserrat \n\n\u003cimg width=\"2340\" height=\"1080\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/612a439a-e5f9-482a-b6ee-9262935ede17\" /\u003e\n\n### Steps to reproduce the behavior.\n\n.\n\n### What is the expected behavior?\n\n.\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 13\n* Device model: biloba\n","comments":0,"created_at":"2026-05-28T04:44:45Z","labels":["bug report"],"number":5139,"title":"[Bug]: Termux Usr Share Fonts Ttf Bug","updated_at":"2026-05-28T04:44:45Z"} +{"author":"Agg-dev","body":"### Feature description\n\nCurrently, the extra-keys row has an `popup` feature. While this is good, it's not ergonomic compared to a flick down, because the extra keys row sits **ABOVE** the keyboard, meaning you have to reach your hand higher to first touch the extra keys row, and even higher to swipe up.\nA simple flickdown would allow users to simply flick down without streching thumbs.\n\n### Additional information\n\nOther terminal emulators don't have support for it, as they're not designed for phones.\nOnly thing I can think of is GBoard and Unexpected keyboard, as you can do something like this there.","comments":2,"created_at":"2026-05-28T04:12:22Z","labels":[],"number":5138,"title":"[Feature]: Flick down on extra-keys row","updated_at":"2026-06-02T14:33:06Z"} +{"author":"octavo","body":"The user would like vertical swipes to close the onscreen keyboard.","comments":0,"created_at":"2026-05-27T09:37:20Z","labels":[],"number":5136,"title":"Vertical swipe close keyboard","updated_at":"2026-05-27T09:38:15Z"} +{"author":"hanslub42","body":"### Feature description\n\n\nAdd parameter `--display` to `am` (e.g. `am start --display 9 no.nrk.yr/.MainActivity`)\n\n### Additional information\n\nSince version 4.0 `scrcpy` allows opening a new display (`scrcpy --new-display=.....`). Starting termux via `scrpy` (`scrcpy --new-display=1000x1000 --start-app=com.termux`) works well, `termux` will open on the new display. However, when I then use this `termux` instance to start an app (say with `$ am start no.nrk.yr/.MainActivity`) the app will appear on display 0 (the phone itself), and not on the new display, as I expected.\n\n`am --help` does not mention displays at all. Is there a workaround?","comments":9,"created_at":"2026-05-26T13:37:03Z","labels":[],"number":5133,"title":"[Feature]: Add parameter --display to `am start` ","updated_at":"2026-05-30T19:55:50Z"} +{"author":"Sushan64","body":"### Problem description\n\nRunning on Android 15 with Termux.\n\nTrying to install:\n```\npip install google-genai\n```\n\nFails because `cryptography` package tries to build from source using `maturin` + Rust, but Rust standard library crates (`std`, `core`, `alloc`) are not found in rlib format on Termux.\n\n**Error:**\n```\nerror: crate `std` required to be available in rlib format, but was not found in this form\nerror: crate `core` required to be available in rlib format, but was not found in this form\nerror: could not compile `proc-macro2` due to 19 previous errors\n```\n\n\u003cimg width=\"1080\" height=\"2400\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/262d082e-be4c-4108-8f88-57dbef6e73fb\" /\u003e\n\n### Steps to reproduce the behavior.\n\nYou should have python and pip\nThen,\n\npip install google-genai\nOr\npip install cryptography\n\n\n### What is the expected behavior?\n\nERROR: Failed to build 'cryptography' when installing build dependencies for cryptography\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 15\n* Device model: 23021RAAEG / Redmi\n","comments":0,"created_at":"2026-05-25T09:38:12Z","labels":["bug report"],"number":5130,"title":"[Bug]: google-genai installation fails on Termux","updated_at":"2026-05-25T09:38:12Z"} +{"author":"john-peterson","body":"[Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps \n\nI can't post pull request \n\n~~~\ngh pr create\npull request create failed: GraphQL: john-peterson does not have the correct permissions to execute `CreatePullRequest` (createPullRequest) \n~~~\n\nhttps://github.com/john-peterson/termux-app/pull/new/u/alarm\n\n\u003e An owner of this repository has limited the ability to open a pull request to users that are collaborators on this repository.\n\n~~~\ngh api repos/termux/termux-app/collaborators \n{\"message\":\"Must have push access to view repository collaborators.\",\"documentation_url\":\"https://docs.github.com/rest/collaborators/collaborators#list-repository-collaborators\",\"status\":\"403\"}\n~~~\n\nI can't find any new info anywhere about contributing in readme or any other file . I can't see any issue or discussion asking about how to contribute now or the reason for blocking pull request \n\nGUI show a request three weeks ago from a user with no team label\n\nhttps://github.com/termux/termux-app/pulls\n\nso I assume this was changed less than three weeks ago and no explanation was given or asked for yet \n\nI looked at recent closed pull request to see what could have caused this change \n\nthe last closed pull request had an explanation posted on matrix . some kind of IRC server . that translation are not accepted \n\nbefore that GUI show many apparent accidental pr by aripitek to change the files to his fork for no explanation . maybe he doesn't even know he posted it here\n\nit seems like he is accidentally submitting pr for every patch he is pushing to his fork \n\nhttps://github.com/termux/termux-app/pulls?q=is%3Aclosed\n\n~~~\ngh pr list --state closed\ngh pr list --label spam --state all|v\n~~~\n\nI assume some of the owners blocked public access instead of blocking the accidental user aripitek\n\nif it's only for one user it's better to block the user that doesn't know how to use GitHub instead of blocking public access \n\n\n---\n\nI post this patch as an issue instead . if I still have permission to create issue or if that also is restricted to an invite list\n\nhttps://github.com/john-peterson/termux-app/commits/u/alarm\n\nI hope it can be merged anyway . but I'm not optimistic about it it will probably get lost amongst the mass of other issues \n\nit's a quality patch that some users need to prevent battery drain \n\n\n---\n\nthis\tshould remove termux from power intensive apps . the idle drain blame list . otherwise it will get the label\n\n\u003e Stop the dormancy of the system \n\nthis happens to apps in the Active apps fragment list that is opened from the bottom of quick settings drawer if this message appears \n\n\u003e 1 app is active \n\nif you open the fragment you get a warning about idle drain \n\nI don't know how it works on all phones settings is always modified . this applies to unisoc phones that I use for price to value reasons \n\n\n# new config file \n\nenable 30 minute time out with a different config file \n\n~~~\nvim $DATA/shared_prefs/config.xml\n\u003c?xml version='1.0' encoding='utf-8' standalone='yes' ?\u003e\n\u003cmap\u003e\n\t\u003cint name=\"idle_timeout\" value=\"30\" /\u003e\n\u003c/map\u003e\n~~~\n\nif you try to edit this file \n\n~~~\nvim $DATA/shared_prefs/com.termux_preferences.xml\n~~~\n\nthe changes will be overridden by commit functions designed for GUI with absolutely no CLI in mind\n\nthe new config file is CLI aware. it will not be changed randomly by commit functions \n\n\n# keep or close orphans \n\n\nmy termux session will restore an existing tmux session \n\n~~~\nvim .bashrc\nprocs=$(pidof tmux | wc | tr -s \" \" | cut -f3 -d\" \")\nif [ $procs -eq 0 ]; then\n\ttmux\nelif test $procs -eq 1; then\n\ttest -z \"$TMUX\" \u0026\u0026 tmux a\nfi\n~~~\n\none time this tmux session was still running seven hours later \n\n~~~\nlogcat -d|ack -i alarm|tail\n05-23 23:00:00.431 26893 26893 D Termux.SystemEventReceiver: ALARM shut down battery level 93%\n\ndate|copy\nSun May 24 06:35:54 ADT 2026\ntermux-battery-status | jq .level\n92\n~~~\n\nbattery drain was negligible it was as probably frozen and did no harm\n\nI don't know if it happens when termux is in the foreground or why it doesn't purge child apps . usually they are quickly removed when termux is gone \n\nI have tried to remove them myself to save battery \n\njohn-peterson/termux-app@orphan\n\nbut I reverted back to keeping them because I some times accidentally cross the 32 app limit and lose the tmux client and crucially the only termux bash child\n\n~~~\npstree\n?ΓöÇΓö¼ΓöÇ?ΓöÇΓö¼ΓöÇcom.termuxΓöÇΓöÇΓöÇ/data/data/com.termux/files/usr/bin/bashΓöÇΓöÇΓöÇtmux\n Γöé ΓööΓöÇcom.termux.api\n ΓööΓöÇtmuxΓöÇΓö¼ΓöÇ-bashΓöÇΓö¼ΓöÇbashΓöÇΓöÇΓöÇbash\n Γöé ΓööΓöÇpstree\n~~~\n\nwhich will close termux\n\nbut if I quickly start it again the server is some times still running with my entire session intact \n\nthis has led me to consider a redesigne to ask if I want to restart bash instead of closing termux with the hope of saving my tmux server and session from disappearing \n\n\n\n# Todo restart killed bash client when 32 app limit is tripped\n\nif you trip the 32 app limit the first child app will be closed by android . this will also close the tmux client and perhaps incorrectly the entire termux session and service \n\n~~~\nack -i signal -t java\nterminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java\nexitDescription += \" (signal \" + (-exitCode) + \")\";\nexitDescription += \" - press Enter]\";\n~~~\n\nthis could be re designed to restart the bash client instead of closing termux and risk losing all children \n\n~~~\nexitDescription += \" - press Enter to close or r to restart ]\";\n~~~\n\nthis might save the tmux service and all children \n\nwhen I close termux is seems like the system immediately close all children . or even termux I don't know what it does when closing exactly \n\n\n\n# power intensive apps settings fragment \n\nI've had this on both my latest unisoc phones called Hisense and umidigi in different markets \n\nif this exist \n\n~~~\ngetprop |ack pwctl\n~~~\n\npower intensive apps button is under battery page . but not the main activity \n\n~~~\nam start -n 'com.android.settings/.Settings$BatteryActivity'\nam start -a android.intent.action.BATTERY_SUMMARY\n~~~\n\na different looking page with more buttons under this label \n\n\u003e App battery settings \n\nnothing of this is exported or explained \n\n~~~\ndumpsys package com.android.settings|vack apk\ncp /system_ext/priv-app/Settings/Settings.apk .\napktool d -j1 -o settings Settings.apk\n~~~\n\n~~~\nvim smali/com/android/settings/fuelgauge/PowerIntensiveAppsPreferenceController.smali\n.field private final isSupportUnisocPowerManager:Z\nconst-string p1, \"persist.sys.pwctl.enable\"\n~~~\n\nunisoc doesn't have the right files up . only the regular aosp app\n\nunisoc-android/android_packages_apps_Settings\n\nanother vendor has posted their source \n\n~~~\ngh search code TYPE_APP_POWER_INTENSIVE\njingpad-bsp/vendor_sprd_platform_packages_apps_Settings src/com/android/settings/fuelgauge/SprdPowerIntensiveAppsPreferenceController.java\n~~~\n\nit's in a fragment that can't be launched from terminal without adb\n\nI am impressed by the idle drain on my unisoc phones but they haven't been able to convince upstream apparently \n\n\n\n# todo same for termux API \n\ntermux API should also be removed from the list with the same fix \n\nthe listening socket should time out when screen off for a long time \n\na sad update in my android 14 unisoc the API socket connection fails constantly . otherwise everything works the same as in android 13 \n\n\n\n# race between alarm and cancel alarm \n\nyou may see termux close when you unlock your phone . this is not a coincidence it's a race condition \n\nthere is no elegant way to avoid it\n\nmy investigation of all alternative is in\n\njohn-peterson/openapp@timer\n\nall the more complicated solutions are riddled with bugs . this solution is the simplest and best it never fails\n\n\n# my branch versus this branch \n\nif the build fails it's because I use another branch with all my patches \n\njohn-peterson/termux-app@alarm\n\nbarring possible typos this is a solid patch I have used it for months it never fails\n\n\n# idle drain problem \n\nthe only way to get idle drain to zero is to remove or patch all apps on the power intensive apps list . and use battery saver\t\n\nwith out battery saver\tidle drain is so severe battery only last three days .\n even when all radios are off with air plane mode active \n\nbattery saver makes a gigantic difference around a factor of ten \n\nif\t battery saver\tis functional battery drain should be three per cent per day or equivalent one month \n\non expedition this should make it possible\t to retrieve a location occasionally for a month until a broken sun panel can be replaced \n\nI was is Australia when this problem became so severe I had to create this patch \n\nthe crucial setting for this drastic difference is \n\n~~~\nforce_background_check\n~~~\n\nthese have only minor effect on long term drain \n\n~~~\nforce_all_apps_standby\nenable_quick_doze\n~~~\n\nand increase drain for wake up. it requires more battery to return from a deep sleep state . the others are meaningless and\n\n~~~\nenable_night_mode\n~~~\n\na disaster because the phone can't be used in day light \n\nI have posted a new settings API that solve this problem as explained on the post \n\nthere is no way to reduce idle drain more or completely block back ground workers for most apps . this is a job opportunity \n\nsome app stores are notorious for their enormous bombardment of meaningless workers to increase ad revenue and engagement . but this applies to many apps with aggressive monetisation or poor design \n\n\n\n\n\n","comments":1,"created_at":"2026-05-24T13:58:21Z","labels":[],"number":5128,"title":"[Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps ","updated_at":"2026-05-25T00:15:14Z"} +{"author":"rudecry","body":"### Problem description\n\nhi im trying to compile synfig. everything else is working fine except intltool which dpkg keeps having an issue with. ive already tried dpkg --remove and installing termux-api.\n`~/downloads/synfigstudio-1.5.4 $ apt install intltool\nInstalling:\n intltool\n\nSummary:\n Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 0\n Download size: 0 B / 37.2 kB\n Space needed: 229 kB\n\nSelecting previously unselected package intltool.\n(Reading database ... 18380 files and directories currently installed.)\nPreparing to unpack .../intltool_0.51.0-4_all.deb ...\nUnpacking intltool (0.51.0-4) ...\nSetting up intltool (0.51.0-4) ...\nSideloading Perl XML::Parser...\nLoading internal logger. Log::Log4perl recommended for better logging\nReading '/data/data/com.termux/files/home/.cpan/Metadata'\n Database was generated on Tue, 19 May 2026 20:54:06 GMT\nRunning install for module 'XML::Parser'\nChecksum for /data/data/com.termux/files/home/.cpan/sources/authors/id/T/TO/TODDR/XML-Parser-2.58.tar.gz ok\n/data/data/com.termux/files/usr/bin/sh: 0: Illegal option -d\nUncompressed /data/data/com.termux/files/home/.cpan/sources/authors/id/T/TO/TODDR/XML-Parser-2.58.tar.gz successfully\nUsing Tar:/data/data/com.termux/files/usr/bin/tar xf \"XML-Parser-2.58.tar\":\nUntarred XML-Parser-2.58.tar successfully\n'YAML' not installed, will not store persistent state\nPackage contains both files[XML-Parser-2.58.tar] and directories[XML-Parser-2.58]; not recognized as a perl package, giving up\nConfiguring T/TO/TODDR/XML-Parser-2.58.tar.gz with Makefile.PL\nRunning make for T/TO/TODDR/XML-Parser-2.58.tar.gz\nmake: *** No targets specified and no makefile found. Stop.\n TODDR/XML-Parser-2.58.tar.gz\n /data/data/com.termux/files/usr/bin/make -- NOT OK\ndpkg: error processing package intltool (--configure):\n installed intltool package post-installation script subprocess returned error exit status 1\nErrors were encountered while processing:\n intltool\nError: Sub-process /data/data/com.termux/files/usr/bin/dpkg returned an error code (1)\n~/downloads/synfigstudio-1.5.4 $`\nany help with this? thanks \n\n### Steps to reproduce the behavior.\n\n`cd synfigstudio-1.5.4\napt upgrade\n./configure\napt install clang libllvm termux-api intltool`\n\nmind you this is a new install\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n\n`Termux Variables:\nTERMUX_EXEC__PROC_SELF_EXE=/data/data/com.termux/files/usr/bin/termux-info\nTERMUX_VERSION=googleplay.2026.02.11\nTERMUX__USER_ID=0\nPackages CPU architecture:\naarch64\nSubscribed repositories:\nURIs: https://termux.net\nUpdatable packages:\nAll packages up to date\ntermux-tools version:\n3.0.9\nAndroid version:\n16\nKernel build information: Linux localhost 5.15.123-android13-8-00033-g39606e3309fc-ab10974680 #1 SMP PREEMPT Thu Oct 19 09:32:08 UTC 2023 aarch64 Android\nDevice manufacturer: BOE\nDevice model:\n100146660\nLD Variables:\nLD_LIBRARY_PATH= LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so`\ntablet brand is Onn. (rooted)","comments":1,"created_at":"2026-05-19T21:46:18Z","labels":["bug report"],"number":5126,"title":"[Bug]: error completing install of intltool","updated_at":"2026-05-21T11:33:44Z"} +{"author":"stargme7-creator","body":"### Problem description\n\nHello Termux Team,\n\nI am writing to report a critical issue regarding the repository mirrors and environment stability on non-rooted Android devices.\n\nRecently, running standard package updates (pkg update \u0026\u0026 pkg upgrade) consistently throws '404 Not Found' errors across multiple core mirrors. Furthermore, attempting to manage external distributions via proot-distro results in sudden terminal crashes and broken loop states. As an end-user, these issues completely break the environment.\n\nPlease provide updated and working rootfs installation commands/scripts for external distros that do not throw 404 errors, and fix the core stability bugs on Android.\n\nThank you.\n\n### Steps to reproduce the behavior.\n\npkg update \u0026\u0026 pkg upgrade\nproot-distro install parrot\n\n### What is the expected behavior?\n\nThe environment should update smoothly without throwing '404 Not Found' errors, and external Linux distributions should install cleanly via rootfs scripts without crashing the terminal.\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":0,"created_at":"2026-05-19T04:52:32Z","labels":["bug report"],"number":5124,"title":"[Bug]:Serious 404 Repository Errors and Environment Crashes on Android","updated_at":"2026-05-19T04:52:32Z"} +{"author":"InAddict1","body":"### Problem description\n\nPasting the ASCII control character ESC (\\x1B, U+001B) alone into the Termux terminal session (via the paste action from the context menu) causes an IllegalArgumentException: length \u003c= 0 in ByteQueue.write(), immediately crashing the application.\n\n### Steps to reproduce the behavior.\n\nhttps://github.com/user-attachments/assets/8375465d-5c26-4c17-be29-09f5d7215558\n\n1. Copy the single character ESC (\\x1B, U+001B) to the clipboard.\n2. Open Termux on Android.\n3. Long-press in the terminal area to open the context menu.\n4. Tap Paste.\n5. Termux crashes immediately with IllegalArgumentException: length \u003c= 0.\n\n### What is the expected behavior?\n\nPasting the ESC character (\\x1B, U+001B) should not crash Termux. The character should be inserted into the terminal input buffer normally. If no further characters follow and the user presses Enter, the shell should display an error message such as bash: $'\\033': command not found (or similar, depending on the shell), indicating an unknown or invalid command. The application must remain stable and responsive.\n\n### System information\n\n## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxActivity` \n**Report Timestamp**: `2026-05-15 23:13:42.799 UTC` \n##\n\n## Crash Details\n\n**Crash Thread**: `Thread[main,5,main]` \n**Crash Timestamp**: `2026-05-15 23:13:39.143 UTC` \n\n**Crash Message**:\n```\nlength \u003c= 0\n```\n\n\n### Stacktrace\n\n```\njava.lang.IllegalArgumentException: length \u003c= 0\n\tat com.termux.terminal.ByteQueue.write(ByteQueue.java:63)\n\tat com.termux.terminal.TerminalSession.write(TerminalSession.java:178)\n\tat com.termux.terminal.TerminalOutput.write(TerminalOutput.java:12)\n\tat com.termux.terminal.TerminalEmulator.paste(TerminalEmulator.java:2586)\n\tat com.termux.app.terminal.TermuxTerminalSessionClient.onPasteTextFromClipboard(TermuxTerminalSessionClient.java:190)\n\tat com.termux.terminal.TerminalSession.onPasteTextFromClipboard(TerminalSession.java:278)\n\tat com.termux.view.textselection.TextSelectionCursorController$1.onActionItemClicked(TextSelectionCursorController.java:144)\n\tat com.termux.view.textselection.TextSelectionCursorController$2.onActionItemClicked(TextSelectionCursorController.java:180)\n\tat com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onActionItemClicked(DecorView.java:2545)\n\tat com.android.internal.view.FloatingActionMode$3.onMenuItemSelected(FloatingActionMode.java:97)\n\tat com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:788)\n\tat com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)\n\tat com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:935)\n\tat com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:925)\n\tat com.android.internal.view.FloatingActionMode.lambda$setFloatingToolbar$0(FloatingActionMode.java:122)\n\tat com.android.internal.view.FloatingActionMode.$r8$lambda$Y9Hq7gobR_VYnOvJY4KEpwtp1Qg(Unknown Source:0)\n\tat com.android.internal.view.FloatingActionMode$$ExternalSyntheticLambda0.onMenuItemClick(D8$$SyntheticClass:0)\n\tat com.android.internal.widget.floatingtoolbar.LocalFloatingToolbarPopup$2.onClick(LocalFloatingToolbarPopup.java:177)\n\tat android.view.View.performClick(View.java:8210)\n\tat android.view.View.performClickInternal(View.java:8187)\n\tat android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)\n\tat android.view.View$PerformClick.run(View.java:32662)\n\tat android.os.Handler.handleCallback(Handler.java:959)\n\tat android.os.Handler.dispatchMessage(Handler.java:100)\n\tat android.os.Looper.loopOnce(Looper.java:249)\n\tat android.os.Looper.loop(Looper.java:337)\n\tat android.app.ActivityThread.main(ActivityThread.java:9593)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)\n\n```\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.118.3` \n**VERSION_CODE**: `1002` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c112,c257,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c112,c257,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `5.15.178-android13-8-00021-g6f2f96be86b9-ab13729987` \n**SDK_INT**: `35` \n**RELEASE**: `15` \n**ID**: `AQ3A.240829.003` \n**DISPLAY**: `AQ3A.240829.003` \n**INCREMENTAL**: `OS2.0.206.0.VMUEUXM` \n**SECURITY_PATCH**: `2026-03-01` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n\n### Hardware\n\n**MANUFACTURER**: `Xiaomi` \n**BRAND**: `Redmi` \n**MODEL**: `23073RPBFG` \n**PRODUCT**: `xun_eea` \n**BOARD**: `bengal` \n**HARDWARE**: `qcom` \n**DEVICE**: `xun` \n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \n**SUPPORTED_32_BIT_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_64_BIT_ABIS**: `arm64-v8a` \n**PAGE_SIZE**: `4096` \n##","comments":1,"created_at":"2026-05-15T23:45:15Z","labels":["bug report"],"number":5119,"title":"[Bug]: the control character \"^[\" (ESC unicode: 27) crash termux when pasted","updated_at":"2026-05-28T20:42:54Z"} +{"author":"davidj4tech","body":"### Is your feature request related to a problem?\n\nThe extras row has a useful \"text input box\" mode (accessed by swiping the row horizontally) that lets the active IME submit text in batch ΓÇö essential for voice typing, autocomplete, and other IMEs that don't play well with raw keystrokes into the terminal.\n\nThe mode is currently only reachable via the horizontal swipe gesture. When using Termux with a hardware keyboard (e.g. a Bluetooth keyboard or a tablet/foldable in keyboard mode), reaching up to touch the screen to swipe the extras row breaks the flow.\n\nRelated: #82 (the original 2016 ask was for \"a textarea input mode which can be toggled with **a key**\"; it was closed when the textarea was implemented, but only as a swipe gesture ΓÇö the *key* part of that original request was never delivered).\n\n### Describe the solution you'd like\n\nExpose a configurable HW-keyboard shortcut in `termux.properties`, alongside the existing four:\n\n```\n# shortcut.create-session = ctrl + t\n# shortcut.next-session = ctrl + 2\n# shortcut.previous-session = ctrl + 1\n# shortcut.rename-session = ctrl + n\n# shortcut.toggle-input-mode = ctrl + i # NEW\n```\n\nPressing the configured chord would trigger the same handler the left-swipe currently does (swap extras row Γåö input field), and a second press (or a different shortcut) returns to the extras row.\n\n### Describe alternatives you've considered\n\n- Automate / Tasker with AccessibilityService gestures simulating the swipe at fixed coordinates. Works, but is fragile (coordinates are device-specific, requires another app, needs accessibility permission).\n- `su -c \"input swipe ...\"` (requires root, also coordinate-fragile).\n\nA first-class shortcut is dramatically simpler and lines up with the existing extensibility model of `termux.properties`.\n\n### Additional context\n\nImplementation hint: the swipe is currently handled in `TerminalView` / `TermuxActivity`. The shortcut would presumably wire into `TermuxActivity.onKeyDown` next to the existing `shortcut.*` handlers and call the same `toggleInputMode` (or equivalent) method.","comments":1,"created_at":"2026-05-15T12:44:54Z","labels":[],"number":5118,"title":"Add shortcut.toggle-input-mode (HW keyboard shortcut for extras-row Γçä text-input swipe)","updated_at":"2026-05-15T20:17:21Z"} +{"author":"nandaanomi","body":"### Problem description\n\nFound a typo in .github/workflows/debug_build.yml:\n\n- Line 83: \"sha25sums\" should be \"sha256sums\" \n- Line 86: same typo in the error message\n\nThe digit \"6\" is missing from \"sha256\".\n\n\n### Steps to reproduce the behavior.\n\n1. Open .github/workflows/debug_build.yml\n2. Go to line 83 and line 86\n\n### What is the expected behavior?\n\nThe text should read \"sha256sums\" (correct spelling)\n\n### System information\n\n* Termux application version: N/A (this is a CI workflow issue, not app issue)\n* Android OS version: N/A\n* Device model: N/A","comments":0,"created_at":"2026-05-12T06:38:15Z","labels":["bug report"],"number":5112,"title":"Fixed: sha256sums typo in debug_build.yml","updated_at":"2026-05-12T06:53:10Z"} +{"author":"slondr","body":"### Problem description\n\nWhen I open termux and run `termux-storage-get file` nothing happens, it just hangs.\n\n### Steps to reproduce the behavior.\n\n1. Open termux, install Termux:API\n2. Grant termux storage permissions through app settings\n3. Run `termux-file-get file`\n\n### What is the expected behavior?\n\nFile prompt opens and a file is saved\n\n### System information\n\n* Termux application version: 0.118.3\n* Termux-Tools version: 0.45.0\n* Android OS version: 16\n* Device model: Pixel 9a\n","comments":2,"created_at":"2026-04-30T01:37:42Z","labels":["bug report"],"number":5101,"title":"[Bug]: termux-storage-get hangs, never prompts for a file","updated_at":"2026-04-30T13:46:03Z"} +{"author":"venkyqz","body":"## Environment\n\n- App: Termux (`com.termux`)\n- Branch checked: `master`\n- File: `app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java`:144\n- Verified commit: `30ebb2dee381d292ade0f2868cfde0f9f20b89fe`\n\n### The Issue\n\nWhile reviewing `FileReceiverActivity.handleContentUri() ΓåÆ ContentResolver-query`, I noticed a potential main-thread blocking risk around `android.content.ContentResolver#query(android.net.Uri,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String)`.\n\nThe latest source still operates synchronously:\n\n```java\n141: String attachmentFileName = null;\n142: \n143: String[] projection = new String[]{OpenableColumns.DISPLAY_NAME};\n144: try (Cursor c = getContentResolver().query(uri, projection, null, null, null)) {\n145: if (c != null \u0026\u0026 c.moveToFirst()) {\n146: final int fileNameColumnId = c.getColumnIndex(OpenableColumns.DISPLAY_NAME);\n147: if (fileNameColumnId \u003e= 0) attachmentFileName = c.getString(fileNameColumnId);\n148: }\n149: }\n```\n\n`android.content.ContentResolver#query(android.net.Uri,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String)` can block the calling thread while Android resolves a provider, opens a stream, performs database work, contacts account services, touches storage, or waits on remote I/O, depending on the API and URI/backend involved.\n\n### The Risk \u0026 Impact\n\nIf this method is reached from a UI-thread path, the operation can cause visible jank, StrictMode violations in debug builds, or an ANR when the provider/backend is slow, blocked, or unreachable. I am phrasing this as a source-level risk because I verified the current source pattern but did not run an on-device reproduction.\n\n### Current source path\n\n```text\n\u003ccom.termux.app.api.file.FileReceiverActivity: void handleContentUri(android.net.Uri,java.lang.String)\u003e\n -\u003e android.content.ContentResolver#query(android.net.Uri,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String)\n```\n\n### Verification\n\nI checked the latest upstream source at `30ebb2dee381d292ade0f2868cfde0f9f20b89fe` and found the sensitive operation still present in `app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java`. This report is based on source-level inspection, not runtime reproduction.","comments":0,"created_at":"2026-04-28T07:44:49Z","labels":["bug report"],"number":5093,"title":"[Bug]: Potential main-thread blocking risk","updated_at":"2026-04-29T02:28:32Z"} +{"author":"venkyqz","body":"## Environment\n\n- App: Termux (`com.termux`)\n- Branch checked: `master`\n- File: `app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java`:154\n- Verified commit: `30ebb2dee381d292ade0f2868cfde0f9f20b89fe`\n\n### The Issue\n\nWhile reviewing `FileReceiverActivity.handleContentUri() ΓåÆ ContentResolver-openInputStream`, I noticed a potential main-thread blocking risk around `android.content.ContentResolver#openInputStream(android.net.Uri)`.\n\nThe latest source still operates synchronously:\n\n```java\n151: if (attachmentFileName == null) attachmentFileName = subjectFromIntent;\n152: if (attachmentFileName == null) attachmentFileName = UriUtils.getUriFileBasename(uri, true);\n153: \n154: InputStream in = getContentResolver().openInputStream(uri);\n155: promptNameAndSave(in, attachmentFileName);\n156: } catch (Exception e) {\n157: showErrorDialogAndQuit(\"Unable to handle shared content:\\n\\n\" + e.getMessage());\n158: Logger.logStackTraceWithMessage(LOG_TAG, \"handleContentUri(uri=\" + uri + \") failed\", e);\n159: }\n```\n\n`android.content.ContentResolver#openInputStream(android.net.Uri)` can block the calling thread while Android resolves a provider, opens a stream, performs database work, contacts account services, touches storage, or waits on remote I/O, depending on the API and URI/backend involved.\n\n### The Risk \u0026 Impact\n\nIf this method is reached from a UI-thread path, the operation can cause visible jank, StrictMode violations in debug builds, or an ANR when the provider/backend is slow, blocked, or unreachable. I am phrasing this as a source-level risk because I verified the current source pattern but did not run an on-device reproduction.\n\n### Current source path\n\n```text\n\u003ccom.termux.app.api.file.FileReceiverActivity: void handleContentUri(android.net.Uri,java.lang.String)\u003e\n -\u003e android.content.ContentResolver#openInputStream(android.net.Uri)\n```\n\n\n### Verification\n\nI checked the latest upstream source at `30ebb2dee381d292ade0f2868cfde0f9f20b89fe` and found the sensitive operation still present in `app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java`. This report is based on source-level inspection, not runtime reproduction.","comments":0,"created_at":"2026-04-28T07:42:54Z","labels":["bug report"],"number":5092,"title":"[Bug]: Yet another potential ANR / main-thread blocking risk ","updated_at":"2026-04-29T02:28:49Z"} +{"author":"imsuperli","body":"### Problem description\n\nWhen using Termux on a Honor 100 Pro, I encounter a persistent UI flickering issue in the session tab after creating or switching to a new session while codex cliΓÇï is running in the original session.\n\nAfter swiping from the left edge to open the sidebar and tapping ΓÇ£New sessionΓÇ¥, a floating tab/header appears at the top of the terminal interface, showing the session name and a spinning activity indicator. This tab then begins to flicker rapidly and continuously. The flickering specifically occurs when the original session is running codex cliΓÇï and the user switches to another session ΓÇö the tab then erratically displays the title of the other session while flickering.\n\n### Steps to reproduce the behavior.\n\nOpen Termux on Honor 100 Pro.\n\nStart codex cliΓÇï in the initial session.\n\nSwipe from the left edge to open the sidebar.\n\nTap ΓÇ£New sessionΓÇ¥ΓÇï to create a second session.\n\nSwitch back to the first session (or observe the top tab after creation).\n\nResult:ΓÇï The top session tab flickers rapidly, intermittently showing the session title of the other session.\n\n### What is the expected behavior?\n\nThe session tab at the top should remain visually stable and correctly display the current sessionΓÇÖs title without flickering.\n\n### System information\n\nTermux App Version:ΓÇï v0.119.0-beta.3\nAndroid OS Version:ΓÇï All the Andriod Phone\nDevice Model:ΓÇï Honor 100 Pro","comments":3,"created_at":"2026-04-24T04:56:55Z","labels":["bug report"],"number":5088,"title":"[Bug]: UI Flicker in Session Tab When Switching Sessions While Running Codex CLI","updated_at":"2026-04-25T23:01:38Z"} +{"author":"hansm629","body":"### Problem description\n\nhttps://github.com/termux/termux-app/issues/5035\n\nI have identified the cause of the issue regarding the above issue, where the **Big Core Cluster** is not being used on **Samsung OneUI 8.x devices**.\n\n### Steps to reproduce the behavior.\n\nThe issue was that when the Termux App is in the background,\neven though the battery usage limit is set to [**Unrestricted**],\n\n**it does not use the Big Core Cluster at all, resulting in performance degradation.**\n\nTo my knowledge, the **Termux App** already has the `android.permission.FOREGROUND_SERVICE` permission declared in `AndroidManifest.xml`, and when tested with `adb`, the **Termux App** is recognized as a **Foreground Service app**.\n\nThis appears to be a common issue across **OneUI 8.x**, and it is presumed to be an issue where the Big Core Cluster is not being used despite the battery usage limit being set to [Unrestricted], likely due to a shift in the CPU workload policy to be more conservative.\n\nI have also been reporting this issue on the Samsung Developer Forum...\n(https://forum.developer.samsung.com/t/detail?id=10128)\n\nIs there any way to mitigate this issue at the Termux App level?\n\nThank you.\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n- Termux application version: Termux 0.119.0-beta.3\n- Android OS version: One UI 8.x(Android 16) / One UI 7.0(Android 15)\n- Device model: Galaxy S24+ / Galaxy S25 Ultra / Galaxy S26 Ultra / Galaxy Tab S9 Ultra","comments":5,"created_at":"2026-04-20T07:21:50Z","labels":["bug report"],"number":5086,"title":"[Bug]: Samsung OneUI 8.x: Performance issue with Termux app in the background","updated_at":"2026-05-11T09:50:25Z"} +{"author":"xJonathanLEI","body":"### Feature description\n\nCurrently, the only ways to toggle the visibility of the terminal toolbar appear to just be:\n\n- Long-pressing the keyboard button\n- Volume + `q`\n- Volume + `k`\n\nall of which involve physically operating the device. There also seems to be no way to programmatically toggle this setting.\n\nAs a long time Termux user I find myself using the app in two modes:\n\n1. Handheld mode: using the toolbar + virtual keyboard\n2. Desktop mode: using the device only as a screen; w/ toolbar and virtual keyboard disabled - use external physical keyboard\n\nWhen switching from mode 1 to mode 2 by turning on an external keyboard, most systems are smart enough to automatically hide the virtual keyboard. But the terminal toolbar itself remains visible. On small devices every pixel counts and the toolbar takes up valuable screen real estate. So I'd end up having to reach for the phone again to turn it off.\n\nA simple fix would be to just allow programmatic access to toggling the terminal toolbar so that it can be set as an alias in the shell.\n\n### Additional information\n\nN/A","comments":0,"created_at":"2026-04-19T17:13:27Z","labels":[],"number":5083,"title":"[Feature]: Make terminal toolbar toggle scriptable","updated_at":"2026-04-19T17:13:27Z"} +{"author":"DullWoodKnife","body":"## Bug Description\nWhen an external Bluetooth keyboard is connected, IME switching via keyboard shortcuts (Ctrl+b or Ctrl+shift) fails. Only the English keyboard is available and cannot switch to Chinese keyboard. This works correctly in other apps.\n\n## Steps to Reproduce\n1. Connect an external Bluetooth keyboard (iFond) to Android device\n2. Open Termux app (version 0.119.0-beta.3)\n3. Attempt to switch IME using Ctrl+b or Ctrl+shift hotkeys\n4. Observe that only English keyboard is available and switching does not work\n\n## Expected Behavior\nIME switching hotkeys (Ctrl+b or Ctrl+shift) should successfully switch between available input method editors, including Chinese keyboards.\n\n## Actual Behavior\nThe IME switcher does not respond to Ctrl+b or Ctrl+shift hotkeys when an external keyboard is attached. Only English keyboard can be used. The issue persists regardless of which hotkey combination is used.\n\n## Environment\n- Termux Version: 0.119.0-beta.3\n- Android Version: (please specify)\n- External Keyboard: iFond Bluetooth keyboard\n- Reproduction Rate: 100%\n\n## Additional Context\n- IME switching works correctly in other apps on the same device with the same external keyboard\n- The issue is completely reproducible\n- Without external keyboard, IME switching works normally","comments":4,"created_at":"2026-04-18T06:40:26Z","labels":[],"number":5080,"title":"IME switching fails when an external keyboard is attached","updated_at":"2026-04-18T09:23:26Z"} +{"author":"marqqs","body":"### Problem description\n\nHello there!\n\nI've little problem with semigraphics in Termux.\nIt seems that the terminal font isn't quite correct regarding the block graphics: the triangles do not extend to the outer dimensions of one character. Thus the semigraphic \"pictures\" appear distorted. On desktop terminal (Ubuntu) everything works fine.\n\nMight this be a bug in Termux? Or did I do anything wrong?\n\nAny help would be appreciated very much.\n\nUnicode:\nBLACK UPPER LEFT TRIANGLE (u+25E4)\nBLACK UPPER RIGHT TRIANGLE (u+25E5)\nBLACK LOWER LEFT TRIANGLE (u+25E3)\nBLACK LOWER RIGHT TRIANGLE (u+25E2)\nFULL BLOCK (u+2588)\n\n\u003cimg width=\"1024\" height=\"1284\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/f66f5440-e098-40b1-8490-05ec6e81b85f\" /\u003e\n\n### Steps to reproduce the behavior.\n\necho -e \"\\xe2\\x96\\x88\\xe2\\x97\\xa4\"\n\n(to write a triangle next to a full block)\n\n### What is the expected behavior?\n\nHeights of full block and triangle should be the same.\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: LineageOS 22.2-20260318-NIGHTLY-FP3\n* Device model: FP3\n","comments":4,"created_at":"2026-04-15T15:28:58Z","labels":["bug report"],"number":5076,"title":"[Bug] or [Feature]?: Distorted semigraphics (triangles)","updated_at":"2026-04-19T12:23:03Z"} +{"author":"sandy2008","body":"### Problem description\n\nOn Android with an external **JIS/Japanese hardware keyboard** (in our case a Xiaomi keyboard), ordinary English typing works in Termux, but **JIS-specific hardware keys do not behave usefully**.\n\nThe main keys of interest are:\n\n- `σìèΦºÆ/σà¿ΦºÆ` / `Zenkaku/Hankaku`\n- `Henkan`\n- `Muhenkan`\n- `Yen`\n- `Ro`\n\nThis is related to older reports about external language switching and hardware keyboard mapping, but the current problem is narrower: Termux appears to handle only a subset of Android keyboard-layout/language-switch keys from external keyboards.\n\n### Current understanding\n\nLooking at current `master`, `TerminalView.onKeyDown()` already has a special case for `KEYCODE_LANGUAGE_SWITCH`, which was likely added to address external keyboard language switching cases such as #4133.\n\nHowever, I could not find corresponding handling for common JIS-specific Android keycodes such as:\n\n- `KEYCODE_ZENKAKU_HANKAKU`\n- `KEYCODE_HENKAN`\n- `KEYCODE_MUHENKAN`\n- `KEYCODE_YEN`\n- `KEYCODE_RO`\n\nSo the present behavior seems to be:\n\n- ordinary characters work\n- standard terminal keycodes work\n- `KEYCODE_LANGUAGE_SWITCH` is passed through\n- JIS-only hardware keys are still not supported or not translated in a useful way\n\n### Why this matters\n\nOn Android, these keys are important for real-world external Japanese keyboards.\n\nFor terminal usage, there are two practical classes of behavior:\n\n1. **IME/language toggle keys** such as `Zenkaku/Hankaku`, `Henkan`, `Muhenkan`\n2. **JIS-specific symbol keys** such as `Yen` and `Ro`\n\nI am **not** asking Termux to implement a full IME framework like IBus/Fcitx.\n\nI am asking whether Termux can either:\n\n- clearly document that these JIS hardware keys are intentionally unsupported, or\n- support a minimal handling strategy for them, for example:\n - passing the IME/language-toggle keys through in the same spirit as `KEYCODE_LANGUAGE_SWITCH`\n - and/or optionally mapping JIS-specific symbol keys to terminal-friendly output\n\n### Related issues\n\n- #137 `halfwidth/fullwidth key doesn't work since 0.38`\n- #1839 `Typing in Korean with an external keyboard`\n- #1210 `Hardware Keyboard Mapping`\n- #4133 `[Bug]: Cannot change language with external keyboard.`\n\nFrom #4133, there was even a local patch posted that added explicit handling for `KEYCODE_LANGUAGE_SWITCH`, and current `master` already seems to include that path.\n\n### Questions\n\n1. Is the lack of handling for JIS-specific hardware keys intentional?\n2. Would a narrow patch be acceptable for the Android keycodes above, without introducing a broad Android-only virtual-key abstraction?\n3. If not, what is the recommended workaround for external JIS keyboards on Android in Termux?\n\n### Additional context\n\nThis seems adjacent to, but not identical with, generic system-wide hardware keyboard layout problems. For example, #4826 was closed as effectively system-wide keyboard mapping, while this issue is about **Termux's current handling of Android JIS-specific keycodes from external keyboards**.\n","comments":0,"created_at":"2026-04-15T11:46:31Z","labels":[],"number":5075,"title":"JIS external keyboard keys (YEN/RO/HENKAN/MUHENKAN/ZENKAKU_HANKAKU) are still not handled in current Termux","updated_at":"2026-04-15T11:47:32Z"} +{"author":"stevenxxiu","body":"### Feature description\n\nSupport the *Kitty* image protocol.\n\n#2973 implements the *Sixel* image protocol, but this is a rather legacy protocol. Many programs now only support the *Kitty* image protocol to show images. Terminal emulators too, like *Ghostty*.\n\n### Additional information\n\nPer \u003chttps://sw.kovidgoyal.net/kitty/graphics-protocol/\u003e, terminal emulators with support include:\n\n- [Ghostty](https://ghostty.org)\n- [Konsole](https://invent.kde.org/utilities/konsole/-/merge_requests/594)\n- [st (with a patch)](https://st.suckless.org/patches/kitty-graphics-protocol)\n- [Warp](https://docs.warp.dev/getting-started/changelog#id-2025.03.26-v0.2025.03.26.08.10)\n- [wayst](https://github.com/91861/wayst)\n- [WezTerm](https://github.com/wez/wezterm/issues/986)\n- [iTerm2](https://github.com/gnachman/iTerm2/commit/4fe5b2173193b6c3e45234b6b2ab7a144a5cfa01)\n- [xterm.js](https://github.com/xtermjs/xterm.js/discussions/5683)","comments":2,"created_at":"2026-04-11T05:41:16Z","labels":[],"number":5068,"title":"[Feature]: Support the Kitty image protocol to show images","updated_at":"2026-04-19T03:48:15Z"} +{"author":"MulverineX","body":"### Problem description\n\nSame issue as #1998 , I'm on Bazzite/KDE Plasma (Wayland). \n\n### Steps to reproduce the behavior.\n\nN/A\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.1\n* Android OS version: 17\n* Device model: Pixel 8 Pro\n","comments":1,"created_at":"2026-04-10T16:08:25Z","labels":["bug report"],"number":5066,"title":"[Bug]: ctrl+j to enter via KDE Connect is not working","updated_at":"2026-04-10T16:09:28Z"} +{"author":"GlowingScrewdriver","body":"### Feature description\n\nOften, when an app shares a small snippet of text with Termux, the filename is empty. If one wishes to process such text snippets with `termux-file-editor`, one must type in some filename in order to proceed. This is a mild inconvenience, especially in cases when the text doesn't really need to be saved, and the filename is not important.\n\nI can think of 2 alternative ways of handling the filename in these situations:\n\n1. If the user chooses to leave the filename empty, Termux could write the file contents to a temporary file, pass that to `termux-file-editor`, and delete the temporary file. So the interaction would go something like:\n\n 1. User shares from an app to Termux\n 2. Termux's \"Save file in\" dialog opens up, asking for a filename\n 3. User clicks \"edit\" without filling in a filename\n 4. `termux-file-editor` receives a temporary file as its argument\n 5. The temporary file is deleted after `termux-file-editor` exits\n\n2. A fixed default filename is provided by Termux. Here, the interaction would look like:\n 1. User shares from an app to Termux\n 2. Termux's \"Save file in\" dialog opens up, asking for a filename. The filename field is already filled with the default (something like `.termux_shared`?)\n 3. User clicks \"edit\" without changing the default filename\n 4. `termux-file-editor`, as expected, simply receives this default filename as its argument\n\n### Additional information\n\n--","comments":0,"created_at":"2026-04-08T13:25:10Z","labels":[],"number":5063,"title":"[Feature]: termux-file-editor: default filename","updated_at":"2026-05-15T20:09:55Z"} +{"author":"TT-Etz-Official","body":"### Problem description\n\ndpkg/tar cannot extract deb packages, dpkg is out of date and cannot read new debian package headers\n\nquite a few gpg signiatures need to be dearmored as they are readable in plain text and apt needs binned signiature files\n\n### Steps to reproduce the behavior.\n\ninstall fresh termux\n\ntry to install android tools\n\nwhen that fails, run apt update\n\nwhen that errors out, try --allow-insecure-repositories\n\nwhen that fails, try --allow-unauthenticated\n\nthat will then fail on dpkg shitting itself\n\n### What is the expected behavior?\n\nThings actually working as expected\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: LineageOS 14, Android 7.1 Nougat\n* Device model: Kindle Fire HD6 4th gen\n\nhttps://github.com/user-attachments/assets/a802aa1d-eb87-466e-8ff3-b227c39db9aa","comments":22,"created_at":"2026-04-07T00:00:44Z","labels":["bug report"],"number":5053,"title":"[Bug]: GPG signiatures broken or missing, dpkg extremely outdated","updated_at":"2026-04-07T11:54:55Z"} +{"author":"AKSHAY355-a","body":"### Problem description\n\nWhen a user renames a Termux terminal session via long-press on the session name in the sidebar (drawer), the persistent notification shown in the Android notification shade does not reflect the new session name. The notification continues to display the old/default session name (e.g., \"Termux\") instead of the user-defined name.\n\nThis is a UI inconsistency between the in-app session drawer (which correctly shows the renamed session) and the persistent notification, which always shows the stale/default name. The bug persists even after switching between sessions or bringing the app to the foreground.\n\n### Steps to reproduce the behavior.\n\n1. Open Termux app (v0.118.x, installed via F-Droid or GitHub release).\n2. Open the left sidebar/drawer by swiping from the left edge.\n3. Long-press on the current session name (e.g., \"Termux\").\n4. When prompted, enter a new session name (e.g., \"MySession\") and confirm.\n5. Observe the session name in the drawer ΓÇö it correctly shows \"MySession\".\n6. Pull down the Android notification shade.\n7. Observe the Termux persistent notification ΓÇö it still shows the old session name (\"Termux\") instead of \"MySession\".\n8. Switch to another session and then back to \"MySession\".\n9. The notification still does not update to the new session name.\n\n### What is the expected behavior?\n\nThe persistent Termux notification in the Android notification shade should immediately reflect the updated session name after the user renames a session via long-press. The notification title or session label should stay in sync with the in-app session drawer at all times.\n\n### System information\n\n- **Termux Version**: 0.118.3 (installed via F-Droid)\n- **Android Version**: Android 13 (SDK 33)\n- **Device**: Realme device (also reproduced on Samsung Galaxy running Android 13)\n- **Architecture**: aarch64 (ARM64)\n- **Android API Level**: 33\n- **Kernel**: Linux 5.10.x (aarch64)\n- **`uname -a` output**: `Linux localhost 5.10.157-android13-4 #1 SMP PREEMPT aarch64 GNU/Linux`\n- **Installation source**: F-Droid (not Google Play)\n\n**Additional context:**\n- The bug is consistently reproducible.\n- The `TermuxService` notification builder does not call `notificationManager.notify()` after the session title is updated in `TerminalSession.setTitle()`.\n- Checked in `TermuxService.java`: the `updateNotification()` method is not triggered on session rename events from `TerminalSessionClient.onTitleChanged()`.","comments":0,"created_at":"2026-04-03T13:32:58Z","labels":["bug report"],"number":5048,"title":"[Bug]: Terminal session notification does not update session name when renamed via long-press","updated_at":"2026-04-03T13:32:58Z"} +{"author":"Sayeem3051","body":"### Problem description\n\nSeveral `PendingIntent` calls in the codebase use flags `0` or `FLAG_UPDATE_CURRENT` without including `FLAG_IMMUTABLE`. On Android 12+ (API 31+), this throws `IllegalArgumentException` and crashes the app.\n\nAffected files:\n- [TermuxService.java](cci:7://file:///c:/Users/shaba/projects/open-source-contribute/termux/termux-app/app/src/main/java/com/termux/app/TermuxService.java:0:0-0:0) ΓÇö lines 787, 830, 838\n- [TermuxPluginUtils.java](cci:7://file:///c:/Users/shaba/projects/open-source-contribute/termux/termux-app/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java:0:0-0:0) ΓÇö lines 383, 387\n- [TermuxCrashUtils.java](cci:7://file:///c:/Users/shaba/projects/open-source-contribute/termux/termux-app/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java:0:0-0:0) ΓÇö lines 345, 349\n\nCurrently masked because `targetSdkVersion=28`, but will become a hard crash when targetSdk is raised to 31+ (Google Play requires 34+).\n\nI'm happy to submit a PR with the fix.\n\n\n### Steps to reproduce the behavior.\n\n1. Change `targetSdkVersion` to 31 or higher in [gradle.properties](cci:7://file:///c:/Users/shaba/projects/open-source-contribute/termux/termux-app/gradle.properties:0:0-0:0)\n2. Build and install on an Android 12+ device\n3. Open Termux ΓÇö the foreground notification PendingIntent crashes the app\n\nExpected logcat:\njava.lang.IllegalArgumentException: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.\n\n\n### What is the expected behavior?\n\nPendingIntents should include FLAG_IMMUTABLE to prevent crashes on Android 12+ and prepare for targetSdkVersion upgrade.\n\n\n### System information\n\n* Termux application version: latest from master branch\n* Android OS version: Android 12+ (API 31+)\n* Device model: Any (code-level issue, not device-specific)\n","comments":0,"created_at":"2026-04-03T13:00:45Z","labels":["bug report"],"number":5047,"title":"[Bug]:Missing PendingIntent.FLAG_IMMUTABLE causes crash on Android 12+ (API 31+)","updated_at":"2026-04-03T13:01:02Z"} +{"author":"Vader77Darth","body":"### Feature description\n\nAbility to drag and drop a file from another window into the terminal to paste the \"path\" of a file there much like the terminal in other OS. This makes it easier to put file paths into the terminal as opposed to finding the file's path which isn't always made easy.\n\n### Additional information\n\nYes. Other terminals such as windows terminal for example have this feature.","comments":0,"created_at":"2026-04-01T18:22:45Z","labels":[],"number":5041,"title":"[Feature]: Drag and drop support","updated_at":"2026-04-01T18:22:45Z"} +{"author":"hansm629","body":"### Problem description\n\nHello,\n\nI would like to report a possible performance regression affecting Termux on **Samsung Galaxy devices** running **One UI 8.x**.\n\nIssue:\nOn **One UI 8.x**, tested heavy native workloads launched from Termux no longer use the big CPU cluster properly.\nIn my testing, the big-core cluster does not show utilization at all.\n\n## 1. One UI 7.0\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/df71effd-8ab8-4990-92ea-8af8dcc4e9a4\" /\u003e\n\u003cimg width=\"1238\" height=\"513\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/78520a25-dd53-4ed9-bd65-90a0a97627b1\" /\u003e\n\n\n## 2. One UI 8.x\n\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/15d696b3-7d9c-4f46-9223-ed0f321d603d\" /\u003e\n\u003cimg width=\"1268\" height=\"518\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/b2718a46-40b7-4274-a2bc-b362f87ba6a5\" /\u003e\n\n### Steps to reproduce the behavior.\n\nTest environment:\n- Termux bionic build of Shotcut\n- 4K@30fps video rendering workload\n- Termux 0.119.0-beta.3/ Termux-X11 environment\n- Additional verification with Geekbench inside a proot container\n\nObserved behavior by device during Shotcut video rendering:\n\n**Galaxy S21 Ultra (Exynos 2100)**\n- One UI 7.0:\n CPU cores 0 through 7 show utilization during rendering.\n All 8 CPU cores are used correctly.\n\n**Galaxy S24+ (Exynos 2400)**\n- One UI 7.0:\n CPU cores 0 through 9 show utilization during rendering.\n All 10 CPU cores are used correctly.\n- One UI 8.0 / 8.5(Beta):\n CPU cores 0 through 8 show utilization during rendering.\n Only 9 CPU cores are used.\n The big-core cluster shows no utilization.\n\n**Galaxy S24 Ultra (Snapdragon 8 Gen 3)**\n- One UI 7.0:\n CPU cores 0 through 7 show utilization during rendering.\n All 8 CPU cores are used correctly.\n\n**Galaxy S25 Ultra (Snapdragon 8 Elite)**\n- One UI 8.5(Beta):\n CPU cores 0 through 5 show utilization during rendering.\n Only 6 CPU cores are used.\n The big-core cluster shows no utilization.\n\n**Galaxy S26 Ultra (Snapdragon 8 Elite Gen5)**\n- One UI 8.5:\n CPU cores 0 through 5 show utilization during rendering.\n Only 6 CPU cores are used.\n The big-core cluster shows no utilization.\n\n**Galaxy Tab S9 Ultra (Snapdragon 8 Gen2)**\n- One UI 8.0:\n CPU cores 0 through 6 show utilization during rendering.\n Only 7 CPU cores are used.\n The big-core cluster shows no utilization.\n\n\n### What is the expected behavior?\n\nAdditional observation:\nOn One UI 8.0 / 8.5, I could not observe any utilization of the big-core cluster in any tested Termux or proot workload, not just during video rendering.\n\nAdditional verification:\n- Geekbench inside a proot container also appears to be affected on One UI 8.5.\n- I also tested Good Lock Game Booster+ by adding Termux as a game app and setting CPU/GPU to maximum performance, but it did not change this behavior.\n\nWhy this seems important:\nThis does not look like a Shotcut-only issue.\nIt appears to affect Termux native/proot workloads more broadly on One UI 8.x.\n\nPossible cause:\nThis may be related to changed task classification, scheduler behavior, cpuset/cgroup assignment, or power policy on One UI 8.x.\n\nPlease let me know if there is any debugging information I can provide.\nThank you.\n\n### System information\n\n* Termux application version: Termux 0.119.0-beta.3\n* Android OS version: One UI 8.x(Android 16) / One UI 7.0(Android 15)\n* Device model: Galaxy S21 Ultra / Galaxy S24+ / Galaxy S24 Ultra / Galaxy S25 Ultra / Galaxy S26 Ultra / Galaxy Tab S9 Ultra\n","comments":4,"created_at":"2026-03-28T05:31:03Z","labels":["bug report"],"number":5035,"title":"[Bug]: One UI 8.x: big CPU cores are never used in tested Termux/proot workloads","updated_at":"2026-04-04T14:57:05Z"} +{"author":"biscuitvicious","body":"### Problem description\n\nInstalled Termux via F-Droid. Upon startup, it immediately crashes. Appears to be a permission denied error on Termux' internal files. Crash report attached in System Information.\n\n### Steps to reproduce the behavior.\n\nInstall Termux 0.118.3 via F-Droid. Pixel 6 with latest Android 16.\n\n### What is the expected behavior?\n\nIt should start up successfully.\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 16\n* Device model: Pixel 6\n\nOS info and crash report attached:\n\n\u003cimg width=\"1080\" height=\"1299\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/b7df5a5b-c1d9-4b3c-aaf9-86628a01806a\" /\u003e\n\n[termux-crash_report.log](https://github.com/user-attachments/files/26254046/termux-crash_report.log)\n","comments":8,"created_at":"2026-03-25T20:34:45Z","labels":["bug report"],"number":5032,"title":"[Bug]: Termux 0.118.3 crashes on startup after fresh install [Android 16]","updated_at":"2026-05-14T14:30:05Z"} +{"author":"ItzTej8","body":"### Problem description\n\n## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxActivity` \n**Report Timestamp**: `2026-03-23 15:44:12.406 UTC` \n##\n\n## Crash Details\n\n**Crash Thread**: `Thread[main,5,main]` \n**Crash Timestamp**: `2026-03-23 15:44:10.866 UTC` \n\n**Crash Message**:\n```\nThe content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131231117, class android.widget.ListView) with Adapter(class com.termux.app.terminal.TermuxSessionsListViewController)]\n```\n\n\n### Stacktrace\n\n```\njava.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131231117, class android.widget.ListView) with Adapter(class com.termux.app.terminal.TermuxSessionsListViewController)]\n\tat android.widget.ListView.layoutChildren(ListView.java:1715)\n\tat android.widget.AbsListView.onTouchUp(AbsListView.java:4270)\n\tat android.widget.AbsListView.onTouchEvent(AbsListView.java:4046)\n\tat android.view.View.performOnTouchCallback(View.java:16893)\n\tat android.view.View.dispatchTouchEvent(View.java:16793)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3217)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2877)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3223)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2892)\n\tat com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:569)\n\tat com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:2098)\n\tat android.app.Activity.dispatchTouchEvent(Activity.java:4773)\n\tat androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)\n\tat com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:517)\n\tat android.view.View.dispatchPointerEvent(View.java:17203)\n\tat android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:9294)\n\tat android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:8963)\n\tat android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8327)\n\tat android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:8391)\n\tat android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:8350)\n\tat android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:8523)\n\tat android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:8358)\n\tat android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:8580)\n\tat android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8331)\n\tat android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:8391)\n\tat android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:8350)\n\tat android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:8358)\n\tat android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8331)\n\tat android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:11839)\n\tat android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:11786)\n\tat android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:11731)\n\tat android.view.ViewRootImpl.processRawInputEvent(ViewRootImpl.java:12230)\n\tat android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:11969)\n\tat android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:321)\n\tat android.os.MessageQueue.nativePollOnce(Native Method)\n\tat android.os.MessageQueue.nextLegacy(MessageQueue.java:928)\n\tat android.os.MessageQueue.next(MessageQueue.java:1040)\n\tat android.os.Looper.loopOnce(Looper.java:221)\n\tat android.os.Looper.loop(Looper.java:408)\n\tat android.app.ActivityThread.main(ActivityThread.java:9964)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:613)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1074)\n\n```\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.3` \n**VERSION_CODE**: `1022` \n**UID**: `10367` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c111,c257,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c111,c257,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `.............HIDDEN.............` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `6.1.118-android14-11-o-g1bc51d075fed` \n**SDK_INT**: `36` \n**RELEASE**: `16` \n**ID**: `UKQ1.231108.001` \n**DISPLAY**: `RMX3851_16.0.3.500(EX01)` \n**INCREMENTAL**: `U.R4T2.40ac331-1e887a1-1eb8668` \n**SECURITY_PATCH**: `2026-01-01` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: `2147483647` \n**MONITOR_PHANTOM_PROCS**: `true` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `realme` \n**BRAND**: `realme` \n**MODEL**: `RMX3851` \n**PRODUCT**: `RMX3851IN` \n**BOARD**: `pineapple` \n**HARDWARE**: `qcom` \n**DEVICE**: `RE5CA6L1` \n**SUPPORTED_ABIS**: `arm64-v8a` \n**SUPPORTED_32_BIT_ABIS**: \n**SUPPORTED_64_BIT_ABIS**: `arm64-v8a` \n**PAGE_SIZE**: `4096` \n##\n\n### Steps to reproduce the behavior.\n\nPlease\n\n### What is the expected behavior?\n\nPlease solve\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":0,"created_at":"2026-03-23T15:49:17Z","labels":["bug report"],"number":5027,"title":"[Bug]: Crashed","updated_at":"2026-03-23T15:49:17Z"} +{"author":"ascendbeing","body":"### Problem description\n\nLatest mainline services update for \"Google Services\" -\u003e \"System Services\" broke the keyboard overlay. It now is absent. I have tried toggling the full screen and the workaround. Keyboard is flatly absent.\n\n### Steps to reproduce the behavior.\n\n1. Settings \n2. Google services (or Google or equivalent)\n3. Swipe to right select system services\n4. update mainline services if possible; if this doesn't work try updating Google play from security sub menu \n5. after properly installed your keyboard will no longer have an overlay for extra keys.\n\n\u003cimg width=\"633\" height=\"672\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/c3b97a71-bade-4a38-a0e7-0f45b1259828\" /\u003e\n\nI only know this applies to android 16. maybe it doesn't affect earlier versions\n\n\n### What is the expected behavior?\n\nShow extra keys instead of never showing them.\n\n### System information\n\n* Termux application version: 0.119.0-beta3\n* Android OS version: 16 oneui beta 8.5\n* Device model: Samsung s25 ultra 512/12: SM-S938U1\n\n\u003cimg width=\"720\" height=\"1400\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/f8b3f05f-97b6-49b8-afaf-9648f95bea2e\" /\u003e\n","comments":1,"created_at":"2026-03-23T15:07:40Z","labels":["bug report"],"number":5026,"title":"[Bug]: No Keyboard overlay after Mainline Services update on Android 16.","updated_at":"2026-03-23T15:08:24Z"} +{"author":"yzjdev","body":"### Feature description\n\nWhen a third-party app invokes Termux to execute some long-running commands via run command, is it possible to return the command output in real time?\n\nWhile reviewing the source code, I found a callback called OneLineListener in StreamGobbler:\nhttps://github.com/termux/termux-app/blob/3f0dec3574a6617ff7ff0b78d30b29cfffd71b20/termux-shared/src/main/java/com/termux/shared/shell/StreamGobbler.java#L316\n\nHowever, it does not appear to be used anywhere. Could this be a possible entry point for implementing real-time output callbacks?\n\n### Additional information\n\nIt doesn't seem to be used anywhere.","comments":0,"created_at":"2026-03-15T23:39:59Z","labels":[],"number":5018,"title":"[Feature]: Stream execution results for run command","updated_at":"2026-03-15T23:39:59Z"} +{"author":"Sonsenna","body":"J","comments":2,"created_at":"2026-03-15T17:36:05Z","labels":["bug report"],"number":5017,"title":"[Bug]: Help Failed to download and build `cffi==2.0.0`","updated_at":"2026-03-15T19:05:54Z"} +{"author":"Zweih","body":"### Problem description\n\nWhen returning to Termux from launchers, the soft keyboard is not restored to the state it was in before leaving. If the keyboard was visible, it briefly appears then immediately disappears. Tapping the terminal or the Keyboard button in the drawer restores it. Less consistently, if the keyboard was hidden it may reappear on return.\n\nI did some digging to figure out why the recents switcher behaves differently and traced it to `setSoftKeyboardState ` in `TermuxTerminalViewClient.java`. Theres a fixed 300 ms delay before calling `showSoftInput`, assuming window focus has arrived by then. When Android delivers focus late, which happens whenever Termux is brought forward via `startActivity` (rather than the recents switchers `moveTaskToFront`), the IMM either ignores the call or a subsequent focus event hides the keyboard again. The recents switcher does not trigger this because it delivers focus before `onResume`, but tapping the app icon in the launcher does not.\n\n### Steps to reproduce the behavior.\n\n1. Open Termux and let the soft keyboard appear (type anything)\n2. Press the Home button\n3. Return to Termux by tapping its icon in the app launcher\n4. The keyboard flickers briefly and disappears, or does not appear at all\n\nNOTE: Returning via the recents switcher does not reproduce the issue\n\n### What is the expected behavior?\n\nThe soft keyboard should be in the same state as when Termux was left. Visible if it was visible, hidden if it was hidden. It should be consistent with the behaviour when returning via the recents switcher.\n\n### System information\n\n* Termux application version: googleplay.2026.02.11\n* Android OS version: 16 (API 36)\n* Device model: Pixel 10","comments":0,"created_at":"2026-03-14T05:47:08Z","labels":["bug report"],"number":5014,"title":"[Bug]: Soft keyboard flickers and disappears when returning to Termux","updated_at":"2026-03-14T05:47:08Z"} +{"author":"rustycanb","body":"### Problem description\n\nVersions up to 2.0.14 work flawlessly. Can I downgrade from 2.0.15 to .14?\n\n### Steps to reproduce the behavior.\n\nDevice is Android 15. Install Termux and Syncthing, version prior to 2.0.15 work as expected.\nIs it possible to force an earlier version?\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":10,"created_at":"2026-03-12T04:39:59Z","labels":["bug report","unofficial-google-play-release"],"number":5011,"title":"[Bug]: Syncthing fails after upgrade to version 2.0.15","updated_at":"2026-03-14T05:15:33Z"} +{"author":"mikegilchrist","body":"## Feature Request\n\n**Describe the desired behavior**\nAdd an orientation setting to the Termux Settings UI (accessible via the\nleft-side drawer) that allows users to lock the app to portrait or landscape\nmode, independent of the system auto-rotate setting.\n\n**Suggested options**\n- Auto (follow system setting) -- default, current behavior\n- Portrait (locked)\n- Landscape (locked)\n\n**Why this is useful**\nThe system auto-rotate toggle affects all apps globally. Users who want\nauto-rotate enabled for other apps but prefer Termux to stay in portrait\n(or landscape) have no per-app option today. Termux is commonly used while\ndoing other things and unintentional rotation disrupts the terminal session.\n\n**Implementation note**\nThis could also be exposed as a `terminal-orientation` property in\n`termux.properties` for consistency with the existing configuration\nfile approach, in addition to the Settings UI toggle.\n\n**Environment**\n- Termux version: (from F-Droid or GitHub releases)\n- Android version: 14\n- Device: Pixel 6a","comments":1,"created_at":"2026-03-10T15:58:54Z","labels":[],"number":5008,"title":"Feature request: per-app orientation lock in Settings UI","updated_at":"2026-04-14T21:31:57Z"} +{"author":"ghostmandark","body":"### Problem description\n\n## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxInstaller` \n**Report Timestamp**: `2026-03-08 05:37:33.792 UTC` \n##\n\n## Termux Bootstrap Error\n\nTermux can only be run as the primary user. \nBootstrap binaries compiled for Termux have hardcoded $PREFIX path and cannot be installed under any path other than:\n`/data/data/com.termux/files/usr`.\n\n## Termux Files Info\n\n\n**TERMUX_REQUIRED_FILES_DIR_PATH ($PREFIX)**: `/data/data/com.termux/files` \n**ANDROID_ASSIGNED_FILES_DIR_PATH**: `/data/user/10/com.termux/files` \n\n```\n$ echo 'ls info:'\n/system/bin/ls -lhdZ '/data/data' '/data/user/0' '/data/data/com.termux' '/data/user/0/com.termux' '/data/data/com.termux/files' '/data/user/10/com.termux/files' '/data/user/0/com.termux/files' '/data/user/com.termux/files' '/data/data/com.termux/files/usr-staging' '/data/data/com.termux/files/usr' '/data/data/com.termux/files/home' '/data/data/com.termux/files/usr/bin/login' 2\u003e\u00261\necho; echo 'mount info:'\n/system/bin/grep -E '( /data )|( /data/data )|( /data/user/[0-9]+ )' /proc/self/mountinfo 2\u003e\u00261 | /system/bin/grep -v '/data_mirror' 2\u003e\u00261\n\nls info:\nls: /data/data: Permission denied\nls: /data/user/0: Permission denied\nls: /data/data/com.termux: Permission denied\nls: /data/user/0/com.termux: Permission denied\nls: /data/data/com.termux/files: Permission denied\nls: /data/user/0/com.termux/files: Permission denied\nls: /data/user/com.termux/files: No such file or directory\nls: /data/data/com.termux/files/usr-staging: Permission denied\nls: /data/data/com.termux/files/usr: Permission denied\nls: /data/data/com.termux/files/home: Permission denied\nls: /data/data/com.termux/files/usr/bin/login: Permission denied\ndrwxrwx--x 2 u10_a595 u10_a595 u:object_r:app_data_file:s0:c83,c258,c522,c768 3.4K 2026-03-08 11:37 /data/user/10/com.termux/files\n\nmount info:\n14096 13338 8:11 / /data rw,nosuid,nodev,noatime master:32 - f2fs /dev/block/bootdevice/by-name/userdata rw,lazytime,seclabel,background_gc=on,gc_merge,discard,no_heap,user_xattr,inline_xattr,acl,inline_data,inline_dentry,flush_merge,extent_cache,mode=adaptive,active_logs=6,reserve_root=32768,resuid=0,resgid=1065,inlinecrypt,alloc_mode=default,checkpoint_merge,fsync_mode=nobarrier\n14097 14096 8:11 /data /data/user/0 rw,nosuid,nodev,noatime master:32 - f2fs /dev/block/bootdevice/by-name/userdata rw,lazytime,seclabel,background_gc=on,gc_merge,discard,no_heap,user_xattr,inline_xattr,acl,inline_data,inline_dentry,flush_merge,extent_cache,mode=adaptive,active_logs=6,reserve_root=32768,resuid=0,resgid=1065,inlinecrypt,alloc_mode=default,checkpoint_merge,fsync_mode=nobarrier\n\n```\n##\n\n\n## Logcat Dump\n\n\n\n``````\n$ /system/bin/logcat -d -t 3000 2\u003e\u00261\n--------- beginning of main\n03-08 11:37:32.169 31011 31011 I libc : SetHeapTaggingLevel: tag level set to 0\n03-08 11:37:32.186 31011 31011 I com.termux: Using CollectorTypeCC GC.\n03-08 11:37:32.198 31011 31011 D ProcessState: Binder ioctl to enable oneway spam detection failed: Invalid argument\n03-08 11:37:32.208 31011 31011 I MessageMonitor: Load libmiui_runtime\n03-08 11:37:32.325 31011 31011 D CompatibilityChangeReporter: Compat change id reported: 171979766; UID 1010595; state: DISABLED\n03-08 11:37:32.336 31011 31038 D AppScoutStateMachine: 31011-ScoutStateMachinecreated\n03-08 11:37:32.346 31011 31011 D ApplicationLoaders: Returning zygote-cached class loader: /system/framework/android.test.base.jar\n03-08 11:37:32.351 31011 31011 D nativeloader: Configuring clns-4 for other apk /data/app/~~MOA5Gp4Y6fOHVWfxwj4SaA==/com.termux-GgZO_jkDjZaFImiTTeWfFA==/base.apk. target_sdk_version=28, uses_libraries=, library_path=/data/app/~~MOA5Gp4Y6fOHVWfxwj4SaA==/com.termux-GgZO_jkDjZaFImiTTeWfFA==/lib/arm64:/data/app/~~MOA5Gp4Y6fOHVWfxwj4SaA==/com.termux-GgZO_jkDjZaFImiTTeWfFA==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand:/data/user/10/com.termux\n03-08 11:37:32.351 31011 31011 D nativeloader: Extending system_exposed_libraries: libvraudio_client.qti.so:libbinauralrenderer_wrapper.qti.so:libhoaeffects.qti.so:libcamera_algoup_jni.xiaomi.so:libcamera_mianode_jni.xiaomi.so:libupdateprof.qti.so:libthermalclient.qti.so:libdiag_system.qti.so:libqape.qti.so:libqesdk_ndk_platform.qti.so:liblistenjni.qti.so\n03-08 11:37:32.365 31011 31011 I Perf : Connecting to perf service.\n03-08 11:37:32.370 31011 31011 V GraphicsEnvironment: ANGLE Developer option for 'com.termux' set to: 'default'\n03-08 11:37:32.370 31011 31011 V GraphicsEnvironment: Neither updatable production driver nor prerelease driver is supported.\n--------- beginning of system\n03-08 11:37:32.375 31011 31011 I ForceDarkHelperStubImpl: initialize for com.termux , ForceDarkOrigin\n03-08 11:37:32.377 31011 31011 D nativeloader: Load libforcedarkimpl.so using system ns (caller=/system/framework/miui-framework.jar): ok\n03-08 11:37:32.377 31011 31011 D OpenGLRenderer: JNI_OnLoad success\n03-08 11:37:32.378 31011 31011 I MiuiForceDarkConfig: setConfig density:2.750000, mainRule:0, secondaryRule:0, tertiaryRule:0\n03-08 11:37:32.379 31011 31011 D NetworkSecurityConfig: No Network Security Config specified, using platform default\n03-08 11:37:32.380 31011 31011 D NetworkSecurityConfig: No Network Security Config specified, using platform default\n03-08 11:37:32.415 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home/.termux/termux.properties\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home/.termux/termux.properties\": lstat failed: EACCES (Permission denied)\n03-08 11:37:32.415 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home/.config/termux/termux.properties\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home/.config/termux/termux.properties\": lstat failed: EACCES (Permission denied)\n03-08 11:37:32.415 31011 31011 W Termux.SharedProperties: Not loading properties since file is null\n03-08 11:37:32.408 31011 31011 W com.termux: type=1400 audit(0.0:3698): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:32.408 31011 31011 W com.termux: type=1400 audit(0.0:3699): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:32.408 31011 31011 W com.termux: type=1400 audit(0.0:3700): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:32.417 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files\": Failed to run Os.stat() on file at path \"/data/data/com.termux/files\": stat failed: EACCES (Permission denied)\n03-08 11:37:32.418 31011 31011 E Termux.TermuxApplication: Termux files directory is not accessible\n03-08 11:37:32.418 31011 31011 E Termux.TermuxApplication: Error Code: `150`\n03-08 11:37:32.418 31011 31011 E Termux.TermuxApplication: Error Message (FileUtils Error):\n03-08 11:37:32.418 31011 31011 E Termux.TermuxApplication: ```\n03-08 11:37:32.418 31011 31011 E Termux.TermuxApplication: The termux files directory not found at path \"/data/data/com.termux/files\".\n03-08 11:37:32.418 31011 31011 E Termux.TermuxApplication: ```\n03-08 11:37:32.427 31011 31011 W com.termux: Unsupported class loader: java.lang.Class\u003corg.lsposed.hiddenapibypass.CoreOjClassLoader\u003e\n03-08 11:37:32.507 31011 31011 W com.termux: Unsupported class loader: java.lang.Class\u003corg.lsposed.hiddenapibypass.CoreOjClassLoader\u003e\n03-08 11:37:32.507 31011 31011 W com.termux: Unsupported class loader: java.lang.Class\u003corg.lsposed.hiddenapibypass.CoreOjClassLoader\u003e\n03-08 11:37:32.581 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home/.termux/termux.properties\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home/.termux/termux.properties\": lstat failed: EACCES (Permission denied)\n03-08 11:37:32.578 31011 31011 W com.termux: type=1400 audit(0.0:3701): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:32.578 31011 31011 W com.termux: type=1400 audit(0.0:3702): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:32.582 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home/.config/termux/termux.properties\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home/.config/termux/termux.properties\": lstat failed: EACCES (Permission denied)\n03-08 11:37:32.582 31011 31011 W Termux.SharedProperties: Not loading properties since file is null\n03-08 11:37:32.750 31011 31011 D ViewScrollStubImpl: the value of mScrollFrictionRes is: 0.015\n03-08 11:37:32.761 31011 31011 D MiuiMultiWindowUtils: freeform resolution args raw data:{ \"zizhan\":{ \"freeform_args\": { \"inner\":{ \"vertical_portrait\":{\"aspect_ratio\":0.626, \"original_ratio\":0.5643,\"original_scale\":0.74,\"top_margin\":0.168,\"left_margin\":0.484}, \"horizontal_portrait\":{\"aspect_ratio\":0.626, \"original_ratio\":0.5643,\"original_scale\":0.74,\"top_margin\":0.1222,\"left_margin\":0.59745}, \"vertical_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":1,\"original_scale\":0.604,\"top_margin\":0.2596,\"left_margin\":0.2624}, \"horizontal_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":1,\"original_scale\":0.604,\"top_margin\":0.213,\"left_margin\":0.3758} }, \"outer\":{ \"vertical_portrait\":{\"aspect_ratio\":0.626, \"original_ratio\":1,\"original_scale\":0.74,\"top_margin\":0.0753,\"left_margin\":-1}, \"horizontal_portrait\":{\"aspect_ratio\":0.626, \"original_ratio\":1,\"original_scale\":0.5756,\"top_margin\":-1,\"left_margin\":0.0753}, \"vertical_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":0.6847,\"original_scale\":0.587,\"top_margin\":0.0753,\"left_margin\":-1}, \"horizontal_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":0.6847,\"original_scale\":0.587,\"top_margin\":-1,\"left_margin\":0.0753}} }, \"mini_freeform_args\":{ \"inner\":{ \"vertical_portrait\":{\"aspect_ratio\":0.626, \"original_ratio\":0.147}, \"horizontal_portrait\":{\"aspect_ratio\":0.626, \"original_ratio\":0.147}, \"vertical_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":0.165}, \"horizontal_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":0.165} }, \"outer\":{ \"vertical_portrait\":{\"aspect_ratio\":0.626, \"original_ratio\":0.26}, \"horizontal_portrait\":{\"aspect_ratio\":0.626, \"original_ratio\":0.26}, \"vertical_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":0.293}, \"horizontal_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":0.293}} } }, \"wide_default\":{ \"freeform_args\": { \"vertical_portrait\":{\"aspect_ratio\":0.625, \"original_ratio\":0.5806,\"original_scale\":0.7574,\"top_margin\":0.125,\"left_margin\":0.392}, \"horizontal_portrait\":{\"aspect_ratio\":0.625, \"original_ratio\":0.5806,\"original_scale\":0.7574,\"top_margin\":-1,\"left_margin\":0.6415}, \"vertical_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":1,\"original_scale\":0.5153,\"top_margin\":0.125,\"left_margin\":0.206}, \"horizontal_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":1,\"original_scale\":0.5153,\"top_margin\":-1,\"left_margin\":0.456} }, \"mini_freeform_args\":{ \"vertical_portrait\":{\"aspect_ratio\":0.5625, \"original_ratio\":0.144}, \"horizontal_portrait\":{\"aspect_ratio\":0.5625, \"original_ratio\":0.144}, \"vertical_landscape\":{\"aspect_ratio\":-1, \"original_ratio\":0.144}, \"horizontal_landscape\":{\"aspect_ratio\":-1, \"original_ratio\":0.144} } }, \"narrow_default\": { \"freeform_args\": { \"vertical_portrait\":{\"aspect_ratio\":0.5625, \"original_ratio\":1,\"original_scale\":0.7182,\"top_margin\":0.142,\"left_margin\":-1}, \"horizontal_portrait\":{\"aspect_ratio\":0.8, \"original_ratio\":1,\"original_scale\":0.7182,\"top_margin\":-1,\"left_margin\":0.05}, \"vertical_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":0.6545,\"original_scale\":0.4473,\"top_margin\":0.142,\"left_margin\":-1}, \"horizontal_landscape\":{\"aspect_ratio\":1.6, \"original_ratio\":0.6545,\"original_scale\":0.4473,\"top_margin\":-1,\"left_margin\":0.05} }, \"mini_freeform_args\":{ \"vertical_portrait\":{\"aspect_ratio\":0.5625, \"original_ratio\":0.3}, \"horizontal_portrait\":{\"aspect_ratio\":0.5625, \"original_ratio\":0.3}, \"vertical_landscape\":{\"aspect_ratio\":1.7778, \"original_ratio\":0.3}, \"horizontal_landscape\":{\"aspect_ratio\":1.7778, \"original_ratio\":0.3} } }, \"regular_default\": { \"freeform_args\": { \"vertical_portrait\":{\"aspect_ratio\":0.625, \"original_ratio\":1,\"original_scale\":0.7,\"top_margin\":0.109,\"left_margin\":-1}, \"horizontal_portrait\":{\"aspect_ratio\":0.6667, \"original_ratio\":1,\"original_scale\":0.6102,\"top_margin\":-1,\"left_margin\":0.026}, \"vertical_landscape\":{\"asp\n03-08 11:37:32.762 31011 31011 E MiuiMultiWindowUtils: initFreeFormResolutionArgs failed, device is citrus\n03-08 11:37:32.763 31011 31011 D IS_CTS_MODE: false\n03-08 11:37:32.763 31011 31011 D MULTI_WINDOW_SWITCH_ENABLED: false\n03-08 11:37:32.763 31011 31011 D IS_CTS_MODE: false\n03-08 11:37:32.763 31011 31011 D MULTI_WINDOW_SWITCH_ENABLED: false\n03-08 11:37:32.763 31011 31011 D IS_CTS_MODE: false\n03-08 11:37:32.763 31011 31011 D MULTI_WINDOW_SWITCH_ENABLED: false\n03-08 11:37:32.766 31011 31011 D DecorView[]: getWindowModeFromSystem windowmode is 1\n03-08 11:37:32.787 31011 31011 D CompatibilityChangeReporter: Compat change id reported: 171228096; UID 1010595; state: ENABLED\n03-08 11:37:32.848 31011 31011 W com.termux: type=1400 audit(0.0:3703): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:32.848 31011 31011 W com.termux: type=1400 audit(0.0:3704): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:32.908 31011 31083 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home/crash_log.md\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home/crash_log.md\": lstat failed: EACCES (Permission denied)\n03-08 11:37:32.930 31011 31011 D DecorView[]: getWindowModeFromSystem windowmode is 1\n03-08 11:37:32.930 31011 31011 D DecorView[]: updateDecorCaptionStatus displayWindowDecor is false\n03-08 11:37:32.940 31011 31011 W Looper : PerfMonitor looperActivity : package=com.termux/.app.TermuxActivity time=0ms latency=623ms running=0ms procState=-1 historyMsgCount=3 (msgIndex=2 wall=203ms seq=2 h=android.app.ActivityThread$H w=110) (msgIndex=3 wall=412ms seq=3 h=android.app.ActivityThread$H w=159)\n03-08 11:37:32.948 31011 31011 D CompatibilityChangeReporter: Compat change id reported: 160794467; UID 1010595; state: DISABLED\n03-08 11:37:32.975 31011 31082 D MediaCodecList: codecHandlesFormat: no format, so no extra checks\n03-08 11:37:32.976 31011 31082 D MediaCodecList: codecHandlesFormat: no format, so no extra checks\n03-08 11:37:32.994 31011 31091 D CCodec : allocate(c2.android.vorbis.decoder)\n03-08 11:37:32.998 31011 31091 D hw-ProcessState: Binder ioctl to enable oneway spam detection failed: Invalid argument\n03-08 11:37:33.008 31011 31091 I Codec2Client: Available Codec2 services: \"software\"\n03-08 11:37:33.037 31011 31091 I CCodec : Created component [c2.android.vorbis.decoder]\n03-08 11:37:33.038 31011 31091 D CCodecConfig: read media type: audio/vorbis\n03-08 11:37:33.041 31011 31091 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.max-count.values\n03-08 11:37:33.041 31011 31091 D ReflectedParamUpdater: extent() != 1 for single value type: output.subscribed-indices.values\n03-08 11:37:33.041 31011 31091 D ReflectedParamUpdater: extent() != 1 for single value type: input.buffers.allocator-ids.values\n03-08 11:37:33.041 31011 31091 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.allocator-ids.values\n03-08 11:37:33.042 31011 31091 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.allocator-ids.values\n03-08 11:37:33.042 31011 31091 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.pool-ids.values\n03-08 11:37:33.042 31011 31091 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.pool-ids.values\n03-08 11:37:33.043 31011 31091 I CCodecConfig: query failed after returning 7 values (BAD_INDEX)\n03-08 11:37:33.043 31011 31091 D CCodecConfig: c2 config diff is Dict {\n03-08 11:37:33.043 31011 31091 D CCodecConfig: c2::u32 coded.bitrate.value = 64000\n03-08 11:37:33.043 31011 31091 D CCodecConfig: c2::u32 input.buffers.max-size.value = 32768\n03-08 11:37:33.043 31011 31091 D CCodecConfig: c2::u32 input.delay.value = 0\n03-08 11:37:33.043 31011 31091 D CCodecConfig: string input.media-type.value = \"audio/vorbis\"\n03-08 11:37:33.043 31011 31091 D CCodecConfig: string output.media-type.value = \"audio/raw\"\n03-08 11:37:33.043 31011 31091 D CCodecConfig: c2::u32 raw.channel-count.value = 1\n03-08 11:37:33.043 31011 31091 D CCodecConfig: c2::u32 raw.sample-rate.value = 48000\n03-08 11:37:33.043 31011 31091 D CCodecConfig: }\n03-08 11:37:33.044 31011 31091 D MediaCodec: flushMediametrics\n03-08 11:37:33.049 31011 31091 D CCodec : [c2.android.vorbis.decoder] buffers are bound to CCodec for this session\n03-08 11:37:33.049 31011 31091 D CCodecConfig: no c2 equivalents for durationUs\n03-08 11:37:33.049 31011 31091 D CCodecConfig: no c2 equivalents for track-id\n03-08 11:37:33.049 31011 31091 D CCodecConfig: no c2 equivalents for csd-1\n03-08 11:37:33.049 31011 31091 D CCodecConfig: no c2 equivalents for language\n03-08 11:37:33.049 31011 31091 D CCodecConfig: no c2 equivalents for file-format\n03-08 11:37:33.049 31011 31091 D CCodecConfig: no c2 equivalents for flags\n03-08 11:37:33.050 31011 31091 D CCodecConfig: config failed =\u003e CORRUPTED\n03-08 11:37:33.050 31011 31091 D CCodecConfig: c2 config diff is c2::u32 coded.bitrate.value = 96000\n03-08 11:37:33.050 31011 31091 D CCodecConfig: c2::u32 raw.sample-rate.value = 44100\n03-08 11:37:33.051 31011 31091 W Codec2Client: query -- param skipped: index = 1107298332.\n03-08 11:37:33.051 31011 31091 D CCodec : setup formats input: AMessage(what = 0x00000000) = {\n03-08 11:37:33.051 31011 31091 D CCodec : int32_t bitrate = 96000\n03-08 11:37:33.051 31011 31091 D CCodec : int32_t channel-count = 1\n03-08 11:37:33.051 31011 31091 D CCodec : int32_t max-input-size = 65307\n03-08 11:37:33.051 31011 31091 D CCodec : string mime = \"audio/vorbis\"\n03-08 11:37:33.051 31011 31091 D CCodec : int32_t sample-rate = 44100\n03-08 11:37:33.051 31011 31091 D CCodec : }\n03-08 11:37:33.051 31011 31091 D CCodec : setup formats output: AMessage(what = 0x00000000) = {\n03-08 11:37:33.051 31011 31091 D CCodec : int32_t channel-count = 1\n03-08 11:37:33.051 31011 31091 D CCodec : string mime = \"audio/raw\"\n03-08 11:37:33.051 31011 31091 D CCodec : int32_t sample-rate = 44100\n03-08 11:37:33.051 31011 31091 D CCodec : int32_t android._config-pcm-encoding = 2\n03-08 11:37:33.051 31011 31091 D CCodec : }\n03-08 11:37:33.051 31011 31091 I CCodecConfig: query failed after returning 7 values (BAD_INDEX)\n03-08 11:37:33.052 31011 31091 W Codec2Client: query -- param skipped: index = 1342179345.\n03-08 11:37:33.052 31011 31091 W Codec2Client: query -- param skipped: index = 2415921170.\n03-08 11:37:33.055 31011 31091 D C2Store : Using ION\n03-08 11:37:33.058 31011 31091 D CCodecBufferChannel: [c2.android.vorbis.decoder#839] Created input block pool with allocatorID 16 =\u003e poolID 17 - OK (0)\n03-08 11:37:33.061 31011 31091 I CCodecBufferChannel: [c2.android.vorbis.decoder#839] Created output block pool with allocatorID 16 =\u003e poolID 132 - OK\n03-08 11:37:33.061 31011 31091 D CCodecBufferChannel: [c2.android.vorbis.decoder#839] Configured output block pool ids 132 =\u003e OK\n03-08 11:37:33.061 31011 31091 D CCodecBufferChannel: [c2.android.vorbis.decoder#839] start: updating output delay 0\n03-08 11:37:33.062 31011 31091 E ion : ioctl c0044901 failed with code -1: Inappropriate ioctl for device\n03-08 11:37:33.072 31011 31091 I CCodecBufferChannel: pipelineRoom(3) is \u003c= numClientBuffers(3). Not signalling any more buffers to client\n03-08 11:37:33.077 31011 31091 I CCodecBufferChannel: pipelineRoom(2) is \u003c= numClientBuffers(2). Not signalling any more buffers to client\n03-08 11:37:33.078 31011 31091 I CCodecBufferChannel: pipelineRoom(1) is \u003c= numClientBuffers(1). Not signalling any more buffers to client\n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: QUALCOMM build : 1a315fd02c, I090e68fbb7\n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: Build Date : 12/01/21\n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: OpenGL ES Shader Compiler Version: EV031.32.02.16\n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: Local Branch : \n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: Remote Branch : \n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: Remote Branch : \n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: Reconstruct Branch : \n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: Build Config : S P 10.0.7 AArch64\n03-08 11:37:33.129 31011 31067 I AdrenoGLES-0: Driver Path : /vendor/lib64/egl/libGLESv2_adreno.so\n03-08 11:37:33.144 31011 31067 I AdrenoGLES-0: PFP: 0x016ee197, ME: 0x00000000\n03-08 11:37:33.145 31011 31082 D MediaCodec: flushMediametrics\n03-08 11:37:33.145 31011 31123 I hw-BpHwBinder: onLastStrongRef automatically unlinking death recipients\n03-08 11:37:33.225 31011 31067 D com.termux: MiuiProcessManagerServiceStub setSchedFifo\n03-08 11:37:33.226 31011 31067 I MiuiProcessManagerImpl: setSchedFifo pid:31011, mode:3\n03-08 11:37:33.296 31011 31067 E com.termux: open libmigui.so failed! dlopen - dlopen failed: library \"libmigui.so\" not found\n03-08 11:37:33.306 31011 31011 W Looper : PerfMonitor doFrame : time=338ms vsyncFrame=0 latency=30ms procState=-1 historyMsgCount=10 (msgIndex=3 wall=338ms seq=11 late=30ms h=android.view.Choreographer$FrameHandler c=android.view.Choreographer$FrameDisplayEventReceiver)\n03-08 11:37:33.311 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files\": Failed to run Os.stat() on file at path \"/data/data/com.termux/files\": stat failed: EACCES (Permission denied)\n03-08 11:37:33.312 31011 31011 E Termux.TermuxInstaller: isFilesDirectoryAccessible: false\n03-08 11:37:33.313 31011 31011 E Termux.TermuxInstaller: Termux can only be run as the primary user. \n03-08 11:37:33.313 31011 31011 E Termux.TermuxInstaller: Bootstrap binaries compiled for Termux have hardcoded $PREFIX path and cannot be installed under any path other than:\n03-08 11:37:33.313 31011 31011 E Termux.TermuxInstaller: `/data/data/com.termux/files/usr`.\n03-08 11:37:33.331 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home\": lstat failed: EACCES (Permission denied)\n03-08 11:37:33.334 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home\": lstat failed: EACCES (Permission denied)\n03-08 11:37:33.334 31011 31011 E Termux.ShellEnvironmentUtils: Failed to create shell home directory\n03-08 11:37:33.334 31011 31011 E Termux.ShellEnvironmentUtils: Error Code: `200`\n03-08 11:37:33.334 31011 31011 E Termux.ShellEnvironmentUtils: Error Message (FileUtils Error):\n03-08 11:37:33.334 31011 31011 E Termux.ShellEnvironmentUtils: ```\n03-08 11:37:33.334 31011 31011 E Termux.ShellEnvironmentUtils: Creating shell home directory file at path \"/data/data/com.termux/files/home\" failed.\n03-08 11:37:33.334 31011 31011 E Termux.ShellEnvironmentUtils: ```\n03-08 11:37:33.438 31138 31138 W ls : type=1400 audit(0.0:3727): avc: denied { getattr } for path=\"/data/data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:33.438 31138 31138 W ls : type=1400 audit(0.0:3728): avc: denied { getattr } for path=\"/data/user/0\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:33.438 31138 31138 W ls : type=1400 audit(0.0:3729): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:33.438 31138 31138 W ls : type=1400 audit(0.0:3730): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:33.438 31138 31138 W ls : type=1400 audit(0.0:3731): avc: denied { search } for name=\"data\" dev=\"sda11\" ino=81 scontext=u:r:untrusted_app_27:s0:c83,c258,c522,c768 tcontext=u:object_r:system_data_file:s0:c512,c768 tclass=dir permissive=0\n03-08 11:37:33.506 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home\": lstat failed: EACCES (Permission denied)\n03-08 11:37:33.507 31011 31011 E Termux : Failed to get file type for file at path \"/data/data/com.termux/files/home\": Failed to run Os.lstat() on file at path \"/data/data/com.termux/files/home\": lstat failed: EACCES (Permission denied)\n03-08 11:37:33.507 31011 31011 E Termux.ShellEnvironmentUtils: Failed to create shell home directory\n03-08 11:37:33.507 31011 31011 E Termux.ShellEnvironmentUtils: Error Code: `200`\n03-08 11:37:33.507 31011 31011 E Termux.ShellEnvironmentUtils: Error Message (FileUtils Error):\n03-08 11:37:33.507 31011 31011 E Termux.ShellEnvironmentUtils: ```\n03-08 11:37:33.507 31011 31011 E Termux.ShellEnvironmentUtils: Creating shell home directory file at path \"/data/data/com.termux/files/home\" failed.\n03-08 11:37:33.507 31011 31011 E Termux.ShellEnvironmentUtils: ```\n\n``````\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.3` \n**VERSION_CODE**: `1022` \n**UID**: `1010595` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c83,c258,c522,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c83,c258,c522,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**FILES_DIR**: `/data/user/10/com.termux/files` \n**USER_ID**: `14` \n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \n**TERMUX_FILES_DIR**: `/data/data/com.termux/files` \n**IS_TERMUX_FILES_DIR_ACCESSIBLE**: `false - (150) FileUtils Error: The termux files directory not found at path \"/data/data/com.termux/files\".` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `4.19.157-perf-g1a6087bc0325-dirty` \n**SDK_INT**: `31` \n**RELEASE**: `12` \n**ID**: `SKQ1.211202.001` \n**DISPLAY**: `Android-Q-build-20230424181222` \n**INCREMENTAL**: `V14.0.2.0.SJFINXM` \n**SECURITY_PATCH**: `2023-04-01` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: - (*Requires `DUMP` and `PACKAGE_USAGE_STATS` permission*) \n**MONITOR_PHANTOM_PROCS**: `\u003cunsupported\u003e` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `Xiaomi` \n**BRAND**: `POCO` \n**MODEL**: `M2010J19CI` \n**PRODUCT**: `citrus_in` \n**BOARD**: `citrus` \n**HARDWARE**: `qcom` \n**DEVICE**: `citrus` \n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \n**SUPPORTED_32_BIT_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_64_BIT_ABIS**: `arm64-v8a` \n##\n\n\n### Steps to reproduce the behavior.\n\nCan't install in phone second space. \nBootstrap can't be install \n\n![Image](https://github.com/user-attachments/assets/bae871bf-4db0-480c-86e9-7b8dd3b5faa4)\n\n### What is the expected behavior?\n\nShould be install in phone second space \n\n### System information\n\n* Termux application version:Version 0.118.3 (1002)\n* Android OS version: 12\n* Device model: Poco m3\n\n[termux-crash_report.log](https://github.com/user-attachments/files/25821877/termux-crash_report.log)\n","comments":1,"created_at":"2026-03-08T06:11:16Z","labels":["bug report"],"number":5002,"title":"[Bug]: can't be install in phone second space","updated_at":"2026-03-08T06:19:48Z"} +{"author":"x500x","body":"### Feature description\n\nCan you improve survival rate,like [gkd](https://github.com/gkd-kit/gkd).In my Android phone,gkd always keep alive,but termux can not,which usually is force killed.\n\n### Additional information\n\n.","comments":6,"created_at":"2026-03-06T13:16:19Z","labels":[],"number":5001,"title":"[Feature]: please improve survival rate","updated_at":"2026-03-15T03:13:10Z"} +{"author":"adittaya","body":"### Problem description\n\n[termux-crash_report.log](https://github.com/user-attachments/files/25667085/termux-crash_report.log)\n\n### Steps to reproduce the behavior.\n\nOptimise it for my mobile crash log report I already given\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":2,"created_at":"2026-03-01T22:10:02Z","labels":["bug report"],"number":4996,"title":"[Bug]: crash report","updated_at":"2026-03-03T05:54:05Z"} +{"author":"donno2048","body":"### Problem description\n\nWhen a charater combination that uses the ZWJ is printed termux won't display it\n\n### Steps to reproduce the behavior.\n\nedit test.txt\npaste Γ¥ñ∩╕ÅΓÇì≡ƒ⌐╣ Γ¥ñ∩╕ÅΓÇì≡ƒöÑ inside\n`cat test.txt`\n\n### What is the expected behavior?\n\nΓ¥ñ∩╕ÅΓÇì≡ƒ⌐╣ Γ¥ñ∩╕ÅΓÇì≡ƒöÑ to be printed\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 15\n* Device model: Galaxy A16\n","comments":1,"created_at":"2026-02-24T20:57:03Z","labels":["bug report"],"number":4988,"title":"[Bug]: ZWJ is broken","updated_at":"2026-03-03T09:23:12Z"} +{"author":"donno2048","body":"### Feature description\n\nCurrently there's no way to send any numpad input through termux, I would love to have the option to distinguish numpad numbers from other keyboard number keys and more importantly whether an arrow was typed into the keyboard or numpad keys.\n\n\nCurrently the supported extra keys configurable are: ctrl, alt, fn, shift, space, esc, tab, home\nend, pgup, pgdn, ins, del, bksp, arrows, enter, backslash, quote, apostrophe and f1-12.\n\nPerhaps getting numpad input is too niche to I propose allowing configuration of arbirary key code.\n\n### Additional information\n\nI don't think many other terminal emulator have to address the problem of missing keys, as you can use whatever keyboard you have...","comments":0,"created_at":"2026-02-24T20:14:46Z","labels":[],"number":4987,"title":"[Feature]: Allow arbitrary key code (sequence) as special key","updated_at":"2026-02-24T20:14:46Z"} +{"author":"RandomPersonLikesCode","body":"### Problem description\n\nSo if text, such as one-liner text is being italicized, for some kind of reason, the more the cursor goes to the right, the more the the text is \"spaced\" even though there's no space, and this also happened to different fonts (I even tried the italic variant of the font I use, this visual glitches is still there), this can be quite hassle to edit such text especially when editing with a text editor that has color scheme that italicize, e.g comments, and when the cursor blinks, it gets even weirder.\n\nhttps://github.com/user-attachments/assets/2ef43c25-793c-4624-803d-3d77b9274b4a\n\n### Steps to reproduce the behavior.\n\n1. Opens up a text editor that uses color scheme that italicize specific text, e.g comment\n2. Write a long, one line comment \n3. Move the cursor to the right and the text slowly gets visually spaced\n\n### What is the expected behavior?\n\nWhen the cursor moves the right, the visual spacing of the text must be stay as is no matter what's the font used.\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 15\n* Device model: Infinix X6880\n","comments":1,"created_at":"2026-02-24T17:49:01Z","labels":["bug report"],"number":4986,"title":"[Bug]: Weird visual spacing of italicized text in a text editor","updated_at":"2026-04-03T15:29:08Z"} +{"author":"DevSolar","body":"### Problem description\n\nThe rendering of unicode grapheme clusters -- graphemes that should be joined -- is faulty, and sometimes even changes with font size / zoom factor.\n\n### Steps to reproduce the behavior.\n\necho -e \"\\U0001f468\\u200d\\U0001f469\\u200d\\U0001f467\\u200d\\U0001f466\"\n\nJumps between ≡ƒæ¿ΓÇì≡ƒæ⌐ΓÇì≡ƒæºΓÇì≡ƒæª and ≡ƒæ¿≡ƒæ⌐≡ƒæº≡ƒæª as you zoom in / out.\n\necho -e \"\\u1100\\u1161 -- \\uac00\"\n\nßäÇ followed by ßàífollowed by -- Ω░Ç.\n\n### What is the expected behavior?\n\n≡ƒæ¿ΓÇì≡ƒæ⌐ΓÇì≡ƒæºΓÇì≡ƒæª regardless of zoom\n\nßäÇßàí -- Ω░Ç\n\n### System information\n\n* Termux application version: 0.119 beta 3\n* Android OS version: 16\n* Device model: Samsung Galaxy 24 FE\n","comments":0,"created_at":"2026-02-22T12:34:46Z","labels":["bug report"],"number":4983,"title":"[Bug]: Grapheme cluster rendering faulty / inconsitent","updated_at":"2026-02-22T20:38:47Z"} +{"author":"No-One-Rudro","body":"### Feature description\n\n**Summary:** \nTermux should provide **runtime, optional toggles** for granting camera and microphone access, enabling scripts and Debian/proot apps accessed via Termux (e.g., via RVNC/RVC Viewer) to safely use device hardware while keeping permissions opt-in.\n\n---\n\n### ≡ƒöæ Key Features\n\n- **Camera Access Toggle** ΓÇô Enable or disable camera use for scripts and apps.\n- **Microphone Access Toggle** ΓÇô Enable or disable microphone use for scripts and apps.\n- **Runtime Permission Requests** ΓÇô When a script calls an API needing hardware, Termux prompts the user with a clear dialog:\n - Script/App name requesting access \n - Hardware requested (camera or mic) \n - Buttons: Γ£à Allow / Γ¥î Deny\n- **Status Indicators** ΓÇô Quick icon in Termux showing permission state:\n - ≡ƒöÆ Locked ΓåÆ Permissions disabled \n - Γ£à Enabled ΓåÆ Hardware available \n - Optional tooltip showing recent script access\n\n---\n\n### ≡ƒÆí Benefits\n\n- Allows **advanced automation, AI scripts, and multimedia workflows**. \n- Keeps **security intact**: permissions are optional and transparent. \n- Compatible with **Debian/proot apps and RVNC/RVC Viewer setups**. \n- Follows **modern Android runtime permission practices**. \n\n---\n\n### ≡ƒÄ» Use Cases\n\n1. Scripts that call `termux-camera-photo` or `termux-microphone-record`. \n2. Debian GUI apps running via Termux using camera/mic input. \n3. AI or IoT projects needing voice or video input without compromising security.\n\n\n\n### Additional information\n\n### ≡ƒöù Does another app/terminal emulator have this feature?\n\n- Currently, no known terminal emulator on Android provides **runtime, optional toggles for camera and microphone access** in the same way. \n- Android apps in general use **runtime permission dialogs**, which can serve as a model. \n- This feature is intended to bring **modern Android permission handling to Termux**, enabling scripts and Debian/proot apps to safely access hardware.\n\n### ≡ƒîÉ References / Background\n\n- Android Runtime Permissions: https://developer.android.com/training/permissions/requesting \n- Termux API Tools: https://wiki.termux.com/wiki/Termux:API","comments":1,"created_at":"2026-02-14T18:50:45Z","labels":[],"number":4968,"title":"[Feature]: Optional Camera and Microphone Permission Toggles","updated_at":"2026-02-14T18:58:24Z"} +{"author":"JacobTDC","body":"### Feature description\n\nTermux should declare the `android.permission.MANAGE_VIRTUAL_MACHINE` permission in it's manifest. While it is a `signtaure|privileged` permission, the AVF allows granting it via. ADB, and it would allow usage of the `/apex/com.android.virt/bin/vm` utility and related system services to create, manage, and interact with VMs within Termux.\n\n### Additional information\n\nMore details about the Android Virtualization Framework can be found at the following sources:\nhttps://android.googlesource.com/platform/packages/modules/Virtualization/+/refs/heads/main/libs/framework-virtualization/README.md\nhttps://source.android.com/docs/core/virtualization","comments":3,"created_at":"2026-02-10T23:59:11Z","labels":[],"number":4960,"title":"[Feature]: declare MANAGE_VIRTUAL_MACHINE permission","updated_at":"2026-02-13T21:50:27Z"} +{"author":"GiorgosXou","body":"### Feature description\n\nAdd a command or API that lets apps switch the current long-press behavior to emulate a right-click.\n\n### Additional information\n\nThis would be especially useful for Termux-oriented TUI applications such as [TUIFIManager](https://github.com/GiorgosXou/TUIFIManager), which could greatly benefit from having access to right-click functionality on touch devices.","comments":0,"created_at":"2026-02-09T05:11:37Z","labels":[],"number":4958,"title":"[Feature]: Allow apps to enable long-press right-click emulation","updated_at":"2026-02-09T05:12:07Z"} +{"author":"TheEpicDoge17","body":"### Problem description\n\nWhen trying to open a file (Example: object.json) through Termux, the \"Save file to ~/downloads\" screen appears as intended, but pressing \"Edit\" gives the error \"The following file does not exist; $HOME/bin/termux-file-editor\" even though the directory exists.\n\nhttps://github.com/user-attachments/assets/a67e1ad0-2a75-43e0-b930-16561ce2972b\n\n### Steps to reproduce the behavior.\n\nDepending on the file editor you use, the steps to replicate this may differ, but should have the same process. For this guide, I used the built-in file manager for Android.\n\n1. If you have not done so already, create the folder \"termux-file-editor\" within $HOME/bin using any method.\n2. Open an external (not Termux) file browser.\n3. Select the file you would like to edit. (I used \"example.class\", but also works for other files too.)\n2b. If necessary, select Termux as the program used to open the file.\n3. When (or if) the TermuxFileReciever window appears, name the file how you so choose and select \"Edit\".\n4. Termux fails to edit the file under the error \"The following file does not exist; $HOME/bin/termux-file-editor\"\n\n### What is the expected behavior?\n\nTermux copies the chosen file to $HOME/downloads and opens the file.\n\n### System information\n\n* Termux application version: 0.199.0-beta.3\n* Android OS version: 6.6.77-android15-8-31998796-abogkiS938USQS7BYJ9-4k` \n* Device model: SM-S938U","comments":2,"created_at":"2026-02-07T20:39:26Z","labels":["bug report"],"number":4957,"title":"[Bug]: Termux refuses to open / download files.","updated_at":"2026-04-25T09:40:43Z"} +{"author":"wingfieldmitchell84-eng","body":"### Problem description\n\nIΓÇÖm encountering multiple issues when using Termux on an Android 13 device:\n\n1. Startup scripts (~/.termux/boot.sh) sometimes do not execute as expected.\n2. crond requires manual starting with `crond -P` each session; the -b option is not recognized.\n3. Temporary crontab edits often truncate lines or fail to save, especially when editing multiple commands.\n4. fetch-and-clean scripts work manually but sometimes fail when scheduled via crontab, producing errors like:\n - \"ls: cannot access '/data/data/home/termux_work/downloads/example_*.html': No such file or directory\"\n - \"mv: missing destination file operand\"\n5. Termux behavior differs between sessions, even with identical scripts and crontab entries.\n\nThis seems related to Android 13 permissions, startup behavior, or PATH/environment inconsistencies.\n\nLogs:\n- [Please attach any available logs or error messages from `logcat` or your scripts.]\n\n### Steps to reproduce the behavior.\n\n- Verified crontab entries and ran scripts manually ΓÇö they work.\n- Created `~/.termux/boot.sh` and made it executable.\n- Started crond manually with `crond -P`.\n- Ensured directories exist (`~/termux_work/{downloads,logs,scripts}`) and scripts have execute permissions.\n- Observed errors when scripts are invoked automatically on boot or via crontab.\n\n### What is the expected behavior?\n\nScripts and crond should start automatically on Termux launch, scheduled commands should run without truncation, and logs should record all activity.\n\n### System information\n\n* Termux application version: [current version]\n* Android OS version: 13\n* Device model: [your device model]","comments":1,"created_at":"2026-01-23T14:00:02Z","labels":["bug report"],"number":4946,"title":"[Bug]: Termux startup scripts and crond behavior issues on Android 13","updated_at":"2026-01-23T15:31:12Z"} +{"author":"AlyamanMas","body":"### Problem description\n\nWhen trying to install nix with the multi-user installation inside a debian proot-distro instance, during the installation process, the whole Termux application suddenly crashes with no errors. I have been able to get this to happen consistently.\n\n### Steps to reproduce the behavior.\n\n1. Open a fresh install of Termux\n2. `pkg update \u0026\u0026 pkg upgrade`\n3. `pkg install proot-distro`\n4. `pd install debian`\n5. `pd login debian`\n6. `apt update \u0026\u0026 apt upgrade`\n7. `sh \u003c(curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install) --daemon # taken from nix website, https://nixos.org/download/`\n8. Eventually during the installation process, Termux crashes.\n\n### What is the expected behavior?\n\nnix would install on debian (or at the very least fail without crashing the whole Termux app)\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 16 (OneUI 8.0)\n* Device model: Samsung Galaxy A54\n","comments":2,"created_at":"2026-01-09T21:31:58Z","labels":["bug report"],"number":4932,"title":"[Bug]: App crashes when trying to install nix inside of debian proot-distro","updated_at":"2026-01-09T22:04:39Z"} +{"author":"davidhedlund","body":"### Feature description\n\n### Description \nThe default Termux package repository (`termux-main`) currently includes some nonfree packages. For example, `proot-distro` maintains popular but nonfree GNU/Linux distributions. This mixing of free and nonfree software goes against the principle of repository separation and can create licensing and redistribution concerns. \n\n### Steps to Reproduce \n1. Review the default repository configuration at `$PREFIX/etc/apt/sources.list`, which contains: \n `deb https://mirrors.cbrx.io/apt/termux/termux-main stable main` \n2. Comment out the above line and run: \n `apt update \u0026\u0026 apt show proot-distro` \n The package `proot-distro` will no longer appear, confirming it resides in `termux-main`. \n\n### Expected Behavior \nNonfree packages should reside in a separate repository (e.g., `termux-nonfree`) to clearly distinguish between free and nonfree software. \n\n### Actual Behavior \n`termux-main` currently includes both free and nonfree packages, such as `proot-distro`. \n\n### Proposed Solution \n- Move nonfree packages (e.g., `proot-distro`) out of `termux-main` into a dedicated `termux-nonfree` repository. \n- Update documentation and `sources.list` templates accordingly. \n\n### References \n1. Verification: When the `termux-main` source line is commented out, `apt show proot-distro` fails, confirming its presence in that repository.\n\n### Additional information\n\n@robertkirkman Please take a look at this.","comments":11,"created_at":"2026-01-06T14:54:18Z","labels":[],"number":4927,"title":"[Feature]: Separate nonfree packages into a distinct Termux repository","updated_at":"2026-01-06T16:22:46Z"} +{"author":"mrkrsl","body":"### Feature description\n\n## Issue and use-case\n\nThe Text Input View (the swipe typing-compatible text input that can be switched into the extended keyboard area) is a great workaround for the limitations of text entry into the Terminal grid. It allows for the entry of long text using standard Android keyboard interactions into README files or for longer Markdown editing and writing.\n\nThe current Text Input View is basic. It allows only for a single, non-breaking line of text which removes context from what has been typed. It takes on a generic style where the text is 3x larger than the terminal text.\n\nIt could be easily improved so that it is more comfortable to type into to edit long-text.\n\n## Feature request\n\nEither have more sensible defaults for, or allow the user to override the default settings for the Text Input View:\n\n1. Allowing multi-line text input that wraps and scrolls (e.g. `android:inputType=\"textMultiLine\"` in place of `android:inputType=\"text\"` and `android:maxLines` to be \u003e1 - e.g. `3` or `5`).\n2. The ability to control the font size so that more text can be displayed in the text area. The default could be the same size as that in the Terminal view itself.\n\nSee [the target resource here](https://github.com/termux/termux-app/blob/53f75a8da3b823c18a8244b298da50e87382984d/app/src/main/res/layout/view_terminal_toolbar_text_input.xml#L4).\n\nIdeally the defaults could be overridden in the `~/.termux/termux.preferences` file and be minimally documented. \n\nThis would greatly improve the Text Input View feature.\n\n### Additional information\n\nI believe Termux is unique in offering the Text Input View for long text input. It is a differentiator.\n\nSee [this Reddit thread](https://www.reddit.com/r/termux/comments/1q35hwz/how_to_config_text_input_view/) for context.","comments":1,"created_at":"2026-01-05T20:30:31Z","labels":[],"number":4922,"title":"[Feature]: Configure Text Input View","updated_at":"2026-05-13T03:23:08Z"} +{"author":"henrebotha","body":"### Feature description\n\nI would like to automate various aspects of my sessions. To that end, I need access to some CLI commands that can perform these actions:\n\n- Create session\n- Rename a given session\n- End a given session\n- Switch to a given session\n\n### Additional information\n\nThe closest analogue I'm aware of is something like iTerm's Tmux integration, which essentially allows you to control GUI windows/tabs/splits using the Tmux CLI.","comments":1,"created_at":"2025-12-29T20:21:10Z","labels":[],"number":4913,"title":"[Feature]: CLI commands to manage sessions","updated_at":"2025-12-29T21:32:06Z"} +{"author":"kuvaldini","body":"### Feature description\n\n~/.termux/widget/dynamic_shortcuts\n\n![Image](https://github.com/user-attachments/assets/24677d8f-38fd-4042-b6d9-4552e230d0d0)\n\n### Additional information\n\ntermux-widget has this feature named dynamic shortcuts https://github.com/termux/termux-widget?tab=readme-ov-file#dynamic-shortcuts-optional at `~/.termux/widget/dynamic_shortcuts`","comments":0,"created_at":"2025-12-29T18:40:26Z","labels":[],"number":4912,"title":"[Feature]: dynamic shortcuts for main termux-app icon","updated_at":"2025-12-29T18:47:16Z"} +{"author":"Palloxin","body":"### Problem description\n\nSo I use termux to mass replace text in files with regex.\n\nThe problem is, every time I send the command to replace, the sd card loses free space. And that space is undetectable by normal file explorers, even windows explorer.\n\n### Steps to reproduce the behavior.\n\nInstall termux, give storage permission, and then ``cd`` a path with html files, or txt idk.\n\nThen u use this command to replace the text:\n``find . -type f -name \"*.html\" -exec sed -i -E 's/\\baabb//g' {} +``\n\nNote: I have the sd card set as mi main storage location.\n\nhttps://github.com/user-attachments/assets/5ecc0344-db28-4910-8052-7784dd814456\n\nIn the video u can noticed th free space going from 45.20Gb to 45.08Gb after the replacement.\n\nI am reporting because I suddenly found my sd card free space to absolutely 0 bytes, I did everything from clearing cache and disintalling termux and other apps, nothing the ghist space couldnt be found.\n\nSo I put the sd into a pc and analized it with a specific program and...\n\n![Image](https://github.com/user-attachments/assets/b6d75320-0827-440b-8905-da11c782a1ad)\n\nI was finally able to get the space back.\n\n\nnote that the amount of files it checked dont even amount to 30mb, while the soace increases by 120mb every time\n### What is the expected behavior?\n\nEvery replacement doesnt occupy more space, or at least it is cleaned right afterward automatically.\n\nor\n\n-if the app is unistalled, that occupied space must be freed, which didnt happen\n\n### System information\n\n* Termux application version: 0.118.2\n* Android OS version: android 8 miui 8\n* Device model: huaw p8 lite 2017\n","comments":4,"created_at":"2025-12-28T01:11:26Z","labels":["bug report"],"number":4908,"title":"[Bug]: Cumulative ghost space in sd card","updated_at":"2025-12-28T01:37:22Z"} +{"author":"rajnagar0sh-code","body":"### Problem description\n\n## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxActivity` \n**Report Timestamp**: `2025-12-20 18:19:37.228 UTC` \n##\n\n## Crash Details\n\n**Crash Thread**: `Thread[main,5,main]` \n**Crash Timestamp**: `2025-12-20 18:19:35.279 UTC` \n\n**Crash Message**:\n```\nAttempt to invoke virtual method 'void com.termux.terminal.TerminalSession.write(java.lang.String)' on a null object reference\n```\n\n\n### Stacktrace\n\n```\njava.lang.NullPointerException: Attempt to invoke virtual method 'void com.termux.terminal.TerminalSession.write(java.lang.String)' on a null object reference\n\tat com.termux.app.terminal.StartEntryClient.lambda$addSystemButtons$41$com-termux-app-terminal-StartEntryClient(StartEntryClient.java:1285)\n\tat com.termux.app.terminal.StartEntryClient$$ExternalSyntheticLambda37.onClick(D8$$SyntheticClass:0)\n\tat android.view.View.performClick(View.java:8169)\n\tat android.view.View.performClickInternal(View.java:8146)\n\tat android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)\n\tat android.view.View$PerformClick.run(View.java:32187)\n\tat android.os.Handler.handleCallback(Handler.java:1014)\n\tat android.os.Handler.dispatchMessage(Handler.java:102)\n\tat android.os.Looper.loopOnce(Looper.java:250)\n\tat android.os.Looper.loop(Looper.java:340)\n\tat android.app.ActivityThread.main(ActivityThread.java:9911)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:625)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)\n\n```\n##\n\n\n## XoDos App Info\n\n**APP_NAME**: `XoDos` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `6.0.0` \n**VERSION_CODE**: `5` \n**UID**: `10410` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `true` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c154,c257,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c154,c257,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \n**APK_RELEASE**: `Github` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `B6DA01480EEFD5FBF2CD3771B8D1021EC791304BDD6C4BF41D3FAABAD48EE5E1` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `6.6.57-android15-8-g22948dd860a6-ab13501172-4k` \n**SDK_INT**: `35` \n**RELEASE**: `15` \n**ID**: `AP3A.240905.015.A2_V000L1` \n**DISPLAY**: `PD2453EF_EX_A_15.0.13.0.W30` \n**INCREMENTAL**: `compiler251104200550` \n**SECURITY_PATCH**: `2025-11-01` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: - (*Requires `DUMP` and `PACKAGE_USAGE_STATS` permission*) \n**MONITOR_PHANTOM_PROCS**: `true` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `vivo` \n**BRAND**: `iQOO` \n**MODEL**: `I2405` \n**PRODUCT**: `I2405i` \n**BOARD**: `sun` \n**HARDWARE**: `qcom` \n**DEVICE**: `I2405` \n**SUPPORTED_ABIS**: `arm64-v8a` \n##\n\n### Steps to reproduce the behavior.\n\nWhen running desktop through xodos emulator \n\n### What is the expected behavior?\n\nIt shouldn't crash \n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":0,"created_at":"2025-12-20T18:23:28Z","labels":["bug report"],"number":4900,"title":"Crash","updated_at":"2025-12-20T18:23:28Z"} +{"author":"twaik","body":"### Feature description\n\nI would like to propose a feature request for Termux related to passwordless SSH authentication based on explicit local user approval.\n\nTailscale provides a convenient SSH mechanism where authentication is handled via the Tailscale account itself rather than system passwords, PAM, OAuth, or external identity providers. This enables passwordless SSH with clear access control and user-side confirmation.\n\nI propose considering a similar approach for Termux. The idea is that when an incoming SSH connection attempt occurs, Termux could send a local notification to the user. Opening the notification would present a dialog explaining that a remote client is attempting to establish an SSH session, with options to allow or deny the connection. If allowed, the connection would be established without using passwords, keys, or traditional authentication mechanisms, or a one-time session authorization could be issued.\n\nThis mechanism would allow SSH usage in a passwordless mode based on physical access to the device and explicit user consent. It could serve as an alternative to passwords and keys, and be useful in scenarios where quick, controlled access is needed without prior SSH key or credential setup.\n\n### Additional information\n\nN/A.","comments":0,"created_at":"2025-12-15T06:44:55Z","labels":[],"number":4894,"title":"[Feature]: termux passwordless ssh server","updated_at":"2026-01-28T23:19:41Z"} +{"author":"YingLi606","body":"### Problem description\n\nHello, I need to consult here. s.coreutils 2 reported an error because there is something wrong with the Link2symlink mechanism of termux. I hope to fix it as soon as possible, especially when we install Ubuntu 25.10 proot container, such an error will pop up directly\n\n![Image](https://github.com/user-attachments/assets/d2eed3c5-1fa2-4072-9728-05af693d3b0f)\n\n### Steps to reproduce the behavior.\n\nWhen we downloaded the Ubuntu 25.10 proot container and extracted it, it reported an error on. l2 s.coreutils because there was something wrong with the Link2symlink mechanism of termux\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:0.118.3.49\n* Android OS version:ColorOS 16.0.1 Android 16\n* Device model:OnePlus\n","comments":1,"created_at":"2025-12-13T13:08:11Z","labels":["bug report"],"number":4891,"title":"[Bug]: The. l2 s.coreutils's error is due to a problem with the Link2symlink mechanism of the termux.","updated_at":"2025-12-16T09:06:55Z"} +{"author":"ssvb","body":"### Feature description\n\nThe look of many text mode user interfaces of Linux applictions had been specifically designed for the [de-facto standard text mode VGA palette](https://en.wikipedia.org/wiki/VGA_text_mode), which every IBM PC compatible computer uses by default after booting. One of the Linux applications sensitive to the color scheme is [Midnight Commander](https://en.wikipedia.org/wiki/Midnight_Commander) (the classic old appearance). In particular, syntax highlighting in the built-in Midnight Commander's editor is barely readable when using any other color scheme.\n\nThese are the desired color values:\n```\n# https://github.com/ThomasDickey/ncurses-snapshots/blob/master/test/linux-color.dat\n\ncolor0: #000000\ncolor1: #AA0000\ncolor2: #00AA00\ncolor3: #AA5500\ncolor4: #0000AA\ncolor5: #AA00AA\ncolor6: #00AAAA\ncolor7: #AAAAAA\ncolor8: #555555\ncolor9: #FF5555\ncolor10: #55FF55\ncolor11: #FFFF55\ncolor12: #5555FF\ncolor13: #FF55FF\ncolor14: #55FFFF\ncolor15: #FFFFFF\n```\n\n### Additional information\n\nMATE Terminal offers this color scheme under the name 'linuxconsole'.","comments":0,"created_at":"2025-12-12T17:14:14Z","labels":[],"number":4889,"title":"[Feature]: Use the de-facto standard VGA color palette as the default color scheme for termux","updated_at":"2025-12-12T17:14:14Z"} +{"author":"effleurager","body":"### Problem description\n\nThe size and vertical positioning of non-ASCII glyphs in the extra keys labels does not match that of their ASCII counterparts, e.g.:\n- the arrow keys don't occupy the same height as `ALT`\n- the centre of the hyphen is above the centre of the left \u0026 right arrows\n\n\u003cimg width=\"1344\" height=\"2992\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/76ac20cf-a2ca-4945-9bb0-708adf873f7d\" /\u003e\n\n### Steps to reproduce the behavior.\n\n`~/.termux/termux.properties`\n```properties\nextra-keys-style = arrows-all\n\nextra-keys = [[ \\\n {key: ESC}, \\\n {key: CTRL}, \\\n {key: ALT}, \\\n {key: DEL}, \\\n {key: UP, popup: PGUP}, \\\n {key: SCROLL} \\\n], \\\n[ \\\n {key: TAB}, \\\n {key: '/', popup: BACKSLASH}, \\\n {key: '-', popup: '~'}, \\\n {key: LEFT, popup: HOME}, \\\n {key: DOWN, popup: PGDN}, \\\n {key: RIGHT, popup: END} \\\n]]\n```\n\n### What is the expected behavior?\n\nAll glyphs should be displayed with the same vertical size and alignment around a common mean\n- in the case of all caps, glyphs should cover the distance from the ascender height to the bottom of the x-height\n- otherwise from the ascender height to the descender height\n\n### System information\n\n* Termux application version: 0.119.0-beta.3\n* Android OS version: 16 (BP4A.251205.006)\n* Device model: Google Pixel 8 Pro\n\nRunning a density of 408 dp (instead of the default 480 dp), and a font scale of 0.85.","comments":0,"created_at":"2025-12-06T11:58:33Z","labels":["bug report"],"number":4882,"title":"[Bug]: Extra keys glyph rendering inconsistent","updated_at":"2025-12-06T11:58:33Z"} +{"author":"tmstaedt","body":"### Problem description\n\nonly remember having enabled root for termux.Force-stopping the app didn't help. Had to restart device. \n\n### Steps to reproduce the behavior.\n\nnot reproduced so far \n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxActivity` \n**Report Timestamp**: `2025-12-04 23:43:41.239 UTC` \n##\n\n## Crash Details\n\n**Crash Thread**: `Thread[Thread-2,5,main]` \n**Crash Timestamp**: `2025-12-04 23:42:28.654 UTC` \n\n**Crash Message**:\n```\nUnknown package com.termux.api\n```\n\n\n### Stacktrace\n\n```\njava.lang.SecurityException: Unknown package com.termux.api\n\tat android.os.Parcel.createExceptionOrNull(Parcel.java:3340)\n\tat android.os.Parcel.createException(Parcel.java:3324)\n\tat android.os.Parcel.readException(Parcel.java:3307)\n\tat android.os.Parcel.readException(Parcel.java:3249)\n\tat android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:3515)\n\tat android.app.NotificationManager.notifyAsUser(NotificationManager.java:808)\n\tat android.app.NotificationManager.notify(NotificationManager.java:750)\n\tat android.app.NotificationManager.notify(NotificationManager.java:726)\n\tat com.termux.app.utils.CrashUtils.sendCrashReportNotification(CrashUtils.java:163)\n\tat com.termux.app.utils.CrashUtils$1.run(CrashUtils.java:90)\nCaused by: android.os.RemoteException: Remote stack trace:\n\tat com.android.server.notification.NotificationManagerService.isCallerInstantApp(NotificationManagerService.java:11855)\n\tat com.android.server.notification.NotificationManagerService.checkDisqualifyingFeatures(NotificationManagerService.java:9077)\n\tat com.android.server.notification.NotificationManagerService.enqueueNotificationInternal(NotificationManagerService.java:8579)\n\tat com.android.server.notification.NotificationManagerService.enqueueNotificationInternal(NotificationManagerService.java:8379)\n\tat com.android.server.notification.NotificationManagerService.enqueueNotificationInternal(NotificationManagerService.java:8368)\n\n\n```\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.118.3` \n**VERSION_CODE**: `1002` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c157,c258,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c157,c258,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `4.19.325-cip124-st8-Sirius+-g782277c3bf59` \n**SDK_INT**: `36` \n**RELEASE**: `16` \n**ID**: `BP2A.250805.005` \n**DISPLAY**: `BP2A.250805.005 release-keys` \n**INCREMENTAL**: `1764543096` \n**SECURITY_PATCH**: `2025-10-05` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n\n### Hardware\n\n**MANUFACTURER**: `OnePlus` \n**BRAND**: `OnePlus` \n**MODEL**: `KB2003` \n**PRODUCT**: `OnePlus8T` \n**BOARD**: `kona` \n**HARDWARE**: `qcom` \n**DEVICE**: `OnePlus8T` \n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \n**SUPPORTED_32_BIT_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_64_BIT_ABIS**: `arm64-v8a` \n**PAGE_SIZE**: `4096` \n##","comments":2,"created_at":"2025-12-05T00:02:55Z","labels":["bug report"],"number":4875,"title":"[Bug]: Crash Message Unknown package com.termux.api","updated_at":"2025-12-17T14:07:07Z"} +{"author":"Merith-TK","body":"### Feature description\n\nA wearos app that is a trimmed down version of termux.\n\nBasically I just want to be able to have termux on my smart watch and the current methods kinda suck in terms of actually doing it.\n\nThere is the ADB side loading, which sucks because it forces you to use ADB over tcp which is a pain when the watch keeps going to sleep. Then you gotta use a tool like scrcpy or ADB keyboard inputs to install an ssh server, and that only works on WiFi if the watch is even deciding to connect to WiFi (wearos can be finicky depending on device)\n\nBut I did notice apps, even third party android apks, can side load an app onto the watch directly through the phone linked to the watch.\n\nSo in my head I'm thinking it could be possible to add an companion app (like termux API) for wearos, and then add a termux-wearos package to termux, and have that package be how you interact, such as a special ssh like link or something, or just sending scripts to run like termux-widget does\n\n### Additional information\n\nNo real additional info yet, will get back to you with references after work today","comments":0,"created_at":"2025-11-25T16:03:16Z","labels":[],"number":4865,"title":"[Feature]: Wear OS Companion","updated_at":"2025-11-25T16:03:16Z"} +{"author":"bs0c","body":"### Problem description\n\nI cannot hide extra-keys keyboard. I read https://github.com/termux/termux-app/issues/3121 but VolUp+k doesn't work. \n\n### Steps to reproduce the behavior.\n\n![Alt text](https://i.ibb.co/VYJySVQG/Screenshot-20251122-104757-Termux.png)\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 15\n* Device model: Redmi Note 8\n\n```\ntermux-info\nTermux Variables:\nTERMUX_API_VERSION=0.53.0\nTERMUX_APK_RELEASE=GITHUB\nTERMUX_APP_PACKAGE_MANAGER=apt\nTERMUX_APP_PID=12816\nTERMUX_APP__DATA_DIR=/data/user/0/com.termux\nTERMUX_APP__LEGACY_DATA_DIR=/data/data/com.termux\nTERMUX_APP__SE_FILE_CONTEXT=u:object_r:app_data_file:s0:c224,c257,c512,c768\nTERMUX_APP__SE_INFO=default:targetSdkVersion=28:complete\nTERMUX_IS_DEBUGGABLE_BUILD=1\nTERMUX_MAIN_PACKAGE_FORMAT=debian\nTERMUX_VERSION=0.118.3\nTERMUX__HOME=/data/data/com.termux/files/home\nTERMUX__PREFIX=/data/data/com.termux/files/usr\nTERMUX__ROOTFS_DIR=/data/data/com.termux/files\nTERMUX__SE_PROCESS_CONTEXT=u:r:untrusted_app_27:s0:c224,c257,c512,c768\nTERMUX__USER_ID=0\nPackages CPU architecture:\naarch64\nSubscribed repositories:\n# sources.list\ndeb https://mirrors.bfsu.edu.cn/termux/apt/termux-main stable main\nUpdatable packages:\napt/stable 2.8.1-2 aarch64 [upgradable from: 2.8.1-1]\nbzip2/stable 1.0.8-8 aarch64 [upgradable from: 1.0.8-6]\nca-certificates/stable 1:2025.11.04 all [upgradable from: 1:2025.02.25]\ncommand-not-found/stable 3.2-4 aarch64 [upgradable from: 2.4.0-68]\ncoreutils/stable 9.9 aarch64 [upgradable from: 9.6-1]\ndash/stable 0.5.12-1 aarch64 [upgradable from: 0.5.12]\ndebianutils/stable 5.23.2-1 aarch64 [upgradable from: 5.21]\ndialog/stable 1.3-20240307-1 aarch64 [upgradable from: 1.3-20240307-0]\ndiffutils/stable 3.12-2 aarch64 [upgradable from: 3.11]\ndos2unix/stable 7.5.2-1 aarch64 [upgradable from: 7.5.2]\ndpkg/stable 1.22.6-5 aarch64 [upgradable from: 1.22.6-1]\ned/stable 1.22.2-1 aarch64 [upgradable from: 1.21.1]\nfindutils/stable 4.10.0-1 aarch64 [upgradable from: 4.10.0]\ngawk/stable 5.3.1-2 aarch64 [upgradable from: 5.3.0]\ngpgv/stable 2.5.11 aarch64 [upgradable from: 2.4.5-3]\ngrep/stable 3.12-2 aarch64 [upgradable from: 3.11]\ngzip/stable 1.14-1 aarch64 [upgradable from: 1.13]\ninetutils/stable 2.6-1 aarch64 [upgradable from: 2.6]\nless/stable 685 aarch64 [upgradable from: 668]\nlibandroid-glob/stable 0.6-3 aarch64 [upgradable from: 0.6-2]\nlibandroid-selinux/stable 14.0.0.11-1 aarch64 [upgradable from: 14.0.0.11]\nlibandroid-support/stable 29-1 aarch64 [upgradable from: 29]\nlibassuan/stable 3.0.2-1 aarch64 [upgradable from: 3.0.1-2]\nlibbz2/stable 1.0.8-8 aarch64 [upgradable from: 1.0.8-6]\nlibc++/stable 28c-1 aarch64 [upgradable from: 27c]\nlibcap-ng/stable 2:0.8.5-1 aarch64 [upgradable from: 2:0.8.5]\nlibevent/stable 2.1.12-3 aarch64 [upgradable from: 2.1.12-2]\nlibgcrypt/stable 1.11.2-1 aarch64 [upgradable from: 1.11.0]\nlibgmp/stable 6.3.0-2 aarch64 [upgradable from: 6.3.0-1]\nlibgnutls/stable 3.8.10 aarch64 [upgradable from: 3.8.9]\nlibgpg-error/stable 1.55-1 aarch64 [upgradable from: 1.50]\nlibiconv/stable 1.18-1 aarch64 [upgradable from: 1.18]\nlibidn2/stable 2.3.8-1 aarch64 [upgradable from: 2.3.7]\nliblz4/stable 1.10.0-1 aarch64 [upgradable from: 1.10.0]\nliblzma/stable 5.8.1-1 aarch64 [upgradable from: 5.8.0]\nlibmd/stable 1.1.0-1 aarch64 [upgradable from: 1.1.0]\nlibmpfr/stable 4.2.1-1 aarch64 [upgradable from: 4.2.1]\nlibnettle/stable 3.10.2-1 aarch64 [upgradable from: 3.10.1]\nlibnghttp2/stable 1.68.0 aarch64 [upgradable from: 1.65.0]\nlibnghttp3/stable 1.12.0 aarch64 [upgradable from: 1.8.0]\nlibnpth/stable 1.6-3 aarch64 [upgradable from: 1.6-2]\nlibsmartcols/stable 2.41.2 aarch64 [upgradable from: 2.40.2-3]\nlibssh2/stable 1.11.1-1 aarch64 [upgradable from: 1.11.1]\nlibtirpc/stable 1.3.7-1 aarch64 [upgradable from: 1.3.6]\nlibunbound/stable 1.24.1-1 aarch64 [upgradable from: 1.22.0]\nlibunistring/stable 1.3-1 aarch64 [upgradable from: 1.3]\nlsof/stable 4.99.5-2 aarch64 [upgradable from: 4.99.4]\nnano/stable 8.7 aarch64 [upgradable from: 8.3]\nncurses/stable 6.5.20240831-3 aarch64 [upgradable from: 6.5.20240831-2]\nnet-tools/stable 2.10.0-1 aarch64 [upgradable from: 2.10.0]\nopenssl/stable 1:3.5.2 aarch64 [upgradable from: 1:3.4.1]\npatch/stable 2.8-1 aarch64 [upgradable from: 2.7.6-4]\npcre2/stable 10.47 aarch64 [upgradable from: 10.45]\nprocps/stable 3.3.17-6 aarch64 [upgradable from: 3.3.17-5]\npsmisc/stable 23.7-1 aarch64 [upgradable from: 23.7]\nsed/stable 4.9-2 aarch64 [upgradable from: 4.9-1]\ntar/stable 1.35-1 aarch64 [upgradable from: 1.35]\ntermux-am-socket/stable 1.5.0-1 aarch64 [upgradable from: 1.5.0]\ntermux-am/stable 0.8.0-2 all [upgradable from: 0.8.0-1]\ntermux-core/stable 0.4.0-1 aarch64 [upgradable from: 0.3.0]\ntermux-exec/stable 1:2.4.0-1 aarch64 [upgradable from: 1:2.3.0]\ntermux-keyring/stable 3.13 all [upgradable from: 3.12-1]\ntermux-tools/stable 1.46.0+really1.45.0-1 aarch64 [upgradable from: 1.45.0]\nunzip/stable 6.0-10 aarch64 [upgradable from: 6.0-9]\nutil-linux/stable 2.41.2 aarch64 [upgradable from: 2.40.2-3]\nxxhash/stable 0.8.3-1 aarch64 [upgradable from: 0.8.3]\nxz-utils/stable 5.8.1-1 aarch64 [upgradable from: 5.8.0]\nzlib/stable 1.3.1-1 aarch64 [upgradable from: 1.3.1]\nzstd/stable 1.5.7-1 aarch64 [upgradable from: 1.5.7]\ntermux-tools version:\n1.45.0\nAndroid version:\n15\nKernel build information:\nLinux localhost 4.14.356-openela-rc1-perf-g48d1964a09c7 #1 SMP PREEMPT Tue Jun 10 07:47:31 CEST 2025 aarch64 Android\nDevice manufacturer:\nXiaomi\nDevice model:\nRedmi Note 8\nSupported ABIs:\nSUPPORTED_ABIS: arm64-v8a,armeabi-v7a,armeabi\nSUPPORTED_32_BIT_ABIS: armeabi-v7a,armeabi\nSUPPORTED_64_BIT_ABIS: arm64-v8a\nLD Variables:\nLD_LIBRARY_PATH=\nLD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec-ld-preload.so\nInstalled termux plugins:\ncom.termux.widget versionCode:1001\ncom.termux.api versionCode:1002\ncom.termux.styling versionCode:1000\n```\n","comments":4,"created_at":"2025-11-22T08:00:08Z","labels":["bug report"],"number":4860,"title":"[Bug]:Cannot hide extra-key","updated_at":"2026-02-28T18:16:10Z"} +{"author":"rexackermann","body":"### Problem description\n\nI cant get into internal storage, by cd storage/shared or cd /sdcard. If I try it, it says cd: bad address: /sdcard.\n\n### Steps to reproduce the behavior.\n\nNot sure what caused it. At first rebooting solve the issue. But doesn't solve now. And my phone's rooted with magisk.\n\n### What is the expected behavior?\n\ncd to the target dir.\n\n### System information\n\n* Termux application version: 118.3\n* Android OS version: HyperOS 1.0 (Android 14)\n* Device model: Redmi 12\n","comments":2,"created_at":"2025-11-20T18:26:45Z","labels":["bug report"],"number":4858,"title":"[Bug]: Bad Address, can't cd into /sdcard !!","updated_at":"2025-11-21T17:41:19Z"} +{"author":"IntinteDAO","body":"### Feature description\n\nThis is a concept that isn't talked about much, but perhaps it should be.\n\nIn short, if you don't have root, tutorials suggest doing it manually using adb.\n\nIn short, it often works like this: you enable ADB network debugging, connect to your device using adb, and issue commands.\n\nLADB is no different here, as it does the same thing, but automatically. It enables network debugging and \u003cpotentially\u003e executes commands (makes commands available to you). This solution isn't without its drawbacks, as you obviously need to be connected to Wi-Fi (as with ADB network debugging), but it would allow (if implemented in Termux) reconfiguration of Android and disabling unnecessary security features without user intervention (just pairing with ADB is enough).\n\nOf course, restarting the phone doesn't affect LADB's operation. This means that if a similar functionality to Termux were implemented, even system updates might not break it. But if something were to happen, the user would be informed.\n\n### Additional information\n\n[LADB](https://github.com/tytydraco/ladb)","comments":11,"created_at":"2025-11-17T18:41:13Z","labels":[],"number":4857,"title":"[Feature]: Bypassing Phantom Killer Using a LADB-Like Solution","updated_at":"2026-02-02T06:01:42Z"} +{"author":"MeowGurl","body":"### Feature description\n\nI Have Some Projects But Can't Run In Termux Unable To Install Bunjs On Termux \nI tried multiple tricks but none are working \n\nPlease.\nRequest: @MeowGurl\n\n\n### Additional information\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.2` \n**VERSION_CODE**: `1021` \n**UID**: `10259` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c3,c257,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c3,c257,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `4.14.186+` \n**SDK_INT**: `31` \n**RELEASE**: `12` \n**ID**: `SP1A.210812.016` \n**DISPLAY**: `RMX2151_11_F.12` \n**INCREMENTAL**: `Q.bf75e7-1` \n**SECURITY_PATCH**: `2022-11-05` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: - (*Requires `DUMP` and `PACKAGE_USAGE_STATS` permission*) \n**MONITOR_PHANTOM_PROCS**: `\u003cunsupported\u003e` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `realme` \n**BRAND**: `realme` \n**MODEL**: `RMX2151` \n**PRODUCT**: `RMX2151` \n**BOARD**: `RM6785` \n**HARDWARE**: `mt6785` \n**DEVICE**: `RMX2151L1` \n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \n**SUPPORTED_32_BIT_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_64_BIT_ABIS**: `arm64-v8a` \n##\n\n\n## Important Links\n\n### GitHub\n\n[Termux](https://github.com/termux/termux-app) \n[Termux:API](https://github.com/termux/termux-api) \n[Termux:Boot](https://github.com/termux/termux-boot) \n[Termux:Float](https://github.com/termux/termux-float) \n[Termux:Styling](https://github.com/termux/termux-styling) \n[Termux:Tasker](https://github.com/termux/termux-tasker) \n[Termux:Widget](https://github.com/termux/termux-widget) \n[termux-packages](https://github.com/termux/termux-packages) \n\n### Email\n\n[support@termux.dev](mailto:support@termux.dev) \n\n### Reddit\n\n[r/termux](https://www.reddit.com/r/termux) \n\n### Wiki\n\n[Termux Wiki](https://wiki.termux.com) \n[Termux](https://github.com/termux/termux-app/wiki) \n[termux-packages](https://github.com/termux/termux-packages/wiki) \n##\n","comments":0,"created_at":"2025-11-17T06:55:19Z","labels":[],"number":4856,"title":"[Feature]: Please Add Support For Bun.js Runtime","updated_at":"2025-11-17T06:55:19Z"} +{"author":"groszdaniel","body":"### Problem description\n\nIf Termux is launched in certain ways ΓÇö from a shortcut from termux-widget, or via a termux-url-opener hook ΓÇö, it does not respect the background color specified in ~/.termux/colors.properties, and starts with a black background. Weirdly, it does respect the foreground color, so if I use a black-on-white style, the script's output is invisible.\n\n### Steps to reproduce the behavior.\n\nChoose a color scheme that has a background color other than black, particularly a light scheme.\n\nPut a script in ~/.shortcuts. Put the Termux widget on the home screen. Launch the script from the widget.\n\nThe bug is only reproduced if there's no Termux session already running. It also doesn't manifest when launching Termux via its normal app icon.\nThe bug happens most of the time under these conditions, but not always.\nAlso, while the terminal initially has a black background when this happens, if I switch to another app and back, or even just open the app switcher (Recents screen) and go back to Termux, it then gets the correct background.\n\n### What is the expected behavior?\n\nThe background is as specified in the color scheme, e.g. light if it's a light scheme.\n\n### System information\n\n* Termux application version: 0.118.3 (1002)\n* Android OS version: crDroid 10.13, based on Android 14\n* Device model: Xiaomi Redmi 9C NFC","comments":1,"created_at":"2025-11-09T04:22:40Z","labels":["bug report"],"number":4849,"title":"[Bug]: Background color not respected when started with scripts","updated_at":"2025-11-15T06:38:41Z"} +{"author":"GfEW","body":"### Feature description\n\n#### The Problem\n\nFirst off, it's awesome pinch-zooming works so well in `termux`. Adjusting the font size also allows to quickly adjust the terminal size to specific needs.\n\nUnfortunately, as of v0.118.3, you can't easily recognize the actual size you're adjusting the terminal to.\n\n#### Suggested Solution\n\nDuring pinch-zooming and then sticking for two seconds or so, display a small geometry indicator on top of the current terminal.\n\n### Additional information\n\n- Some `xterm`s display the actual terminal size (usually rows x cols because it's a terminal; there may be a few that show cols x rows instead) when the window size is changed.\n- The best workaround in `termux` v.0.118.3 that I know is frequently running `stty size` while resizing, or even `watch stty size`. However, doing so requires you\n - to empty the command line (unless you haven't hit the sessions limit yet and can start a new session for that purpose),\n - then to type in that `stty` command every time (or setting up a readline binding to do so).\n- Otherwise, starting the actual program that requires a certain line or column count would frequently just tell \"nope, that's too few\", or you'll be using smaller font than necessary because the terminal has ended up larger than required. Note that not every CLI/TUI program handles SIGWINCH properly, so you'd have to quit the program, pinch-zoom, then test again. All in all, that procedure would be even more tedious than the workaround above.\n\n\u003ci\u003e\u003cdetails\u003e\u003csummary\u003eEDIT 20251102:\u003c/summary\u003e\n\nCleaned up duplications due to FR template.\n\n\u003c/details\u003e\u003c/i\u003e","comments":0,"created_at":"2025-11-02T01:07:23Z","labels":[],"number":4845,"title":"[Feature]: Indicate `stty size` While Resizing","updated_at":"2025-11-02T01:19:06Z"} +{"author":"ko-itbuddy","body":"### Feature description\n\nTermux can be great vibe coding app.\nBut it need to several keymapping or custom keymapping.\nEx) shift + tab\n\n### Additional information\n\n![Image](https://github.com/user-attachments/assets/b7d877cb-b068-4ae2-84da-a1ca29231536)","comments":0,"created_at":"2025-10-31T06:43:15Z","labels":[],"number":4840,"title":"[Feature]: claude code key mapping","updated_at":"2025-10-31T06:43:15Z"} +{"author":"theothernighttheotherday","body":"### Problem description\n\nusing emacs tutorial with an external keyboard, the pressing alt-v using external keyboard clipboard prompts. \nGNU Emacs 31.0.50 Repository revision: 515bbb859840d45fe0dd226c25ad0518fe413a63cs \n\nplease see attach keyboard\n\n![Image](https://github.com/user-attachments/assets/e65c02ec-6c60-4066-b2be-90461af17782)\n\n### Steps to reproduce the behavior.\n\nusing emacs tutorial, the keyboard shorcut alt-v comes out the clipboard promp\n\n### What is the expected behavior?\n\ni can scrolll back alt-v normally using on screen keyboard in tutorial. i can open a file and use alt-v with external keyboard.\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\ntermux-info\nTermux Variables:\nTERMUX_APK_RELEASE=GITHUB\nTERMUX_APP_PACKAGE_MANAGER=apt\nTERMUX_APP_PID=21296\nTERMUX_APP__DATA_DIR=/data/user/0/com.termux\nTERMUX_APP__LEGACY_DATA_DIR=/data/data/com.termux\nTERMUX_APP__SE_FILE_CONTEXT=u:object_r:app_data_file:s0:c55,c257,c512,c768\nTERMUX_APP__SE_INFO=default:targetSdkVersion=28:complete\nTERMUX_IS_DEBUGGABLE_BUILD=1\nTERMUX_MAIN_PACKAGE_FORMAT=debian\nTERMUX_VERSION=0.118.3\nTERMUX__HOME=/data/data/com.termux/files/home\nTERMUX__PREFIX=/data/data/com.termux/files/usr\nTERMUX__ROOTFS_DIR=/data/data/com.termux/files\nTERMUX__SE_PROCESS_CONTEXT=u:r:untrusted_app_27:s0:c55,c257,c512,c768\nTERMUX__USER_ID=0\nPackages CPU architecture:\naarch64\nSubscribed repositories:\n# sources.list\ndeb https://packages-cf.termux.dev/apt/termux-main/ stable main\n# root-repo (sources.list.d/root.list)\ndeb https://packages-cf.termux.dev/apt/termux-root/ root stable\n# x11-repo (sources.list.d/x11.list)\ndeb https://packages-cf.termux.dev/apt/termux-x11/ x11 main\nUpdatable packages:\nAll packages up to date\ntermux-tools version:\n1.45.0\nAndroid version:\n14\nKernel build information:\nLinux localhost 5.4.289-qgki-g3dd36cfe40b3 #1 SMP PREEMPT Thu Aug 21 05:38:40 UTC 2025 aarch64 Android\nDevice manufacturer:\nXiaomi\nDevice model:\n22111317G\nSupported ABIs:\nSUPPORTED_ABIS: arm64-v8a,armeabi-v7a,armeabi\nSUPPORTED_32_BIT_ABIS: armeabi-v7a,armeabi\nSUPPORTED_64_BIT_ABIS: arm64-v8a\nLD Variables:\nLD_LIBRARY_PATH=\nLD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec-ld-preload.so\n\n![Image](https://github.com/user-attachments/assets/63190472-6f2b-4d4d-afb5-df17f9eae5ac)","comments":0,"created_at":"2025-10-26T15:01:24Z","labels":["bug report"],"number":4837,"title":"[Bug]: emacs tutorilal alt-v with external keybolard comes out clipboard","updated_at":"2025-10-26T15:01:24Z"} +{"author":"Cletip","body":"### Problem description\n\nHello,\n\nI just want to get access, as specified in the wiki, to the ΓÇ£Termux-private folderΓÇ¥ inside a external drive (usb in my case) :\n\n[Internal and external storage](https://wiki.termux.com/wiki/Internal_and_external_storage)\n\nSymlink to a Termux-private folder on external storage (only if external storage is available).\n~/storage/external-1\n\nMy setup:\nTermux 0.118.3\nAndroid 16, GrapheneOS\nUSB drive formatted in exFAT, correctly recognized by the standard file explorer\nIΓÇÖve granted Termux all media access permissions.\nI ran the command ΓÇ£termux-setup-storageΓÇ¥, and the shared, etc. folders were created.\n\nIΓÇÖve already checked some related issues, such as:\n\n#71 \n#3120\n#3647 \n\nBut nothing is completely clear.\n\nThe clearest explanation is from @agnostic-apollo, who wrote:\n\n\u003e The */Android/data/com.termux paths on stable storages are created when getExternalFilesDirs() is called. It wonΓÇÖt be created for external hard drives like already mentioned. You can use the mount command to search for mounted volumes. It should ideally be mounted under /mnt/media_rw as is and then likely mounted with sdcardfs under /storage for apps to use with SAF.\n\nHowever, I know that on my Android 13 device with Termux 0.118.1, this folder external-1 exists, and I can access my USB drive with external-1. So why isnΓÇÖt that the case here?\nIs it due to Android 16? Or GrapheneOS? Or other factors ?\n\nAnd, I have access to /mnt/media_rw/XXXX-XXXX/, but I can't do a simple \n`git clone /mnt/media_rw/XXXX-XXXX/path/to/a/gitdirectory $HOME/locale/`\nWhy ?\n\nAnother related but secondary question: the wiki says,\nΓÇ£External storage: external SD cards or USB hard drives. Typically read-only, except the Termux private directory.ΓÇ¥\nDoes that mean the folder should be accessible just like the internal one?\nIf this is indeed an issue, would it at least be possible to clarify the wiki?\n\nThanks in advance for your help.\n\n### Steps to reproduce the behavior.\n\n* USB drive formatted in exFAT, correctly recognized by the standard file explorer\n* Grant Termux all media access permissions.\n* Run ΓÇ£termux-setup-storageΓÇ¥\n* Say \"yes\", and check that there is no \"storage/external-1\"\n\n### What is the expected behavior?\n\n\"external-1\" folder being created, to access the \n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 16 (Grapheneos)\n* Device model: Pixel 9 Pro XL\n","comments":1,"created_at":"2025-10-14T14:27:46Z","labels":["bug report"],"number":4819,"title":"[Bug]: termux-setup-storage doesnΓÇÖt create external-1 for USB drive on GrapheneOS","updated_at":"2025-10-17T06:23:14Z"} +{"author":"ghost","body":"### Feature description\n\nGitHub should be stylized as \"GitHub\" in the app and in related resources because that is the stylization used by GitHub itself.\n\n### Additional information\n\nYes.","comments":3,"created_at":"2025-09-20T11:42:36Z","labels":[],"number":4770,"title":"[Feature]: Stylize GitHub as \"GitHub\" in the app and in related resources","updated_at":"2025-10-17T06:23:01Z"} +{"author":"ayoubelmhamdi","body":"### Feature description\n\nthe major feature i request to be added into termux, is just allowing to **move cursor using mouse**.\n\nthis behavior is allowed inside the vim tui, but not allowed in shell readline. it's make moving in long line using touch screen so easy 1000x time faster.\n\n### Additional information\n\n![Image](https://github.com/user-attachments/assets/cb3fc749-72f6-4a4a-ab2c-a8e09176727d)","comments":2,"created_at":"2025-09-08T12:24:45Z","labels":[],"number":4748,"title":"[Feature]: mouse supporting in shell readline","updated_at":"2025-10-08T06:03:12Z"} +{"author":"Bariyasachin96","body":"### Feature description\n\nI am a blind user who depends on a screen reader (TalkBack) to use Termux. The app currently has serious accessibility issues that make it very difficult for visually impaired users to work effectively.\n\nIssues\n\n1. Cursor movement not spoken\n\nWhen moving the cursor inside the terminal, the screen reader does not announce the text at the new position.\n\nThe cursor moves, but no speech feedback is given.\n\n\n\n2. Output text not accessible\n\nWhen new output appears in the terminal, it is visible, but moving the cursor over it does not cause the screen reader to read anything.\n\nThis makes it impossible to review terminal output with a screen reader.\n\n\n\n3. Missing session management options\n\nThe menu does not provide options to create a new session, switch between sessions, or close sessions.\n\nThere is no accessible way to manage multiple sessions.\n\n\n\n\n\nSuggestions\n\n1. Fix cursor handling so that whenever the cursor moves, the screen reader reads the text at that position.\n\n\n2. Ensure that all terminal output can be reviewed by moving the cursor, with proper speech feedback.\n\n\n3. Add accessible menu options for session management (new session, switch session, close session).\n\n\n\n\n---\n\nImpact:\nThese issues make Termux nearly unusable for blind users. Fixing cursor reading, output accessibility, and session management will greatly improve usability and inclusivity for visually impaired users.\n\n\n\n\n### Additional information\n\n/","comments":5,"created_at":"2025-09-01T19:32:50Z","labels":[],"number":4742,"title":"[Feature]: Accessibility Improvements","updated_at":"2025-09-07T15:09:04Z"} +{"author":"Spy-God","body":"### Feature description\n\nWhen defining extra-keys, only `popup` (swipe up) is supported. Attempting:\n```json\n{\n \"key\": \"CTRL\",\n \"swipe\": {\n \"down\": { \"key\": \"CTRL+C\" }\n }\n}\n```\nProbable Solution\n\nAdd a `swipe.down` handler that accepts either `key` or `macro`, analogous to `popup`.\n\nEnvironment details \n - Termux version: 0.119.3 beta \n - Android version: e.g. Android 15.0 \n - Device: e.g. Realme P1 5G\n\nUse cases and benefits \n - One-handed interrupt (Ctrl+C) without reaching across the keyboard \n - Consistency with swipe-up popups \n\n\n### Additional information\n\nNo I dont think so and I only use termux so I can't say for other apps.","comments":3,"created_at":"2025-08-27T17:59:37Z","labels":[],"number":4728,"title":"[Feature]: Support swipe.down on extra-keys for Ctrl+C","updated_at":"2025-10-09T17:05:27Z"} +{"author":"TermuxTyro","body":"### Problem description\n\n## Crash Details\n\n**Crash Thread**: `Thread[main,5,main]` \n**Crash Timestamp**: `2025-08-25 04:14:29.891 UTC` \n\n**Crash Message**:\n```\nThe content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131231117, class android.widget.ListView) with Adapter(class com.termux.app.terminal.TermuxSessionsListViewController)]\n```\n\n\n### Stacktrace\n\n```\njava.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131231117, class android.widget.ListView) with Adapter(class com.termux.app.terminal.TermuxSessionsListViewController)]\n\tat android.widget.ListView.layoutChildren(ListView.java:1715)\n\tat android.widget.AbsListView.onTouchUp(AbsListView.java:4256)\n\tat android.widget.AbsListView.onTouchEvent(AbsListView.java:4032)\n\tat android.view.View.performOnTouchCallback(View.java:16681)\n\tat android.view.View.dispatchTouchEvent(View.java:16585)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3192)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2852)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3198)\n\tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2866)\n\tat com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:551)\n\tat com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:2032)\n\tat android.app.Activity.dispatchTouchEvent(Activity.java:4663)\n\tat androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)\n\tat com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:499)\n\tat android.view.View.dispatchPointerEvent(View.java:16980)\n\tat android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:8947)\n\tat android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:8620)\n\tat android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8005)\n\tat android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:8069)\n\tat android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:8028)\n\tat android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:8201)\n\tat android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:8036)\n\tat android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:8258)\n\tat android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8009)\n\tat android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:8069)\n\tat android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:8028)\n\tat android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:8036)\n\tat android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8009)\n\tat android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:11458)\n\tat android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:11405)\n\tat android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:11351)\n\tat android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:11624)\n\tat android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:313)\n\tat android.os.MessageQueue.nativePollOnce(Native Method)\n\tat android.os.MessageQueue.next(MessageQueue.java:370)\n\tat android.os.Looper.loopOnce(Looper.java:214)\n\tat android.os.Looper.loop(Looper.java:393)\n\tat android.app.ActivityThread.main(ActivityThread.java:9559)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1005)\n\n```\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.3` \n**VERSION_CODE**: `1022` \n**UID**: `10326` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c70,c257,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c70,c257,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n[crash_log_backup.md](https://github.com/user-attachments/files/21980824/crash_log_backup.md)\n\n### Software\n\n**OS_VERSION**: `6.1.128-android14-11-o-g9aef2a13e33d` \n**SDK_INT**: `35` \n**RELEASE**: `15` \n**ID**: `AP3A.240617.008` \n**DISPLAY**: `CPH2629_15.0.0.840(EX01)` \n**INCREMENTAL**: `U.R4T2.2594c7f-6f70bd-6f70ba` \n**SECURITY_PATCH**: `2025-07-01` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: - (*Requires `DUMP` and `PACKAGE_USAGE_STATS` permission*) \n**MONITOR_PHANTOM_PROCS**: `false` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `OPPO` \n**BRAND**: `OPPO` \n**MODEL**: `CPH2629` \n**PRODUCT**: `CPH2629IN` \n**BOARD**: `k6878v1_64` \n**HARDWARE**: `mt6878` \n**DEVICE**: `OP5AE1L1` \n**SUPPORTED_ABIS**: `arm64-v8a` \n**SUPPORTED_32_BIT_ABIS**: \n**SUPPORTED_64_BIT_ABIS**: `arm64-v8a` \n**PAGE_SIZE**: `4096` \n##\n\n### Steps to reproduce the behavior.\n\nI m working with open multiple sessions.\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":0,"created_at":"2025-08-26T05:04:52Z","labels":["bug report"],"number":4725,"title":"[Bug]: suddenly close","updated_at":"2025-08-26T05:04:52Z"} +{"author":"theamericanaccount","body":"### Problem description\n\nHello,\n\nI've got this issue at a certain point one year ago when I started publishing [DogeOS](https://github.com/themartiancompany/dogeos) cross-platform videogames packages, i.e. packages which seamlessly build on Termux, Arch Linux and Windows using a single build script and which are published on the [Ur](https://github.com/themartiancompany/ur), the uncensorable undeletable application store, which is hopefully going to convince all maintainers of the aforementioned environments to stop working for free while still releasing sources with a copyleft license, such that I noticed (obviously) other Android applications can't access Termux storage unless than through Android mechanisms.\n\nAs a workaround for this issue I've written a program called `termux-install-shared`, included in the latest version of `reallymakepkg`, the program which builds cross-platform Ur packages in place of `makepkg`.\n\nIn practice it installs data in an application-specific Android shared directory while linking to it at the correct termux data location.\nThis way one can for example share icon files between freedesktop-compatible launchers and android-compotible termux shortcut launchers.\n\nSo nothing, I wanted to report it exists as it solves quite a tricky issue one had to deal with manually and per-package up to now.\nNormally I would have directly sent a package integration merge request, but at the same time I'm also selling the application on the store, which by the way its currently the only application store for Termux.\n\nI'm also working on integrating standard linux applications into android (yeah before google), as in each application gets its own window and its undistinguishable from Android apps, which I'm very near to complete.\n\nIn that regard I'd like to likely discuss if there's a way to have that into Termux for users to enjoy, as it's very probably a much requested feature, but keeping on this silly requirement I have that people pay me for my work.\n\nSome contributors have suggested to have the store included in base packages, still I'm not quite sure how that can work well until Termux will ship with apt, as debian packages doesn't seem to me aren't built cross-platform very easily on-device.\n\nThe idea of having to make a paid better Termux and call it DogeOS Android base instead of just 'merging' the two and have its contributors get paid for their work I frankly don't like much.\n\n### Steps to reproduce the behavior.\n\nUse an intent to open a termux file results in access denied.\n\n### What is the expected behavior?\n\nThe same one gets when using `termux-open` (from which you should remove the `xdg-open` provides/symlink as it conflicts with FreeDesktop one).\n\n### System information\n\n* Termux application version: latest\n* Android OS version: DogeOS\n* Device model: Human Instrumentality Project 00, 01 and 02\n","comments":4,"created_at":"2025-08-24T18:10:02Z","labels":["bug report"],"number":4723,"title":"[Fix]: Share data between Termux and Android applications","updated_at":"2025-09-07T14:56:22Z"} +{"author":"ptoon1911","body":"### Feature description\n\nA combined window in Termux that provides:\n- Auto-generate PIN functionality\n- History log of generated PINs with option to export as Excel/PDF\n- Copy generated PIN to clipboard\n- Send PIN to Android devices via ADB (with multi-device support)\nThis should all be available within a single interface for efficient device management.\n\n### Additional information\n\nSome device management or security apps offer PIN generation and export, but an integrated workflow with ADB multi-device support is uncommon. See tools like KeePass for PIN generation, but not with ADB/mobile integration. Export features are common in password managers.","comments":1,"created_at":"2025-08-23T04:13:49Z","labels":[],"number":4721,"title":"[Feature]: Auto-generate PIN and Enhanced Device Management","updated_at":"2025-08-27T14:59:10Z"} +{"author":"truboxl","body":"### Feature description\n\nI am thinking termux-packages should start using the app's Report Issue feature to get info rather than a simple `termux-info` as part of Bug Report over there. The Report Issue already includes `termux-info`, `logcat` and other debug info that are extremely useful for triage issues. But it still lacks collecting detailed CPU information. Suggestions could be `lscpu` or `/proc/cpuinfo` output.\n\n### Additional information\n\nn/a","comments":3,"created_at":"2025-08-16T14:53:15Z","labels":[],"number":4707,"title":"[Feature]: App Report Issue feature should include detailed CPU information","updated_at":"2025-08-18T00:59:36Z"} +{"author":"tungnguyenlam","body":"### Problem description\n\n## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxActivity` \n**Report Timestamp**: `2025-08-16 12:06:49.019 UTC` \n##\n\n## Crash Details\n\n**Crash Thread**: `Thread[main,5,main]` \n**Crash Timestamp**: `2025-08-16 12:06:46.268 UTC` \n\n**Crash Message**:\n```\nThe content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131231117, class android.widget.ListView) with Adapter(class com.termux.app.terminal.TermuxSessionsListViewController)]\n```\n\n\n### Stacktrace\n\n```\njava.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131231117, class android.widget.ListView) with Adapter(class com.termux.app.terminal.TermuxSessionsListViewController)]\n\tat android.widget.ListView.layoutChildren(ListView.java:1823)\n\tat android.widget.AbsListView.onTouchModeChanged(AbsListView.java:4465)\n\tat android.view.ViewTreeObserver.dispatchOnTouchModeChanged(ViewTreeObserver.java:1309)\n\tat android.view.ViewRootImpl.ensureTouchModeLocally(ViewRootImpl.java:8376)\n\tat android.view.ViewRootImpl.ensureTouchMode(ViewRootImpl.java:8348)\n\tat android.view.ViewRootImpl$EarlyPostImeInputStage.processPointerEvent(ViewRootImpl.java:9178)\n\tat android.view.ViewRootImpl$EarlyPostImeInputStage.processMotionEvent(ViewRootImpl.java:9154)\n\tat android.view.ViewRootImpl$EarlyPostImeInputStage.onProcess(ViewRootImpl.java:9120)\n\tat android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8590)\n\tat android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:12432)\n\tat android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:12327)\n\tat android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:12283)\n\tat android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:12582)\n\tat android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:385)\n\tat android.os.MessageQueue.nativePollOnce(Native Method)\n\tat android.os.MessageQueue.next(MessageQueue.java:346)\n\tat android.os.Looper.loopOnce(Looper.java:214)\n\tat android.os.Looper.loop(Looper.java:342)\n\tat android.app.ActivityThread.main(ActivityThread.java:9638)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:619)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)\n\n```\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.2` \n**VERSION_CODE**: `1021` \n**UID**: `10551` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c39,c258,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c39,c258,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `5.15.153-android13-3-31153516` \n**SDK_INT**: `35` \n**RELEASE**: `15` \n**ID**: `AP3A.240905.015.A2` \n**DISPLAY**: `AP3A.240905.015.A2.X510XXS8CYG1` \n**INCREMENTAL**: `X510XXS8CYG1` \n**SECURITY_PATCH**: `2025-07-01` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: - (*Requires `DUMP` and `PACKAGE_USAGE_STATS` permission*) \n**MONITOR_PHANTOM_PROCS**: `true` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `samsung` \n**BRAND**: `samsung` \n**MODEL**: `SM-X510` \n**PRODUCT**: `gts9fewifixx` \n**BOARD**: `s5e8835` \n**HARDWARE**: `s5e8835` \n**DEVICE**: `gts9fewifi` \n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \n**SUPPORTED_32_BIT_ABIS**: `armeabi-v7a, armeabi` \n**SUPPORTED_64_BIT_ABIS**: `arm64-v8a` \n**PAGE_SIZE**: `4096` \n##\n\n### Steps to reproduce the behavior.\n\nOpen Neovim\nCreate a new process\nKill the Neovim process\n\n### What is the expected behavior?\n\nThe program hang for a while and close\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":2,"created_at":"2025-08-16T12:34:01Z","labels":["bug report"],"number":4706,"title":"[Bug]: Report Crash When After Exiting Neovim","updated_at":"2025-08-22T06:28:32Z"} +{"author":"ScreenNamePlus1","body":"### Problem description\n\nOkay so I have permox installed on my Motorola and i have them running Android 15. I'm not sure some people have said this maybe because of Android 14 and newer versions but the turnbox app was just updated recently so I don't think that's the problem. On my Motorola device is termucks does not display colors from oh my zsh. I'm running power level 10K at the theme and it should have colors. It doesn't do that unless I highlight it but it's only on my Motorola phone. My pixel 3A XL has four color but that has Android 12 or maybe 13. My Motorola phone running Android 13 has this problem and my Motorola that has ran both 14 and 15 also has this problem. I only get the colors that I specify in my dsh file if I highlight the text in the termux terminal. \n\n### Steps to reproduce the behavior.\n\nInstall all my dsh on a Motorola and try to change the theme to power level 10K and it won't do anything except black and white unless you highlight the text. It's been like that on every Motorola I've ever had. \n\n### What is the expected behavior?\n\nWell it's supposed to display different colors for the theme that I installed them with all my ZSH you know different color text. I even tried manually editing the zsh file but that didn't work either.\n\n### System information\n\n* Termux application version:\n* Android OS version: 15\n* Device model: Motorola Moto G 2024\n\nI found the problem... settings/display/display size and text/ tirn high contrast off... duh. That was a lpt of trouble for one little issue.","comments":1,"created_at":"2025-08-15T00:29:23Z","labels":["bug report"],"number":4704,"title":"[Bug]: zsh colors","updated_at":"2025-08-27T15:37:47Z"} +{"author":"groszdaniel","body":"### Feature description\n\nI suggest adding a feature to search in the output of programs (really just the contents of the terminal).\n\nOne can always pipe to `grep` or `less`, but in some cases (such as if you've already executed the program, or it's a program continuously running in the foreground, or you're unsure if it prints the relevant output to stdout or stderr) it's more convenient if the terminal program also provides a search feature.\n\n### Additional information\n\nSeveral terminal programs, such as Konsole and GNOME Terminal* have it, attaching screenshot of Konsole as an example.\n\n\u003csub\u003e* Not the same as its GNOME HIG-compliant replacement GNOME Console, which doesn't have it.\u003c/sub\u003e\n\n\u003cimg width=\"641\" height=\"414\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/55ea0d0c-4988-49ff-88bf-71210eaceb19\" /\u003e","comments":4,"created_at":"2025-08-13T09:26:56Z","labels":[],"number":4701,"title":"[Feature]: Search in terminal contents (program output)","updated_at":"2026-06-01T11:26:42Z"} +{"author":"Digicrat","body":"### Problem description\n\nI upgraded to the Samsung Flip7, and have just started playing around with Termux in it with the new Dex Mode (One UI8).\n\nI'm not sure how much of this is a Termux vs a Dex issue (I suspect a bit of both), but several times now I've had Termux crash when switching between Dex and non-Dex, or simply re-opening Dex mode later.\n\nThe typical case I'm seeing is, once Dex-mode is reopened:\n- Termux font sizes are oddly super-zoomed. (Note: I also see this periodically on Chrome, and in that app re-launching within Dex is my only option to restore normal zoom levels)\n- Termux is non-responsive to any keyboard inputs or attempts to adjust zoom\n- After a short period of attempting to get it to respond, Termux just exits/crashes.\n- I'm not sure what, if any, log files may be useful, but I'm happy to collect some.\n\n\n### Steps to reproduce the behavior.\n\n- Open Termux natively\n- Connect an external display and access Termux. Sometimes this will start with the issue already present on the first attempt.\n- Switch back to native mode\n- Re-launch Dex mode. If it hasn't previously, termux text will be zoomed-in to max levels, interface will be non-responsive, and it will likely exit/crash within a few seconds.\n\n### What is the expected behavior?\n\nIt should automatically scale appropriately to the display when switching to/from Dex mode and not crash.\n\n### System information\n\n* Termux application version: 0.118.3 (from app info)\n* Android OS version: 16\n* Device model: Samsung Flip7\n\n### Possibly Related? Edit: Not related\nI've seen the crash described above with only termux running, however I also just had a different crash when trying to run xfce with termux-x11. I don't think these are related, but in that case I see a few warnings about \"Failed to get system bus: Could not connect NO such file or desktop\" and \"xlib: extension DPMS missing on display\" before Termux reports `[Process completed (signal 9) - press Enter]`\n\nEdit: [Found the docs on this issue](https://github.com/agnostic-apollo/Android-Docs/blob/master/en/docs/apps/processes/phantom-cached-and-empty-processes.md#how-to-disable-the-phantom-processes-killing), and toggling the option seems to have resolved this part. I haven't tried toggling Dex mode again to see if it had any affect on the primary issue.","comments":0,"created_at":"2025-08-10T03:15:48Z","labels":["bug report"],"number":4694,"title":"[Bug]: Crash when switching between Dex and non-Dex","updated_at":"2025-08-10T03:37:07Z"} +{"author":"naratteu","body":"### Feature description\n\nJust like `apt_info_script.sh` is included in the resource path of the APK, I would like to embed a shell script that automatically runs either on first launch or every time Termux starts. This way, simply installing the APK would result in a fully customized Termux environment being set up automatically.\n\n### Additional information\n\nhttps://github.com/termux/termux-packages/discussions/9586","comments":3,"created_at":"2025-08-08T05:28:51Z","labels":[],"number":4690,"title":"[Feature]: Ability to inject `init.sh` or `boot.sh` into the APK","updated_at":"2025-12-10T17:44:16Z"} +{"author":"u400822","body":"### Problem description\n\n\u003cimg width=\"474\" height=\"841\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/5ba3681a-3b47-4f25-b6c3-3f964d5e1958\" /\u003e\n\n### Steps to reproduce the behavior.\n\ni can't install psutil\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.119.0-beta.3 (1022)\n* Android OS version: 20\n* Device model: UG Phone\n","comments":12,"created_at":"2025-08-04T16:22:59Z","labels":["bug report"],"number":4688,"title":"[Bug]: pip install psutil doesn't work","updated_at":"2025-08-19T07:52:51Z"} +{"author":"libweirdness","body":"### Problem description\n\nIn Termux, using either proot-distro's Ubuntu OR Arch, doesn't matter,\n\ndownload \u0026 install the current Julia aarch64, either 1.10.10 or 1.11.whatever,\n\nunpack them in /usr/local/stow/\n\nxstow or stow whichever of the things you want to try, it happens with both,\n\nfire-up Julia\n\ngo into Pkg manager, using \"]\"\n\nthen do ANY of these: they all break:\n\nadd Pluto\nadd Revise\nadd DataFrames\nadd About\nadd OhMyREPL\n\nThere are other ones that break, too..\n\nSomething that ALL installed proot-distros depends-on, is broken, it seems.\n\nSorry if I'm reporting this in the wrong place, but it's definitely not the packages themselves that changed ( these all worked, 1 week ago, if not mere-days ago ),\n\n\u0026 since it's happening in both Ubuntu \u0026 Arch, which are unrelated, then it's *got* to be Termux which is currently-flawed/compromised, XOR Android's changed something, to break these.\n\nHere's the errors from my last attempt at installing the DataFrames package:\n\n```\nInvalid instruction at 0x781050e074: 0x04a0e3ea\n\n[25370] signal (4.1): Illegal instruction\nin expression starting at /home/me/.julia/packages/DataFrames/kcA9R/src/other/precompile.jl:3\nArray at ./range.jl:1390 [inlined]\nArray at ./boot.jl:500 [inlined]\ncollect at ./range.jl:1393 [inlined]\n|\u003e at ./operators.jl:917\njfptr_OR.GT._20614 at /home/me/.julia/compiled/v1.10/PrettyTables/kRdcL_TzLVi.so (unknown line)\n_jl_invoke at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]\nijl_apply_generic at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:3077\n#_print_info#63 at /home/me/.julia/packages/PrettyTables/oVZqx/src/print.jl:889\n_print_info at /home/me/.julia/packages/PrettyTables/oVZqx/src/print.jl:833 [inlined]\n#_print_table#64 at /home/me/.julia/packages/PrettyTables/oVZqx/src/print.jl:1030 [inlined]\n_print_table at /home/me/.julia/packages/PrettyTables/oVZqx/src/print.jl:934 [inlined]\n#pretty_table#62 at /home/me/.julia/packages/PrettyTables/oVZqx/src/print.jl:825 [inlined]\npretty_table at /home/me/.julia/packages/PrettyTables/oVZqx/src/print.jl:794 [inlined]\n#_show#870 at /home/me/.julia/packages/DataFrames/kcA9R/src/abstractdataframe/show.jl:253\n_show at /home/me/.julia/packages/DataFrames/kcA9R/src/abstractdataframe/show.jl:147 [inlined]\n#show#871 at /home/me/.julia/packages/DataFrames/kcA9R/src/abstractdataframe/show.jl:352 [inlined]\nshow at /home/me/.julia/packages/DataFrames/kcA9R/src/abstractdataframe/show.jl:339\nunknown function (ip: 0x7806c530cf)\n_jl_invoke at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]\nijl_apply_generic at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:3077\nmacro expansion at /home/me/.julia/packages/DataFrames/kcA9R/src/other/precompile.jl:29 [inlined]\nmacro expansion at /home/me/.julia/packages/PrecompileTools/L8A3n/src/workloads.jl:78 [inlined]\ntop-level scope at /home/me/.julia/packages/DataFrames/kcA9R/src/other/precompile.jl:102\njl_toplevel_eval_flex at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:925\njl_toplevel_eval_flex at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:877\nijl_toplevel_eval_in at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:985\neval at ./boot.jl:385 [inlined]\ninclude_string at ./loading.jl:2146\n_jl_invoke at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]\nijl_apply_generic at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:3077\n_include at ./loading.jl:2206\ninclude at ./Base.jl:495\njfptr_include_46628.3 at /usr/local/stow/julia-1.10.10/lib/julia/sys.so (unknown line)\n_jl_invoke at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]\nijl_apply_generic at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:3077\njl_apply at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]\njl_f__call_latest at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/builtins.c:812\ninclude at /home/me/.julia/packages/DataFrames/kcA9R/src/DataFrames.jl:1\nunknown function (ip: 0x782bee90bb)\n_jl_invoke at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]\nijl_apply_generic at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:3077\njl_apply at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]\ndo_call at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:126\neval_value at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:223 eval_stmt_value at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]\neval_body at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:635\njl_interpret_toplevel_thunk at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:775\njl_toplevel_eval_flex at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:934\njl_eval_module_expr at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:215 [inlined]\njl_toplevel_eval_flex at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:736\njl_toplevel_eval_flex at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:877\nijl_toplevel_eval_in at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:985\neval at ./boot.jl:385 [inlined]\ninclude_string at ./loading.jl:2146\n_jl_invoke at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]\nijl_apply_generic at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:3077\n_include at ./loading.jl:2206\ninclude at ./Base.jl:495 [inlined]\ninclude_package_for_output at ./loading.jl:2292\njfptr_include_package_for_output_81281.3 at /usr/local/stow/julia-1.10.10/lib/julia/sys.so (unknown line)\n_jl_invoke at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]\nijl_apply_generic at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:3077\njl_apply at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]\ndo_call at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:126 eval_value at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:223\neval_stmt_value at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]\neval_body at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:635\njl_interpret_toplevel_thunk at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/interpreter.c:775\njl_toplevel_eval_flex at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:934\njl_toplevel_eval_flex at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:877\nijl_toplevel_eval_in at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/toplevel.c:985\neval at ./boot.jl:385 [inlined]\ninclude_string at ./loading.jl:2146\ninclude_string at ./loading.jl:2156 [inlined]\nexec_options at ./client.jl:321\n_start at ./client.jl:557\njfptr__start_83033.3 at /usr/local/stow/julia-1.10.10/lib/julia/sys.so (unknown line)\n_jl_invoke at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]\nijl_apply_generic at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/gf.c:3077\njl_apply at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]\ntrue_main at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/jlapi.c:582\njl_repl_entrypoint at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/src/jlapi.c:731\nmain at /cache/build/default-aws-aarch64-ci-0-4/julialang/julia-release-1-dot-10/cli/loader_exe.c:58\nunknown function (ip: 0x782bfe20d3) __libc_start_main at /usr/lib/libc.so.6 (unknown line)\n_start at /usr/local/stow/julia-1.10.10/bin/julia (unknown line)\n_start at /usr/local/stow/julia-1.10.10/bin/julia (unknown line)\nAllocations: 33942996 (Pool: 33911250; Big: 31746); GC: 4\n```\n\nYou'll notice it begins with \"illegal instruction\".\n\nThey all do.\n\nWhy would an instruction *become* illegal, suddenly?\n\npossible security-policy-change, in Android?\n\nI don't know.\n\nI DO know that this now has broken my learning-environment ( both math \u0026 programming ), so now I can't have the means needed within Termux.\n\nWhat else it's broken by this sudden change, I don't know..\n\nI've reinstalled Julia repeatedly, I've reinstalled distro-images repeatedly ( I now have an archive-out/wipe/install/repopulate script for Ubuntu, \u0026 am building the needed one for Arch, because all this testing has required sooo damn many permutations ), but that \"illegal instruction\" problem is breaking something, and I've no idea where the cause is.\n\n### Steps to reproduce the behavior.\n\ninstall either Ubuntu or Arch, within Termux, using proot-distro install\n\nas root, get them set-up enough to be usable, with regular user-accounts,\n\ndownload the official Julia binaries, either the 1.10 LTS version or the 1.11 current version,\n\ncreate /usr/local/stow\n\nunpack them in there, then xstow or stow the one you want to try ( this breakage happens with either )\n\nswitch to your regular-user account, within that distro,\n\n```\njulia\n\n] # that switches into Pkg, the package-manager\n\nadd DataFrames # OR\nadd Pluto # OR\nadd Revise # OR\nadd OhMyREPL # etc..\n# just in the last few days, MANY packages became impossible-to-install,\n```\n\u0026 since Julia itself didn't change,\n\n.. then what did?\n\nI'd already reported this problem to Pluto, because it was the 1st affected,\n\nand I'd thought it was a problem with their package,\n\nbut within a day or so, it was damn-near-everything in my startup.jl file which couldn't work, anymore..\n\nTo see the errors that happened during the attempted-precompilation, you let the Pkg.add(\"Pluto\"),\n( that is the way you'd do it if you weren't in the REPL, )\n\n.. with its special-package-manager-mode, crash ..\n\nthen you get out from the package-manager,\n\n\u0026 you type\n\n```\nerr\n```\n\nwhich gets you the kind of stuff like what I quoted, above.\n\n### What is the expected behavior?\n\n1 week ago, Julia WORKED in Termux's Ubuntu!\n\nNO \"illegal instruction\" problem, at all!\n\nNow it's broken in both distros I tried, the same way, which *isn't likely*, you know?\n\n### System information\n\n* Termux application version: 118.3\n* Android OS version: 15\n* Device model: Samsung tablet, ARMv9 cores.\n\nI owe Pluto.jl an apology: it wasn't their project which created the problem, \u0026 I'm sorry if I'm bothering you with this when it may have been created by Android, but *I've lost my homeschool/self-education*, and .. aarrrgggghhhh!!\n\nInfrastructure should *just work*, you know?\n\nAnyways, IF it's created by some change in Termux, THEN I hope this helps get it fixed.\n\nIF it's created by a change in Android, .. then I have to get a silent computer to use, instead of Termux, because they've broken this as a usable-for-learning means.\n\nMe \u0026 everybody in the world who was using this for our math+Julia study..\n\n_ /\\ _","comments":1,"created_at":"2025-08-03T05:09:38Z","labels":["bug report"],"number":4687,"title":"[Bug]: Affects both Termux's Ubuntu \u0026 Arch, so it's a Termux bug: Julia's binary aarch64 now can't compile many packages.","updated_at":"2025-08-27T15:24:27Z"} +{"author":"cyrus123456","body":"### Feature description\n\nwhen i install homeassistant\npip subprocess to install build dependencies did not run successfully. exit code:1\n\n### Additional information\n\nwhen i install homeassistant\npip subprocess to install build dependencies did not run successfully. exit code:1","comments":1,"created_at":"2025-07-30T14:19:26Z","labels":[],"number":4681,"title":"[Feature]: when i install homeassistant : pip subprocess to install build dependencies did not run successfully. exit code:1","updated_at":"2025-08-03T17:20:30Z"} +{"author":"k-4rM31","body":"### Problem description\n\nPrint \"~~~~~...\" When i want to write any cmd\n\n### Steps to reproduce the behavior.\n\nAnytime\n\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.3\n* Android OS version: 14\n* Device model:\n","comments":0,"created_at":"2025-07-27T17:14:51Z","labels":["bug report"],"number":4677,"title":"[Bug]:","updated_at":"2025-07-27T17:14:51Z"} +{"author":"ghost","body":"### Feature description\n\nMove termux.properties and related files into Termux's settings.\n\n### Additional information\n\nOther terminal emulators may have done something like this.","comments":0,"created_at":"2025-07-23T23:15:21Z","labels":[],"number":4665,"title":"[Feature]: Move termux.properties and related file preferences into Termux's settings","updated_at":"2025-07-24T03:35:11Z"} +{"author":"ghost","body":"### Feature description\n\nI think Termux should use sentence case for regular non-terminal view text.\n\n### Additional information\n\nI think sentence case is better. \nAlso if the app is redesigned: https://m3.material.io/foundations/content-design/style-guide/ux-writing-best-practices#fc5c2a78-f4bf-4d42-bdac-42ff80391129\n\nAlso: \"Github\" in the about page should be \"GitHub\"\n\nAlso: \"android\" in some places in the README should be \"Android\"\n\nAlso: \"termux\" in places like termux.properties should be \"Termux\", \"HW keyboard shortcuts\" ΓÇö\u003e \"Hardware keyboard shortcuts\", \"Terminal Margin adjustments\" ΓÇö\u003e \"Terminal margin adjustments\"\n\nAlso: https://github.com/termux/termux-app/discussions/4663","comments":1,"created_at":"2025-07-23T22:44:56Z","labels":[],"number":4661,"title":"[Feature]: Use sentence case for regular non-terminal view text","updated_at":"2025-07-30T19:21:14Z"} +{"author":"Rudxain","body":"### Problem description\n\n- mathiasbynens/dotfiles#930\n- #4652\n\n### Steps to reproduce the behavior.\n\n```sh\nPS1='\\[\\e[1m\\]\\w\\n$ \\[\\e[0m\\]'\n```\nThe entire prompt will be bold, until we resize the terminal (pinch-to-zoom).\n\nThe weird thing is that, when it's [my dotfiles'](https://github.com/Rudxain/dotfiles/) prompt, the 2nd line is **never bold** (no need to resize). Here's a copy of the file, because the commit-hashes are unstable:\n```sh\n#!/bin/sh\n\ncase \"$TERM\" in\n\txterm-color|*-256color) color_support=y;;\n\t*) color_support=n;;\nesac\n\nlast_exit() {\n\tlocal e=$?\n\t[ $e -ne 0 ] \u0026\u0026 \\\n\t\tprintf \"${1:-}%02x${2:-} \" $e\n\treturn $e\n}\n\nif [ $color_support = y ]; then\n\tPS1=\"\\n\\[\\e[1m\\]\\$(last_exit \\\"\\[\\e[31m\\]\\\" \\\"\\[\\e[0m\\]\\[\\e[1m\\]\\\")\"\nelse\n\tPS1=\"\\n\\$(last_exit)\"\nfi\nPS1=\"$PS1\\w\"\n\nif command -v git \u003e/dev/null; then\n\tgit_b_name() {\n\t\tgit rev-parse --is-inside-work-tree \u003e/dev/null 2\u003e\u00261 || return\n\t\techo \" // $(\\\n\t\t\tgit symbolic-ref --quiet --short HEAD 2\u003e/dev/null || \\\n\t\t\tgit describe --all --exact-match HEAD 2\u003e/dev/null || \\\n\t\t\tgit rev-parse --short HEAD 2\u003e/dev/null || \\\n\t\t\techo '(?)' \\\n\t\t)\"\n\t}\n\tPS1=\"$PS1\\$(git_b_name)\"\nfi\n\nPS1=\"$PS1\\n╬ö \"\n[ $color_support = y ] \u0026\u0026 PS1=\"$PS1\\[\\e[0m\\]\"\nunset color_support\n```\n\n### What is the expected behavior?\n\nBoth lines of the prompt should be bold at all times:\n\u003e **\\~\n\u003e $** \n\nInstead, this is the actual prompt after resizing the window:\n\u003e **\\~**\n\u003e $ \n\n\n### System information\n\n* Termux application version: 0.119.0-beta.3\n* Android OS version: 14 or 8\n* Device model: Irrelevant?","comments":0,"created_at":"2025-07-20T19:06:44Z","labels":["bug report"],"number":4658,"title":"[Bug]: escape-seq styling lost after resizing","updated_at":"2025-07-20T19:18:33Z"} +{"author":"lanpinggai666","body":"### Problem description\n\nWhen keeping Termux in mini-window/floating mode on MIUI/HyperOS, the window exhibits persistent flickering.\n\n\n### Steps to reproduce the behavior.\n\n1. Launch Termux \n2. Enable floating/mini-window mode \n3. Observe flickering immediately\n\n### What is the expected behavior?\n\nStable rendering of Termux mini-window \n\n### System information\n\n* Termux application version:lastest\n* Android OS version:13\n* Device model:Xiaomi 10S\n* Xiaomi HyperOS version:1.0.4\n","comments":3,"created_at":"2025-07-14T11:23:24Z","labels":["bug report"],"number":4647,"title":"[Bug]: MIUI/Xiaomi HyperOS Mini Window Flickering Issue","updated_at":"2025-08-02T02:46:04Z"} +{"author":"BayonetArch","body":"### Problem description\n\nC-SPACE doesnot work with physical keyboard in tmux while i did uncomment \n`ctrl-space-workaround = true\n`\n\n\n\n\n### Steps to reproduce the behavior.\n\nuse a physical keyboard and set C-SPACE as prefix key in tmux\n\n### What is the expected behavior?\n\nC-SPACE as prepfix should work in tmux\n\n### System information\n\ntermux-info:\n\n```bash\nTermux Variables:\nTERMUX_APP_PACKAGE_MANAGER=apt\nTERMUX_APP__APK_FILE=/data/app/com.termux-O1MD_i0hzGAQuevkmTpYXw==/base.apk\nTERMUX_APP__APK_RELEASE=GITHUB\nTERMUX_APP__APP_VERSION_CODE=1022\nTERMUX_APP__APP_VERSION_NAME=0.119.0-beta.3\nTERMUX_APP__DATA_DIR=/data/user/0/com.termux\nTERMUX_APP__IS_DEBUGGABLE_BUILD=true\nTERMUX_APP__IS_INSTALLED_ON_EXTERNAL_STORAGE=false\nTERMUX_APP__LEGACY_DATA_DIR=/data/data/com.termux\nTERMUX_APP__PACKAGE_NAME=com.termux\nTERMUX_APP__PID=8453\nTERMUX_APP__SE_FILE_CONTEXT=u:object_r:app_data_file:s0:c80,c257,c512,c768\nTERMUX_APP__SE_INFO=default:targetSdkVersion=28:complete\nTERMUX_APP__TARGET_SDK=28\nTERMUX_VERSION=0.119.0-beta.3\nTERMUX__APPS_DIR=/data/user/0/com.termux/termux/apps\nTERMUX__HOME=/data/data/com.termux/files/home\nTERMUX__PREFIX=/data/data/com.termux/files/usr\nTERMUX__ROOTFS_DIR=/data/data/com.termux/files\nTERMUX__SE_PROCESS_CONTEXT=u:r:untrusted_app_27:s0:c80,c257,c512,c768\nTERMUX__UID=10336\nTERMUX__USER_ID=0\nPackages CPU architecture:\naarch64\nSubscribed repositories:\n# sources.list\ndeb https://packages-cf.termux.dev/apt/termux-main/ stable main\n# tur-repo (sources.list.d/tur.list)\ndeb https://tur.kcubeterm.com tur-packages tur tur-on-device tur-continuous\nUpdatable packages:\nAll packages up to date\ntermux-tools version:\n1.45.0\nAndroid version:\n10\nKernel build information:\nLinux localhost 4.14.141+ #1 SMP PREEMPT Mon Jan 30 02:40:12 CST 2023 aarch64 Android\nDevice manufacturer:\nOPPO\nDevice model:\nCPH1819\nSupported ABIs:\nSUPPORTED_ABIS: arm64-v8a,armeabi-v7a,armeabi\nSUPPORTED_32_BIT_ABIS: armeabi-v7a,armeabi\nSUPPORTED_64_BIT_ABIS: arm64-v8a\nLD Variables:\nLD_LIBRARY_PATH=\nLD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec-ld-preload.so\nInstalled termux plugins:\ncom.termux.api versionCode:1001\ncom.termux.x11 versionCode:15\ncom.termux.boot versionCode:1000\ncom.termux.styling versionCode:1000\n```","comments":0,"created_at":"2025-07-05T14:05:59Z","labels":["bug report"],"number":4640,"title":"[Bug]: ctrl space as prefix doesnot work in tmux","updated_at":"2025-07-05T14:05:59Z"} +{"author":"IsaacOscar","body":"### Problem description\n\nI'm not sure if this is a problem with `tilde` itself, but it only happens when using the Termux emulator, and not when using a different terminal and sshing.\n\n### Steps to reproduce the behavior.\n\nOpen tilde, and write some text. Then select it, e.g.\n\n\u003cimg width=\"204\" height=\"210\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/e057905f-2eca-41ae-927c-3ddd85075d34\" /\u003e\n\nIf you then press backspace, it deletes the text where your cursor was prior to selecting (in this case the 'd' at the end):\n\n\u003cimg width=\"205\" height=\"211\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/6417d7db-bd0e-44eb-8d5e-0302472a040c\" /\u003e\n\nNote that double-tapping a word and then pressing backspace does delete the word as expected.\n\n### What is the expected behavior?\n\nI expect it to behave the same as when I ssh to my phone from my Desktop (Using Windows Terminal). \nAfter dragging my mouse to select some text:\n\u003cimg width=\"142\" height=\"86\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/9e586fea-922c-4803-aafe-b77522aee242\" /\u003e\n\nAnd then pressing delete, the selected text gets deleted:\n\u003cimg width=\"118\" height=\"84\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/12bdea6f-c8cf-4d49-a817-8a880b1abdf3\" /\u003e\n\n### System information\n\nTermux Variables:\nTERMUX_API_VERSION=0.52.0\nTERMUX_APK_RELEASE=F_DROID\nTERMUX_APP_PACKAGE_MANAGER=apt\nTERMUX_APP_PID=17716\nTERMUX_APP__DATA_DIR=/data/user/0/com.termux\nTERMUX_APP__LEGACY_DATA_DIR=/data/data/com.termux\nTERMUX_APP__SE_FILE_CONTEXT=u:object_r:app_data_file:s0:c92,c257,c512,c768\nTERMUX_APP__SE_INFO=default:targetSdkVersion=28:complete\nTERMUX_IS_DEBUGGABLE_BUILD=0\nTERMUX_MAIN_PACKAGE_FORMAT=debian\nTERMUX_VERSION=0.118.3\nTERMUX__HOME=/data/data/com.termux/files/home\nTERMUX__PREFIX=/data/data/com.termux/files/usr\nTERMUX__ROOTFS_DIR=/data/data/com.termux/files\nTERMUX__SE_PROCESS_CONTEXT=u:r:untrusted_app_27:s0:c92,c257,c512,c768\nTERMUX__USER_ID=0\nPackages CPU architecture:\naarch64\nSubscribed repositories:\n# sources.list\ndeb https://mirrors.middlendian.com/termux/termux-main stable main\n# root-repo (sources.list.d/root.list)\ndeb https://mirrors.middlendian.com/termux/termux-root root stable\n# x11-repo (sources.list.d/x11.list)\ndeb https://mirrors.middlendian.com/termux/termux-x11 x11 main\nUpdatable packages:\nAll packages up to date\ntermux-tools version:\n1.45.0\nAndroid version:\n16\nKernel build information:\nLinux localhost 6.1.124-android14-11-g8d713f9e8e7b-ab13202960 #1 SMP PREEMPT Wed Mar 12 13:40:07 UTC 2025 aarch64 Android\nDevice manufacturer:\nGoogle\nDevice model:\nPixel 8a\nSupported ABIs:\nSUPPORTED_ABIS: arm64-v8a\nSUPPORTED_32_BIT_ABIS:\nSUPPORTED_64_BIT_ABIS: arm64-v8a\nLD Variables:\nLD_LIBRARY_PATH=\nLD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec-ld-preload.so\nInstalled termux plugins:\ncom.termux.api versionCode:1001\ncom.termux.x11 versionCode:15\ncom.termux.styling versionCode:1000","comments":0,"created_at":"2025-07-05T09:16:48Z","labels":["bug report"],"number":4639,"title":"[Bug]: Selecting text in `tilde` editor doesn't work properly","updated_at":"2025-07-05T09:17:18Z"} +{"author":"Erhannis","body":"### Feature description\n\nI found a series of commands (a modification of https://gist.github.com/Cyang39/917f59062fc9d57302d94e3fc534fb16 ) intended for Termux, that I can use to download soundtracks from my Steam account, a feature I notice is frequently requested of their app. However, it's pretty involved, and would be nice to wrap in an app. However, it involved several layers of chroot-ing and a (potentially) interactive shell program that takes like 30 seconds to start up (SteamCMD, x86 emulated via FEX-Emu). My vision was to attach an app to a virtual shell, and the app would provide buttons with standard actions (install dependencies, start the session, log in, list albums, etc) that would inject commands into stdin and perform limited parsing of stdout, as well as mirroring output for the user to see in case something goes wrong or it e.g. wants them to log in again or w/e. However, I don't see a way to do that - RUN_COMMAND runs a single command, waits for it to complete, and returns the result. I _might_ be able to write the app to work with standalone scripts, but I think it'll be slower (having to boot the environment on every action) and less fault-recoverable (since the user can't see errors until after the script has shut down). Is there an existing way to get access to an interactive session from a third-party app? Some workaround perhaps, like starting a script that redirects to some sockets, or somethings? I'm not sure what Android's security model permits. (Or, is there a way to initialize a Termux environment in a manually created Process?) If not, how difficult would this be to implement? Say, you send stdin intents with specified session IDs, and every N milliseconds any new stdout/stderr gets sent back.\n\n### Additional information\n\nApproximate goal: https://gist.github.com/Cyang39/917f59062fc9d57302d94e3fc534fb16 , and being able to interactively run Termux \u003e FEXDroid (on Ubuntu) \u003e FEXBash \u003e SteamCMD.","comments":4,"created_at":"2025-07-01T15:07:26Z","labels":[],"number":4632,"title":"[Feature]: interactive RUN_COMMAND","updated_at":"2025-10-21T03:47:38Z"} +{"author":"256-1","body":"### Problem description\n\nSoftware keyboard won't show at startup if \"use-black-ui = true\" in latest CI build, but no such issue with v0.118.3\n\n### Steps to reproduce the behavior.\n\n1. Set phone at light mode\n2. Uncomment \"use-black-ui = true\" in termux.properties, keep the line of \"hide-soft-keyboard-on-startup\" commented\n3. Start termux app (ensure termux fully exited and wiped out from recent before start)\n4. The sofware keyboard (IME) won't show\n\n### What is the expected behavior?\n\nThe sofware keyboard (IME) will show on startup\n\n### System information\n\n* Termux application version: 0.118.0+7bceab8\n* Android OS version:ColorOS 15\n* Device model:Oneplus 13, Oneplus Pad Pro\n","comments":0,"created_at":"2025-06-29T00:05:33Z","labels":["bug report"],"number":4626,"title":"[Bug]: Software keyboard won't show at startup if \"use-black-ui = true\" in latest CI build","updated_at":"2025-06-29T00:05:33Z"} +{"author":"shankarkrupa","body":"### Feature description\n\nI want to be able to invoke a script in Termux when I share it from other apps. Specific scripts of relevance are termux-file-editor and termux-url-opener scripts.\n\nInvoking this script currently requires the **display over other apps** permission. However, this is not possible in all the Android versions (eg: Android Go 13) in specific mobile phone models.\n\nIt will therefore be quite useful if a workaround is provided to still accept the received parameters and run in foreground/background without needing this permission.\n\n### Additional information\n\nNot sure if other emulators provide this option. There are workarounds suggested to enable the Display over other apps permission through adb but even that does not work in the specific phone model I came across (POCO C51).\n\nA few other apps are able to be invoked with the passed information from Android Sharesheet like WhatsApp, browsers, etc. in the same phone model. I therefore hope this could be sorted out within Termux App circumventing the need for this permission.\n","comments":0,"created_at":"2025-06-26T19:50:44Z","labels":[],"number":4621,"title":"[Feature]: Support to run scripts when invoked through sharing to Termux from other apps (Android Go)","updated_at":"2025-06-26T19:54:03Z"} +{"author":"rdsq","body":"### Problem description\n\nIt is pretty random, but when I run `echo -e -n '\\e' | termux-clipboard-set` and then paste it using the \"Paste\" button inside the Termux app, it crashes. If I paste it from my keyboard app, nothing happens, as expected\n\nThis is not a critical issue at all, I was just poking around and stumbled upon this weird behaviour. Anyway, here is the stacktrace the app shows, if it's helpful:\n\n```\njava.lang.IllegalArgumentException: length \u003c= 0\n\tat com.termux.terminal.ByteQueue.write(ByteQueue.java:63)\n\tat com.termux.terminal.TerminalSession.write(TerminalSession.java:178)\n\tat com.termux.terminal.TerminalOutput.write(TerminalOutput.java:12)\n\tat com.termux.terminal.TerminalEmulator.paste(TerminalEmulator.java:2586)\n\tat com.termux.app.terminal.TermuxTerminalSessionClient.onPasteTextFromClipboard(TermuxTerminalSessionClient.java:190)\n\tat com.termux.terminal.TerminalSession.onPasteTextFromClipboard(TerminalSession.java:278)\n\tat com.termux.view.textselection.TextSelectionCursorController$1.onActionItemClicked(TextSelectionCursorController.java:144)\n\tat com.termux.view.textselection.TextSelectionCursorController$2.onActionItemClicked(TextSelectionCursorController.java:180)\n\tat com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onActionItemClicked(DecorView.java:3096)\n\tat com.android.internal.view.FloatingActionMode$3.onMenuItemSelected(FloatingActionMode.java:97)\n\tat com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:788)\n\tat com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)\n\tat com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:935)\n\tat com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:925)\n\tat com.android.internal.view.FloatingActionMode.lambda$setFloatingToolbar$0$FloatingActionMode(FloatingActionMode.java:122)\n\tat com.android.internal.view.FloatingActionMode$$ExternalSyntheticLambda0.onMenuItemClick(Unknown Source:2)\n\tat com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$2.onClick(FloatingToolbar.java:430)\n\tat android.view.View.performClick(View.java:7751)\n\tat android.view.View.performClickInternal(View.java:7724)\n\tat android.view.View.access$3700(View.java:858)\n\tat android.view.View$PerformClick.run(View.java:29336)\n\tat android.os.Handler.handleCallback(Handler.java:938)\n\tat android.os.Handler.dispatchMessage(Handler.java:99)\n\tat android.os.Looper.loopOnce(Looper.java:210)\n\tat android.os.Looper.loop(Looper.java:299)\n\tat android.app.ActivityThread.main(ActivityThread.java:8280)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)\n\n```\n\n[termux-crash_report.log](https://github.com/user-attachments/files/20930506/termux-crash_report.log)\n\n### Steps to reproduce the behavior.\n\n1. Copy the ANSI escape character into the system clipboard\n2. Press the \"Paste\" button in the Termux app context menu\n\n### What is the expected behavior?\n\nPasting the ^[ (or `^[`) character\n","comments":1,"created_at":"2025-06-26T17:23:20Z","labels":["bug report"],"number":4619,"title":"[Bug]: pasting ESC char crashes the app","updated_at":"2026-02-02T14:27:03Z"} +{"author":"locuturus","body":"### Feature description\n\nI'd like a way to share a URI to Termux as just the text of the intent. It could be json or something like that. \n\nI imagine being in some file manager of choice, observing a file I should run through ffmpeg or exiftool or imagemagick or what have you, and I send the text data of the intent to a script I've already set up. The part I'm interested in is usually file:///something or content:blahblah. I'm happy to do the substitutions in my script to convert different URIs into real paths but I haven't found a way to actually get the intent strings into a script from the share menu. I really don't need or want to copy the file for this workflow.\n\n### Additional information\n\n#2658 is somewhat related in spirit.\n\nAssuming this gets traction I'd next want additional share targets whether by a modal dialogue box or the more limited way apps can list 3 or 4 share targets right in the share sheet. I guess they could be set up a lot like how termux-file-editor works now. What I'm starting to do now is copy the filepath in supported file managers and run scripts from the widget that first grab the clipboard. It's clunky going to the home screen every time but it works. Being able to share a filepath, even a content formatted URI that needs to be rebuilt, to those scripts and never leave the first app would be aces.","comments":0,"created_at":"2025-06-24T08:09:09Z","labels":[],"number":4618,"title":"[Feature]: Pass URI Intent as Text to Termux","updated_at":"2025-06-24T08:10:01Z"} +{"author":"useless-coder-person","body":"### Problem description\n\nI downloaded minecraft server software on termux and ran the server. While the server did run fine for a few minutes, termux crashed without any error message and took me to android homescreen.\n\n### Steps to reproduce the behavior.\n\npkg install openjdk-21\nwget -O minecraft_server.jar https://meta.fabricmc.net/v2/versions/loader/1.17.1/0.16.14/1.0.3/server/jar\njava -Xmx2048m -Xms1024m -jar minecraft_server.jar\n(upon first start it will ask you agree to the EULA. To do so, change eula=false to eula=true)\njava -Xmx2048m -Xms1024m -jar minecraft_server.jar\n(Upon running the server for a few mins it crashes with no error message.\n\n### What is the expected behavior?\n\nRun without crashing.\n\n### System information\n\n* Termux application version:latest\n* Android OS version:14\n* Device model:Samsung Tab S7 FE (WiFi + 4G Model) (SMT735)\n","comments":3,"created_at":"2025-06-20T17:15:13Z","labels":["bug report"],"number":4614,"title":"[Bug]: Termux randomly crashes without any error message when a minecraft server is running","updated_at":"2025-06-23T08:41:04Z"} +{"author":"anonimo82","body":"### Feature description\n\nHello everyone. \nI'd like, if possible, to access camera hardware as you'd do in Android: since it's possible to access the microphone, I guess the camera can be accessed similarly. \n\nI hope you like my idea.\n\nThanks in advance for any kind of support. \nHave a nice day.\n\nKindly, Giuseppe. \n\n### Additional information\n\nNone","comments":1,"created_at":"2025-06-07T22:38:38Z","labels":[],"number":4591,"title":"[Feature]: Camera access","updated_at":"2025-11-15T07:30:29Z"} +{"author":"MasterInQuestion","body":"┬á ┬á \"extra-keys\" in \"~/.termux/termux.properties\":\n┬á ┬á https://wiki.termux.com/wiki/Terminal_Settings\n┬á ┬á https://wiki.termux.com/wiki/Touch_Keyboard\n\n┬á ┬á |1| Unfavorable case-sensitivity:\n┬á ┬á Currently wouldn't reckon, e.g.\n┬á ┬á `extra-keys = [ [ \"Tab\" ] ]`\n┬á ┬á ; alike.\n┬á ┬á .\n┬á ┬á Treating which as literally typing \"Tab\". (inserting the string)\n┬á ┬á Likely unintended behavior as:\n┬á ┬á \"extra-keys-text-all-caps = false\" was actually a thing.\n┬á ┬á [ https://github.com/termux/termux-app/blob/82b15803126138eef8899e0c7b582713f872cd09/termux-shared/src/main/java/com/termux/shared/termux/settings/properties/TermuxPropertyConstants.java#L126](https://github.com/termux/termux-app/blob/82b15803126138eef8899e0c7b582713f872cd09/termux-shared/src/main/java/com/termux/shared/termux/settings/properties/TermuxPropertyConstants.java#L126)\n┬á ┬á [ Also inconsistent with \"shortcut.create-session\" etc. 's handling. ]\n\n┬á ┬á |2| \u003c\u0026~~\u003eExtra Keys Row not displaying nevertheless on certain Android version\u003c/\u0026\u003e:\n[ ^\n┬á ┬á Fundamentally because of the obscure \"show_extra_keys\" preferences:\n┬á ┬á Toggled through long-click on the \"KEYBOARD\" button in the drawer. ]\n┬á ┬á .\n┬á ┬á Tested Android 8.\n┬á ┬á Showing on Android 8.1, Android 12.\n┬á ┬á Was trying to disable it nevertheless via:\n┬á ┬á `extra-keys = []`\n┬á ┬á (proper keyboard be the fundamental fix)\n\n┬á ┬á Plus:\n┬á ┬á The backslash handling of \"extra-keys\" is glitchy. (demonstrable by `\"\\\\\\\\\"` alike)\n┬á ┬á [ ^ [ https://github.com/termux/termux-app/issues/4386](https://github.com/termux/termux-app/issues/4386) ]\n┬á ┬á But likely unfixable at this point.\n┬á ┬á .\n┬á ┬á Also using the transient toast for error messages maybe unsuitable.\n┬á ┬á (\"extra-keys\" parsing failure)\n\n┬á ┬á The accepted escape sequences for \"extra-keys\", seem mostly undocumented?\n┬á ┬á Worth a documentation fix?\n┬á ┬á (it reckons `\"\\u0009\"` alike; though no support for `\"\\x09\"`)\n","comments":0,"created_at":"2025-06-06T21:59:04Z","labels":["bug report"],"number":4589,"title":"\"extra-keys\" of \"termux.properties\" malfunctioning","updated_at":"2025-07-14T17:22:57Z"} +{"author":"Umeh832","body":"## Report Info\n\n\n**User Action**: `crash report` \n**Sender**: `TermuxInstaller` \n**Report Timestamp**: `2025-06-03 18:57:16.891 UTC` \n##\n\n## Bootstrap Error\n\n``````\n(-1) Termux Bootstrap Second Stage Command:\nPrevious State: `Executed`\nCurrent State: `Success`\n\nStdout: -\nStderr:\n```\n/data/data/com.termux/files/usr/etc/termux/bootstrap/termux-bootstrap-second-stage.sh[177]: syntax error: unexpected operator/operand '=~'\n\n```\n\nExit Code: `1`\n\n\n``````\n\n## Termux Files Info\n\n\n**TERMUX_REQUIRED_FILES_DIR_PATH ($PREFIX)**: `/data/data/com.termux/files` \n**ANDROID_ASSIGNED_FILES_DIR_PATH**: `/data/user/0/com.termux/files` \n\n```\n$ echo 'ls info:'\n/system/bin/ls -lhdZ '/data/data' '/data/user/0' '/data/data/com.termux' '/data/user/0/com.termux' '/data/data/com.termux/files' '/data/user/0/com.termux/files' '/data/user/0/com.termux/files' '/data/user/com.termux/files' '/data/data/com.termux/files/usr-staging' '/data/data/com.termux/files/usr' '/data/data/com.termux/files/home' '/data/data/com.termux/files/usr/bin/login' 2\u003e\u00261\necho; echo 'mount info:'\n/system/bin/grep -E '( /data )|( /data/data )|( /data/user/[0-9]+ )' /proc/self/mountinfo 2\u003e\u00261 | /system/bin/grep -v '/data_mirror' 2\u003e\u00261\n\nls info:\nls: /data/user/com.termux/files: No such file or directory\nls: /data/data/com.termux/files/usr-staging: No such file or directory\ndrwxrwx--x 171 system system u:object_r:app_data_file:s0:c91,c258,c512,c768 20K 2025-06-03 19:56 /data/data\ndrwx------ 6 u0_a138 u0_a138 u:object_r:app_data_file:s0:c91,c258,c512,c768 3.3K 2025-06-03 19:56 /data/data/com.termux\ndrwxrwx--x 4 u0_a138 u0_a138 u:object_r:app_data_file:s0:c91,c258,c512,c768 3.3K 2025-06-03 19:57 /data/data/com.termux/files\ndrwx------ 2 u0_a138 u0_a138 u:object_r:app_data_file:s0:c91,c258,c512,c768 3.3K 2025-06-03 19:56 /data/data/com.termux/files/home\ndrwx------ 10 u0_a138 u0_a138 u:object_r:app_data_file:s0:c91,c258,c512,c768 3.3K 2025-06-03 19:57 /data/data/com.termux/files/usr\n-rwx------ 1 u0_a138 u0_a138 u:object_r:app_data_file:s0:c91,c258,c512,c768 2.7K 2025-06-03 19:57 /data/data/com.termux/files/usr/bin/login\ndrwxrwx--x 171 system system u:object_r:app_data_file:s0:c91,c258,c512,c768 20K 2025-06-03 19:56 /data/user/0\ndrwx------ 6 u0_a138 u0_a138 u:object_r:app_data_file:s0:c91,c258,c512,c768 3.3K 2025-06-03 19:56 /data/user/0/com.termux\ndrwxrwx--x 4 u0_a138 u0_a138 u:object_r:app_data_file:s0:c91,c258,c512,c768 3.3K 2025-06-03 19:57 /data/user/0/com.termux/files\ndrwxrwx--x 4 u0_a138 u0_a138 u:object_r:app_data_file:s0:c91,c258,c512,c768 3.3K 2025-06-03 19:57 /data/user/0/com.termux/files\n\nmount info:\n24367 14158 253:52 / /data rw,nosuid,nodev,noatime master:39 - f2fs /dev/block/dm-52 rw,lazytime,seclabel,background_gc=on,discard,no_heap,user_xattr,inline_xattr,acl,inline_data,inline_dentry,extent_cache,mode=adaptive,active_logs=6,reserve_root=32768,resuid=0,resgid=5678,usrquota,grpquota,inlinecrypt,alloc_mode=default,fsync_mode=nobarrier,compress_algorithm=lz4,compress_log_size=5,compress_mode=user\n24368 24367 253:52 /data /data/user/0 rw,nosuid,nodev,noatime master:39 - f2fs /dev/block/dm-52 rw,lazytime,seclabel,background_gc=on,discard,no_heap,user_xattr,inline_xattr,acl,inline_data,inline_dentry,extent_cache,mode=adaptive,active_logs=6,reserve_root=32768,resuid=0,resgid=5678,usrquota,grpquota,inlinecrypt,alloc_mode=default,fsync_mode=nobarrier,compress_algorithm=lz4,compress_log_size=5,compress_mode=user\n24361 24367 0:650 / /data/data rw,nosuid,nodev,noexec,relatime - tmpfs tmpfs rw,seclabel,mode=751\n\n```\n##\n\n\n## Logcat Dump\n\n\n\n```\n$ /system/bin/logcat -d -t 3000 2\u003e\u00261\n\n```\n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.118.3` \n**VERSION_CODE**: `1002` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: - \n**SE_FILE_CONTEXT**: - \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `4.4.223-g52750b8f2138-ab6846512` \n**SDK_INT**: `30` \n**RELEASE**: `11` \n**ID**: `RD2A.211001.002` \n**DISPLAY**: `RD2A.211001.002` \n**INCREMENTAL**: `6934943` \n**SECURITY_PATCH**: `2021-10-01` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n\n### Hardware\n\n**MANUFACTURER**: `Google` \n**BRAND**: `google` \n**MODEL**: `Pixel 4` \n**PRODUCT**: `marlin` \n**BOARD**: `unknown` \n**HARDWARE**: `ranchu` \n**DEVICE**: `marlin` \n**SUPPORTED_ABIS**: `arm64-v8a` \n**SUPPORTED_32_BIT_ABIS**: \n**SUPPORTED_64_BIT_ABIS**: `arm64-v8a` \n##\n","comments":4,"created_at":"2025-06-03T18:58:37Z","labels":[],"number":4583,"title":"Report Text","updated_at":"2025-06-03T22:57:02Z"} +{"author":"afash55","body":"### Problem description\n\nTermux Setup Storage Error\n\nError Code: 200\n\nError Message (FileUtils Error):\n\nCreating ~/storage directory file at path \"/data\n\n### Steps to reproduce the behavior.\n\nTermux Setup Storage Error\n\nError Code: 200\n\nError Message (FileUtils Error):\n\nCreating ~/storage directory file at path \"/data\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":0,"created_at":"2025-06-03T16:32:27Z","labels":["bug report"],"number":4582,"title":"[Bug]: Termux Setup Storage Error Error Code: 200 Error Message (FileUtils Error): Creating ~/storage directory file at path \"/data","updated_at":"2025-06-03T16:32:27Z"} +{"author":"Efreak","body":"### Problem description\n\nWhenever I use ssh in termux, I get an error notification `Error in ResultReturner`. It looks like it might be related to using tergent/Android key store for my ssh keys (see the trace under system info). The notification shows up *while* the Android system is asking for biometric authentication, not afterwards, and if I send the same command again before the the authorization times out (or immediately after unlocking the device) then the error notification doesn't show up.\n\nI'm not sure if this is an error with the termux app, the API app, or the API package, as it seems like it could be an issue with any of these.\n\n### Steps to reproduce the behavior.\n\nConnect to an ssh server that uses a key in the system key store (ssh or git or other command)\n\n### What is the expected behavior?\n\nCommand requests authentication and continues without annoying notifications.\n\n### System information\n\n* Termux application version: 0.119.0-beta3\n* Android OS version: 12\n* Device model: Samsung Galaxy Tab S6\n\n\u003cdetails\u003e\n\u003csummary\u003eFull error report info from termux\u003c/summary\u003e\n\n## Report Info\n\n\n**User Action**: `plugin execution command` \n**Sender**: `ResultReturner` \n**Report Timestamp**: `2025-05-31 23:52:34.171 UTC` \n##\n\n## Termux:API Error\n\n```\nError in ResultReturner:\nandroid.security.keystore.UserNotAuthenticatedException: User not authenticated\n\tat android.security.keystore2.KeyStoreCryptoOperationUtils.getInvalidKeyException(KeyStoreCryptoOperationUtils.java:128)\n\tat android.security.keystore2.AndroidKeyStoreSignatureSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreSignatureSpiBase.java:217)\n\tat android.security.keystore2.AndroidKeyStoreSignatureSpiBase.engineInitSign(AndroidKeyStoreSignatureSpiBase.java:123)\n\tat android.security.keystore2.AndroidKeyStoreSignatureSpiBase.engineInitSign(AndroidKeyStoreSignatureSpiBase.java:101)\n\tat java.security.Signature$Delegate.init(Signature.java:1357)\n\tat java.security.Signature$Delegate.chooseProvider(Signature.java:1310)\n\tat java.security.Signature$Delegate.engineInitSign(Signature.java:1385)\n\tat java.security.Signature.initSign(Signature.java:679)\n\tat com.termux.api.apis.KeystoreAPI$2.writeResult(SourceFile:257)\n\tat com.termux.api.util.ResultReturner.lambda$returnData$0(SourceFile:268)\n\tat com.termux.api.util.ResultReturner.$r8$lambda$RFR2zSHu5FsJH7JvuCx4CPnUmMY(SourceFile:0)\n\tat com.termux.api.util.ResultReturner$$ExternalSyntheticLambda0.run(SourceFile:0)\n\tat java.lang.Thread.run(Thread.java:920)\n\tSuppressed: java.lang.Exception: Called by:\n\t\tat com.termux.api.util.ResultReturner.returnData(SourceFile:239)\n\t\tat com.termux.api.apis.KeystoreAPI.signData(SourceFile:248)\n\t\tat com.termux.api.apis.KeystoreAPI.onReceive(SourceFile:62)\n\t\tat com.termux.api.TermuxApiReceiver.doWork(SourceFile:149)\n\t\tat com.termux.api.TermuxApiReceiver.onReceive(SourceFile:65)\n\t\tat android.app.ActivityThread.handleReceiver(ActivityThread.java:4964)\n\t\tat android.app.ActivityThread.access$1900(ActivityThread.java:324)\n\t\tat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2347)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:106)\n\t\tat android.os.Looper.loopOnce(Looper.java:226)\n\t\tat android.os.Looper.loop(Looper.java:313)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:8855)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)\n\n```\n\n\n\n## Termux:API App Info (Current)\n\n**APP_NAME**: `Termux:API` \n**PACKAGE_NAME**: `com.termux.api` \n**VERSION_NAME**: `0.52.0` \n**VERSION_CODE**: `1001` \n**UID**: `11429` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c149,c261,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c149,c261,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.3` \n**VERSION_CODE**: `1022` \n**UID**: `11429` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `false` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c149,c261,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c149,c261,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: - \n**TERMUX_APP_PACKAGE_VARIANT**: - \n**APK_RELEASE**: `F-Droid` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `4.14.190-26178195-abT860XXS5DWH1` \n**SDK_INT**: `32` \n**RELEASE**: `12` \n**ID**: `SP2A.220305.013` \n**DISPLAY**: `SP2A.220305.013.T860XXS5DWH1` \n**INCREMENTAL**: `T860XXS5DWH1` \n**SECURITY_PATCH**: `2023-08-01` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: `32` \n**MONITOR_PHANTOM_PROCS**: `true` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `samsung` \n**BRAND**: `samsung` \n**MODEL**: `SM-T860` \n**PRODUCT**: `gts6lwifixx` \n**BOARD**: `msmnile` \n**HARDWARE**: `qcom` \n**DEVICE**: `gts6lwifi` \n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \n##\n\u003c/details\u003e","comments":1,"created_at":"2025-06-01T00:10:27Z","labels":["bug report"],"number":4575,"title":"[Bug]: Error in ResultReturner","updated_at":"2026-03-08T05:39:13Z"} +{"author":"ShibuyaBuya","body":"### Problem description\n\nSince I updated the app to 0.119.0-beta.2 the app keeps crashing and showing this \nBefore it crashed, the cursor was moving around\n\"pointer tag for ... was truncated\"\n\n![Image](https://github.com/user-attachments/assets/b8c8529e-ce5c-4776-863f-d8cc559232ad)\n\n### Steps to reproduce the behavior.\n\nThe bug happens randomly\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.119.0-beta.2\n* Android OS version: 14\n* Device model: Redmi 10C\n","comments":0,"created_at":"2025-05-19T09:33:29Z","labels":["bug report"],"number":4552,"title":"[Bug]: weird thing happened and then app crashed","updated_at":"2025-05-19T09:33:29Z"} +{"author":"RohitKushvaha01","body":"### Feature description\n\nWhen Termux is force-stopped by the Android system (such as after device reboots), the RUN_COMMAND intent no longer functions. In this state, the user must manually launch Termux before it can receive any intents. However, startActivity intents continue to work. Therefore, If Termux supports receiving intents via startActivity, client applications could deliver commands without relying on background services. This would eliminate the need for users to manually launch Termux after a reboot or force-stop.\n\n### Additional information\n\nn/a","comments":0,"created_at":"2025-05-18T04:08:54Z","labels":[],"number":4546,"title":"[Feature]: MainActivity should accept the RUN_COMMAND intent.","updated_at":"2025-05-18T04:08:54Z"} +{"author":"ramprasad2695","body":"### Problem description\n\nHello team,\n\nThis is an issue observed when I share many bookmarks to save as a text file in Termux downloads.\n\nI often use Termux to collect my Firefox bookmarks in my Android mobile. I select multiple bookmarks and share it with Termux. Firefox collates the titles of all selected bookmarks and sets as the title of shared text. It seems Termux-app crashes when the length of the title set by Firefox app is more than 5000 bytes.\n\nI tried this in two different versions of Termux app, and have attached the crash logs for both the versions.\n\nIs it possible to limit the title string to certain minimum length and reject all other characters of the string?\n\nI explored a little on setting maximum limit for SetSelection API (mentioned in the crash log), but I do not know much about Android development. Following is a link I found related to this, which may be helpful for you. (https://stackoverflow.com/questions/3285412/whats-the-best-way-to-limit-text-length-of-edittext-in-android) \n\nPlease let me know if I could be of any help in resolving this.\n\nThanking you,\nP. Ramprasad\n\n[crash_log_backup_0.118.1.md](https://github.com/user-attachments/files/20202665/crash_log_backup_0.118.1.md)\n\n[crash_log_backup_0.119.0-beta.2.md](https://github.com/user-attachments/files/20202668/crash_log_backup_0.119.0-beta.2.md)\n\nP.S: I would like to mention that I really like and appreciate having Termux in my mobile. Thanks for bringing out this project.\n\n### Steps to reproduce the behavior.\n\nFollowing are the steps which may be followed to reproduce this behaviour:\n\n1) Save many bookmarks with long title in Firefox browser app for android.\n2) Select the bookmarks and click on share icon in top right corner.\n3) Share it with Termux app.\n4) When the title of the shared text is longer than certain limit (5000), Termux app crashes and a crash dump file is created in home directory.\n\n\n### What is the expected behavior?\n\nAs the shared text title is being used to create a filename string, we may remove all characters above certain limit as most users do not need very long file names. We will also be able to avoid situations which may lead to app crashes. \n\n### System information\n\n* Termux application version: 0.118.1 and 0.119.0-beta\n* Android OS version: 11\n* Device model: Nokia C01 Plus\n","comments":0,"created_at":"2025-05-14T07:43:50Z","labels":["bug report"],"number":4542,"title":"[Bug]: Termux app crash when sharing text with very long title","updated_at":"2025-05-14T07:43:50Z"} +{"author":"MrRare2","body":"### Problem description\n\nThe prompt for naming/setting a session name is not properly centered when keyboard is up, happening since 0.118.0 (on my other device)\n\n![Image](https://github.com/user-attachments/assets/513aeeb4-4064-430b-96de-b4a0aea6dbfb)\n\n![Image](https://github.com/user-attachments/assets/b0182b1f-b147-4382-9339-ef539a53a815)\n\n![Image](https://github.com/user-attachments/assets/77e87787-4892-49a2-a027-5eb29d721660)\n\n### Steps to reproduce the behavior.\n\n1. Swipe from the left side of the screen\n2. Hold one of the sessions / Hold the \"NEW SESSION\" button\n3. Click the input box\n\n### What is the expected behavior?\n\nIt should center properly with keyboard open\n\n### System information\n\n* Termux application version: 0.118.2\n* Android OS version: 13\n* Device model: Infinix X6525\n","comments":3,"created_at":"2025-05-04T23:14:00Z","labels":["bug report"],"number":4527,"title":"[Bug]: UI misalignment on \"New named session\" / \"Set session name\" screen","updated_at":"2025-06-24T03:26:26Z"} +{"author":"hbmartin","body":"### Problem description\n\n**Note: Happy to build a debug install from source if additional logging would be helpful**\n\nI have modified the default in .termux/termux.properties to include\n```\nuse-black-ui=false\n...\nenforce-char-based-input = true\n```\n\n\n### Steps to reproduce the behavior.\n\nRunning `termux-reload-settings` seems to have no effect, even after restarting the device and re-running trs\n\n### What is the expected behavior?\n\nTheme is dark and no longer encountering missing characters until space bug.\n\n\n\n### System information\n\n* Termux application version: 0.118.2 (F-Droid)\n* Android OS version: 13\n* Device model: Boox Note Air4 C (Qualcomm)\n","comments":0,"created_at":"2025-05-02T16:13:00Z","labels":["bug report"],"number":4523,"title":"[Bug]: termux-reload-settings doesn't apply configuration in termux.properties (even after device restart)","updated_at":"2025-05-02T16:13:00Z"} +{"author":"PitiBouchon","body":"### Feature description\n\nHello, is there any plan to publish Accrescent on the Accrescent app store ?\n\nhttps://accrescent.app/\n\n### Additional information\n\nIt is already published on F-Droid so why not accrescent","comments":0,"created_at":"2025-04-30T20:00:32Z","labels":[],"number":4520,"title":"[Feature]: publish Termux on Accrescent","updated_at":"2025-04-30T20:00:32Z"} +{"author":"LostRuins","body":"### Problem description\n\nSometimes, bad mirrors are still detected as available, and Termux keeps trying to use them by default.\n\n*I know we can change mirrors with `termux-change-repo`*, however termux-change-repo is an interactive process and cannot be setup unattended.\n\nI was trying to use `pkg install python`. Most of the time, it works fine. However, if there is a **bad/malicious mirror** e.g. https://deb.kcubeterm.me/termux-main (which links to some shady site now) Termux does not recognize this. Depending on your luck, the automatic mirror selection will pick it as a mirror and then **you are stuck with that same mirror** until manually changed. \n\nPossible Suggestions:\n- If a mirror is defective, \"`testing the available mirrors`\" should not list it as \"`OK`\".\n- When \"`Metadata integrity can't be verified, repository is disabled now`\" due to **cybersquatting**, actually disable the malicious mirror for that session rather than keep trying to reuse it.\n- Perhaps automatic mirror selection should not be fixed, suggest round robin across the mirror group upon retry?\n- Allow some unattended way of changing a mirror besides the interactive `termux-change-repo`\n\n### Steps to reproduce the behavior.\n\nInstall termux\n`pkg install python`\n\nIf lucky: \n- all is good \n\nIf unlucky and picked the malicious mirror:\n- it will fail. And keep failing, until a human does manual intervention to use `termux-change-repo` (cannot be automated)\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.0\n* Android OS version: 13\n* Device model: Xperia 5V\n","comments":3,"created_at":"2025-04-26T04:26:58Z","labels":["bug report"],"number":4517,"title":"Bad mirrors are still detected as available","updated_at":"2025-04-26T21:40:58Z"} +{"author":"dxcvvxd","body":"### Problem description\n\nproblem in the title\n\n### Steps to reproduce the behavior.\n\nrun `termux-change-repo`, select any mirror group, it dies\n\n![Image](https://github.com/user-attachments/assets/bd3555ed-a9b1-4292-8b8e-e3d1902d1dd8)\n\n### What is the expected behavior?\n\nit doesnt die\n\n### System information\n\n```\nTermux Variables:\nTERMUX_APP_PACKAGE_MANAGER=apt\nTERMUX_APP__AM_SOCKET_SERVER_ENABLED=true\nTERMUX_APP__APK_PATH=/data/app/~~LioPjrr21b-0qxcib89wmQ==/com.termux-YMoHcZqT30AbiHTp2euVmw==/base.apk\nTERMUX_APP__APK_RELEASE=GITHUB\nTERMUX_APP__FILES_DIR=/data/user/0/com.termux/files\nTERMUX_APP__IS_DEBUGGABLE_BUILD=true\nTERMUX_APP__IS_INSTALLED_ON_EXTERNAL_STORAGE=false\nTERMUX_APP__PACKAGE_MANAGER=apt\nTERMUX_APP__PACKAGE_NAME=com.termux\nTERMUX_APP__PACKAGE_VARIANT=apt-android-7\nTERMUX_APP__PID=30766\nTERMUX_APP__SE_FILE_CONTEXT=u:object_r:app_data_file:s0:c250,c257,c512,c768\nTERMUX_APP__SE_INFO=default:targetSdkVersion=28:complete\nTERMUX_APP__SE_PROCESS_CONTEXT=u:r:untrusted_app_27:s0:c250,c257,c512,c768\nTERMUX_APP__TARGET_SDK=28\nTERMUX_APP__UID=10506\nTERMUX_APP__USER_ID=0\nTERMUX_APP__VERSION_CODE=118\nTERMUX_APP__VERSION_NAME=0.118.0+245158c\nTERMUX_MAIN_PACKAGE_FORMAT=debian\nTERMUX_VERSION=0.118.0+245158c\nTERMUX__USER_ID=0\nPackages CPU architecture:\naarch64\nSubscribed repositories:\n# sources.list\ndeb https://mirror.freedif.org/termux/termux-main stable main\nUpdatable packages:\nAll packages up to date\ntermux-tools version:\n1.45.0\nAndroid version:\n15\nKernel build information:\nLinux localhost 5.15.167-chickernel-stable-5-ksun-susfs #1 SMP PREEMPT Fri Apr 4 19:19:12 UTC 2025 aarch64 Android\nDevice manufacturer:\nXiaomi\nDevice model:\n23021RAA2Y\nSupported ABIs:\nSUPPORTED_ABIS: arm64-v8a,armeabi-v7a,armeabi\nSUPPORTED_32_BIT_ABIS: armeabi-v7a,armeabi\nSUPPORTED_64_BIT_ABIS: arm64-v8a\nLD Variables:\nLD_LIBRARY_PATH=\nLD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec-ld-preload.so\nInstalled termux plugins:\ncom.termux.styling versionCode:1000\n```","comments":3,"created_at":"2025-04-24T08:25:01Z","labels":["bug report"],"number":4511,"title":"[Bug]: `termux-change-repo` dies with -9 (oom?)","updated_at":"2025-04-24T11:10:21Z"} +{"author":"Gintoki93","body":"### Problem description\n\nI am using Termux inside the Windows Subsystem for Android (WSA) on Windows 11. When I run the command:\n\n\npkg update \u0026\u0026 pkg upgrade -y\nI get the following error:\n\n\nSub-process apt-key exited unexpectedly\nW: GPG error: https://[mirror-url] stable InRelease: Sub-process apt-key exited unexpectedly\nE: The repository 'https://[mirror-url] stable InRelease' is not signed.\nDespite following these steps:\n\nRunning termux-change-repo and selecting trusted mirrors (such as: packages.termux.dev or Grimler's repo).\n\nEditing the $PREFIX/etc/apt/sources.list file to contain:\n\n\ndeb https://packages.termux.dev/apt/termux-main stable main\nInstalling additional packages like gnupg, curl, and termux-keyring.\n\nUsing the --allow-insecure-repositories flag in the update command.\n\nThe error persists.\n\nSteps to Reproduce the Issue:\n\nRun Termux in the WSA environment.\n\nDelete the previous sources files:\n\n\nrm -rf $PREFIX/etc/apt/sources.list*\nrm -rf $PREFIX/etc/apt/sources.list.d\nCreate a new sources.list file with the content:\n\n\ndeb https://packages.termux.dev/apt/termux-main stable main\nRun the update:\n\n\npkg update --allow-insecure-repositories \u0026\u0026 pkg upgrade -y --allow-insecure-repositories\nThe error mentioned above appears.\n\nAdditional Information:\n\nSystem: Windows 11 with Windows Subsystem for Android (WSA).\n\nTermux Version: [Specify your current version]\n\nEnvironment: WSA (it seems there's an issue with apt-key handling in this environment)\n\nTried Mirrors: I have tried using several mirrors including packages.termux.dev and grimler.se, but the error persists.\n\nQuestion: Is there any known solution to bypass the GPG issue in the WSA environment? Or are there specific Termux settings that work in Android environments that need to be adjusted for WSA?\n\nThank you for your attention, and I hope to receive help in resolving this issue.\n\n### Steps to reproduce the behavior.\n\nSteps to Reproduce the Behavior\nLaunch Termux within the Windows Subsystem for Android (WSA) on Windows 11.\n\nRemove the current sources files by running:\n\nrm -rf $PREFIX/etc/apt/sources.list*\nrm -rf $PREFIX/etc/apt/sources.list.d\nCreate a new sources.list file containing:\n\ncat \u003e $PREFIX/etc/apt/sources.list \u003c\u003cEOF\ndeb https://packages.termux.dev/apt/termux-main stable main\nEOF\nExecute the update and upgrade command:\n\npkg update --allow-insecure-repositories \u0026\u0026 pkg upgrade -y --allow-insecure-repositories\nObserve that you receive the GPG error with the message \"Sub-process apt-key exited unexpectedly\" and the repository is flagged as not signed.\n\n### What is the expected behavior?\n\nThe package lists should update without any errors.\n\nNo GPG error should be raised, and the repository should be accepted as a valid, signed source.\n\nThe system should proceed to upgrade packages normally and install packages/execute commands without issues.\n\nHowever, even for basic package installation and command execution, nothing works correctly. It appears that Termux is not fully compatible with WSA.\n\n### System information\n\nOperating System: Windows 11 with Windows Subsystem for Android (WSA)\nTermux Version and Environment Variables:\nTERMUX_APK_RELEASE=GITHUB\nTERMUX_APP_PACKAGE_MANAGER=apt\nTERMUX_APP_PID=11489\nTERMUX_APP__BUILD_DATA_DIR=/data/data/com.termux\nTERMUX_APP__DATA_DIR=/data/user/0/com.termux\nTERMUX_APP__LEGACY_DATA_DIR=/data/data/com.termux\nTERMUX_APP__SE_FILE_CONTEXT=u:object_r:app_data_file:s0:c79,c256,c512,c768\nTERMUX_APP__SE_INFO=default:targetSdkVersion=28:complete\nTERMUX_IS_DEBUGGABLE_BUILD=1\nTERMUX_MAIN_PACKAGE_FORMAT=debian\nTERMUX_VERSION=0.118.2\nTERMUX__HOME=/data/data/com.termux/files/home\nTERMUX__PREFIX=/data/data/com.termux/files/usr\nTERMUX__ROOTFS=/data/data/com.termux/files\nTERMUX__SE_PROCESS_CONTEXT=u:r:untrusted_app_27:s0:c79,c256,c512,c768\nTERMUX__USER_ID=0\nCPU Architecture: aarch64\nSubscribed Repositories:\nIn /data/data/com.termux/files/usr/etc/apt/sources.list:\ndeb https://packages-cf.termux.dev/apt/termux-main stable main\nUpdatable Packages: All packages up to date\nTermux Tools Version: 1.45.0\nAndroid Version: 13\nKernel Build Information:\nLinux localhost 5.15.104-windows-subsystem-for-android-20230927+ #1 SMP PREEMPT Fri Nov 1 07:07:43 UTC 2024 armv8 Android\nDevice Manufacturer: Google\nDevice Model: Pixel 5\nSupported ABIs:\nSUPPORTED_ABIS: x86_64,arm64-v8a,x86,armeabi-v7a,armeabi\nSUPPORTED_32_BIT_ABIS: x86,armeabi-v7a,armeabi\nSUPPORTED_64_BIT_ABIS: x86_64,arm64-v8a\nLD Variables:\nLD_LIBRARY_PATH=\nLD_PRELOAD=\nWSA Version: 2407.40000.4.0","comments":1,"created_at":"2025-04-16T14:33:41Z","labels":["bug report"],"number":4503,"title":"[Bug]: GPG Error during Termux Update in WSA Environment (Subprocess apt-key exited unexpectedly)","updated_at":"2025-04-16T20:11:06Z"} +{"author":"rbnvrw","body":"### Problem description\n\nIn termux (and as a result, vim in termux) devan─ügar─½ characters are not rendered correctly: the compound phonemes are rendered separately, which results in weird jumps in the cursor position when going through a word character by character.\n\nIt seems something needs to be changed in the terminal, I couldn't find much information, but see e.g. https://askubuntu.com/questions/182642/devnagari-script-in-terminal\n\n### Steps to reproduce the behavior.\n\nType the following characters:\n\nαñ╕αÑìαñ╡αñ░\n\nIt is shown in Termux as:\n\n![Image](https://github.com/user-attachments/assets/da53ce6f-a075-4506-a090-1b7859a2e595)\n\nI.e. the first two characters should be merged but aren't, these are the three separate characters with spaces:\nαñ╕αÑì αñ╡ αñ░ \n\nRemoving the spaces should merge the first two characters. It is the same for other compound characters.\n\n### What is the expected behavior?\n\nIt should show as:\n\n![Image](https://github.com/user-attachments/assets/be821db3-1172-4a2c-a517-decc78d9af9f)\n\n### System information\n\n* Termux application version: googleplay.2025.01.18\n* Android OS version: 14\n* Device model: Samsung Galaxy S21 5G\n\nThank you for the great software!","comments":6,"created_at":"2025-04-14T12:41:35Z","labels":["bug report"],"number":4500,"title":"[Bug]: Devan─ügar─½ characters not rendered correctly","updated_at":"2025-08-13T05:59:13Z"} +{"author":"sevmonster","body":"### Problem description\n\nWhen using the Termux share intent for a file, that file is truncated to zero bytes, and is not copied to `~/downloads`, if the directory is a symlink to shared storage (e.g. `storage/shared/example`).\n\nI only initially noticed the issue because I don't have a particular purpose to have a dedicated app data directory for file sharing, and just symlinked it to Downloads, thinking it wouldn't cause problems.\n\n### Steps to reproduce the behavior.\n\n1. `termux-setup-storage \u0026\u0026 rmdir downloads \u0026\u0026 ln -s storage/downloads downloads`\n2. Open any file browser and share with Termux\n\n### What is the expected behavior?\n\nIf the file doesn't already exist, copy it to the destination (even if cross-device) and perform the chosen action (edit etc.)\n\n### System information\n\n* Termux application version: 0.119.0-beta.2\n* Android OS version: 15\n* Device model: Google Pixel Fold","comments":0,"created_at":"2025-04-14T10:32:11Z","labels":["bug report"],"number":4499,"title":"[Bug]: Symlinking `~/downloads` results in truncated shared file","updated_at":"2025-04-14T10:32:11Z"} +{"author":"imlibra","body":"### Problem description\n\nHowever, no problem of using it, but still an error notification returned every time.\n\n[termux-crash_report.log](https://github.com/user-attachments/files/19622515/termux-crash_report.log)\n\n~/.ssh/config:\n\n```\nHost *\n PKCS11Provider /data/data/com.termux/files/usr/lib/libtergent.so\n```\n\ntermux-keystore list\n\n```\n[\n {\n \"alias\": \"tergent2\",\n \"algorithm\": \"RSA\",\n \"size\": 3072,\n \"inside_secure_hardware\": true,\n \"user_authentication\": {\n \"required\": true,\n \"enforced_by_secure_hardware\": true,\n \"validity_duration_seconds\": 1\n }\n }\n]\n```\n\n### Steps to reproduce the behavior.\n\nssh user@example.com\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.2\n* Android OS version: 14\n* Device model: SM-S908U1\n","comments":4,"created_at":"2025-04-06T17:15:10Z","labels":["bug report"],"number":4482,"title":"[Bug]: An error returned when use SSH with key in Tergent after update","updated_at":"2025-04-07T11:13:17Z"} +{"author":"mooreye","body":"### Feature description\n\nWhen you exit from bash (Ctrl+D or `exit` command) it kills Termux session, but Termux app window remains in opened app list. It would be nice to close it as well.\n\n### Additional information\n\nYes, some apps close itselfs like this","comments":1,"created_at":"2025-04-06T16:40:27Z","labels":[],"number":4481,"title":"[Feature]: Close app window on logout from shell","updated_at":"2025-11-13T10:29:18Z"} +{"author":"zohaib-wolf","body":"### Problem description\n\nThe keys are press multipley on it own when you write clear command they write clearclearclear 3 4 times thats how then the command is valid .\n\n### Steps to reproduce the behavior.\n\nThe keys are press multipley on it own when you write clear command they write clearclearclear 3 4 times thats how then the command is invalid.\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:googleplay2025.01.18\n* Android OS version:14\n* Device model:A14 sumsung\n","comments":2,"created_at":"2025-04-05T01:09:51Z","labels":["bug report"],"number":4478,"title":"Bug:multiple keys press","updated_at":"2025-04-29T09:56:57Z"} +{"author":"iamgitcat","body":"### Problem description\n\nHello. I changed my custom ROM to Android 14 and termux-job-scheduler crashes after setting up a job. \n\n`~Γû║termux-job-scheduler --script $HOME/bin/scheduler.sh --period-ms 7200000 --persisted true --network any --job-id 1` and than a crash happenes:\n\n`## Report Info\n\n\n**User Action**: `plugin execution command` \n**Sender**: `ResultReturner` \n**Report Timestamp**: `2025-03-30 13:35:42.120 UTC` \n##\n\n## Termux:API Error\n\n```\nError in ResultReturner:\njava.io.IOException: Connection refused\n\tat android.net.LocalSocketImpl.connectLocal(Native Method)\n\tat android.net.LocalSocketImpl.connect(LocalSocketImpl.java:259)\n\tat android.net.LocalSocket.connect(LocalSocket.java:162)\n\tat com.termux.api.util.ResultReturner.lambda$returnData$0(ResultReturner.java:243)\n\tat com.termux.api.util.ResultReturner$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)\n\tat java.lang.Thread.run(Thread.java:1012)\n\n```\n\n\n\n## Termux:API App Info (Current)\n\n**APP_NAME**: `Termux:API` \n**PACKAGE_NAME**: `com.termux.api` \n**VERSION_NAME**: `0.51.0` \n**VERSION_CODE**: `1000` \n**UID**: `10650` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `true` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c138,c258,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c138,c258,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**APK_RELEASE**: `Github` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `B6DA01480EEFD5FBF2CD3771B8D1021EC791304BDD6C4BF41D3FAABAD48EE5E1` \n##\n\n\n## Termux App Info\n\n**APP_NAME**: `Termux` \n**PACKAGE_NAME**: `com.termux` \n**VERSION_NAME**: `0.119.0-beta.2` \n**VERSION_CODE**: `1021` \n**UID**: `10650` \n**TARGET_SDK**: `28` \n**IS_DEBUGGABLE_BUILD**: `true` \n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c138,c258,c512,c768` \n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c138,c258,c512,c768` \n**SE_INFO**: `default:targetSdkVersion=28:complete` \n**TERMUX_APP_PACKAGE_MANAGER**: - \n**TERMUX_APP_PACKAGE_VARIANT**: - \n**APK_RELEASE**: `Github` \n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `B6DA01480EEFD5FBF2CD3771B8D1021EC791304BDD6C4BF41D3FAABAD48EE5E1` \n##\n\n\n## Device Info\n\n### Software\n\n**OS_VERSION**: `4.14.186-00093-g5fb7c4d6eefb-dirty` \n**SDK_INT**: `34` \n**RELEASE**: `14` \n**ID**: `AP2A.240905.003` \n**DISPLAY**: `AP2A.240905.003` \n**INCREMENTAL**: `eng.mitja.20250319.014511` \n**SECURITY_PATCH**: `2025-03-01` \n**IS_DEBUGGABLE**: `0` \n**IS_TREBLE_ENABLED**: `true` \n**TYPE**: `user` \n**TAGS**: `release-keys` \n**MAX_PHANTOM_PROCESSES**: `32` \n**MONITOR_PHANTOM_PROCS**: `true` \n**DEVICE_CONFIG_SYNC_DISABLED**: - \n\n### Hardware\n\n**MANUFACTURER**: `google` \n**BRAND**: `google` \n**MODEL**: `TrebleDroid with Slim GApps` \n**PRODUCT**: `treble_arm64_bgN_slim` \n**BOARD**: `tb8788p1_64_bsp` \n**HARDWARE**: `mt8788` \n**DEVICE**: `tdgsi_arm64_ab` \n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \n##\n`\n\n### Steps to reproduce the behavior.\n\nSetting up any job for termux-job-scheduler\n\n### What is the expected behavior?\n\nShould just work?\n\n### System information\n\n* Termux application version: 0.119 beta 2\n* Android OS version: 14\n* Device model: T800\n","comments":2,"created_at":"2025-03-30T13:39:17Z","labels":["bug report"],"number":4465,"title":"[Bug]: termux-job-scheduler crashes?","updated_at":"2025-05-25T06:33:39Z"} +{"author":"subham008","body":"### Feature description\n\nI wanna integarte a Simple Terminal to allow user run android commands \n\nREQUEST\nI request you to write a proper Doc to implement terminal-view \n\n### Additional information\n\nNO_ADDITIONAL_INFO","comments":0,"created_at":"2025-03-29T07:00:03Z","labels":[],"number":4461,"title":"[Feature]: terminal-view Documentation not available","updated_at":"2025-03-29T07:00:03Z"} +{"author":"ballo","body":"### Problem description\n\nThis is on the latest F-Droid Termux on Android 15 on a POS Pixel 7. \n\nI used to be able to set the phone to hotspot mode then ssh to the phone via port 8022. For reasons unknown this is now failing every so often. It fails for a long period of time then seems to clear up and allows me to use it again. The port is open according to nmap, and I can still use the phone via scrcpy (adb on port 5555), but when I attempt an ssh it prompts me for a password then fails to provide a shell nor can it pipe sockets via -L or -D. I have tried killing and restarting sshd as well as force quitting Termux to no avail. I'm pretty familiar with all things UNIX and this one has me stumped, so I'm guessing it's something specific to Termux or Android which has put me in this bind.\n\n\n\n### Steps to reproduce the behavior.\n\nUnfortunately these kinds of problems are difficult to reproduce, but it is happening. I'm not doing anything fancy with Termux. I do have the termus-api app installed so I can monitor the battery level. \n\n### What is the expected behavior?\n\nI should be able to ssh to my phone at all times. The phone is still responsive in that I can use adb/scrcpy so it hasn't crashed nor hardly used any memory\n\n### System information\n\n* Termux application version: 0.118.1\n* Android OS version: 15\n* Device model: POS Pixel 7\n","comments":11,"created_at":"2025-03-27T19:36:10Z","labels":["bug report"],"number":4457,"title":"[Bug]: sshd no longer works","updated_at":"2025-06-17T21:06:07Z"} +{"author":"ClassicDarkPack","body":"### Problem description\n\n\nI am experiencing a typing issue in Termux when using Microsoft SwiftKey. When I type, the text does not appear on the screen. However, when I press the spacebar, unexpected characters or words appear instead of what I originally typed. This issue makes Termux unusable with SwiftKey.\n\nAdditional Notes:\n\nThis issue only occurs with Microsoft SwiftKey. Other keyboards (such as Gboard) work fine in Termux.\n\n### Steps to reproduce the behavior.\n\n1. Open Termux.\n\n\n2. Try typing anything using Microsoft SwiftKey.\n\n\n3. Observe that the text does not appear.\n\n\n4. Press the spacebar.\n\n\n5. Unexpected characters or words appear instead of the typed text.\n\n\n### What is the expected behavior?\n\nThe typed text should appear immediately without modification.\n\n### System information\n\nDevice Model: Poco X4 Pro\n\nAndroid Version: 13\n\nSwiftKey Version: 9.10.56.16\n\nTermux Version: 0.119.0 beta1","comments":6,"created_at":"2025-03-25T04:05:17Z","labels":["bug report"],"number":4456,"title":"[Bug]: Unable to Type in Termux with Microsoft SwiftKey","updated_at":"2026-04-03T09:38:55Z"} +{"author":"ballo","body":"### Problem description\n\nCan't change shell to zsh\n\n### Steps to reproduce the behavior.\n\nchsh -s $(which zsh)\n/data/data/com.termux/files/usr/bin//data/data/com.termux/files/usr/bin/zsh is not an executable file!\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:\n* Android OS version: 15\n* Device model: pixel 7 POS\n* zsh --version\nzsh 5.9 (aarch64-unknown-linux-android)\n","comments":6,"created_at":"2025-03-25T01:48:06Z","labels":["missing-info"],"number":4455,"title":"[Bug]: can't change shell to zsh","updated_at":"2026-04-30T07:17:01Z"} +{"author":"tetantes","body":"### Problem description\n\nI am having issues using termux I get this \" - \" they are been typed automatically please what can I do \nMessage me via email \nlaramummy2017@gmail.com\n\n### Steps to reproduce the behavior.\n\nIf you can help message me via email \nlaramummy2017@gmail.com\n\n### What is the expected behavior?\n\n![Image](https://github.com/user-attachments/assets/10af24b1-800c-4397-8c98-cc88ae7fee8e)\n\n### System information\n\n* Termux application version:0.118.1:\n* Android OS version: 13\n* Device model: Infinix Smart 8\n","comments":0,"created_at":"2025-03-21T05:37:02Z","labels":["bug report"],"number":4444,"title":"[Bug]: Multiple \" - \" whenever I use termux","updated_at":"2025-03-21T05:37:02Z"} +{"author":"Kazukkun","body":"### Problem description\n\nEverytime I try to use this command to get access to my files, nothing happens and the \"$\" disappear. Then I have to click \"Ctrl + C\" to make this \"$\" come back.\n\n![Image](https://github.com/user-attachments/assets/42062d3c-91dc-46aa-8602-8d328769c29f)\n![Image](https://github.com/user-attachments/assets/13c99819-7003-4a89-b9e0-404cd0da2c4b)\n\n### Steps to reproduce the behavior.\nJust try to run the code \"termux-setup-storage\"\n\n### What is the expected behavior?\nThe \"$\" disappear and then nothing happens\n\n### System information\n\n* Termux application version: 0.118.1\n* Android OS version: 11\n* Device model: Samsung A10\n","comments":23,"created_at":"2025-03-19T01:37:36Z","labels":["bug report"],"number":4440,"title":"[Bug]: The command \"termux-setup-storage\" is not working","updated_at":"2025-07-06T12:38:54Z"} +{"author":"destime224","body":"### Problem description\n\nTermux doen't apply colors.properties after restarting but does after `termux-reload-settings` command\n\n### Steps to reproduce the behavior.\n\nI have file \"~/.termux/colors.properties\":\n`background=#141122`\n\nWhen I exit Termux and start it my background is black\nBut after typing `termux-reload-settings` background's changed\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: googleplay.2025.01.18\n* Android OS version: HiOS 14.0.0\n* Device model: Tecno Pova 6 Neo (LI6)\n","comments":0,"created_at":"2025-03-02T08:28:08Z","labels":["bug report"],"number":4420,"title":"[Bug]: Termux doesn't apply colors.properties","updated_at":"2025-03-02T08:28:08Z"} +{"author":"octavo","body":"The samsung galaxy xcover pro android 13 one ui 5.1 termux 0.118.1 user would like to scroll a minimized keyboard manpage.","comments":0,"created_at":"2025-03-02T05:18:18Z","labels":["bug report"],"number":4418,"title":"kbdless manpage","updated_at":"2025-03-02T05:18:35Z"} +{"author":"Postaczech2021","body":"### Problem description\n\nI'm encountering a strange issue when running a Flask server within Termux on Android. Specifically, when I access the server via 127.0.0.1:5000 in Chrome, the request seems to hang. The browser just waits indefinitely. The request is only processed after I switch back to the Termux app, and then immediately switch back to Chrome. It's as if Termux needs focus to actually process the request from the Flask server. This behavior is obviously undesirable, as I don't want to manually switch between apps for every request.\n\nHas anyone else experienced this? Is it possible that this behavior is due to new security policies implemented in Android 15 (or later versions of Android)?\n\n### Steps to reproduce the behavior.\n\nI'm encountering a strange issue when running a Flask server within Termux on Android. Specifically, when I access the server via 127.0.0.1:5000 in Chrome, the request seems to hang. The browser just waits indefinitely. The request is only processed after I switch back to the Termux app, and then immediately switch back to Chrome. It's as if Termux needs focus to actually process the request from the Flask server. This behavior is obviously undesirable, as I don't want to manually switch between apps for every request.\n\nHas anyone else experienced this? Is it possible that this behavior is due to new security policies implemented in Android 15 (or later versions of Android)?\n\n### What is the expected behavior?\n\nWithout switch between termux and Chrome browser\n\n### System information\n\n* Termux application version:\n* Android OS version:\n* Device model:\n","comments":1,"created_at":"2025-02-28T05:56:38Z","labels":["bug report"],"number":4409,"title":"[Bug]: Flask Server in Termux Requires Focus Switch to Process Requests","updated_at":"2025-04-13T13:34:49Z"} +{"author":"twaik","body":"### Feature description\n\nTermux app should detect phantom process killer enabled via `getprop persist.sys.fflag.override.settings_enable_monitor_phantom_procs` or similar commands and show prompt with these links:\nhttps://github.com/termux/termux-app/issues/2366\nhttps://github.com/agnostic-apollo/Android-Docs/blob/master/en/docs/apps/processes/phantom-cached-and-empty-processes.md#commands-to-disable-phantom-process-killing-and-tldr\n\n### Additional information\n\nThere are many people coming to reddit, discord and matrix with this problem, probably having some error text if termux detects \"Signal 9\" kill will be helpful for them.","comments":0,"created_at":"2025-02-07T07:18:48Z","labels":[],"number":4388,"title":"[Feature]: termux-app should detect phantom process killer enabled","updated_at":"2025-02-07T07:18:48Z"} +{"author":"5igm","body":"### Problem description\n\n**Description**: \nWhen configuring `extra-keys` in `~/.termux/termux.properties`, the backslash (`\\`) character cannot be displayed or parsed correctly. Here are the details:\n\n\n\n---\n\n**Proposed Solutions**: \n1. Fix the parsing logic for backslashes in `extra-keys`. \n2. Update the documentation to clarify how to use special characters like `\\`. \n3. Support JSON format for `extra-keys` configuration.\n\n---\n\n**Additional Notes**: \nThis issue prevents users from using the backslash character in custom keyboard layouts, which is essential for many programming tasks. Any guidance or fix would be greatly appreciated!\n\n\n### Steps to reproduce the behavior.\n\n2. **Actual Behavior**: \n - If I use `'\\'`, the backslash does not appear on the keyboard. \n - If I use `'\\\\'`, Termux throws an error: \n ```\n Could not load and set the \"extra-keys\" property from the properties file: org.jsΓǪ\n ``` \n - If I use Unicode `'\\u005c'`, the same error occurs. \n - If I use JSON format (e.g., `{\"extra-keys\": [[\"ESC\",\"\\\\\\\\\",\"|\",\"[\",\"UP\",\"]\",\"PGUP\"]]}`), the configuration is not recognized.\n\n3. **Steps to Reproduce**: \n - Edit `~/.termux/termux.properties`: \n ```bash\n extra-keys = [['ESC','\\\\','|','[','UP',']','PGUP'], ['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]\n ``` \n - Run `termux-reload-settings`. \n - Observe the error or missing backslash on the keyboard.\n\n\n### What is the expected behavior?\n\n1. **Expected Behavior**: \n The backslash (`\\`) character should be displayed on the Termux virtual keyboard when configured in `extra-keys`.\n\n\n\n### System information\n\n4. **Additional Information**: \n - **Termux Version**: (Run `termux-info` to get this information) \n ```bash\n Application version:\n 0.118.0\n Packages CPU architecture:\n aarch64\n Subscribed repositories:\n # sources.list\n ...\n ``` \n - **Device**: (e.g., Samsung Galaxy S21, Android 12) \n - **Configuration File**: \n ```bash\n # ~/.termux/termux.properties\n extra-keys = [['ESC','\\\\','|','[','UP',']','PGUP'], ['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]\n ``` \n","comments":2,"created_at":"2025-02-05T03:17:40Z","labels":["bug report"],"number":4386,"title":"[Bug]: `extra-keys` configuration fails to parse backslash (`\\`) character in `termux.properties`","updated_at":"2025-06-06T22:08:30Z"} +{"author":"tallero","body":"### Feature description\n\nHello, I wanted to report I've finally managed to make the application self-updatable through the fallback Ur (fur) package manager, when using the DogeOS environment.\n\nNothing, seemed something quite significant to report. The application package on the [fur](https://github.com/themartiancompany/fur/tree/termux-bin) is called `termux-bin`. I'm sorry but I still haven't had the time to make the on-device build from source package available.\n\nI'm about to package the rest of the plugins as well.\n\n### Steps to reproduce the behavior.\n\nWell, this is not technically an issue, on the opposite. The problem if anything is that the default debian environment shipped with the app doesn't have this feature available.\n\n### What is the expected behavior?\n\nWell, I'd certainly like if termux shipped the DogeOS environment instead than the debian one, so to also gain sources compatibility with the desktop through the Ur.\n\n### System information\n\n* Termux application version: 0.118.1\n* Android OS version: DogeOS\n* Device model: HIP-01","comments":0,"created_at":"2025-02-04T15:17:47Z","labels":["bug report"],"number":4384,"title":"[Feature report]: self-updatable application","updated_at":"2025-02-04T15:25:18Z"} +{"author":"octavo","body":"The termux right-click more... context menu keeps flashing on screen when the user taps the onscreen keyboard after using gamesir controller function keys on samsung galaxy xcover pro android 13 termux 0.118.1 gamesir t3s.\n\n![Image](https://github.com/user-attachments/assets/d15ceb0e-7586-4741-8a0c-0477a1c7fa12)\n","comments":0,"created_at":"2025-02-03T13:47:03Z","labels":["bug report"],"number":4383,"title":"rc funct keys","updated_at":"2025-02-03T13:50:11Z"} +{"author":"OXY2DEV","body":"### Problem description\n\nText seem to appear a bit above the actual cell.\n\n![Image](https://github.com/user-attachments/assets/871330d8-4ee1-4ee5-9017-b9a6a32d0c87)\n\nThis mostly happens on the Y-axis(most noticable for `block characters` \u0026 `powerline symbols`) but can be notices on the X-axis as well(to a lesser extent, the character is slightly right than the actual cell).\n\n### Steps to reproduce the behavior.\n\n1. Open Termux\n2. Paste this `Γûê`(or this if you have nerd font `εé║`).\n3. Place cursor on top of the character.\n\n### What is the expected behavior?\n\nCharacters should be occupying the actual cell's space.\n\n----\n\nEven if fixing is not possible, It would be nice if you could tell me why this is happening(or how much the text get offset).\n\n### System information\n\n* Termux application version:\n* Android OS version: 13\n* Device model: Redmi 10C\n","comments":4,"created_at":"2025-01-30T03:49:22Z","labels":["bug report"],"number":4375,"title":"[Bug]: Character offset issue","updated_at":"2025-01-30T07:14:47Z"} +{"author":"hansm629","body":"### Problem description\n\nhttps://github.com/phoenixbyrd/Termux_XFCE\n\nWhen trying to install `Termux XFCE`, which creates a computing environment easily in a Termux environment, on `Termux 118.0 version`, a failure occurs.\n\n\nhttps://github.com/phoenixbyrd/Termux_XFCE/issues/80\n\nStrangely,\n\nit doesn't happen in `Termux 118.1 version`,\nand in 118.0 version, both `release build apk` and `Actions build apk` have the same symptoms.\n\nIt is a situation where the `USB storage mount` function is required, so the **`Actions build 118.0 version`** (`MANAGE_EXTERNAL_STORAGE` permission) must be used.\n\nCan it be fixed?\n\n### Steps to reproduce the behavior.\n\n![Image](https://github.com/user-attachments/assets/3b4e2455-6e69-4205-a051-b00c9f8f2949)\n\nhttps://github.com/user-attachments/assets/a8e784d1-2598-4c03-a2d5-ff2f19123ac2\n\n```\n[*] Termux primary host (worldwide) selected\n Changing main repository\n[*] Running apt update\nHit:1 https://packages-cf.termux.dev/apt/termux-main stable InRelease\nReading package lists... Done\nBuilding dependency tree... Done\n64 packages can be upgraded. Run 'apt list --upgradable' to see them.\nFailed to set up Termux storage. Exiting.\nPlease clear termux data in app info setting and run setup again\nERROR: An issue occurred. Please check /data/data/com.termux/files/home/termux_setup.log for details.\n~ $\n``` \n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: v0.118.0+5af0784\n* Android OS version: 14\n* Device model: SM-S926N\n","comments":8,"created_at":"2025-01-29T11:09:39Z","labels":["bug report"],"number":4373,"title":"[Bug]: Termux XFCE installation failing in version 118.0","updated_at":"2025-02-14T09:40:26Z"} +{"author":"raulvasquez","body":"### Feature description\n\nI am coming from the archived fork termux-monet. One of its nice features was having multiple panels of extra_keys. You would swipe like you do to get to the text input box, but there was a second set of extra keys with your Fn keys and some addl special characters . Looking at https://github.com/Termux-Monet/termux-monet/blob/master/termux-shared/src/main/java/com/termux/shared/termux/settings/properties/TermuxPropertyConstants.java I think this is where the code is. \n\n```\nDEFAULT_IVALUE_EXTRA_KEYS = \"[['ESC', '/', {key: '|', popup: '-'}, 'HOME', 'UP', 'END', 'PGUP', 'PASTE'], ['TAB', {key: 'CTRL', popup: 'SHIFT'}, 'ALT', 'LEFT', 'DOWN', 'RIGHT', 'PGDN', {key: 'KEYBOARD', popup: {macro: 'CTRL c'}}]]\";\nDEFAULT_IVALUE_EXTRA_KEYS2 = \"[[F1, F2, F3, F4, F5, F6, F7, F8, F9, F10], ['[', ']', '{', '}', '$', '~', '=', -, _, '\\\"']]\";\n```\n\nDoes termux already support multiple extra key panels? Or would this have to be ported over?\n\n### Additional information\n\nYes. this feature exists the the termux-monet fork.","comments":0,"created_at":"2025-01-23T17:40:12Z","labels":[],"number":4365,"title":"[Feature]: Multiple Extra Key Panels?","updated_at":"2025-01-23T17:40:12Z"} +{"author":"Kyamel","body":"### Feature description\n\nI need an option to disable this menu on top of keyboard. If already there's one, please let me know, as I didn't find it. If there's not, I would like to add a toggle to it on the: Settings \u003e Termux \u003e Terminal View.\n\n![Image](https://github.com/user-attachments/assets/646a253f-485d-4f85-99ff-dc7cc6778277)\n\nI need it mainly to use with an external physical keyboard or with a Hacker's virtual keyboard. This menu is only useful when using standard Google's keyboard or similar.\n\n### Additional information\n\nNone","comments":1,"created_at":"2025-01-20T14:38:46Z","labels":[],"number":4362,"title":"[Feature]: Toggle over keyboard keys","updated_at":"2025-01-23T18:51:25Z"} +{"author":"finagolfin","body":"### Feature description\n\nIt seems like they've done a lot of work to build [a terminal app and renderer library in zig](https://github.com/ghostty-org/ghostty/blob/main/README.md), maybe it would make more sense to make this app a thin Android shell around that library? I think it would be much faster and more full-featured than our current Java code.\n\n### Additional information\n\nThe only drawback I see is that I'm not sure how well zig currently supports Android, but it certainly seems a much better language than Java.\r\n\r\nObviously, this is not a decision to be taken lightly, so it would just depend on if major contributors to this repo like @agnostic-apollo and @fornwall want to do that work.","comments":9,"created_at":"2025-01-15T16:57:36Z","labels":[],"number":4353,"title":"Use SwiftTerm instead?","updated_at":"2025-07-14T14:02:26Z"} +{"author":"scipply","body":"### Problem description\n\nit seems like when I tried to setup the storage with the script, it doesnt always work. Im not sure but I think this happened also to a reddit user while trying to install mobox. when he tried to install mobox, it seems like it failed to find the ~/storage/shared/ folder even tho the script automatically tries to remake the storage folder. when I tried to setup the storage (I didnt have it before bc all I need is an alias for cd /storage/emulated/0/), it probably crashed silently or idk bc I didnt get any output from it. I wanted to see what the script does, so I nano ed it and just left without modifying the file. after that I tried the script again and it worked properly. you can check the log to see exactly what I did\r\n\r\n[termux-report_issue_from_transcript.log](https://github.com/user-attachments/files/18388595/termux-report_issue_from_transcript.log)\r\n\n\n### Steps to reproduce the behavior.\n\njust setup the termux storage\n\n### What is the expected behavior?\n\nhave the ~/storage/ folder already made\n\n### System information\n\n* Termux application version: latest as of the time of writing this\r\n* Android OS version: 9\r\n* Device model: sm-g950f\r\n\r\nmore info in the log\r\n","comments":0,"created_at":"2025-01-12T08:28:39Z","labels":["bug report"],"number":4347,"title":"[Bug]: termux-setup-storage fails silently and randomly","updated_at":"2025-01-12T08:28:39Z"} +{"author":"mablue","body":"### Feature description\r\n\r\nPlease append Accessibility to visually impaired people\r\nTo read line by line by swapping fingers right and left in talkback\r\nThanks\r\n\r\n### Additional information\r\n\r\nThis is the screenrecord by talkback enabled device\r\n\r\nhttps://github.com/user-attachments/assets/22048000-6720-4029-96d9-7cc853c828b3\r\n\r\n**Tags:** Accessibility, Terminal, Visually Impaired, eSpeak, Text-to-Speech","comments":4,"created_at":"2024-12-17T15:44:30Z","labels":[],"number":4304,"title":"[Feature]: Enhancing Termux Accessibility for Visually Impaired Users","updated_at":"2024-12-27T16:34:07Z"} +{"author":"jace","body":"### Feature description\n\nThe [xterm control sequence for mouse tracking](https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking) (code 1000 or 1006) also captures scroll events, reporting them as button codes 64 and 65. This is necessary for apps in alternate screen mode, but hurts usability in regular screen mode because it blocks viewport scrollback.\r\n\r\nTermux's behaviour is consistent with other terminal emulators, but may need reconsidering. On a touchscreen, it's far easier to move the cursor in a readline prompt by tapping the screen than by using the soft arrow keys. Many REPL toolkits already have optional mouse support (for example, this [zsh plugin](http://stchaz.free.fr/mouse.zsh)), but turning on the feature blocks scrollback, and worse -- an accidental swipe of the screen may invoke unwanted functionality. Eg: the zsh plugin remaps scroll events to command history navigation, so a sloppy tap could accidentally erase user input.\r\n\r\nIdeas for how to make this better:\r\n\r\n1. Add a preference for mouse tracking: if the display is not in alternate screen mode, turning on mouse tracking will not capture finger dragging as scroll events. #1384 has a conflicting proposal for reporting finger dragging as mouse move events, but I feel these are distinct expectations based on alt screen mode, so both options could co-exist.\r\n\r\n2. Implement the [passive mouse tracking extension](https://github.com/contour-terminal/vt-extensions/blob/master/passive-mouse-tracking.md) from Contour terminal. (I brought this up in #612 too.) This is entirely new functionality however. It's not a stable spec and will need implementations in every REPL, but it'll (hopefully) work across terminal apps as a new modern standard.\r\n\r\nMaybe Termux can implement the user preference while waiting for the spec to mature? It seems like an easy fix for a huge usability gain. I'm not aware of any non-fullscreen app that benefits from blocking scrollback.\r\n\n\n### Additional information\n\nProposed VT extensions from Contour Terminal: https://github.com/contour-terminal/vt-extensions","comments":7,"created_at":"2024-12-16T08:39:49Z","labels":[],"number":4302,"title":"[Feature]: Mouse tracking shouldn't block scrollback","updated_at":"2024-12-27T08:39:31Z"} +{"author":"Rufim","body":"### Problem description\r\n\r\nI not 100% sure when it happened. Seems that when I return focus go desktop X11 from other screen\r\n\r\n**User Action**: `crash report` \r\n**Sender**: `TermuxActivity` \r\n**Report Timestamp**: `2024-12-09 12:27:05.131 UTC` \r\n##\r\n\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]` \r\n**Crash Timestamp**: `2024-12-09 12:27:00.010 UTC` \r\n\r\n**Crash Message**:\r\n```\r\nAttempt to read from field 'int com.android.server.inputmethod.InputMethodManagerService$ClientState.mUid' on a null object reference in method 'boolean com.android.server.inputmethod.InputMethodManagerService.isImeClientFocused(android.os.IBinder, com.android.server.inputmethod.InputMethodManagerService$ClientState)'\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\njava.lang.NullPointerException: Attempt to read from field 'int com.android.server.inputmethod.InputMethodManagerService$ClientState.mUid' on a null object reference in method 'boolean com.android.server.inputmethod.InputMethodManagerService.isImeClientFocused(android.os.IBinder, com.android.server.inputmethod.InputMethodManagerService$ClientState)'\r\n\tat android.os.Parcel.createExceptionOrNull(Parcel.java:3063)\r\n\tat android.os.Parcel.createException(Parcel.java:3041)\r\n\tat android.os.Parcel.readException(Parcel.java:3024)\r\n\tat android.os.Parcel.readException(Parcel.java:2966)\r\n\tat com.android.internal.view.IInputMethodManager$Stub$Proxy.showSoftInput(IInputMethodManager.java:855)\r\n\tat android.view.inputmethod.IInputMethodManagerGlobalInvoker.showSoftInput(IInputMethodManagerGlobalInvoker.java:306)\r\n\tat android.view.inputmethod.InputMethodManager.showSoftInput(InputMethodManager.java:2194)\r\n\tat android.view.inputmethod.InputMethodManager.showSoftInput(InputMethodManager.java:2156)\r\n\tat android.view.inputmethod.InputMethodManager.showSoftInput(InputMethodManager.java:2091)\r\n\tat com.termux.shared.view.KeyboardUtils.showSoftKeyboard(KeyboardUtils.java:71)\r\n\tat com.termux.app.terminal.TermuxTerminalViewClient.lambda$getShowSoftKeyboardRunnable$0$TermuxTerminalViewClient(TermuxTerminalViewClient.java:651)\r\n\tat com.termux.app.terminal.-$$Lambda$TermuxTerminalViewClient$BE9D5qAMZz5Fz7pW2tSQZk2KB5w.run(Unknown Source:2)\r\n\tat android.os.Handler.handleCallback(Handler.java:958)\r\n\tat android.os.Handler.dispatchMessage(Handler.java:99)\r\n\tat android.os.Looper.loopOnce(Looper.java:206)\r\n\tat android.os.Looper.loop(Looper.java:295)\r\n\tat android.app.ActivityThread.main(ActivityThread.java:8702)\r\n\tat java.lang.reflect.Method.invoke(Native Method)\r\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)\r\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.119.0-beta.1` \r\n**VERSION_CODE**: `1020` \r\n**UID**: `10267` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `true` \r\n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c11,c257,c512,c768` \r\n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c11,c257,c512,c768` \r\n**SE_INFO**: `default:targetSdkVersion=28:complete` \r\n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \r\n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \r\n**APK_RELEASE**: `Github` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `B6DA01480EEFD5FBF2CD3771B8D1021EC791304BDD6C4BF41D3FAABAD48EE5E1` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `5.10.168-android12-9-g7395a3866bb1` \r\n**SDK_INT**: `34` \r\n**RELEASE**: `14` \r\n**ID**: `UKQ1.231025.001` \r\n**DISPLAY**: `TB320FC_CN_OPEN_USER_Q00031.0_U_ZUI_16.0.336_ST_240626` \r\n**INCREMENTAL**: `TB320FC_CN_OPEN_USER_Q00031.0_U_ZUI_16.0.336_ST_240626` \r\n**SECURITY_PATCH**: `2024-05-05` \r\n**IS_DEBUGGABLE**: `0` \r\n**IS_TREBLE_ENABLED**: `true` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n**MAX_PHANTOM_PROCESSES**: - (*Requires `DUMP` and `PACKAGE_USAGE_STATS` permission*) \r\n**MONITOR_PHANTOM_PROCS**: `true` \r\n**DEVICE_CONFIG_SYNC_DISABLED**: - \r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `LENOVO` \r\n**BRAND**: `Lenovo` \r\n**MODEL**: `TB320FC` \r\n**PRODUCT**: `TB320FC_PRC` \r\n**BOARD**: `taro` \r\n**HARDWARE**: `qcom` \r\n**DEVICE**: `TB320FC` \r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \r\n##\r\n\r\n### Steps to reproduce the behavior.\r\n\r\n## Report Info\r\nI not 100% sure when it happened. Seems that when I return focus go desktop X11 from other screen\r\n\r\n### What is the expected behavior?\r\n\r\nNot crash\r\n\r\n### System information\r\n\r\n* Termux application version: 0.119.0-beta.1\r\n* Android OS version: 14\r\n* Device model: TB320FC","comments":1,"created_at":"2024-12-09T19:25:46Z","labels":["bug report"],"number":4294,"title":"[Bug]: Random crash","updated_at":"2025-01-08T08:16:05Z"} +{"author":"tathastu871","body":"### Feature description\n\nAny termux-dev think about implementing + - zoom in out buttons in special keys, for zooming terminal, currently using termux with one hand is difficult to zoom\r\n\r\nCurrently with only pinch zoom its difficult with one hand only chances phone falling increases, \r\n\r\nAlso termux wiki says \" zoom by double tap\" --\u003e but not working\r\n\n\n### Additional information\n\n?","comments":0,"created_at":"2024-12-03T13:38:31Z","labels":[],"number":4286,"title":"Screen Zoom support for one hand use","updated_at":"2024-12-03T13:38:31Z"} +{"author":"KimetsuAndrea","body":"### Problem description\n\n\r\nhttps://github.com/user-attachments/assets/5447006d-eb13-4068-bbc0-8c798023dc3d\r\n\r\n\n\n### Steps to reproduce the behavior.\n\nN/A\n\n### What is the expected behavior?\n\nN/A\n\n### System information\n\n* Termux application version: 0.118.1\r\n* Android OS version:10.5\r\n* Device model:V2027 (VIVO)\r\n\r\n![Screenshot_2024_1129_062929](https://github.com/user-attachments/assets/c0679473-7a61-4597-9c20-c8502f9f4912)","comments":1,"created_at":"2024-11-28T22:31:44Z","labels":["bug report"],"number":4283,"title":"[Bug]: Crashing after running wine(and opening wps program) in proot-distro (such as debian) using DE XFCE","updated_at":"2024-11-28T23:08:28Z"} +{"author":"alhansrisuk","body":"### Problem description\n\nhello, i am having trouble with using caps lock as ctrl for copying / pasting (ctrl-c and ctrl-v) in termux. i am running it on a galaxy s9 tab with the slim keyboard attachment. it works fine in the OS since i've remapped Caps Lock to Ctrl in the System Settings under Physical Keyboard but it doesn't seem to be recognized in termux or termux x11. i'm not sure if this issue is specific to the slim keyboard cover from Samsung. \r\n\r\ni'm unsure if the on screen keyboard is overriding the physical input for some reason but i've tried enabling the flag\r\n`enforce-char-based-input = true` in my `termux.properties`\n\n### Steps to reproduce the behavior.\n\nconnect physical keyboard to device and go to System -\u003e General management -\u003e Physical keyboard -\u003e Customize keys\r\n\r\nremap Caps lock to Ctrl\r\n\r\ngo into termux and try to paste from clipboard using Caps + V\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.1\r\n* Android OS version: 14\r\n* Device model: Tab S9\r\n","comments":0,"created_at":"2024-11-27T16:53:02Z","labels":["bug report"],"number":4281,"title":"[Bug]: termux not recognizing caps-lock as ctrl on physical keyboard","updated_at":"2024-11-27T21:20:40Z"} +{"author":"UlyssesZh","body":"### Feature description\n\nI hope I can have two `colors.properties` files separately for light and dark theme depending on system settings.\n\n### Additional information\n\nN/A.","comments":3,"created_at":"2024-11-17T19:57:40Z","labels":[],"number":4258,"title":"[Feature]: colors.properties separate for light and dark theme","updated_at":"2025-06-27T01:33:13Z"} +{"author":"HusniMuhammad","body":"### Problem description\r\n\r\nPossible Due to this missing permission \r\n\r\n[https://developer.android.com/reference/android/Manifest.permission#EXPAND_STATUS_BAR](https://developer.android.com/reference/android/Manifest.permission#EXPAND_STATUS_BAR)\r\n\r\n```bash\r\nException occurred while executing 'expand-notifications':\r\njava.lang.SecurityException: StatusBarManagerService: Neither user 10472 nor current process has android.permission.EXPAND_STATUS_BAR.\r\n at android.app.ContextImpl.enforce(ContextImpl.java:2018)\r\n at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:2046)\r\n at com.android.server.statusbar.StatusBarManagerService.enforceExpandStatusBar(StatusBarManagerService.java:1076)\r\n at com.android.server.statusbar.StatusBarManagerService.expandNotificationsPanel(StatusBarManagerService.java:556)\r\n at com.android.server.statusbar.StatusBarShellCommand.runExpandNotifications(StatusBarShellCommand.java:113)\r\n at com.android.server.statusbar.StatusBarShellCommand.onCommand(StatusBarShellCommand.java:54)\r\n at android.os.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:98)\r\n at android.os.ShellCommand.exec(ShellCommand.java:44)\r\n at com.android.server.statusbar.StatusBarManagerService.onShellCommand(StatusBarManagerService.java:1446)\r\n at android.os.Binder.shellCommand(Binder.java:929)\r\n at android.os.Binder.onTransact(Binder.java:813)\r\n at com.android.internal.statusbar.IStatusBarService$Stub.onTransact(IStatusBarService.java:1145)\r\n at android.os.Binder.execTransactInternal(Binder.java:1159)\r\n at android.os.Binder.execTransact(Binder.java:1123)\r\n```\r\n\r\n\r\n### Steps to reproduce the behavior.\r\n\r\n```bash\r\ncmd statusbar expand-notifications\r\n```\r\n### AND\r\n```bash\r\ncmd statusbar collapse\r\n```\r\n\r\n\r\n### What is the expected behavior?\r\n\r\nExpansion of notification-bar or closing of notification-bar\r\n\r\n### System information\r\n\r\n### System information\r\nTermux Variables:\r\nTERMUX_API_APP__VERSION_NAME=0.50.1\r\nTERMUX_APP_PACKAGE_MANAGER=apt\r\nTERMUX_APP__AM_SOCKET_SERVER_ENABLED=true\r\nTERMUX_APP__APK_PATH=/data/app/~~LkYORvIv7C6UCW4kjISZRQ==/com.termux-9Wz4ANftMUKJoKDOTRGxCA==/base.apk\r\nTERMUX_APP__APK_RELEASE=GITHUB\r\nTERMUX_APP__FILES_DIR=/data/user/0/com.termux/files\r\nTERMUX_APP__IS_DEBUGGABLE_BUILD=true\r\nTERMUX_APP__IS_INSTALLED_ON_EXTERNAL_STORAGE=false\r\nTERMUX_APP__PACKAGE_MANAGER=apt\r\nTERMUX_APP__PACKAGE_NAME=com.termux\r\nTERMUX_APP__PACKAGE_VARIANT=apt-android-7\r\nTERMUX_APP__PID=29502\r\nTERMUX_APP__SE_FILE_CONTEXT=u:object_r:app_data_file:s0:c216,c257,c512,c768\r\nTERMUX_APP__SE_INFO=default:targetSdkVersion=28:complete\r\nTERMUX_APP__SE_PROCESS_CONTEXT=u:r:untrusted_app_27:s0:c216,c257,c512,c768\r\nTERMUX_APP__TARGET_SDK=28\r\nTERMUX_APP__UID=10472\r\nTERMUX_APP__USER_ID=0\r\nTERMUX_APP__VERSION_CODE=118\r\nTERMUX_APP__VERSION_NAME=0.118.0+062c977\r\nTERMUX_MAIN_PACKAGE_FORMAT=debian\r\nTERMUX_VERSION=0.118.0+062c977\r\nTERMUX__USER_ID=0\r\nPackages CPU architecture:\r\narm\r\nSubscribed repositories:\r\n# sources.list\r\ndeb https://packages.termux.dev/apt/termux-main stable main\r\nUpdatable packages:\r\ncurl/stable 8.11.0 arm [upgradable from: 8.10.1-2]\r\ngpgme/stable 1.24.0 arm [upgradable from: 1.23.2-3]\r\ngpgmepp/stable 1.24.0 arm [upgradable from: 1.23.2-3]\r\ninetutils/stable 2.5 arm [upgradable from: 2.4-2]\r\nlibc++/stable 27c arm [upgradable from: 27b]\r\nlibcurl/stable 8.11.0 arm [upgradable from: 8.10.1-2]\r\nlibexpat/stable 2.6.4 arm [upgradable from: 2.6.3]\r\nlibheif/stable 1.19.2 arm [upgradable from: 1.19.1]\r\nlibmediainfo/stable 24.11 arm [upgradable from: 24.06-1]\r\nmediainfo/stable 24.11 arm [upgradable from: 24.06-1]\r\ntermux-tools version:\r\n1.44.3\r\nAndroid version:\r\n11\r\nKernel build information:\r\nLinux localhost 4.14.193+-ab478 #1 SMP PREEMPT Thu May 9 16:42:40 CST 2024 armv8l Android\r\nDevice manufacturer:\r\nrealme\r\nDevice model:\r\nRMX3231\r\nLD Variables:\r\nLD_LIBRARY_PATH=\r\nLD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so\r\nInstalled termux plugins:\r\ncom.termux.api versionCode:51\r\ncom.termux.widget versionCode:13","comments":2,"created_at":"2024-11-09T17:59:55Z","labels":["bug report"],"number":4248,"title":"[Bug]: expand/collapse notification-bar using `cmd` failed ","updated_at":"2025-02-10T18:13:45Z"} +{"author":"jinde98","body":"### Problem description\n\n$ pkg update\r\nHit:2 https://packages-cf.termux.dev/termux-main-21 stable InRelease\r\nErr:1 https://termux.dev/game-packages-21-bin games InRelease\r\n The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B0076E490B71616B\r\nErr:3 https://termux.dev/science-packages-21-bin science InRelease\r\n The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B0076E490B71616B\r\nReading package lists... Done\r\nW: GPG error: https://termux.dev/game-packages-21-bin games InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B0076E490B71616B\r\nE: The repository 'https://termux.org/game-packages-21-bin games InRelease' is not signed.\r\nN: Updating from such a repository can't be done securely, and is therefore disabled by default.\r\nN: See apt-secure(8) manpage for repository creation and user configuration details.\r\nW: GPG error: https://termux.dev/science-packages-21-bin science InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B0076E490B71616B\r\nE: The repository 'https://termux.org/science-packages-21-bin science InRelease' is not signed.\r\nN: Updating from such a repository can't be done securely, and is therefore disabled by default.\r\nN: See apt-secure(8) manpage for repository creation and user configuration details.\n\n### Steps to reproduce the behavior.\n\nUnable to update and install packages\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: termux-app_v0.119.0-beta.1+apt-android-5-github-debug_arm64-v8a.apk\r\n* Android OS version: 6.0.1\r\n* Device model: coo1 \r\n","comments":4,"created_at":"2024-11-04T12:52:46Z","labels":["bug report"],"number":4243,"title":"[Bug]: the public key is not available","updated_at":"2025-03-02T08:17:20Z"} +{"author":"offwa","body":"### Problem description\n\nEvery font i downloaded had misaligned powershell symbols. The font in the screenshot is Cozette\r\n![Screenshot_20241025_194321](https://github.com/user-attachments/assets/8cbd55ae-ec7b-4ab4-b6ef-48eb6bb9dc20)\n\n### Steps to reproduce the behavior.\n\nPrint any powershell symbol \n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.119.0-beta.1\r\n* Android OS version: 10\r\n* Device model: AGR-W09\r\n","comments":0,"created_at":"2024-10-25T11:52:31Z","labels":["bug report"],"number":4232,"title":"[Bug]: Slightly misaligned powershell symbols","updated_at":"2024-10-25T11:52:31Z"} +{"author":"PhilippKaesgen","body":"### Feature description\n\nA possibility to remap capslock to esc or ctrl would be highly appreciated. I prefer to use an external bluetooth keyboard while tinkering in termux and with this functionality I could match the key bindings with the bindings on my other systems.\n\n### Additional information\n\nThe functionality would ideally be equivalent to \r\n\r\n- [caps2esc](https://github.com/osamuaoki/interception-caps2esc) or \r\n- xmodmap, \r\n \r\nfor instance.","comments":3,"created_at":"2024-10-19T22:35:33Z","labels":[],"number":4218,"title":"[Feature]: Hack key bindings","updated_at":"2024-10-23T15:18:02Z"} +{"author":"532910","body":"### Feature description\n\nPlease remove termux from the recent tasks list on exit. It looks like it could done with `finishAndRemoveTask`.\n\n### Additional information\n\npossible related issue: https://github.com/termux/termux-app/issues/4103\r\nlinphone uses this feature on quit action","comments":0,"created_at":"2024-10-18T11:35:28Z","labels":[],"number":4214,"title":"[Feature]: remove from the recent tasks list on exit","updated_at":"2024-10-18T11:35:28Z"} +{"author":"Spiderfffun","body":"### Feature description\n\nThe buttons just look off when using certain themes, it would look way better if they at least followed the foreground/background from color.properties\n\n### Additional information\n\nI believe https://github.com/Termux-Monet/termux-monet (archived) had something like this.","comments":3,"created_at":"2024-10-13T07:31:20Z","labels":[],"number":4198,"title":"[Feature]: Make the color of the extra buttons changeable","updated_at":"2025-12-21T07:01:24Z"} +{"author":"TDGalea","body":"### Feature description\n\nFirst of all, thank you for all the work that goes into Termux. I can't overstate how valuable this app is!\r\nSecond of all, I hope you don't mind me putting both these requests in one - I didn't want to spam!\r\n\r\nAnyway, my requests to improve Android / Fire TV usability are as follows:\r\n\r\n**1: Set cursor to \"pointer\" for Fire TV devices**\r\n\r\nFire TV's default cursor is a hollow circle. It's _okay_, but when you decrease text size, it's easy to mis-click in, say, Midnight Commander.\r\n\r\nI read that adding this to the \u003cactivity\u003e tag in AndroidManifest.xml _should_ do the trick:\r\n\r\n`\u003cmeta-data android:name=\"com.amazon.input.cursor\" android:value=\"pointer\"/\u003e`\r\n\r\nI did try this myself, but the signatures thing prevents installation (perhaps because I left the plugins installed), and that goes beyond my brain capacity for now.\r\n\r\n**2: Allow completely disabling the bottom OSK bar**\r\n\r\nWhen using an external keyboard, the bottom extra-keys bar pointlessly eats up space. I've read this can be disabled, but haven't had luck finding a way to do so. I believe this would be a valuable option either within the main app settings, or perhaps an option settable within `~/.termux/termux.properties`.\n\n### Additional information\n\nIn JuiceSSH, tapping the terminal while the software keyboard is on-screen will toggle the extra keys bar. While this is perfectly functional, I'm not a _huge_ fan of it being that easy to toggle, as it can be done accidentally.","comments":3,"created_at":"2024-10-09T22:08:27Z","labels":[],"number":4192,"title":"Two changes for Android/Fire TV users","updated_at":"2025-10-02T06:24:55Z"} +{"author":"tdadvocate","body":"### Feature description\n\nThe touch screen navigation is terrible and almost as completely counterintuitive as possible. There should be a quick navigation bar at the top of the display to more easily open the sessions window as well as the \"more\" window. All it takes is shrinking the overall terminal window by a couple percent and then users can actually tell that there is a way to open more than one session, kill the session, heck even just get help on how to use the application. Had I not accidentally found the sessions window because I tried to back swipe hoping it would kill my session, I wouldn't have even known that it existed. This app seems really useful, but due to the app being nearly impossible to navigate without way too much time reading a wiki, it has immediately become useless to me.\n\n### Additional information\n\nPretty much every terminal client has an easy and obvious navigation system that requires no external interaction or learning curve. Qute and Terminus are 2 great examples of how quick and easy it is to start, edit, switch between, and close sessions as well as all their other navigation features. Terminus even has a tab system for tablets which adds to the user experience.","comments":2,"created_at":"2024-10-08T06:33:07Z","labels":[],"number":4189,"title":"[Feature]: Actual Navigation with Touch Screen","updated_at":"2025-01-14T11:42:29Z"} +{"author":"vrtareg","body":"### Problem description\n\nWhen working in terminal it is sometimes necessary to rotate phone to landscape mode to see the full line of the text or log tail.\r\n\r\nIn the past versions it was working correctly but recently started to break and view is getting like ladder when rotating as buffer likes stores data with spaces to keep formatting rather than new lines.\r\n\r\nAlso thisis breaking text copy as there are additional spaces added to the end of the lines and it doesn't allow proper formatting to take place.\r\n\r\nWhen copy pasting code it breaks logic.\r\n\r\nP.S. Not sure if this is reported so far. \n\n### Steps to reproduce the behavior.\n\nTail or cat long lines containing file.\r\n\r\nRotate phone and check that lines are correctly aligned against the left side \n\n### What is the expected behavior?\n\nText is formatted on the left side of the screen when tailing or catting the file, selecting part of the screen and pasting the mail or text editor should not have trailing spaces. \r\n\r\ntail -F logfile\r\ncat logfile\n\n### System information\n\n* Termux application version: 0.118.1\r\n* Android OS version: 14\r\n* Device model: Xiaomi Mi11T\r\n\r\n```\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.1` \r\n**VERSION_CODE**: `1000` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `false` \r\n**APK_RELEASE**: `F-Droid` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `5.4.259-qgki-g529d0187d344` \r\n**SDK_INT**: `34` \r\n**RELEASE**: `14` \r\n**ID**: `UKQ1.231207.002` \r\n**DISPLAY**: `UKQ1.231207.002 release-keys` \r\n**INCREMENTAL**: `V816.0.5.0.UKDEUXM` \r\n**SECURITY_PATCH**: `2024-09-01` \r\n**IS_DEBUGGABLE**: `0` \r\n**IS_TREBLE_ENABLED**: `true` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `Xiaomi` \r\n**BRAND**: `Xiaomi` \r\n**MODEL**: `2107113SG` \r\n**PRODUCT**: `vili_eea` \r\n**BOARD**: `vili` \r\n**HARDWARE**: `qcom` \r\n**DEVICE**: `vili` \r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \r\n##\r\n\r\n\r\n## Important Links\r\n\r\n### Github\r\n\r\n[Termux](https://github.com/termux/termux-app) \r\n[Termux:API](https://github.com/termux/termux-api) \r\n[Termux:Boot](https://github.com/termux/termux-boot) \r\n[Termux:Float](https://github.com/termux/termux-float) \r\n[Termux:Styling](https://github.com/termux/termux-styling) \r\n[Termux:Tasker](https://github.com/termux/termux-tasker) \r\n[Termux:Widget](https://github.com/termux/termux-widget) \r\n[termux-packages](https://github.com/termux/termux-packages) \r\n\r\n### Email\r\n\r\n[support@termux.dev](mailto:support@termux.dev) \r\n\r\n### Reddit\r\n\r\n[r/termux](https://www.reddit.com/r/termux) \r\n\r\n### Wiki\r\n\r\n[Termux Wiki](https://wiki.termux.com) \r\n[Termux](https://github.com/termux/termux-app/wiki) \r\n[termux-packages](https://github.com/termux/termux-packages/wiki) \r\n##\r\n\r\n```","comments":1,"created_at":"2024-10-04T08:21:19Z","labels":["bug report"],"number":4183,"title":"Text formatting breaking when phone rotated and copy has additional spaces ","updated_at":"2024-10-04T08:22:46Z"} +{"author":"pamrg1","body":"### Problem description\n\nIn the virtual keyboard when I press Ctrl followed by extra keys row characters it does not get detected by termux. \r\nIf I type Ctrl Semicolon then only the Semicolon gets detected. That is the case whether is use the Semicolon from the extra keys row or from the keyboard below.\n\n### Steps to reproduce the behavior.\n\nI used \"showkey -a\" on the command line to confirm the behaviour.\n\n### What is the expected behavior?\n\nCtrl key to be detected with all characters\n\n### System information\n\n* Termux application version: 0.118.1\r\n* Android OS version: 14\r\n* Device model: ONEPLUS A6003\r\n","comments":0,"created_at":"2024-09-30T23:21:35Z","labels":["bug report"],"number":4178,"title":"[Bug]: virtual keyboard: Ctrl key followed by characters in the extra keys row is not detected","updated_at":"2024-09-30T23:21:35Z"} +{"author":"Smit-TV","body":"### Feature description\n\nthis function very supported for talkback users\n\n### Additional information\n\n---\r\n\r\nThe accessibility issue of Termux for TalkBack is very disappointing. \r\n- I have programmed for Android and can suggest solutions: \r\n1) Use EditText instead of View. \r\n However, this method has a drawback, for example: \r\n private CharSequence getText would need to be changed to public Editable getText. \r\n2) Use AccessibilityEvent#TYPE_ANNOUNCEMENT (https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent#TYPE_ANNOUNCEMENT). \r\n Using this method doesn't require you to be a genius; you just need to handle the KeyEvent.KEYCODE_DEL event (https://developer.android.com/reference/android/view/KeyEvent#KEYCODE_DEL). \r\n - We can simply announce the deleted text or character. \r\n3) Add the ability to select text using the volume keys. \r\n In general, Android screen readers work like this with EditText, but unfortunately, we have View instead :( \r\n We should also remember to announce the selected character. \r\n4) How about adding descriptions for the states of the Ctrl, Alt, Caps, etc. keys? AccessibilityNodeInfo#setStateDescription (https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo#setStateDescription(java.lang.CharSequence)). \r\n Simply set the state to on and off when pressed and off when the app starts.\r\n\r\n- I hope at least points 2 and 3 can be implemented by someone; overall, it would be sufficient. \r\nI wish the project to flourish.\r\n\r\n--- \r\n\r\nLet me know if you need any further assistance!","comments":0,"created_at":"2024-09-28T23:13:40Z","labels":[],"number":4175,"title":"Proposal for adding accessibility in Termux","updated_at":"2024-09-28T23:13:40Z"} +{"author":"mglh","body":"### Feature description\n\n[Unexpected Keyboard](https://github.com/Julow/Unexpected-Keyboard) offers, among others, two \"custom\" keys that paste the content of the system clipboard:\r\n\r\n![1000000879_llcrop](https://github.com/user-attachments/assets/6c05d4fe-198b-48ba-956b-65750df15be6)\r\n\r\nSwiping to lower right on the \"s\" key does paste including formatting. \r\nSwiping to lower right on the \"g\" key does paste plain text. \r\n\r\n_The Termux app does not respond to either of them two._\r\n\r\nMy feature request is to make the Termux app respond to those two \"custom\" keys as it would be expected.\r\n\r\n(However, I assume that pasting text including formatting does not make sense in the Termux App. Or does it?)\n\n### Additional information\n\nAt least these two \"custom\" keys respond as to be expected in common edit fields.","comments":0,"created_at":"2024-09-25T15:04:16Z","labels":[],"number":4169,"title":"[Feature]: Enable \"paste\" keys of \"Unexpected Keyboard\"","updated_at":"2024-09-25T15:04:16Z"} +{"author":"xronin01","body":"### Problem description\n\n![Screenshot_20240918-203954_Termux](https://github.com/user-attachments/assets/5a8e06d7-c8f0-491a-8f49-acccf3eee63b)\r\n\n\n### Steps to reproduce the behavior.\n\n.\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.0+36d811e\r\n* Android OS version: 11\r\n","comments":3,"created_at":"2024-09-18T23:50:29Z","labels":["enhancement"],"number":4157,"title":"[Bug]: termux.properties doesn't work when it's a symlink","updated_at":"2024-09-19T00:02:58Z"} +{"author":"minstrike520","body":"### Feature description\n\nMy request is to add custom key repeat speed settings for hard keyboard.\r\n\r\nWhen I'm using nvim on termux with my tablet (with hard keyboard attatched), I found that the cursor movement is kind of slow. After a little bit googling, I learned that how fast is vim's cursor depends on **key repeat speed** of the terminal. With this in mind, I looked for key repeat speed settings, but I couldn't find any.\r\n\r\nIf this feature is implemented, those who use hard keyboard (and myself) may benefit from this.\n\n### Additional information\n\nRelated discussions are here: \r\n1. https://stackoverflow.com/questions/23078078/speed-up-vim-cursor-moving-through-j-k\r\n2. https://www.reddit.com/r/termux/comments/rbbxre/xset_alternative_for_termux/\r\nn\r\nIf the question of the second one is solved, I think my problem is solved too, but it's not.","comments":0,"created_at":"2024-09-18T07:34:32Z","labels":[],"number":4156,"title":"[Feature]: Custom hard keyboard key repeat speed","updated_at":"2024-09-18T07:34:32Z"} +{"author":"Prathu1626","body":"### Problem description\n\nWhen I type something for example I type only 4 alphabet but just because of autocorrect it place too many alphabet in that line or row so solve this \n\n### Steps to reproduce the behavior.\n\nIn pasts update I never face this problem \n\n### What is the expected behavior?\n\nJust solve this issue \n\n### System information\n\n* Termux application version:\r\n* Android OS version:\r\n* Device model:\r\n","comments":1,"created_at":"2024-09-06T10:38:19Z","labels":["bug report"],"number":4142,"title":"[Bug]: too many letters ","updated_at":"2024-10-30T05:12:11Z"} +{"author":"trypsynth","body":"### Problem description\n\nI'm a blind Termux user, and wanted to try using it with a braille keyboard I have because it's smaller than my normal external keyboard. I connected it and opened termux, and TalkBack's on-screen braile keyboard shows up, telling me that an external braille keyboard is connected, as it normally does. But then I cannot type. I tested this in messages, and it only lets me type if I'm actually actively focused on the text field, which termux doesn't have.\n\n### Steps to reproduce the behavior.\n\nThis is slightly tricky because you need hardware of some sort:\r\n1. Start TalkBack.\r\n2. Connect a braille display/keyboard.\r\n3. Open Termux\r\n4. Try to type on the braille keyboard.\n\n### What is the expected behavior?\n\nI would expect the orbit writer (my braille keyboard) and any other assistive device to just work in Termux out-of-the-box.\n\n### System information\n\n* Termux application version: 2024.07.07 from Google Play\r\n* Android OS version: 14\r\n* Device model: Motorola Razr Plus 2024","comments":0,"created_at":"2024-09-03T13:10:54Z","labels":["bug report"],"number":4136,"title":"[Bug]: Unable to type in termux using external braille keyboard","updated_at":"2024-09-03T13:10:54Z"} +{"author":"tarasglek","body":"### Problem description\n\nI install termux on my device..It works great..in few days it fails to start with an odd bindService\n\n### Steps to reproduce the behavior.\n\n1. Install termux from fdroid on mobiscribe wave android 12\r\n2. start it, it works fine\r\n3. wait a few days, \r\n4. start and it crashes on boot\n\n### What is the expected behavior?\n\nIt starts :)\n\n### System information\n\n## Report Info\r\n\r\n\r\n**User Action**: `crash report` \r\n**Sender**: `TermuxActivity` \r\n**Report Timestamp**: `2024-08-29 19:31:56.316 UTC` \r\n##\r\n\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]` \r\n**Crash Timestamp**: `2024-08-28 20:39:00.397 UTC` \r\n\r\n**Crash Message**:\r\n```\r\nUnable to start activity ComponentInfo{com.termux/com.termux.app.TermuxActivity}: java.lang.RuntimeException: bindService() failed\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\njava.lang.RuntimeException: Unable to start activity ComponentInfo{com.termux/com.termux.app.TermuxActivity}: java.lang.RuntimeException: bindService() failed\r\n at android.app.ActivityThread.performLaunchActivity(activitythread.java:3635)\r\n at android.app.ActivityThread.handleLaunchActivity(activitythread.java:3792)\r\n at android.app.servertransaction.LaunchActivityItem.execute(launchactivityitem.java:103)\r\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(transactionexecutor.java:135)\r\n at android.app.servertransaction.TransactionExecutor.execute(transactionexecutor.java:95)\r\n at android.app.ActivityThread$H.handleMessage(activitythread.java:2210)\r\n at android.os.Handler.dispatchMessage(handler.java:106)\r\n at android.os.Looper.loopOnce(looper.java:201)\r\n at android.os.Looper.loop(looper.java:288)\r\n at android.app.ActivityThread.main(activitythread.java:7854)\r\n at java.lang.reflect.Method.invoke(Native Method)\r\n at com.android.internal.os.RuntimeInit$[MethodAndArgsCaller.run](https://methodandargscaller.run/)(runtimeinit.java:548)\r\n at com.android.internal.os.ZygoteInit.main(zygoteinit.java:1155)\r\nCaused by: java.lang.RuntimeException: bindService() failed\r\n at com.termux.app.TermuxActivity.onCreate(termuxactivity.java:247)\r\n at android.app.Activity.performCreate(activity.java:8283)\r\n at android.app.Activity.performCreate(activity.java:8263)\r\n at android.app.Instrumentation.callActivityOnCreate(instrumentation.java:1329)\r\n at android.app.ActivityThread.performLaunchActivity(activitythread.java:3608)\r\n ... 12 more\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.1` \r\n**VERSION_CODE**: `1000` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `false` \r\n**APK_RELEASE**: `F-Droid` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `5.4.161-00504-g7762a0ebcac6-ab99` \r\n**SDK_INT**: `31` \r\n**RELEASE**: `12` \r\n**ID**: `SP1A.211105.004` \r\n**DISPLAY**: `V2.7.2-54ae3dc-99_20240223.163623` \r\n**INCREMENTAL**: `V2.7.2-54ae3dc-99_20240223.163623` \r\n**SECURITY_PATCH**: `2022-02-05` \r\n**IS_DEBUGGABLE**: `0` \r\n**IS_TREBLE_ENABLED**: `true` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `Allwinner` \r\n**BRAND**: `Allwinner` \r\n**MODEL**: `WAVE` \r\n**PRODUCT**: `E70P24_android` \r\n**BOARD**: `exdroid` \r\n**HARDWARE**: `sun50iw10p1` \r\n**DEVICE**: `E70P24_android` \r\n**SUPPORTED_ABIS**: `armeabi-v7a, armeabi` \r\n##","comments":0,"created_at":"2024-08-29T19:42:16Z","labels":["bug report"],"number":4132,"title":"[Bug]: Termux fails to start after a few days of being installed with bindService crash","updated_at":"2024-08-29T19:42:16Z"} +{"author":"Ammar64","body":"### Feature description\r\n\r\nNeither `Ctrl + Shift + V` nor `Ctrl + V` can paste copied text into termux.\r\nNote that NEITHER pressing the `Ctrl` button built in termux nor pressing the `Ctrl` button built in the keyboard work.\r\nit would be nice if you add it.\r\n\r\n### Additional information\r\n\r\nI use unexpected keyboard to use `Ctrl + shift + V` here is the keyboard https://f-droid.org/packages/juloo.keyboard2/\r\nThe shortcut `Ctrl + V` works in other apps with the keyboard.","comments":2,"created_at":"2024-08-27T14:30:23Z","labels":[],"number":4126,"title":"[Feature]: Support pasting with Ctrl + shift + V","updated_at":"2024-09-04T10:30:00Z"} +{"author":"Francewhoa","body":"### Feature description\r\n\r\nFor Termux to remain secured, get automated updates for Termux via F-Droid on Android 14\r\n\r\n### Additional information\r\n\r\n#### Steps to reproduce challenge\r\n\r\n1. Using Android 14. Using F-Droid client app from https://f-droid.org/F-Droid.apk install Termux latest version 0.119.0-beta.1 (1020) - Added on Jun 21, 2024 from https://f-droid.org/en/packages/com.termux/\r\n\r\n2. F-Droid display this warning message:\r\n\r\n \u003e This app was built for an older version of Android and cannot be updated automatically This is the challenge.\r\n\r\n The number 1 in this screenshot below shows the location of this challenge\r\n \u003ca href=\"https://github.com/user-attachments/assets/3e713b21-9899-466b-920f-9931ab4db85a\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/3e713b21-9899-466b-920f-9931ab4db85a\" align=\"left\" width=\"400\" \u003e\u003c/a\u003e\u003cbr clear=\"all\"/\u003e\r\n\r\n\r\n#### Suggested new feature\r\n\r\nThe needed end result is Termux can be installed using F-Droid client app. Then get automated updates. So that Termux remains secured.\r\n\r\n\r\n\r\n#### Using\r\n\r\nΓÇó Android 14\r\n\r\nΓÇó LineageOS 21\r\n\r\nΓÇó Rooted\r\n\r\nΓÇó OnePlus 9 Pro\r\n\r\n\r\n#### Additional information\r\n\r\n\u003eDoes another app/terminal emulator have this feature?\r\n\r\nYes \r\n\r\n\u003eProvide links to more background information.\r\n\r\nhttps://f-droid.org/en/packages/com.termoneplus/ supports F-Droid automated updates on Android 14 \r\n\r\n\r\n#### Contributing\r\n\r\nIf needed, both me and the Ubertus.Org team would be happy to contribute beta testing and documentation for this new feature. \r\n\r\n\r\n#### Note to myself\r\n\r\nID_2R27E1F3","comments":7,"created_at":"2024-08-23T22:19:38Z","labels":[],"number":4120,"title":"[Feature]: Automatically update Termux on Android 14 with F-Droid","updated_at":"2026-01-17T23:37:30Z"} +{"author":"jojorne","body":"### Problem description\n\nI need to get signals from service-daemon. If I do sv down it works.\n\n### Steps to reproduce the behavior.\n\nGo back to android and close termux fully, exit and remove the window.\n\n### What is the expected behavior?\n\nReceive signals that termux is exiting.\n\n### System information\n\n* Termux application version: 0.119.0-beta.1\r\n* Android OS version: 10\r\n","comments":2,"created_at":"2024-08-14T19:32:00Z","labels":["bug report"],"number":4103,"title":"[Bug]: Closing termux android window just kills termux","updated_at":"2024-10-23T22:55:43Z"} +{"author":"twaik","body":"### Feature description\n\nHello.\r\nDiscord has a dedicated tag for this (!tag firstrun) with the following text:\r\n\r\n\u003e After installing Termux and opening it, you should do the following:\r\n\u003e \r\n\u003e **1.** `termux-change-repo` (to select a nearby mirror to get updates from):\r\n\u003e - `SPACE` toggles highlighted options;\r\n\u003e - `ENTER` moves to the next screen;\r\n\u003e Choose the first/topmost option on each screen. _(If that one fails, try another.)_\r\n\u003e **2.** `pkg update \u0026\u0026 pkg upgrade` (to update your package database, then upgrade all packages)\r\n\u003e On each prompt, press `y` and `Enter` to install newest versions available\r\n\u003e **3.** `exit` (to exit Termux, so you can restart it yourself, all updated!)\r\n\r\n\r\nProbably it will be good to perform this automatically right after extracting bootstrap zip.\n\n### Additional information\n\nThere are a lot of users that are having troubles with this. Only some of them come to discord and complain about non-working repos. IMHO it is a good idea to make it work this way out of the box.","comments":0,"created_at":"2024-08-12T17:13:43Z","labels":[],"number":4096,"title":"[Feature]: refreshing repo and upgrading after unpacking a bootstrap.","updated_at":"2024-08-12T17:13:43Z"} +{"author":"RokeJulianLockhart","body":"### Feature description\r\n\r\nIt's a markdown file, so it should use the correct extension. Otherwise, IDEs misinterpret (and misrender) it as a logfile, which is `text/plain`.","comments":1,"created_at":"2024-08-11T23:02:29Z","labels":[],"number":4095,"title":"[Feature]: `termux-about.log` should be `termux-about.md`.","updated_at":"2024-10-25T16:04:25Z"} +{"author":"ghost","body":"### Feature description\r\n\r\nThere should be a developer-signed, non-debuggable variant of Termux published on GitHub Releases. GitHub Releases is the fastest way to get new updates since you don't have to go through Google Play's or F-Droid's update review processes. You can keep the Termux app up-to-date by manually checking for updates or using an app to automatically check for updates/update it for you.\r\n\r\n### Additional information\r\n\r\nMost Android developers using GitHub Releases publish developer-signed, non-debuggable apps.","comments":11,"created_at":"2024-08-11T11:02:40Z","labels":["enhancement"],"number":4094,"title":"[Feature]: A developer-signed, non-debuggable variant of Termux on GitHub Releases","updated_at":"2025-07-25T14:29:23Z"} +{"author":"RokeJulianLockhart","body":"### Feature description\n\nCurrently, it's a list with bold for it's headings and code for its content:\r\n\r\n\u003e ![Screenshot_20240622-102708](https://github.com/termux/termux-app/assets/42837531/e79844ca-232c-4fa9-81df-103d1bfd8e35)\r\n\r\nIt's difficult to read. This kind of formatting is much better suited to a table, where the eye need not move so much horizontally to read each line.\n\n### Additional information\n\nAs https://github.com/termux/termux-app/issues/3852#issuecomment-2183960683 explains, a rewrite in Material 3 would be a good chance.","comments":0,"created_at":"2024-06-22T10:04:52Z","labels":[],"number":4029,"title":"[Feature]: Render the \"Device Info\" and \"App Info\" sections as tables, not lists.","updated_at":"2024-07-31T16:30:58Z"} +{"author":"anisjonischkeit","body":"### Feature description\r\n\r\nGoogle has just released [secondary display support](https://www.androidauthority.com/google-pixel-8-displayport-support-june-feature-drop-3450476/) to the pixel. It's nice to have termux on a larger display the aspect ratio is locked to that of my pixel, rather than that of the monitor (the screen is mirrored). Google slides gets around this by \"[projecting](https://support.google.com/pixelphone/answer/2865484?hl=en)\" rather than mirroring. From a quick google it looks to me like it probably uses this [presentation API](https://developer.android.com/reference/android/app/Presentation) to achieve this.\r\n\r\nTermux on a second monitor would be a massive win in my opinion.\r\n- Is it something the project would be interested in supporting?\r\n- Does it seem possible to do this?\r\n\r\n### Additional information\r\n\r\nGoogle slides has this feature https://play.google.com/store/apps/details?id=com.google.android.apps.docs.editors.slides","comments":0,"created_at":"2024-06-13T12:13:54Z","labels":[],"number":4016,"title":"[Feature] Support secondary display","updated_at":"2024-06-13T14:34:45Z"} +{"author":"agnostic-apollo","body":"Android and Google PlayStore/F-Droid stores use the [`versionCode`](https://developer.android.com/guide/topics/manifest/manifest-element#vcode) positive integer value of the currently installed app to decide whether the new APK to be installed or one hosted by the store is an updated version or not. If the `versionCode` of the new APK is higher, only then it is considered an update and allowed to be normally installed over the currently installed app. The [`versionName`](https://developer.android.com/guide/topics/manifest/manifest-element#vname) string value of apps is not used in this decision.\r\n\r\nThe max value for `versionCode` that Google PlayStore allows is [`2 100 000 000`](https://developer.android.com/studio/publish/versioning#versioningsettings) (`2100000000`), Android also internally stores it as an [`int`](https://developer.android.com/reference/android/content/pm/PackageInfo#versionCode) and java `INT_MAX` value is only slightly higher [`2 147 483 647`](https://docs.oracle.com/javase/8/docs/api/constant-values.html#java.lang.Integer.MAX_VALUE).\r\n\r\nSince termux-apps use [semantic versioning `2.0`](https://semver.org/spec/v2.0.0.html) for `versionName` in the format `x.y.x` [since `0.118.0` release](https://github.com/termux/termux-app/commit/897d911a5253b3b56b38ce9f4e95b9dec16e6df1), there needs to be some way for mapping the `versionName` to a `versionCode` while keeping it different for different install sources so that their app stores don't show updates of other sources. This is a problem for Google PlayStore because it does not check signatures of the currently installed app APK against the latest app APK hosted by the store that is to be updated, and it only compares the `versionCode`. So if the device has an APK installed from a different install source with a different signature, but its `versionCode` is lower than the latest APK hosted in the store, then PlayStore will attempt to download and install it and then fail with a `Can't install Termux` generic UI error, with the actual error `Finsky Submitter: commit error message INSTALL_FAILED_UPDATE_INCOMPATIBLE: Existing package com.termux signatures do not match newer version; ignoring!` logged to [`logcat`](https://developer.android.com/tools/logcat) that is [returned by the Android package installer](https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:frameworks/base/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java;l=608-610). User can manually disable auto update for the app from its app page options button, but any updates will still show in the PlayStore app updates list. Basically, to solve this, the `versionCode` of app APKs hosted by the \"broken\" stores must be lower than other install sources.\r\n\r\nNote that F-Droid store does not show updates for apps in the app updates list if they are signed with a different signing key. The APK signing certificate SHA-256 digest is stored in the [`packages: \u003cpackage_name\u003e: versions: \u003cversion_id\u003e: manifest: signer: sha256: 0`](https://f-droid.org/repo/index-v2.json) field of the `index` that F-Droid repository maintains for all hosted app APKs and it does not need to download the actual APK to find it. The `signer` field is stored in the `manifest_signer_sha256` field of the `Version` table of the `/data/data/org.fdroid.fdroid/databases/fdroid_db` database that F-Droid app maintains. ([1](https://gitlab.com/fdroid/fdroidclient/-/blob/1.20.0/libs/database/schemas/org.fdroid.database.FDroidDatabaseInt/2.json?ref_type=tags#L932-L937), [2](https://gitlab.com/fdroid/fdroidclient/-/blob/1.20.0/libs/database/src/main/java/org/fdroid/database/Version.kt?ref_type=tags#L57)) If the user manually tries to update an app from its app page, it is prevented with the `The new version is signed with a different key to the old one. To install the new version, the old one must be uninstalled first. Please do this and try again. (Note that uninstalling will erase any internal data stored by the app)` ([1](https://gitlab.com/fdroid/fdroidclient/-/blob/1.20.0/app/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java?ref_type=tags#L375-L383), [2](https://gitlab.com/fdroid/fdroidclient/-/blob/1.20.0/app/src/main/res/values/strings.xml?ref_type=tags#L7-L10)) error, without actually trying to update the app and then failing.\r\n\r\nAn incremental `versionCode` cannot be used, as that would not allow patch releases. For example, `0.118.1` is released as `1000`, then `0.119.0-beta.1` is released as `1001`. If `0.118.1` F-Droid build fails or a bug is found after the release, then `0.118.2` patch version update may need to be released, but if its now released as `1002`, it will be considered as higher version than `0.119.0-beta.1` (`1001`), which it won't be. So each major/minor/patch update must have sufficient reserved slots after their next respective increment. Additionally, there must be reserved slots for `beta` releases before a stable release as well.\r\n\r\nThe following versioning spec is proposed for mapping the `versionName` to a `versionCode` while also keeping a priority for different install sources. As the Google PlayStore allows max value `2 100 000 000` for a `versionCode`, but since the first and second section cannot go above `2 100`, the max value is limited to `1 999 999 999` in the spec. Google PlayStore also [suggests a similar `versionCode` spec](https://developer.android.com/google/play/publishing/multiple-apks#VersionCodes).\r\n\r\n```\r\nnoop isp major minor patch beta/stable\r\n0 0 00 000 00 0\r\n```\r\n\r\n- `noop`: `0-1` (currently not used)\r\n- `release_variant`: `1-9` (other values could be used for other stores like Samsung store)\r\n - `1` - PlayStore (lowest priority)\r\n - `5` - F-Droid or other sources like planned Termux site\r\n - `7` - GitHub and custom builds (highest priority)\r\n- `major`: `0-99`\r\n- `minor`: `0-999`\r\n- `patch`: `0-99`\r\n- `beta/stable`: `0-9`\r\n\r\nThe effectively allows `1000` `minor` releases for each of the `100` `major` releases. So a total of `100 x 1000 = 1,00,000` (`1` hundred thousand) `major/minor` releases. If the `100` `patch` releases are also included, then total releases allowed would be `100 x 1000 x 100 = 10,000,000` (`10` million). Even though the semantic versioning spec does not limit the size of `major`/`minor`/`patch`, the `1,00,000` releases should be sufficient for Termux's future. It will allow more than `5` releases to be made per day for the next `50` years (`90000`). Different install sources will also never conflict and will also have `1,00,000` releases each. The `noop` could possibly be used for `targetSdkVersion` variants or some other config, or could be used to expand versions themselves.\r\n\r\nFollowing are examples of `versionCode` mapping from `versionName` with the `noop` and `release_variant` parts not set (`= 0`).\r\n\r\n```\r\n0 0 00 118 000 - 0.118.0\r\n0 0 00 118 010 - 0.118.1\r\n0 0 00 118 020 - 0.118.2\r\n0 0 00 118 090 - 0.118.9\r\n\r\n0 0 00 119 000 - 0.119.0-beta.1\r\n0 0 00 119 001 - 0.119.0-beta.2\r\n0 0 00 119 002 - 0.119.0\r\n\r\n0 0 00 120 000 - 0.120.0-beta.1\r\n0 0 00 120 008 - 0.120.0-beta.9\r\n0 0 00 120 009 - 0.120.0\r\n\r\n0 0 00 120 010 - 0.120.1\r\n\r\n0 0 00 120 990 - 0.120.99\r\n\r\n0 0 00 999 000 - 0.999.0\r\n0 0 00 999 990 - 0.999.99\r\n\r\n0 0 01 000 000 - 1.0.0\r\n\r\n0 0 99 000 000 - 99.0.0\r\n```\r\n\r\nFollowing includes the `release_variant` parts for different versions.\r\n\r\n```\r\n0 1 00 108 010 - 0.108.1 - PlayStore\r\n0 1 00 119 002 - 0.119.0 - PlayStore\r\n\r\n0 5 00 118 010 - 0.118.1 - F-Droid\r\n0 5 00 119 000 - 0.119.0-beta.1 - F-Droid\r\n0 5 00 119 001 - 0.119.0-beta.2 - F-Droid\r\n0 5 00 119 002 - 0.119.0 - F-Droid\r\n\r\n0 7 00 118 010 - 0.118.1 - GitHub\r\n0 7 00 119 000 - 0.119.0-beta.1 - GitHub\r\n0 7 00 119 001 - 0.119.0-beta.2 - GitHub\r\n0 7 00 119 002 - 0.119.0 - GitHub\r\n```\r\n\r\nAt build time, the value `release_variant x 1 00 000 000` can be added to the `versionCode`.\r\n- PlayStore: `1 00 000 000`\r\n- F-Droid: `5 00 000 000`\r\n- GitHub: `7 00 000 000`\r\n\r\nThe `release_variant` can be set by exporting the `$TERMUX_APP_BUILD__VERSION_CODE_RELEASE_VARIANT` environment variable at build time, with the default value `7`. For F-Droid, a pull request will need to be sent to export the value in the [`prebuild` step](https://f-droid.org/docs/Build_Metadata_Reference/#build_prebuild) of the [`com.termux` package metadata file](https://gitlab.com/fdroid/fdroiddata/-/blob/master/metadata/com.termux.yml).\r\n\r\n```shell\r\nprebuild:\r\n - export TERMUX_APP_BUILD__VERSION_CODE_RELEASE_VARIANT=5\r\n```\r\n\r\nHowever, since [F-Droid cannot dynamically detect generated `versionCode`](https://github.com/termux/termux-app/releases/tag/v0.112), the `versionCode` would need to be hardcoded in `app/build.gradle` build, like `0 5 00 118 010` (`versionCode 500118010`) for next `versionName` `0.118.1`. It would be much simpler to just use priority `5` for both `GitHub` and `F-Droid`, and possibly other non-broken sources/stores, like Termux site. This would also not require sending a pull request and no special logic will be need to be added to handle F-Droid requirement by first subtracting `5 00 000 000` from `versionCode`, and then adding `$TERMUX_APP_BUILD__VERSION_CODE_RELEASE_VARIANT`.\r\n\r\nRelated #4000","comments":11,"created_at":"2024-06-11T23:11:44Z","labels":["bug report"],"number":4012,"title":"[Bug][Proposal]: New Termux app versionCode spec to solve app store issues ","updated_at":"2025-04-08T03:53:31Z"} +{"author":"K1ngGr33n","body":"### Problem description\n\n![Screenshot_20240515_110955](https://github.com/termux/termux-app/assets/104063193/e16a7e3b-ac1d-43bc-a926-45e84c5ce6fd)\r\nWhen using termux, some special symbols appear to be squished like in the image above. Shown are a few characters with irregular proportions, but this applies to many more than just the ones shown. The font i'm currently using is \"Hexagon\" by ZiYuFang from the Huawei themes store. Is this an issue thats exclusive to me or can this be considered a bug?\r\nAttached below is drive link to the .ttf of the font.\r\nhttps://drive.google.com/uc?export=download\u0026id=1ItiPFPo6zZ3Fakp1C8MBrXtCbJrUgGC5 \n\n### Steps to reproduce the behavior.\n\n1. Launch termux while using the \"Hexagon\" font from the Huawei themes store (the one linked to in the description) \n\n### What is the expected behavior?\n\nThe characters should all display with correct proportions. \n\n### System information\n\n* Termux application version: v0.101\r\n* Android OS version: 9\r\n* Device model: Huawei P20 lite (ANE-LX1) \r\n","comments":1,"created_at":"2024-05-15T09:42:50Z","labels":["bug report"],"number":3952,"title":"[Bug]: Some characters are squished when using certain fonts","updated_at":"2024-05-15T09:44:20Z"} +{"author":"c6401","body":"### Feature description\n\nTo register \"termux:\" scheme, which will be handled by bin/termux-scheme-opener shell script, but only in case if user created one. If the script is not present, there probably should be a dialog telling so. The script should receive the passed URL with scheme (and possibly the sender app name).\r\n\r\nSecurity:\r\nDisabled by default, till termux-scheme-opener script is created, users can deploy their own ways to restrict this action such as passing some token in the url \"termux://myaction?token=secret\" to allow the command or creating a termux shell question hot to act on open.\r\n\r\nReasoning:\r\nIt will allow creating mobile browser userscripts or bookmarklets to send some actions from the browser to termux.\n\n### Additional information\n\nRegistering some custom scheme to run handler scripts is a popular automation technique on desktop operations systems. Example:\r\nhttps://github.com/alphapapa/org-protocol-capture-html","comments":0,"created_at":"2024-05-08T09:35:59Z","labels":[],"number":3945,"title":"[Feature]: Support \"termux:\" scheme when temux-scheme-opener script is created.","updated_at":"2024-05-08T09:35:59Z"} +{"author":"Mechanicus84","body":"### Problem description\n\nHi\r\nIm using a samsung tab s8 ultra with termux, when i try and use samsungs on screen keyboard the arrow keys do not work\r\nUsing standard samsung keyboard\r\nLeft arrow key does work, right key does not\r\nUsing Samsung keyboard with keys cafe - using this I can add up and down arrow keys as well, but again these do not work\r\nAlso the escape key minimises termux rather than the correct function\r\n\r\nI have already tried setting enforce-char-based-input to True but this has not had any effect\r\n\r\nIs there anything else I can do, or is there a way to fix this?\r\n\r\nI have used other keyboards with termux and they work perfectly, hackers keyboard and SwiftKey (even the arrow keys work!) But I find samsungs keyboard much more comfortable and usable for me\r\n\r\nAny help is appreciated and thank you for the amazing app!\r\n\n\n### Steps to reproduce the behavior.\n\nUse a samsung device with a samsung keyboard and samsung keyboard with keys cafe installed and activated (from samsung galaxy store)\n\n### What is the expected behavior?\n\nArrow keys to work as expected\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 14\r\n* Device model: SM-X900\r\n","comments":2,"created_at":"2024-05-08T08:52:44Z","labels":["bug report"],"number":3944,"title":"Arrow keys not working on samsung keyboard[Bug]: ","updated_at":"2025-03-12T14:21:20Z"} +{"author":"frankforte","body":"### Problem description\n\nIf I swipe the words `hello world it's a nice day` termux will show `hellohellohellohellosahellohello`\r\nThe only way to get around it is typing a single character after I swipe each word, then hitting backspace, then hitting space before \"swiping\" the next word.\r\n\n\n### Steps to reproduce the behavior.\n\nThe issue happens when using \"swipe\" to type on the command line and in Vim.\n\n### What is the expected behavior?\n\nThe output should match the input.\n\n### System information\n\n* Termux application version: 0.118.0 (same bug existed since the old version from Google Play)\r\n* Android OS version: 13\r\n* Device model: Samsung Galaxy S20+ 5G\r\n","comments":2,"created_at":"2024-05-04T04:31:12Z","labels":["bug report"],"number":3941,"title":"[Bug]: First word repeats when using \"swype\" to type.","updated_at":"2024-05-04T11:02:42Z"} +{"author":"1liuzhongyi","body":"### Problem description\r\n\r\nµ»Åµëôσ╝ÇΣ╕ǵ¼í termux∩╝îσåàσ¡ÿσ░▒Σ╝Üσó₧σèá 1mb\r\nσÅ»σ£¿ΓÇ£Φ«╛τ╜«/σ╝ÇσÅæΦÇàΘÇëΘí╣/µ¡úσ£¿Φ┐ÉΦíîτÜäµ£ìσèíΓÇ¥Θçîτ£ïσê░σåàσ¡ÿΣ╜┐τö¿µâàσå╡\r\nMemory increases by 1mb each time termux is opened\r\nMemory usage can be seen in \"Settings / Developer Options / Running Services\"see\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nµëôσ╝Çtermuxσ╣╢ΘÇÇσç║τòîΘ¥óσ¢₧σê░µíîΘ¥ó∩╝îΣ╕ìΦªüσ░återmuxτÜäσÉÄσÅ░τ╗Öµ╕àΣ║å∩╝îΘçìσñìµëºΦíñµôìΣ╜£∩╝îtermuxτÜäσåàσ¡ÿΣ╝Üσó₧σèá.\r\nOpen the termux and exit the interface back to the desktop, do not clean the termux background, repeat this operation, termux memory will increase.\r\n\r\n### What is the expected behavior?\r\n\r\n_No response_\r\n\r\n### System information\r\n\r\nandroid13","comments":6,"created_at":"2024-04-30T16:24:01Z","labels":["bug report"],"number":3939,"title":"[Bug]: Memory","updated_at":"2024-07-27T20:39:03Z"} +{"author":"macearl","body":"### Problem description\n\nWhen sharing URLs which are not part of the [WEB_URL pattern from AOSP](https://github.com/aosp-mirror/platform_frameworks_support/blob/a9ac247af2afd4115c3eb6d16c05bc92737d6305/compat/src/main/java/androidx/core/util/PatternsCompat.java#L211) or Magnet links (added through https://github.com/termux/termux-app/issues/1339 ).\r\n\r\nThe file editor gets opened instead of the url opener. \r\n\r\nI would suggest adding at least these URI schemes as well:\r\n- gopher \r\n- irc\r\n- irc6\r\n- ircs\r\n- jabber\r\n- mailto\r\n- nfs\r\n- nzblnk\r\n- rtmp\r\n- sftp\r\n- smb\n\n### Steps to reproduce the behavior.\n\nExample for SFTP:\r\n\r\n1. Install the midnight commander (`pkg install mc`)\r\n2. Share a SFTP link with termux\n\n### What is the expected behavior?\n\nThe url opener script should be executed or an error message, that the url opener does not exist should be shown instead the file opener / editor is shown\n\n### System information\n\n(not really relevant) \r\n* Termux application version: 0.118.0\r\n* Android OS version: 14\r\n* Device model: Xiaomi Poco F1","comments":0,"created_at":"2024-04-30T13:39:46Z","labels":["bug report"],"number":3935,"title":"[Bug]: termux-file-editor running after sharing links with unknown/not included uri schemes","updated_at":"2024-04-30T13:39:46Z"} +{"author":"fuzunspm","body":"### Feature description\n\nIt's not possible to use most emacs shortcuts with a physical keyboard. i.e. ctrl + ; or ctrl + \u003e. Some commands works like ctrl+space or ctrl+x ctrl+s \r\n\r\nI'm sure there is a reason but it's a pain to work on emacs without shortcuts. Other than that everything works suprisingly good, almost same config from my pc\r\n\r\n\n\n### Additional information\n\nI'm on Samsung Tab 9 Ultra with physical keyboard case","comments":1,"created_at":"2024-04-25T17:02:09Z","labels":["enhancement"],"number":3932,"title":"[Feature]: Ability to use emacs shortcuts","updated_at":"2024-09-14T04:22:21Z"} +{"author":"ZaxonXP","body":"### Feature description\n\nWhen the physical mouse is connected and used for scrolling the content it scrolls every X lines. How this can be changed, so the scroll be with different amount of lines at the time?\n\n### Additional information\n\nOn the Windows/Linux it is possible to configure mouse scroll rate. How this can be done on Termux?","comments":0,"created_at":"2024-04-24T09:39:54Z","labels":[],"number":3929,"title":"[Feature]: Change the mouse wheel scroll rate.","updated_at":"2024-04-24T09:39:54Z"} +{"author":"twaik","body":"### Feature description\r\n\r\nWhen user switches to termux-x11's Activity termux-app goes background and its capability to draw frames is limited which causes freezes. \r\nThere are a few possible solutions to fix this.\r\n1. Disable battery restrictions for termux-app.\r\n2. Enable wakelock.\r\n3. Using termux-float (need to start termux-x11 session from floating session, not in session of termux-app which is in background).\r\n4. Creating overlay from termux-app's service.\r\n\r\nCreating overlay while enabling wakelock should fix all issue. Also I think it will be good to ask to disable battery restrictions when enabling wakelock.\r\n\r\n### Additional information\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eA part of conversation in private chat in tg.\u003c/summary\u003e\r\n\r\ntwaik:\r\n\u003e I am not an expert in this, but maybe you can try to build termux version which creates overlay when service starts? Only as a proof of concept.\r\n\r\nwasp:\r\n\u003e i can try.\r\nin the worse situation, we can just tell users to disable termux's battery optimization if there's freeze\r\n\r\ntwaik:\r\n\u003e But that will not work in the case of chroot. But maybe that was a different freeze\r\n\r\nwasp:\r\n\u003e any related issues?\r\ni've only found this, about huawei device. https://github.com/termux/termux-x11/issues/516\r\n\r\ntwaik:\r\n\u003e It was reported to telegram of another developer. Now I can not even find this.\r\n\r\ntwaik:\r\n\u003e When you tried termux:float, did you invoke termux-x11 and session from there or from regular termux?\r\n\r\nwasp:\r\n\u003e from regular termux\r\n\r\nwasp:\r\n\u003e after creating an overlay view from termux, termux-x11 seems not to freeze anymore, i'll have more test\r\n\r\nwasp:\r\n\u003e I just realized that termux:float start a new session rather than using the current session of termux.\r\nnow by starting termux-x11 from termux:float, it doesn't freeze either!\r\n\r\ntwaik:\r\n\u003e Are you sure? There is no conditions like plugged in usb or something?\r\n\r\nwasp:\r\n\u003e Here's the video. First launch with termux float. Then killed float. Launch with normal termux\r\n\r\nhttps://github.com/termux/termux-app/assets/9674930/11353370-316b-477d-b7f5-d780ee8c1e70\r\n\r\nwasp:\r\n\u003e Here's the result of overlay view from termux. Also not freeze\r\n\r\nhttps://github.com/termux/termux-app/assets/9674930/789cabb4-78b5-49a0-b2e9-22a1855e59ac\r\n\r\ntwaik:\r\n\u003e What is a minimal size of an overlay? Can it be 1x1 pixel big? Can it be completely transparent? Can it be put to left top corner of screen under statusbar?\r\n\r\nwasp:\r\n\u003e 4x4 pixels, alpha=0.01 (range from 0~1) seems fine for me\r\n\r\nwasp:\r\n\u003e this is the code i use to create overlay in termux app. the method is called in `TermuxActivity.onCreate`\r\n```java\r\n private void createOverlayView() {\r\n if(!android.provider.Settings.canDrawOverlays(this)){\r\n startActivity(new Intent( \"android.settings.action.MANAGE_OVERLAY_PERMISSION\", android.net.Uri.parse(\"package:\" + getPackageName())));\r\n return;\r\n }\r\n WindowManager windowManager = getSystemService(WindowManager.class);\r\n\r\n //µôìΣ╜£Θ¥óµ¥┐\r\n android.widget.TextView textView = new android.widget.TextView(this);\r\n textView.setText(\"µ╡ïΦ»òOverlay\");\r\n textView.setBackgroundColor( android.graphics.Color.RED);\r\n android.view.WindowManager.LayoutParams rootParams = new android.view.WindowManager.LayoutParams(4, 4, 2038, 32 | 8, 1);//TYPE_APPLICATION_OVERLAY, FLAG_NOT_TOUCH_MODAL | FLAG_NOT_FOCUSABLE, RGBA_8888);\r\n rootParams.gravity = android.view.Gravity.START | android.view.Gravity.TOP;\r\n rootParams.alpha = 0.05f;\r\n windowManager.addView(textView, rootParams);\r\n }\r\n```\r\n\u003c/details\u003e","comments":8,"created_at":"2024-03-31T07:20:27Z","labels":[],"number":3903,"title":"[Feature]: overlay for preventing termux-app from going to background","updated_at":"2025-07-31T12:08:56Z"} +{"author":"natebragg","body":"According to `showkey -a`, some keys are not registered or don't have the same output as a desktop terminal (both a bare console and XTerm).\n\nWhen CTRL+2 is pressed, the output is:\n\n ^@ 0 0000 0x00\n\nThis is the correct behavior.\n\nWhen CTRL+@ (CTRL+shift+2) is pressed, the output is:\n\n @ 64 0100 0x40\n\nThis is not correct, it should be the same as CTRL+2 (this is the same behavior as other CTRL+shift+num, which are all incorrect).\n\n CTRL+space is not registered by the terminal (i.e.,nothing is printed). This is also not correct, it should have the same output as CTRL+2.\n\nI use these keys frequently, so pretty please support it.","comments":5,"created_at":"2024-03-25T15:08:23Z","labels":[],"number":3896,"title":"CTRL + space bar should become CTRL-@","updated_at":"2024-07-30T13:57:06Z"} +{"author":"minnesjay","body":"### Problem description\r\n\r\nIf you copy text to clipboard when in termux, **the keyboard hides itself.** \r\n\r\nThe problem occurs when using `termux-clipboard-set` too. \r\n\r\nThis issue occurs in both Gboard, Samsung keyboard, Swiftkey, etc. I've tried most keyboards, this might be an issue with the way the samsung note 9 rom interacts with termux.\r\n\r\nIn other apps, the rom makes the keyboard hide for half a second, then it comes back up immediately. In Termux, once it hides, it stays hidden, until the user interacts with the screen to unhide it.\r\n\r\nBug is in the last official build of termux and in the [latest workflow run](https://github.com/termux/termux-app/actions/runs/7716179058). \r\n\r\nhttps://github.com/termux/termux-app/assets/162993748/6471413d-e307-4f25-b89f-e72aa90e7ce2\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nCopying text to the keyboard when using termux on a samsung note 9 phone.\r\n\r\n### What is the expected behavior?\r\n\r\nThe keyboard should not dismiss itself.\r\n\r\n### System information\r\n\r\n* Termux application version: v0.118.0\r\n* Android OS version: Android 10\r\n* Device model: Samsung Note 9","comments":2,"created_at":"2024-03-11T12:41:00Z","labels":["bug report"],"number":3884,"title":"[Bug]: Keyboard hides when copying text to clipboard in Termux","updated_at":"2024-05-29T18:44:17Z"} +{"author":"Freed-Wu","body":"### Problem description\n\ntext input view cannot work when bluetooth keyboard is connected\n\n### Steps to reproduce the behavior.\n\n1. Press \u003ckbd\u003eVolume +\u003c/kbd\u003e + \u003ckbd\u003eq\u003c/kbd\u003e to open extra keyboard\r\n2. Swipe left to open text input view\r\n\r\nIf bluetooth keyboard is not connected, it can work:\r\n\r\nWhen a bluetooth keyboard is connected, I must turn off it and turn on it, the swtich to other app and switch to termux back to make it work.\n\n### What is the expected behavior?\n\nCan work\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 12\r\n* Device model: hwawei BTKZ-W00\r\n* IME: trime 3.2.16\r\n","comments":0,"created_at":"2024-02-26T06:44:19Z","labels":["bug report"],"number":3859,"title":"[Bug]: text input view cannot work when bluetooth keyboard is connected","updated_at":"2024-02-26T06:44:19Z"} +{"author":"korpe1","body":"### Feature description\n\nConsider updating the UI to implement Material 3 design. How much effort this would require?\n\n### Additional information\n\nhttps://m3.material.io/","comments":6,"created_at":"2024-02-23T15:12:02Z","labels":[],"number":3852,"title":"[Feature]: Material 3 design","updated_at":"2024-07-10T14:48:32Z"} +{"author":"Kovaelin","body":"### Feature description\r\n\r\nSince newer versions of Android are having trouble keeping the app running in the background while locked, would it be possible to add something in the settings that could dim the screen (all the way to 0% is desired) while still having the app active (without disabling or locking the screen)?\r\n\r\nAcquire wakelock and keeping the screen on allow Termux to stay active, but right now, there doesn't seem to be a way to power down the screen without Termux getting interrupted a short time later.\r\n\r\nPerhaps setting presets for brightness percentage and then tapping the screen again after would revert it to the previous brightness would work.\r\n\r\n### Additional information\r\n\r\nMost Android settings do not allow you to turn down brightness all the way to 0%. Will need a way to make sure user does not get stuck at 0% if turned all the way down.\r\n\r\nThe built-in screen saver available in Android 11 does have an extra dim feature, but either the screen saver locks the phone or moving away from the app, results in it no longer being the active application.\r\n\r\nOthers separate apps that do this are:\r\n- Screen filter (defunct): https://play.google.com/store/apps/details?id=com.haxor\r\n- Lower Brightness Screen Filter (ad-riddled): https://play.google.com/store/apps/details?id=nu.lower.brightness\u0026hl=en_US","comments":1,"created_at":"2024-02-14T02:03:48Z","labels":[],"number":3838,"title":"[Feature]: Screen dimming in Termux settings","updated_at":"2024-03-25T07:48:13Z"} +{"author":"hatkidchan","body":"### Feature description\n\nCash-register-like bell sound is nice and all, but I kinda wish I could replace it without rebuilding the entire app\n\n### Additional information\n\nIt is possible to replace `bell.ogg` with custom one by using `apktool`, but it requires resigning of every Termux-related app (Termux API and styling)","comments":4,"created_at":"2024-02-09T13:48:38Z","labels":[],"number":3829,"title":"[Feature]: Custom bell sound","updated_at":"2024-03-13T14:52:18Z"} +{"author":"RohitVerma882","body":"### Feature description\n\nAdd over scroll animation feature in termux terminal for Android 12+ devices\n\n### Additional information\n\nIn ```mt manager``` have this feature","comments":11,"created_at":"2024-02-07T15:48:39Z","labels":[],"number":3826,"title":"[Feature]: over-scroll and nested-scrolling animation in termux terminal-emulator","updated_at":"2024-05-23T18:24:04Z"} +{"author":"noponydeepweb","body":"### Problem description\n\nsometimes the term merges random commands or the previous ones with the one you writing making it give an error or execute other command. everytime i use it i have to rewrite a command which can take very long if its long, and can really make damage if its using a delicade command like rm\n\n### Steps to reproduce the behavior.\n\nwrite a random command; press tab, ctrl, up or down; write something and click space or enter\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.101 (Play Store)\r\n* Android OS version: 11\r\n* Device model: Galaxy A30\r\n","comments":3,"created_at":"2024-02-03T18:45:15Z","labels":["bug report"],"number":3818,"title":"strange glitch happening when using buttons","updated_at":"2024-04-22T17:48:01Z"} +{"author":"programmerjake","body":"### Feature description\n\nit would be useful to allow opening additional terminals since many phones have enough ram that opening lots of terminals isn't an issue\n\n### Additional information\n\nconstant that I'd like to become configurable:\r\nhttps://github.com/termux/termux-app/blob/8e3a8980a849046adbd4156741e1d84047ee1df6/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java#L45","comments":3,"created_at":"2024-01-16T02:26:16Z","labels":[],"number":3791,"title":"[Feature]: allow changing max terminals limit","updated_at":"2026-06-02T21:06:36Z"} +{"author":"cidz-lab","body":"### Problem description\n\n## Report Info\r\n\r\n\r\n**User Action**: `crash report` \r\n**Sender**: `TermuxActivity` \r\n**Report Timestamp**: `2024-01-13 11:39:31.646 UTC` \r\n##\r\n\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]` \r\n**Crash Timestamp**: `2024-01-13 09:59:58.739 UTC` \r\n\r\n**Crash Message**:\r\n```\r\nUnable to start activity ComponentInfo{com.termux/com.termux.app.TermuxActivity}: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.termux/.app.TermuxService }: app is in background uid UidRecord{415c85e u0a545 TPSL idle procs:1 seq(0,0,0)}\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\njava.lang.RuntimeException: Unable to start activity ComponentInfo{com.termux/com.termux.app.TermuxActivity}: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.termux/.app.TermuxService }: app is in background uid UidRecord{415c85e u0a545 TPSL idle procs:1 seq(0,0,0)}\r\n\tat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3448)\r\n\tat android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)\r\n\tat android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)\r\n\tat android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\r\n\tat android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\r\n\tat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)\r\n\tat android.os.Handler.dispatchMessage(Handler.java:107)\r\n\tat android.os.Looper.loop(Looper.java:237)\r\n\tat android.app.ActivityThread.main(ActivityThread.java:7807)\r\n\tat java.lang.reflect.Method.invoke(Native Method)\r\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)\r\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)\r\nCaused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.termux/.app.TermuxService }: app is in background uid UidRecord{415c85e u0a545 TPSL idle procs:1 seq(0,0,0)}\r\n\tat android.app.ContextImpl.startServiceCommon(ContextImpl.java:1687)\r\n\tat android.app.ContextImpl.startService(ContextImpl.java:1632)\r\n\tat android.content.ContextWrapper.startService(ContextWrapper.java:683)\r\n\tat com.termux.app.TermuxActivity.onCreate(TermuxActivity.java:242)\r\n\tat android.app.Activity.performCreate(Activity.java:7955)\r\n\tat android.app.Activity.performCreate(Activity.java:7944)\r\n\tat android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)\r\n\tat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3423)\r\n\t... 11 more\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.0` \r\n**VERSION_CODE**: `118` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `true` \r\n**APK_RELEASE**: `Github` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `B6DA01480EEFD5FBF2CD3771B8D1021EC791304BDD6C4BF41D3FAABAD48EE5E1` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `4.4.177-22392479` \r\n**SDK_INT**: `29` \r\n**RELEASE**: `10` \r\n**ID**: `QP1A.190711.020` \r\n**DISPLAY**: `QP1A.190711.020.M205GDXU7CVG2` \r\n**INCREMENTAL**: `M205GDXU7CVG2` \r\n**SECURITY_PATCH**: `2022-08-01` \r\n**IS_DEBUGGABLE**: `0` \r\n**IS_TREBLE_ENABLED**: `true` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `samsung` \r\n**BRAND**: `samsung` \r\n**MODEL**: `SM-M205G` \r\n**PRODUCT**: `m20ltedx` \r\n**BOARD**: `exynos7904` \r\n**HARDWARE**: `exynos7904` \r\n**DEVICE**: `m20lte` \r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \r\n##\n\n### Steps to reproduce the behavior.\n\nI dont understad\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:\r\n* Android OS version:\r\n* Device model:\r\n","comments":2,"created_at":"2024-01-13T11:42:34Z","labels":["bug report"],"number":3786,"title":"[Bug]: termux crash","updated_at":"2024-10-31T04:58:38Z"} +{"author":"luantak","body":"### Problem description\r\n\r\nScrolling through terminal output feels weird. I do seem to have some muscle memory from other apps and scrolling behavior in termux is just so surprising to me that it's (almost) unusable.\r\n\r\nMaybe it's just that termux scrolls line by line, but could also be some additional custom scroll logic.\r\n\r\n### Steps to reproduce the behavior.\r\n\r\n1. Get yourself some long terminal output (idk install a few packages) on the screen (min. 2x screen height).\r\n2. Run a command with output you're interested in. \r\n3. Add the output of some more \"polluting\" commands (min. 2x screen height).\r\n\r\n4. Try to copy something from the output you're interested in.\r\n\r\n### What is the expected behavior?\r\n\r\n_No response_\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118.0\r\n* Android OS version: 14\r\n* Device model: doesn't matter ","comments":1,"created_at":"2023-12-21T03:51:05Z","labels":["bug report"],"number":3749,"title":"Scrolling through terminal output is hard","updated_at":"2023-12-21T11:49:11Z"} +{"author":"vanarok","body":"### Problem description\n\nGesture pill does not hide in full screen mode enabled through settings.\r\n![Screenshot_20231217-190939_Termux](https://github.com/termux/termux-app/assets/6105977/9784fd20-29dd-4d99-a983-cbad23c87006)\r\n\n\n### Steps to reproduce the behavior.\n\nUse these properties: \r\nfullscreen=true \r\nuse-fullscreen-workaround=true\n\n### What is the expected behavior?\n\nEither hiding the bar or transparent color.https://developer.android.com/develop/ui/views/layout/edge-to-edge\r\nhttps://developer.android.com/develop/ui/views/layout/edge-to-edge-manually\r\n\r\n![Screenshot_20231217-190124_Gallery](https://github.com/termux/termux-app/assets/6105977/98413274-4422-42ee-aba6-8f81b5ae8ecf)\r\napplication in which the gesture pill is transparent and the application occupies all available space at the bottom: https://github.com/IacobIonut01/Gallery\n\n### System information\n\n* Termux application version:0.118.0 f-droid\r\n* Android OS version: 13 (aosp, not miui)\r\n* Device model: mi pad 6 pro\r\n","comments":10,"created_at":"2023-12-17T13:20:25Z","labels":["bug report"],"number":3741,"title":"[Bug]: Fullscreen don't work with android 13","updated_at":"2024-01-14T04:48:15Z"} +{"author":"KanhaKanhaiya","body":"### Problem description\n\nThe cursor turns grayish black which is almost invisible on turning on Dark Mode from device settings in mobile. It does not changes if I uncomment `use-black-ui = true`.\n\n### Steps to reproduce the behavior.\n\nIn a device with Xiaomi MIUI :\r\nΓÇó Turn on dark mode from Settings.\r\nΓÇó Open Termux.\r\nΓÇó Observe the cursor colour.\n\n### What is the expected behavior?\n\nThe cursor should remain white.\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 10\r\n* Device model: Redmi\r\n","comments":2,"created_at":"2023-12-16T05:47:51Z","labels":["bug report"],"number":3738,"title":"Cursor colour turns grayish black on turning on dark mode.","updated_at":"2025-07-22T23:36:10Z"} +{"author":"scy","body":"### Feature description\n\nCurrently, switching the touch keyboard to [text input mode](https://wiki.termux.com/wiki/Touch_Keyboard#Text_Input_View) and back has to be done by the user manually by swiping.\r\n\r\nWhat if a client application running in the terminal could _request_ the keyboard mode to be set to either the \"normal\" (direct) method, or the \"text\" method with autocorrect etc.? For example, a user could configure NeoVim so that entering the editor's \"insert mode\" to automatically emit an escape sequence to Termux, to request that it switches to text input mode. The user can then enter text, and finally hit Escape to exit NeoVim's insert mode. NeoVim could then send a different escape sequence to tell Termux \"alright, you can switch back to the normal, non-predictive keyboard now\".\n\n### Additional information\n\nI would assume that this would have to be an \"Operating System Command\" (OSC) sequence. I've looked around whether other terminals have such a feature and found none. There's [this Google Sheet attempting to track all known sequences](https://docs.google.com/spreadsheets/d/19W-lXWS9jYwqCK-LwgYo31GucPPxYVld_hVEcfpNpXg/edit#gid=433919454), and I could see nothing like that in there either.\r\n\r\nThe sequence should probably not only allow for \"direct\" and \"predictive\" input, but also other popular soft keyboard modes like \"numbers\" or \"web address\", too. [Android defines quite a few of these types](https://developer.android.com/reference/android/text/InputType), and [so does HTML5](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#input_types).\r\n\r\nAs we're defining a new OSC sequence that other terminals might choose to implement, we should keep it independent of the Android or HTML types and define them in a modular way.\r\n\r\nFor example, suppose we'd give this an OSC number of 112 (representing the position in the alphabet for KB (keyboard), 11 and 2). Then, a sequence could look like `\\x1b]112;text\\x1b\\\\` to switch to \"text\" mode (enabling autocorrect etc.) and `\\x1b]112;normal\\x1b\\\\` to switch to whatever the terminal assumes to be best for general-purpose CLI work, i.e. Termux would probably choose its default, \"immediate\" keyboard without any autocorrect.\r\n\r\nWe could start small and only support `text` and `normal`, and in the future allow additional modes like\r\n\r\n* `email` (optimized for email addresses, e.g. by providing dedicated `@` and `.com` buttons)\r\n* `number` (shows a number keypad)\r\n* `password` (optimized for passwords, with a number and/or special characters row, as well as without any autocorrect or predictive text)\r\n* `tel` (shows a number keypad with additional buttons relevant for phone numbers, like `+`, `-`, `(`, `)` etc.)\r\n* `url` (optimized for URLs, e.g. with `https://`, `/` and `.com` butons)\r\n\r\nKeep in mind that actually implementing these keyboards is out of scope for Termux itself, as Android already provides an API to signal to the user's keyboard that one of these modes should be activated. Termux would only need to map these string values to the corresponding Android constant(s).","comments":1,"created_at":"2023-12-14T00:13:34Z","labels":["enhancement","Keyboard"],"number":3733,"title":"[Feature]: OSC sequence to change soft keyboard mode","updated_at":"2023-12-14T08:15:14Z"} +{"author":"sls1005","body":"### Feature description\n\nSometimes I tried acquiring the wakelock but accidentally tapped the `Exit` button on the notification bar instead and the session went away. This has happened at least twice because I was so stupid. So I hope there be a confirmation when doing that.\n\n### Additional information\n\nSome versions of Android system would show a confirmation message when a quicksetting (like Wifi, Data, or Location) is triggered, to prevent them from being accidentally turned off.","comments":0,"created_at":"2023-11-22T08:09:13Z","labels":["enhancement"],"number":3713,"title":"[Feature]: Confirmation when exiting from notification","updated_at":"2023-12-23T08:23:06Z"} +{"author":"ysalmon","body":"### Feature description\n\nI use the wakelock mainly to avoid problems when accessing termux via ssh, but having it permanently seems to roughly double power consumption while the phone is not used.\r\n\r\nSo I bastled a thing to have a wakelock put in place when the first session is started, and released when there are no more sessions :\r\n\r\nin ``.profile`` :\r\n\r\n```\r\nfich=\"$HOME/.termux/nbSessions\"\r\n\r\nif [[ -f \"$fich\" ]]; then\r\n nbSessions=\"$(cat $fich)\"\r\nelse\r\n nbSessions=0\r\nfi\r\n\r\nif (( $nbSessions == 0 )); then\r\n termux-wake-lock\r\nfi\r\n\r\n((nbSessions++))\r\n\r\necho $nbSessions \u003e $fich\r\n```\r\n\r\nin ``.bash_logout``\r\n\r\n```\r\nfich=\"$HOME/.termux/nbSessions\"\r\n\r\nif [[ -f \"$fich\" ]]; then\r\n nbSessions=\"$(cat $fich)\"\r\nelse\r\n nbSessions=1\r\nfi\r\n\r\n((nbSessions--))\r\n\r\nif (( $nbSessions == 0 )); then\r\n termux-wake-unlock\r\nfi\r\n\r\necho $nbSessions \u003e $fich\r\n```\r\n\r\n\r\nBut this is rather crude, and furthermore, there are probably more general use case when a user wants a wakelock for certain reasons but not others, and those reasons can chronologically overlap.\r\n\r\nSo I suggest an \"incremental\" variant for ``termux-wake-lock`` and ``termux-wake-unlock`` with an internal number of \"currently active locks\" that get incremented or decremented, and the actual locking/unlocking mechanism performed when reaching zero. The notification could also mention the number of active locks.\n\n### Additional information\n\nI do not know what to say here.","comments":2,"created_at":"2023-11-10T21:16:55Z","labels":[],"number":3694,"title":"[Feature]: incremental wakelock","updated_at":"2023-11-23T21:01:20Z"} +{"author":"andruska","body":"### Problem description\n\nPrograms launched in the Termux terminal cannot know the focus state of the Termux terminal Android window or the window of the terminal session.\n\n### Steps to reproduce the behavior.\n\nWhen expecting Xterm compatible behavior:\r\n\r\n`$ echo -e \"\\e[?1004h\" \u0026\u0026 read`\r\n\r\nProduces nothing when switching Android app or Termux terminal sessions inside Android window.\r\n\n\n### What is the expected behavior?\n\nReceiving \r\n`\\e[I` (focus-in) or `\\e[O` (focus-out)\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: Android 10\r\n* Device model: Huawei","comments":1,"created_at":"2023-10-16T15:16:46Z","labels":["bug report"],"number":3650,"title":"[Bug]: Termux terminal focus reporting is a bug or not implemented","updated_at":"2024-08-02T20:53:15Z"} +{"author":"petrmachcz","body":"### Feature description\n\nThe Termux is great and I really loved the extra-keys. I use several sets of configurations that I change before running the program. For example, I have one, two and three line configurations for vim/python, I have a set for vim/html, vim/javascript, and also for the Tome2 game. I prefer this to a physical keyboard for typing, because I'm Czech, I have an accented keyboard and I have to type all the 'programming' characters intricately via modifiers. With the extra-keys in termux I don't have to.\r\n\r\nIt would be very useful to me if the **various sets of extra-keys** were supported directly by termux. I imagine that there would be multiple extra-keys sections in termux.properties, namely `extra-keys-1` to `extra-keys-9`. \r\n\r\nThere would also be **virtual keys** (similar to `KEYBOARD` and `DRAWER`) `EXTRA0` to `EXTRA9` that would switch the virtual keyboard to the appropriate set. Key `EXTRA0` would switch to the existing set of extra-keys.\r\n\r\nAn example of such a configuration for switching between two keyboards:\r\n\r\n`extra-keys-1 = [[{key: 'EXTRA2', display: 'TMUX'}, ~vim specific configuration~]]`\r\n`extra-keys-2 = [[{key: 'EXTRA1', display: 'VIM'}, ~tmux specific configuration~]]`\r\n\r\nAbsolute perfection would be **color support**, something like:\r\n\r\n`{key: '@@', display: 'Run macro', color: 9}`\r\n\r\nThis would allow not only to show in color on the set switch which set is active, but also to distinguish in color the individual keys in the extra-keys.\r\n\r\nThank you for reading\r\nPetr Mach\r\n\r\nTranslated with www.DeepL.com/Translator (free version)\n\n### Additional information\n\nNone aditional information.","comments":9,"created_at":"2023-09-27T06:48:42Z","labels":[],"number":3601,"title":"[Feature]: Support for multiple sets of extra-keys","updated_at":"2024-02-10T08:48:00Z"} +{"author":"voronind-com","body":"### Problem description\n\nI use alt+esc combo in tmux to create new window. termux is the only one TE that doesn't send this key. I use on-screen keyboard, app's native extra keys. when I press esc it just drops alt press and nothing happens. \n\n### Steps to reproduce the behavior.\n\n1. press alt on extra keys. alt will be highlighted. \r\n2. press esc. alt key is no longer highlighted, no alt-esc is sent. \n\n### What is the expected behavior?\n\npressing alt+esc should be passed to terminal. \n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 12\r\n* Device model: POCO X4 PRO 5G","comments":10,"created_at":"2023-09-09T17:00:35Z","labels":["bug report"],"number":3579,"title":"[Bug]: ","updated_at":"2026-01-22T16:51:31Z"} +{"author":"wintonBy","body":"### Problem description\n\nStart app, but nothing output on screen.\n\n### Steps to reproduce the behavior.\n\nexpect output shell \n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: master code.\r\n* Android OS version: AOSP 13\r\n* Device model: pixel 6a\r\n","comments":4,"created_at":"2023-09-05T02:51:09Z","labels":["bug report"],"number":3576,"title":"[Bug]: when signature termux-app with system key, it seems not work.","updated_at":"2023-10-21T05:00:44Z"} +{"author":"amaramth","body":"### Feature description\r\n\r\nThe soft keyboard's popups are excellent, but they're limited to 1 per key. Swiftkey handles this with a popup menu that has multiple selections laid out horizontally, but Termux's ergonomic is more elegant. I propose expanding it to multiple popups accessible via swiping in different directions.\r\n\r\nFor example, using up = 0 this could define a three-lobed radial menu with `./` available in most of the up directions and `...`, `?.` splitting the rest.\r\n```\r\n{ key: '.', popup: { radial: [ \\\r\n { macro: '. /', display: './' ,span:[ 0.8,0.2 ] }, \\\r\n { macro: '. . .', display: '...' ,span:[ 0.2,0.5 ] }, \\\r\n { macro: '? .', display: '?.' ,span:[ 0.5,0.8 ] } \\\r\n ] } } \\\r\n```\r\n\r\nIt might be best to keep the location of the popup display the same, no matter the radial choice, both for clean visibility and ease of implementation. \r\n\r\n","comments":2,"created_at":"2023-09-04T10:33:45Z","labels":[],"number":3571,"title":"[Feature]: Expand soft keyboard popups to radial menus","updated_at":"2023-09-06T04:03:08Z"} +{"author":"kevinboone","body":"### Problem description\n\n`termux-open` does not seem to work at all, in any of the many ways I have tried it, on my S5E tablet with Android 13. I'm aware that it's always been somewhat problematic, to make termux interact properly with graphical Android apps, owing to all the various security restrictions. However, I'm unsure whether it's even expected to work with Android 13.\r\n\r\nWhen I run `termux-open file`, what generally happens is that a chooser window pops up (even if I don't use the `-chooser` switch). One of the choices is always 'Termux', the other usually an app that can handle the file. I don't really even know what I'm supposed to select at this point. \r\n\r\nIf I choose 'Termux', I see an error pop-up dialog from `TermuxFileReceiver` saying that the file is invalid. If I choose an ordinary app, it generally starts, but then either displays a blank page or an error message of some kind -- depending on the file type.\r\n\r\nI've tried with files that are in the Termux home directory, absolute paths to files in the termux home directory, absolute paths to files in /storage, and file:/// URLs. The results differ according to where the file is, but the result is never that any file gets opened.\r\n\r\nTo be honest, I really have no idea how `termux-open` is supposed to work, so it's hard to troubleshoot.\r\n\r\n\n\n### Steps to reproduce the behavior.\n\nOn an Android 13 device, try to open a file using `termux-open`.\n\n### What is the expected behavior?\n\nI would expect an app that can handle the file to launch, and show the file.\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: Lineage OS 20 (Android 13) (rooted)\r\n* Device model: Samsung S5E\r\n","comments":10,"created_at":"2023-08-31T15:05:51Z","labels":["bug report"],"number":3565,"title":"[Bug]: termux-open does not seem to work with Android 13 (should it?)","updated_at":"2023-09-30T11:27:50Z"} +{"author":"shankar-narayan-k","body":"### Feature description\n\nHi all,\r\nSometimes while debugging, the error message can exceed screen size, while posting it online asking for help, I have to do one of two things, \r\nA. Post two screenshots instead of one.\r\nB. Use some third party app to stitch them together.\r\n\r\nI thought since we already have scrolling screenshot feature on Android, if we can integrate it then it's one less step when asking for help \n\n### Additional information\n\nThis feature can be found in almost all popular apps on Play Store.\r\nAlthough I don't know about other terminal emulator with this feature.","comments":6,"created_at":"2023-08-19T05:03:11Z","labels":["wontfix"],"number":3554,"title":"Scrolling screenshot ","updated_at":"2024-01-29T15:58:15Z"} +{"author":"crbednarz","body":"### Problem description\n\nI've been observing an issue for some time where text will occasionally be incorrectly offset to the left by one character.\r\n\r\nI typically use Termux to SSH into another machine, attach to a tmux session, and open neovim (with a theme and other plugins). With this particular combination I'd frequently see the following:\r\n(Ignore the incorrect characters- I reset my font as part of trying to isolate the issue)\r\n![Screenshot_20230816_195015_Termux](https://github.com/termux/termux-app/assets/3231783/42622358-7379-464f-b307-d39f65247739)\r\n(Note lines 15 and below)\r\nAnd even without tmux in play, the same issue could occur- albeit less frequently:\r\n![Screenshot_20230816_193638_Termux](https://github.com/termux/termux-app/assets/3231783/031c4203-8e2e-4c8b-bb51-a49614619c08)\r\n(Note lines 13, 14, 19, and 26 are all incorrectly offset)\r\n\r\nWhat made things more interesting is that if I attached to the same tmux session from another terminal, I would not see the misalignment.\r\n\r\nTo help isolate the problem, I ran `script` to capture the raw output and found the issue appeared to be with how lines were cleared. Whenever the entire display was resent, each line would begin with `^[[K` to clear the line ahead. However, it appears that whenever a full row's worth of characters is sent, followed by `^[[K`, instead of clearing the new line it clears the last character of the previous line and resets the cursor there.\r\n\r\nIn other words, if my terminal was 5 characters wide\r\n```\r\n^[[K12345^[[K12345\r\n```\r\nwould display as\r\n```\r\n12341\r\n2345\r\n```\r\ninstead of\r\n```\r\n12345\r\n12345\r\n```\r\n\r\nI believe this is especially frequent with `tmux` as it appears to always send a full line, even if it's just empty space. So the alignment is only corrected when an individual line is resent.\r\n\r\nNow, I'm not remotely knowledgeable about terminal emulation, so hopefully my assessment hasn't been too far off base. But I'm thinking the intended behavior is for `^[[K` to clear the line the cursor would have wrapped to.\n\n### Steps to reproduce the behavior.\n\nTo help reproduce the issue, I've created a Python script to showcase the behavior.\r\n\r\n```\r\nimport os\r\nfrom itertools import islice, cycle\r\n\r\ndef main():\r\n size = os.get_terminal_size()\r\n message = ''.join(islice(cycle(\"0123456789\"), size.columns))\r\n print((\"\\x1b[K\" + message) * 5)\r\n\r\nif __name__ == '__main__':\r\n main()\r\n```\r\n\r\nThis will print 5 lines beginning with `^[[K` followed by 0-9 repeating until the full width of the terminal is reached.\r\n\r\nOn my phone I see the following:\r\n![Screenshot_20230816_201033_Termux](https://github.com/termux/termux-app/assets/3231783/a263a278-a86d-42ed-be6c-5ba26766f68e)\r\n\r\nWhile other terminals (such as Windows Terminal) I see:\r\n![bug](https://github.com/termux/termux-app/assets/3231783/e9a5607d-d80c-438b-bdd2-99779ba57ced)\r\n\n\n### What is the expected behavior?\n\nWhen `^[[K` would land on a new line due to wrapping, it should clear that new line and leave the cursor in place.\n\n### System information\n\n* Termux application version: Tested with both the latest f-droid version (v0.118) and the latest commit (0.118.0+7c262b8)\r\n* Android OS version: 13 (I believe this applied to 12 as well)\r\n* Device model: Galaxy Fold 4\r\n","comments":3,"created_at":"2023-08-17T03:19:29Z","labels":["bug report"],"number":3549,"title":"[Bug]: Incorrect handling of \"Erase in Line\" on wrapped line","updated_at":"2023-08-23T22:41:23Z"} +{"author":"MrAXUAN","body":"### Problem description\n\nI installed OpenSSH on termux, but my computer doesn't connect.\r\n\r\nMy phone with termux and computer are on the same wifi, and the computer cannot be connected through ssh, but I can connect again using juicessh on my phone with termux. What's going on?\n\n### Steps to reproduce the behavior.\n\nI installed openssh on termux.\r\n`pkg upgrade`\r\n`pkg install openssh`\r\n\r\nAfter launching ssh, I looked at the IP address of my phone .\r\n`sshd`\r\n`ifconfig`\r\n\r\nThen I used my computer to try to connect to termux with ssh.\r\n`ssh u0_a350@192.168.188.129 -p 8022`\r\nu0_a350 is my username and 192.168.188.129 It's my LAN IP.\r\nI am sure that my computer and phone are in the same LAN.\r\nAfter entering the command, the computer displays\r\n`Connection timed out`\n\n### What is the expected behavior?\n\nMy computer connects to termux smoothly.\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 11","comments":9,"created_at":"2023-08-14T03:41:44Z","labels":["bug report"],"number":3544,"title":"[Bug]: Why can't my computer connect to termux with ssh?","updated_at":"2024-11-26T15:17:52Z"} +{"author":"JaitinPrakash","body":"### Problem description\n\ntermux occasionally crashes when the screen is rotated, after failing to allocate a tiny amount memory, despite having multiple gigabytes free. crash appears to be related to number of terminal lines being improperly handled.\r\n\r\ncrash report: https://pastebin.pl/view/6332910e\n\n### Steps to reproduce the behavior.\n\nI'm not fully sure how to reproduce the crash, but I believe it is related to terminal lines.\r\n\r\n1. produce a large number of data, creating many terminal lines.\r\n2. rotate screen\r\n3. crashes, complaining about not allocating a few hundred bytes; usually around 500 or so\n\n### What is the expected behavior?\n\nterminal emulator viewport rotates, displaying terminal in widescreen mode.\n\n### System information\n\n* Termux application version: `0.118.0+8569913`\r\n* Android OS version: `4.19.113-26203352`\r\n* Device model: `SM-N986U`\r\n","comments":4,"created_at":"2023-08-09T06:29:59Z","labels":["bug report"],"number":3541,"title":"[Bug]: termux inconsistently crashes when resizing","updated_at":"2023-10-29T18:54:04Z"} +{"author":"532910","body":"### Feature description\n\nPlease add support to remove the termux window from the recent apps menu on EOF\n\n### Additional information\n\nhttps://stackoverflow.com/questions/13385289/remove-app-from-recent-apps-programmatically","comments":0,"created_at":"2023-08-04T16:48:23Z","labels":[],"number":3539,"title":"[Feature]: Remove window from the recent apps menu on ctrl-d","updated_at":"2023-08-04T16:48:23Z"} +{"author":"Rudxain","body":"\u003e [The app could later be optimised to work on the Fire TV and Fire TV Stick devices.](https://github.com/termux/termux-app/issues/326#issuecomment-366207778)\r\n\r\nWill there ever be support for those devices?\r\n\r\nI ran `adb install termux-app_v0.118.0+github-debug_armeabi-v7a.apk`, on a 3rd-gen. It worked! But the OS virtual-keyboard disappears after a split-second, for some reason, so I can't type anything. The RC navigation-buttons don't work either, so I can't use the Termux keyboard.\r\n\r\nThe only workarounds are `adb shell input`, `scrcpy`, `ssh`, and Bluetooth/USB-OTG keyboards","comments":15,"created_at":"2023-06-21T13:10:01Z","labels":[],"number":3477,"title":"Fire TV support?","updated_at":"2025-10-02T06:22:38Z"} +{"author":"coppergold","body":"### Problem description\n\nI am writing to seek assistance with a recurring issue I am facing while using Termux on my Android phone. The problem involves automatic crashes occurring within 5 minutes of launching the application, despite my attempts to resolve it.\n\n### What steps will reproduce the bug?\n\nTroubleshooting Steps Taken:\r\n\r\n1. Package Installation: To ensure that all necessary packages are installed, I have followed the official documentation and installed the required packages for Termux.\r\n\r\n2. Battery Consumption: I have disabled any battery optimization settings for Termux to ensure that it can run without any restrictions in the background. This step was taken to eliminate any possible interference caused by aggressive power management.\r\n\r\n3. Background Usage: Additionally, I have enabled background usage permissions specifically for Termux, allowing it to run uninterrupted even when it is not in the foreground.\r\n\r\n4. Device Reboot: I have also performed a complete reboot of my Android phone to rule out any temporary software glitches that might have been affecting Termux.\r\n\r\nDespite the aforementioned steps, the crashes persist, and I am unable to use Termux effectively for my intended tasks. It is worth noting that I have not made any recent changes or updates to my device's operating system or other software that could potentially be causing this issue.\n\n### What is the expected behavior?\n\nWhenever I launch Termux and attempt to perform various tasks, such as running commands or executing scripts, the application abruptly crashes. This issue occurs consistently and does not appear to be associated with any particular action or command. The crashes happen randomly during normal usage, which makes it difficult to pinpoint a specific trigger.\n\n### System information\n\ntermux-info:\r\n\r\n```\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]`\r\n**Crash Timestamp**: `2023-06-20 09:48:59.825 UTC`\r\n\r\n**Crash Message**:\r\n```\r\npointerIndex out of range\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\njava.lang.IllegalArgumentException: pointerIndex out of range\r\n at android.view.MotionEvent.nativeGetAxisValue(Native Method)\r\n at android.view.MotionEvent.getX(MotionEvent.java:2408)\r\n at androidx.viewpager.widget.ViewPager.onInterceptTouchEvent(ViewPager.java:2072)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2697)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3192)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2832)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3170)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2832)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3170)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2832)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3170)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2832)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3170)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2832)\r\n at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:575)\r\n at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1945)\r\n at android.app.Activity.dispatchTouchEvent(Activity.java:4232)\r\n at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:528)\r\n at android.view.View.dispatchPointerEvent(View.java:14724)\r\n at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6483)\r\n at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6266)\r\n at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5727)\r\n at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5794)\r\n at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5755)\r\n at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5917)\r\n at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5763)\r\n at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5974)\r\n at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5731)\r\n at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5794)\r\n at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5755)\r\n at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5763)\r\n at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5731)\r\n at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8577)\r\n at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8528)\r\n at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8480)\r\n at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8717)\r\n at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:238)\r\n at android.os.MessageQueue.nativePollOnce(Native Method)\r\n at android.os.MessageQueue.next(MessageQueue.java:339)\r\n at android.os.Looper.loop(Looper.java:208)\r\n at android.app.ActivityThread.main(ActivityThread.java:8192)\r\n at java.lang.reflect.Method.invoke(Native Method)\r\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)\r\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux`\r\n**PACKAGE_NAME**: `com.termux`\r\n**VERSION_NAME**: `0.118.0`\r\n**VERSION_CODE**: `118`\r\n**TARGET_SDK**: `28`\r\n**IS_DEBUGGABLE_BUILD**: `false`\r\n**APK_RELEASE**: `F-Droid`\r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42`\r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `4.19.127-ge275d78fd-dirty`\r\n**SDK_INT**: `30`\r\n**RELEASE**: `11`\r\n**ID**: `RP1A.200720.012`\r\n**DISPLAY**: `RP1A.200720.012 release-keys`\r\n**INCREMENTAL**: `eng.compil.20230322.112912`\r\n**SECURITY_PATCH**: `2022-05-01`\r\n**IS_DEBUGGABLE**: `0`\r\n**IS_TREBLE_ENABLED**: `true`\r\n**TYPE**: `user`\r\n**TAGS**: `release-keys`\r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `vivo`\r\n**BRAND**: `vivo`\r\n**MODEL**: `vivo 1904`\r\n**PRODUCT**: `1904`\r\n**BOARD**: `k62v1_64_bsp`\r\n**HARDWARE**: `mt6762`\r\n**DEVICE**: `1904`\r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi`\r\n```\r\n","comments":0,"created_at":"2023-06-21T11:49:08Z","labels":["bug report"],"number":3478,"title":"[Bug]: Termux Auto Crash ","updated_at":"2023-06-21T17:04:10Z"} +{"author":"aki-k","body":"### Problem description\n\nWhen selecting text in Termux and using copy, the content that is copied to the copy buffer is missing newlines.\n\n### Steps to reproduce the behavior.\n\n1) open a ssh connection to a ssh server\r\n2) open a text file in the ssh session with vim\r\n(the text file has 5 lines)\r\n3) select all the lines\r\n4) paste the lines in https://paste.linux.chat/\r\n5) newlines are removed\n\n### What is the expected behavior?\n\nnewlines should have been included in the paste\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 11\r\n* Device model: Motorola Moto One 5G Ace\r\n","comments":1,"created_at":"2023-06-20T10:58:42Z","labels":["bug report"],"number":3474,"title":"[Bug]: Termux text select -\u003e copy removes newlines","updated_at":"2024-11-29T12:36:05Z"} +{"author":"twaik","body":"### Feature description\n\nHi. Every dev of termux knows that partial upgrades are not supported. But after installation termux unpacks bootstrap with outdated packages and installing other packages without updating installed environment causes errors and confuses people.\n\n### Additional information\n\nMaybe it would be better to make correvtive releases for bootstrap without updating termux-app code. `termux-packages` has revision mechanism, maybe it would be better to implement something simillar here. It will let people use termux without making `pkg update \u0026\u0026 pkg upgrade` right after installing the application. \r\n\r\nCreating new revision and uploading it can be triggered by updating packages contained in bootstrap so it may be not triggered manually.\r\n\r\nThank you.","comments":5,"created_at":"2023-06-17T01:35:58Z","labels":[],"number":3465,"title":"[Feature]: Corrective releases (revisions?)","updated_at":"2023-06-17T11:13:38Z"} +{"author":"lucidnx","body":"### Feature description\n\nHello! I am using Yubikey with resident key to authenticate om servers over SSH. Can you implement API to allow us using security keys?\n\n### Additional information\n\nAndroid has an API for that.","comments":3,"created_at":"2023-06-15T16:54:12Z","labels":["enhancement"],"number":3461,"title":"FIDO2/Webauthn support","updated_at":"2025-04-04T15:48:54Z"} +{"author":"shadowe1ite","body":"### Feature description\n\nI kindly request the addition of blink text support to the Termux shell. Blinking text is a valuable visual cue for drawing attention to critical information or providing real-time updates. \r\n\r\neg: \r\n\r\n```\r\necho \"Server status: OK\"\r\n```\r\nwith the inclusion of blink text support, I could highlight critical events by displaying them with blinking text:\r\n\r\n```\r\necho -e \"\\e[5mServer status: CRITICAL\\e[0m\"\r\n```\n\n### Additional information\n\n!","comments":1,"created_at":"2023-06-11T14:48:29Z","labels":["enhancement"],"number":3455,"title":"[Feature]: Add Blink Text Support to Termux Shell","updated_at":"2023-06-15T07:00:16Z"} +{"author":"amaramth","body":"### Problem description\n\n`termux-open-url https://github.com/a ;termux-open-url https://github.com/b` only opens `https://github.com/b`. Sometimes it causes the terminal to exit instead of opening `https://github.com/b`.\n\n### Steps to reproduce the behavior.\n\n```\r\ntermux-open-url https://github.com/a\r\ntermux-open-url https://github.com/b\r\n```\n\n### What is the expected behavior?\n\n`https://github.com/a` and `https://github.com/b` are opened in separate tabs. The terminal does not exit.\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 8.0.0\r\n* Device model: F5321","comments":0,"created_at":"2023-06-10T20:23:33Z","labels":["bug report"],"number":3452,"title":"[Bug]: `termux-open-url` opens 1 page when called rapidly, and sometimes crashes","updated_at":"2023-06-10T20:23:33Z"} +{"author":"amaramth","body":"### Problem description\r\n\r\nEven with \"soft keyboard only if no hardware keyboard\" enabled, sometimes the soft keyboard shows up anyway. Sometimes it's just the auto-complete area of the soft keyboard, other times it's the entire thing.\r\n\r\nI filed this bug because keeping the soft keyboard closed prevents some other termux bugs that have more impact.\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nNot known.\r\n\r\n### What is the expected behavior?\r\n\r\n\"soft keyboard only if no hardware keyboard\" removes the soft keyboard if it does show up.\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118.0\r\n* Android OS version: 8.0.0\r\n* Device model: F5321","comments":6,"created_at":"2023-06-10T16:31:20Z","labels":["bug report"],"number":3450,"title":"[Bug]: \"soft keyboard only if no hardware keyboard\" doesn't always work","updated_at":"2025-01-24T04:49:43Z"} +{"author":"amaramth","body":"### Problem description\r\n\r\nSometimes backspace deletes dozens or hundreds of characters at once. Sometimes it appears to specifically delete up to a newline, but this may be coincidence. Like the other input bugs it is momentarily resolved by switching to another app, typing, and going back to termux.\r\n\r\nObserved using a hardware keyboard with \"soft keyboard only if no hardward keyboard\" enabled.\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nNot known. Occurs only after switching apps.\r\n\r\n### What is the expected behavior?\r\n\r\nBackspace works normally.\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118.0\r\n* Android OS version: 8.0.0\r\n* Keyboard: Swiftkey","comments":4,"created_at":"2023-06-10T16:28:26Z","labels":["bug report"],"number":3449,"title":"[Bug]: sometimes backspace deletes many characters","updated_at":"2024-04-15T17:22:29Z"} +{"author":"C0MRADE001","body":"### Problem description\n\nCan't install pakages.\n\n### Steps to reproduce the behavior.\n\npkg install python2\n\n### What is the expected behavior?\n\n![Screenshot_20230610_111416_Termux](https://github.com/termux/termux-app/assets/120469624/40590de4-2cef-47e8-b49d-55c7ff85eb1c)\r\n\n\n### System information\n\n* Termux application version: 0.118\r\n* Android OS version:13\r\n* Device model: SM-A045F/DS\r\n","comments":3,"created_at":"2023-06-10T09:15:12Z","labels":["bug report"],"number":3448,"title":"dpkg: error: cannot access archive '/data/data/com.termux/cache/apt/archives/less_633-1_aarch64.deb'","updated_at":"2024-10-19T12:46:07Z"} +{"author":"ZaxonXP","body":"### Feature description\n\nCurrently when there are more than one session, changing the font size with `Ctrl-Alt-+` or `Ctrl-Alt--` makes the change global for all the sessions. It would be very useful to have the change local to the session.\n\n### Additional information\n\nThis is a kind of standard in many Linux terminals.","comments":0,"created_at":"2023-06-09T11:13:00Z","labels":[],"number":3445,"title":"[Feature]: Different font sizes for each session.","updated_at":"2023-06-09T11:13:00Z"} +{"author":"rohoog","body":"### Feature description\n\ntermux is a nice terminal emulator, but it can only 'talk' to a linux shell program. Android doesn't normally (unless rooted) allow to use the /dev/tty{USB,ACM}x device nodes. There is a library https://github.com/mik3y/usb-serial-for-android that adds this using the Android permissions.\r\n\r\nIt would be a great added value to allow this, so we can use termux to talk to our USB gadgets built with microcontroller boards, such as Arduino/STM32 etc. using USB-OTG, so we can do software maintenance using the smartphone without the effort of writing an app.\n\n### Additional information\n\nSerialUSBTerminal (Kai Morich) does this, but it doesn't have proper terminal emulation; it looks like the arduino-IDE 'serial monitor'.","comments":2,"created_at":"2023-05-29T21:11:24Z","labels":[],"number":3429,"title":"[Feature]: add support to connect with usb-serial instead of pseudo-tty","updated_at":"2025-12-15T08:04:44Z"} +{"author":"jonaskuske","body":"### Problem description\r\n\r\nI'm using a Bluetooth keyboard with German QWERTZ layout configured as German/QWERTZ in Android system settings. Everything is working fine, besides the Ctrl+Backslash shortcut not working.\r\n\r\nIt does work if I input it via `extra-keys` on the touchscreen, but nothing happens when I try the shortcut on the bluetooth keyboard. I suspect it has to do with AltGr/AltRight handling - on German layouts, backslash is entered through AltGr+├ƒ.\r\n\r\n`logcat` shows these inputs:\r\n\r\n```\r\nI/Termux:TerminalView(23849): onKeyPreIme(keyCode=113, event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_CTRL_LEFT, scanCode=29, metaState=META_CTRL_ON|META_CTRL_LEFT_ON|META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70922801, downTime=70922801, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyDown(keyCode=113, isSystem()=false, event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_CTRL_LEFT, scanCode=29, metaState=META_CTRL_ON|META_CTRL_LEFT_ON|META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70922801, downTime=70922801, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyPreIme(keyCode=58, event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_ALT_RIGHT, scanCode=100, metaState=META_ALT_ON|META_ALT_RIGHT_ON|META_CTRL_ON|META_CTRL_LEFT_ON|META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70922887, downTime=70922887, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyDown(keyCode=58, isSystem()=false, event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_ALT_RIGHT, scanCode=100, metaState=META_ALT_ON|META_ALT_RIGHT_ON|META_CTRL_ON|META_CTRL_LEFT_ON|META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70922887, downTime=70922887, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyPreIme(keyCode=76, event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_SLASH, scanCode=12, metaState=META_ALT_ON|META_ALT_RIGHT_ON|META_CTRL_ON|META_CTRL_LEFT_ON|META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70922977, downTime=70922977, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyDown(keyCode=76, isSystem()=false, event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_SLASH, scanCode=12, metaState=META_ALT_ON|META_ALT_RIGHT_ON|META_CTRL_ON|META_CTRL_LEFT_ON|META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70922977, downTime=70922977, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyPreIme(keyCode=113, event=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_CTRL_LEFT, scanCode=29, metaState=META_ALT_ON|META_ALT_RIGHT_ON|META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70923200, downTime=70922977, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyUp(keyCode=113, event=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_CTRL_LEFT, scanCode=29, metaState=META_ALT_ON|META_ALT_RIGHT_ON|META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70923200, downTime=70922977, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyPreIme(keyCode=58, event=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_ALT_RIGHT, scanCode=100, metaState=META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70923200, downTime=70922977, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyUp(keyCode=58, event=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_ALT_RIGHT, scanCode=100, metaState=META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70923200, downTime=70922977, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyPreIme(keyCode=76, event=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_SLASH, scanCode=12, metaState=META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70923200, downTime=70922977, deviceId=22, source=0x301, displayId=-1 })\r\nI/Termux:TerminalView(23849): onKeyUp(keyCode=76, event=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_SLASH, scanCode=12, metaState=META_NUM_LOCK_ON, flags=0x8, repeatCount=0, eventTime=70923200, downTime=70922977, deviceId=22, source=0x301, displayId=-1 })\r\n```\r\n\r\n### Steps to reproduce the behavior.\r\n\r\n- `logcat`\r\n- enter ^\\ via external keyboard\r\n- nothing happens\r\n- enter ^\\ via extra-keys\r\n- SIGQUIT\r\n\r\n### What is the expected behavior?\r\n\r\nShortcut works, program receives SIGQUIT and quits\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118\r\n* Android OS version: 12L\r\n* Device model: Surface Duo\r\n","comments":0,"created_at":"2023-05-21T21:54:29Z","labels":["bug report"],"number":3412,"title":"[Bug]: ^\\ (SIGQUIT) shortcut doesn't work on QWERTZ layout","updated_at":"2023-05-27T09:03:38Z"} +{"author":"ghost","body":"### Problem description\n\nHow to run kotlin multi platform on termux? \r\nI want to create the kmm project with termux and compile it to apk with termux,\r\nAnd if you're able to make me make the project that depends on jetpack compose instead of xml I will be thankful \r\n\r\n\r\n\n\n### Steps to reproduce the behavior.\n\n.......\n\n### What is the expected behavior?\n\n......\n\n### System information\n\n* Termux application version:\r\n* Android OS version:\r\n* Device model:\r\n","comments":1,"created_at":"2023-05-17T14:45:52Z","labels":["question"],"number":3401,"title":"[Bug]: Run KMM on termux ","updated_at":"2023-06-01T09:54:28Z"} +{"author":"vanhocpham","body":"### Problem description\n\nI run a Nodejs application using Termux but when my phone is out of battery then reboots and Termux auto-deletes the application on PM2 after rebooting the device. Looking forward to your feedback on how to fix it\n\n### Steps to reproduce the behavior.\n\n- Run Termux\r\n- Setup Environment Run NodeJS\r\n- Setup PM2 to Management Application\r\n- Device Out Of Battery And Reboot\r\n- Termux auto-deletes the application on PM2\n\n### What is the expected behavior?\n\nLooking forward to your feedback on how to fix it\n\n### System information\n\n* Termux application version: v0.118.0\r\n* Android OS version: 10\r\n* Device model: realme rmx2001\r\n","comments":2,"created_at":"2023-04-25T02:24:16Z","labels":[],"number":3360,"title":"[Bug]: Termux auto delete application on PM2 after reboot device","updated_at":"2023-04-25T09:57:33Z"} +{"author":"kiber-io","body":"### Problem description\r\n\r\nThen you try to open the termux folder through the standard Files application or another application that allows you to use DocumentsUI, termux fails with an error and does not allow you to get into your folder\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nThe last thing I did before catching this error was to install objection (and dependencies to it: openjdk, apk signer, apktool, aapt). After launching the objection work via DocumentsUI fell off.\r\n\r\n**Up to this point, everything worked fine.**\r\n\r\n### What is the expected behavior?\r\n\r\n_No response_\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118.0\r\n* Android OS version: 13 (OneUI 5.1)\r\n* Device model: Samsung S21 FE\r\n\r\nI will attach the report from termux in the comments","comments":8,"created_at":"2023-04-17T21:59:54Z","labels":["bug report"],"number":3348,"title":"[Bug]: DocumentsUI crash","updated_at":"2023-04-18T11:14:25Z"} +{"author":"arithesage","body":"### Problem description\r\n\r\nHi, i'm testing creating a module for easily including the ability of executing Termux commands from my apps, but i have run in a curious problem.\r\n\r\nIf follow the RUN_COMMAND tutorial, that is, creating an app that executes a command from the MainActivity class, all works as expected (while debugging, the breakpoint inside onHandleIntent function is hit) but when i try in other app where the Termux functionality is inside of another module (the library all the other apps will include to make use of Termux), the breakpoint is never reached.\r\n\r\nAnd without throwing erros in Logcat!\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nI'm doing the testing in my Redmi Note 8, an Android 11 device.\r\n\r\nThis is the TermuxModule manifest:\r\n\r\n\r\n\u003e \u003cqueries\u003e\r\n\u003e \u003cpackage android:name=\"com.termux\" /\u003e\r\n\u003e \u003c/queries\u003e\r\n\u003e \r\n\u003e \u003capplication\u003e\r\n\u003e \u003cservice android:name=\".TermuxResultService\" /\u003e\r\n\u003e \u003c/application\u003e\r\n\u003e \r\n\u003e \u003cuses-permission android:name=\"com.termux.permission.RUN_COMMAND\" /\u003e\r\n\r\nThe IntentService code is the same of the tutorial.\r\nI put the breakpoint here:\r\n\r\n\r\n\u003e @Override\r\n\u003e protected void onHandleIntent(@Nullable Intent intent) {\r\n\u003e **if (intent == null) return;**\r\n\u003e \r\n\u003e Log.d(LOG_TAG, PLUGIN_SERVICE_LABEL + \" received execution result\");\r\n\u003e \r\n\u003e final Bundle resultBundle = intent.getBundleExtra(TERMUX_APP.TERMUX_SERVICE.EXTRA_PLUGIN_RESULT_BUNDLE);\r\n\u003e if (resultBundle == null) {\r\n\u003e Log.e(LOG_TAG, \"The intent does not contain the result bundle at the \\\"\" + TERMUX_SERVICE.EXTRA_PLUGIN_RESULT_BUNDLE + \"\\\" key.\");\r\n\u003e return;\r\n\u003e }\r\n\r\n\r\nAnd this is the TermuxModule code:\r\n\r\n\r\n\u003e package me.ariaththesage.android.libs.termuxmodule.termuxmodule;\r\n\u003e \r\n\u003e import android.app.PendingIntent;\r\n\u003e import android.content.Context;\r\n\u003e import android.content.Intent;\r\n\u003e import android.os.Build;\r\n\u003e import android.util.Log;\r\n\u003e \r\n\u003e import com.termux.shared.termux.TermuxConstants;\r\n\u003e import com.termux.shared.termux.TermuxConstants.TERMUX_APP.RUN_COMMAND_SERVICE;\r\n\u003e \r\n\u003e import java.util.ArrayList;\r\n\u003e import java.util.List;\r\n\u003e \r\n\u003e public class Termux {\r\n\u003e public static void ExecuteCommand (Context appContext, String commandLine) {\r\n\u003e String[] commandLineChunks = null;\r\n\u003e List\u003cString\u003e args = null;\r\n\u003e String command = null;\r\n\u003e \r\n\u003e if (commandLine == null) {\r\n\u003e Log.e (\"\", \"\"); // TODO\r\n\u003e \r\n\u003e } else {\r\n\u003e commandLine = commandLine.trim();\r\n\u003e \r\n\u003e if (commandLine.length() == 0) {\r\n\u003e Log.e (\"\", \"\"); // TODO\r\n\u003e \r\n\u003e } else {\r\n\u003e commandLineChunks = commandLine.split(\" \");\r\n\u003e \r\n\u003e command = commandLineChunks[0];\r\n\u003e args = new ArrayList\u003cString\u003e();\r\n\u003e \r\n\u003e for (int c = 1; c \u003c commandLineChunks.length; c ++) {\r\n\u003e args.add(commandLineChunks[c]);\r\n\u003e } \r\n\u003e \r\n\u003e // Create a request for the Termux app for executing a command line.\r\n\u003e Intent termuxRequest = new Intent();\r\n\u003e termuxRequest.setClassName(TermuxConstants.TERMUX_PACKAGE_NAME, TermuxConstants.TERMUX_APP.RUN_COMMAND_SERVICE_NAME);\r\n\u003e termuxRequest.setAction(RUN_COMMAND_SERVICE.ACTION_RUN_COMMAND);\r\n\u003e \r\n\u003e termuxRequest.putExtra(RUN_COMMAND_SERVICE.EXTRA_COMMAND_PATH, \"/data/data/com.termux/files/usr/bin/\" + command);\r\n\u003e termuxRequest.putExtra(RUN_COMMAND_SERVICE.EXTRA_ARGUMENTS, args.toArray());\r\n\u003e termuxRequest.putExtra(RUN_COMMAND_SERVICE.EXTRA_WORKDIR, \"/data/data/com.termux/files/home\");\r\n\u003e termuxRequest.putExtra(RUN_COMMAND_SERVICE.EXTRA_BACKGROUND, true);\r\n\u003e termuxRequest.putExtra(RUN_COMMAND_SERVICE.EXTRA_SESSION_ACTION, 0);\r\n\u003e termuxRequest.putExtra(RUN_COMMAND_SERVICE.EXTRA_COMMAND_LABEL, \"uname command\");\r\n\u003e termuxRequest.putExtra(RUN_COMMAND_SERVICE.EXTRA_COMMAND_DESCRIPTION, \"Command test.\");\r\n\u003e \r\n\u003e \r\n\u003e // The Termux app will use this PendingIntent to send the command line execution result.\r\n\u003e Intent resultsServiceIntent = new Intent(appContext, TermuxResultService.class);\r\n\u003e \r\n\u003e int executionId = TermuxResultService.getNextExecutionId();\r\n\u003e \r\n\u003e PendingIntent termuxResponse = PendingIntent.getService(appContext, executionId, resultsServiceIntent, PendingIntent.FLAG_ONE_SHOT);\r\n\u003e \r\n\u003e termuxRequest.putExtra(RUN_COMMAND_SERVICE.EXTRA_PENDING_INTENT, termuxResponse);\r\n\u003e \r\n\u003e \r\n\u003e try {\r\n\u003e Log.i(\"Termux\", \"Executing command line '\" + commandLine + \"' with id \" + executionId);\r\n\u003e \r\n\u003e \r\n\u003e // Sends the Termux app the created request\r\n\u003e if (Build.VERSION.SDK_INT \u003e= Build.VERSION_CODES.O) {\r\n\u003e appContext.startForegroundService(termuxRequest);\r\n\u003e \r\n\u003e } else {\r\n\u003e appContext.startService(termuxRequest);\r\n\u003e }\r\n\u003e \r\n\u003e Log.i(\"TERMUX_COMMAND_RESULT\", resultsServiceIntent.getStringExtra(\"STDOUT\"));\r\n\u003e \r\n\u003e } catch (Exception e) {\r\n\u003e Log.e(\"Termux\", \"Failed executing '\" + commandLine + \"' with id \" + executionId + \": \" + e.getMessage());\r\n\u003e }\r\n\u003e }\r\n\u003e }\r\n\u003e }\r\n\u003e }\r\n\r\n\r\nAnd here the MainActivity:\r\n\r\n\u003e \r\n\u003e package me.ariaththesage.android.libs.termuxmodule.testapp;\r\n\u003e \r\n\u003e import androidx.appcompat.app.AppCompatActivity;\r\n\u003e \r\n\u003e import android.os.Bundle;\r\n\u003e \r\n\u003e import me.ariaththesage.android.libs.termuxmodule.termuxmodule.Termux;\r\n\u003e \r\n\u003e public class MainActivity extends AppCompatActivity {\r\n\u003e \r\n\u003e @Override\r\n\u003e protected void onCreate(Bundle savedInstanceState) {\r\n\u003e super.onCreate(savedInstanceState);\r\n\u003e setContentView(R.layout.activity_main);\r\n\u003e \r\n\u003e Termux.ExecuteCommand (getApplicationContext(),\"uname -a\");\r\n\u003e }\r\n\u003e }\r\n\r\n\r\nI also put a breakpoint at \"Log.i(\"TERMUX_COMMAND_RESULT\", resultsServiceIntent.getStringExtra(\"STDOUT\"));\" and at \"appContext.startForegroundService(termuxRequest);\".\r\n\r\nWhen the debugging stops at \"startForegroundService\", and i click \"Continue\" in Android Studio, the debugger stops at \"Log.i(\"TERMUX_COMMAND_RESULT\", resultsServiceIntent.getStringExtra(\"STDOUT\"));\" insted the other line in the IntentService.\r\n\r\nI suppose i'm doing something wrong, but i would love to know what...\r\n\r\n### What is the expected behavior?\r\n\r\nI would say \"It should work\" XD .\r\n\r\nThe module purpose is execute a command line in the background calling Termux module and retrieve the results (stdout and exit code).\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118.0\r\n* Android OS version: 11\r\n* Device model: Redmi Note 8 (rooted)\r\n","comments":10,"created_at":"2023-04-10T14:53:00Z","labels":["bug report"],"number":3338,"title":"[Bug]: onHandleIntent not firing when calling RUN_COMMAND service from module","updated_at":"2023-04-13T10:25:41Z"} +{"author":"Nemeesis66","body":"### Problem description\n\n## Report Info\r\n\r\n\r\n**User Action**: `crash report` \r\n**Sender**: `TermuxActivity` \r\n**Report Timestamp**: `2023-03-05 18:58:44.588 UTC` \r\n##\r\n\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]` \r\n**Crash Timestamp**: `2023-03-05 18:58:38.228 UTC` \r\n\r\n**Crash Message**:\r\n```\r\nUnable to start receiver com.termux.app.TermuxOpenReceiver: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW dat=https://youtube.com/... flg=0x10000000 cmp=id.dana/.home.HomeTabActivity mCallingUid=10429 } from ProcessRecord{bed51fa 4021:com.termux/u0a429} (pid=4021, uid=10429) not exported from uid 10309\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\njava.lang.RuntimeException: Unable to start receiver com.termux.app.TermuxOpenReceiver: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW dat=https://youtube.com/... flg=0x10000000 cmp=id.dana/.home.HomeTabActivity mCallingUid=10429 } from ProcessRecord{bed51fa 4021:com.termux/u0a429} (pid=4021, uid=10429) not exported from uid 10309\r\n\tat android.app.ActivityThread.handleReceiver(ActivityThread.java:4387)\r\n\tat android.app.ActivityThread.access$1800(ActivityThread.java:292)\r\n\tat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2187)\r\n\tat android.os.Handler.dispatchMessage(Handler.java:106)\r\n\tat android.os.Looper.loop(Looper.java:255)\r\n\tat android.app.ActivityThread.main(ActivityThread.java:8224)\r\n\tat java.lang.reflect.Method.invoke(Native Method)\r\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)\r\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)\r\nCaused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW dat=https://youtube.com/... flg=0x10000000 cmp=id.dana/.home.HomeTabActivity mCallingUid=10429 } from ProcessRecord{bed51fa 4021:com.termux/u0a429} (pid=4021, uid=10429) not exported from uid 10309\r\n\tat android.os.Parcel.createExceptionOrNull(Parcel.java:2390)\r\n\tat android.os.Parcel.createException(Parcel.java:2374)\r\n\tat android.os.Parcel.readException(Parcel.java:2357)\r\n\tat android.os.Parcel.readException(Parcel.java:2299)\r\n\tat android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3717)\r\n\tat android.app.Instrumentation.execStartActivity(Instrumentation.java:1723)\r\n\tat android.app.ContextImpl.startActivity(ContextImpl.java:1055)\r\n\tat android.app.ContextImpl.startActivity(ContextImpl.java:1013)\r\n\tat android.content.ContextWrapper.startActivity(ContextWrapper.java:413)\r\n\tat android.content.ContextWrapper.startActivity(ContextWrapper.java:413)\r\n\tat com.termux.app.TermuxOpenReceiver.onReceive(TermuxOpenReceiver.java:69)\r\n\tat android.app.ActivityThread.handleReceiver(ActivityThread.java:4371)\r\n\t... 8 more\r\nCaused by: android.os.RemoteException: Remote stack trace:\r\n\tat com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1146)\r\n\tat com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1259)\r\n\tat com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:803)\r\n\tat com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1241)\r\n\tat com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1203)\r\n\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.0+b800f1c` \r\n**VERSION_CODE**: `118` \r\n**UID**: `10429` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `true` \r\n**SE_PROCESS_CONTEXT**: `u:r:untrusted_app_27:s0:c173,c257,c512,c768` \r\n**SE_FILE_CONTEXT**: `u:object_r:app_data_file:s0:c173,c257,c512,c768` \r\n**SE_INFO**: `default:targetSdkVersion=28:complete` \r\n**TERMUX_APP_PACKAGE_MANAGER**: `APT` \r\n**TERMUX_APP_PACKAGE_VARIANT**: `APT_ANDROID_7` \r\n**APK_RELEASE**: `Github` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `B6DA01480EEFD5FBF2CD3771B8D1021EC791304BDD6C4BF41D3FAABAD48EE5E1` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `4.19.127+` \r\n**SDK_INT**: `30` \r\n**RELEASE**: `11` \r\n**ID**: `RP1A.200720.011` \r\n**DISPLAY**: `RMX3201_11_C.16` \r\n**INCREMENTAL**: `1672253712794` \r\n**SECURITY_PATCH**: `2023-01-05` \r\n**IS_DEBUGGABLE**: `0` \r\n**IS_TREBLE_ENABLED**: `true` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `realme` \r\n**BRAND**: `realme` \r\n**MODEL**: `RMX3201` \r\n**PRODUCT**: `RMX3201T2` \r\n**BOARD**: `RM6765` \r\n**HARDWARE**: `mt6765` \r\n**DEVICE**: `RMX3201` \r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \r\n##\n\n### Steps to reproduce the behavior.\n\nphp giffybot.php that's command while run on termux will error\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.0+b800f1c\r\n* Android OS version: Android 11\r\n* Device model: Realme C21\r\n","comments":1,"created_at":"2023-03-05T19:04:48Z","labels":["bug report"],"number":3283,"title":"[Bug]: Error while run script php","updated_at":"2023-03-05T19:26:22Z"} +{"author":"canadiannomad","body":"I've been running into an issue for a while now, and I'm not sure what is triggering it.\r\nI'll be working in Termux on my Android device with a bluetooth keyboard connected, everything fine, then randomly it will start sending double chacters to the terminal when I type. Ie I type \"a\" and \"aa\" will appear, if I hit \"backspace\" it will delete the 2 previous characters. I'm not able to get out of this state without restarting my Android device.\r\n This happens on both a Logitech K780 as well as an Apple Magic Keyboard on a Samsung S21 Ultra, as well as a BigMe EInk device. (Tested the 4 combinations)\r\nIf I use other apps then typing is still fine, only Termux gets into this state.\r\nIf I try exiting the session + termux, I will still have this issue when I open the app again. Only reboot seems to resolve it.\r\nOn screen keyboard still works while it is in this state.\r\n\r\nSamsung:\r\nAndroid version 13\r\nTermux 0.118.0\r\nTermux tools: 1.29.3\r\n\r\nBigMe:\r\nAndroid version 11\r\nTermux 0.118.0\r\nTermux tools: 1.31.0\r\n\r\nOddly enough it seems to have resolved itself while I was writing this report, but it is a recurring issue for me. ","comments":13,"created_at":"2023-02-23T21:36:07Z","labels":[],"number":3265,"title":"Double Typing Characters when using Hardware Keyboard","updated_at":"2026-02-24T06:43:31Z"} +{"author":"twaik","body":"### Feature description\r\n\r\nCan you please add some preference or option to hide additional key bar with arrows and tab when IME is not shown? It is not really useful with default keys list when there is not IME. But I think option to keep it should be kept for those who really need this. Sorry if it is not understood, I am a bit tired.\r\n\r\n### Additional information\r\n\r\n![394px-Termux-nano](https://user-images.githubusercontent.com/9674930/220472003-7e9a4170-eeea-404d-88c8-9d88d060ea02.png)\r\n","comments":5,"created_at":"2023-02-21T22:22:28Z","labels":[],"number":3263,"title":"[Feature]: option to hide extra key bar when IME is hidden","updated_at":"2023-02-21T23:57:28Z"} +{"author":"sudomain","body":"Edit: I found the `Soft keyboard only if no hardware` setting and disabled it which prevents my issues, but I think they still apply for users that keep the setting enabled.\r\n\r\n### Problem description\r\n\r\nIf Termux is in the foreground with a hardware keyboard connected (either USB or Bluetooth), then pressing the home or recent apps buttons will take the user to their home screen or recent apps list. Unfortunately when this happens, the software keyboard will still be open and not do anything because it doesn't have a text field. It can be closed with the Back button, but this causes a worse issue: The soft keyboard disappears. If Termux is brought to the foreground again, the keyboard will not appear unless the user does the following twice:\r\n1. Open the slider drawer\r\n2. Tap the KEYBOARD button\r\n\r\nThis happens regardless of the Android setting that shows the virtual keyboard when a hardware keyboard is connected.\r\n\r\nI tried different hardware and software keyboards, as well as tested other apps behavior when they have the focus of the soft keyboard when home or recent apps buttons are pressed.\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nThe first issue (which causes the second):\r\n1. Connect a hardware keyboard, either bluetooth or usb\r\n2. Bring Termux to the foreground\r\n3. Press Home or Recent apps button\r\n4. Soft keyboard still shows unlike other apps\r\n\r\nThe second issue:\r\n1. Follow steps of the first issue\r\n2. Press back to close the unresponsive soft keyboard\r\n3. Bring Termux to the foreground again\r\n4. Soft keyboard will not be there. It won't show unless Termux is closed entirely and reopened or the drawer is opened and KEYBOARD is pressed twice\r\n\r\n### What is the expected behavior?\r\n\r\nFor the first issue:\r\nHome and Recent apps button should hide the soft keyboard\r\n\r\nFor the second:\r\nTermux already opens the soft keyboard by default, assuming the first issue doesn't occur.\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118.0\r\n* Android OS version: 11\r\n* Device model: Google Pixel 2\r\n\r\ntermux-info:\r\n```\r\nTermux Variables:\r\nTERMUX_API_VERSION=0.50.1\r\nTERMUX_APK_RELEASE=F_DROID\r\nTERMUX_APP_PACKAGE_MANAGER=apt\r\nTERMUX_APP_PID=26960\r\nTERMUX_IS_DEBUGGABLE_BUILD=0\r\nTERMUX_MAIN_PACKAGE_FORMAT=debian\r\nTERMUX_VERSION=0.118.0\r\nPackages CPU architecture:\r\naarch64\r\nSubscribed repositories:\r\n# sources.list\r\ndeb https://grimler.se/termux/termux-main stable main\r\n# x11-repo (sources.list.d/x11.list)\r\ndeb https://grimler.se/termux/termux-x11 x11 main\r\nUpdatable packages:\r\nAll packages up to date\r\ntermux-tools version:\r\n1.37.0\r\nAndroid version:\r\n11\r\nKernel build information:\r\nLinux localhost 4.4.223-g52750b8f2138-ab6846512 #1 SMP PREEMPT Fri Sep 18 09:49:34 UTC 2020 aarch64 Android\r\nDevice manufacturer:\r\nGoogle\r\nDevice model:\r\nPixel 2\r\nLD Variables:\r\nLD_LIBRARY_PATH=\r\nLD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so\r\n```","comments":0,"created_at":"2023-02-17T17:54:58Z","labels":["bug report"],"number":3254,"title":"[Bug]: When a hardware keyboard is connected and Termux is in the foreground, if Home or Recent apps buttons are pressed then the software keyboard becomes unresponsive","updated_at":"2023-02-17T19:38:47Z"} +{"author":"gety9","body":"### Problem description\r\n\r\nxdg-open can't open files containing % character. I can open them from other apps (material files app, etc)\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nls\r\nmyfilename1.png\r\nmyfilenamewith%2.png\r\n\r\nxdg-open myfilename1.png\r\n(opens file)\r\n\r\nxdg-open myfilenamewith%2.png\r\n(nothing happens)\r\n\r\n### What is the expected behavior?\r\n\r\nopen file\r\n\r\n### System information\r\n\r\n```\r\nTermux Variables:\r\nTERMUX_API_VERSION=0.50.1\r\nTERMUX_APK_RELEASE=F_DROID\r\nTERMUX_APP_PACKAGE_MANAGER=apt\r\nTERMUX_APP_PID=11957\r\nTERMUX_IS_DEBUGGABLE_BUILD=0\r\nTERMUX_MAIN_PACKAGE_FORMAT=debian\r\nTERMUX_VERSION=0.118.0\r\nPackages CPU architecture:\r\naarch64\r\nSubscribed repositories:\r\n# sources.list\r\ndeb https://packages-cf.termux.dev/apt/termux-main stable main\r\n# x11-repo (sources.list.d/x11.list)\r\ndeb https://packages-cf.termux.dev/apt/termux-x11 x11 main\r\nUpdatable packages:\r\napt/stable 2.5.6 aarch64 [upgradable from: 2.5.4]\r\nclang/stable 15.0.7-2 aarch64 [upgradable from: 15.0.7]\r\ncmake/stable 3.25.2 aarch64 [upgradable from: 3.25.1-1]\r\ncommand-not-found/stable 2.1.0-10 aarch64 [upgradable from: 2.1.0-6]\r\ndialog/stable 1.3-20230209-0 aarch64 [upgradable from: 1.3-20221229-0]\r\ndos2unix/stable 7.4.4 aarch64 [upgradable from: 7.4.3]\r\ndpkg/stable 1.21.20 aarch64 [upgradable from: 1.21.18]\r\nffmpeg/stable 5.1.2-6 aarch64 [upgradable from: 5.1.2-4]\r\nfontconfig/stable 2.14.2-1 aarch64 [upgradable from: 2.14.1-1]\r\nfreetype/stable 2.13.0 aarch64 [upgradable from: 2.12.1]\r\ngit/stable 2.39.1 aarch64 [upgradable from: 2.39.0]\r\nglib/stable 2.74.5 aarch64 [upgradable from: 2.74.4-2]\r\ngnupg/stable 2.4.0-2 aarch64 [upgradable from: 2.4.0]\r\ngnutls/stable 3.8.0 aarch64 [upgradable from: 3.7.8]\r\ngpgv/stable 2.4.0-2 aarch64 [upgradable from: 2.4.0]\r\nharfbuzz/stable 7.0.0 aarch64 [upgradable from: 6.0.0]\r\nimagemagick/stable 7.1.0.61 aarch64 [upgradable from: 7.1.0.57]\r\nimath/stable 3.1.6 aarch64 [upgradable from: 3.1.5-1]\r\nleptonica/stable 1.83.1 aarch64 [upgradable from: 1.83.0]\r\nless/stable 608-1 aarch64 [upgradable from: 608]\r\nlibaom/stable 3.6.0 aarch64 [upgradable from: 3.5.0]\r\nlibc++/stable 25c aarch64 [upgradable from: 25b]\r\nlibcairo/stable 1.17.8 aarch64 [upgradable from: 1.17.6]\r\nlibcompiler-rt/stable 15.0.7-2 aarch64 [upgradable from: 15.0.7]\r\nlibde265/stable 1.0.11 aarch64 [upgradable from: 1.0.9]\r\nlibdrm/stable 2.4.115 aarch64 [upgradable from: 2.4.114]\r\nlibgnutls/stable 3.8.0 aarch64 [upgradable from: 3.7.8]\r\nlibjpeg-turbo/stable 2.1.5.1 aarch64 [upgradable from: 2.1.4]\r\nlibjxl/stable 0.8.1 aarch64 [upgradable from: 0.7.0-1]\r\nlibllvm/stable 15.0.7-2 aarch64 [upgradable from: 15.0.7]\r\nlibnghttp2/stable 1.52.0 aarch64 [upgradable from: 1.51.0]\r\nlibprotobuf/stable 2:21.12 aarch64 [upgradable from: 2:3.21.12]\r\nlibvpx/stable 1:1.13.0 aarch64 [upgradable from: 1:1.12.0-1]\r\nlibx11/stable 1.8.4 aarch64 [upgradable from: 1.8.3-2]\r\nlibxml2/stable 2.10.3-1 aarch64 [upgradable from: 2.10.3]\r\nlibxpm/x11 3.5.15 aarch64 [upgradable from: 3.5.14]\r\nlibxshmfence/stable 1.3.2-1 aarch64 [upgradable from: 1.3.2]\r\nlibxxf86vm/stable 1.1.5-1 aarch64 [upgradable from: 1.1.5]\r\nlld/stable 15.0.7-2 aarch64 [upgradable from: 15.0.7]\r\nllvm/stable 15.0.7-2 aarch64 [upgradable from: 15.0.7]\r\nlsof/stable 4.98.0 aarch64 [upgradable from: 4.97.0]\r\nmake/stable 4.4-1 aarch64 [upgradable from: 4.4]\r\nmesa/stable 22.3.5 aarch64 [upgradable from: 22.3.3]\r\nnano/stable 7.2 aarch64 [upgradable from: 7.1]\r\nndk-sysroot/stable 25c aarch64 [upgradable from: 25b-3]\r\nopenssl/stable 1:3.0.8 aarch64 [upgradable from: 1:3.0.7]\r\npython-numpy/stable 1.24.2 aarch64 [upgradable from: 1.24.1-1]\r\npython-pip/stable 23.0-1 all [upgradable from: 22.3.1-3]\r\npython/stable 3.11.2-2 aarch64 [upgradable from: 3.11.1-2]\r\ntermux-tools/stable 1.37.0 all [upgradable from: 1.36.0]\r\ntigervnc/x11 1.10.1-33 aarch64 [upgradable from: 1.10.1-31]\r\nx11-repo/stable 8.4-1 all [upgradable from: 8.4]\r\nxkeyboard-config/x11 2.38 all [upgradable from: 2.37]\r\nzstd/stable 1.5.4 aarch64 [upgradable from: 1.5.2-2]\r\ntermux-tools version:\r\n1.35.0\r\nAndroid version:\r\n11\r\nKernel build information:\r\nLinux localhost 4.19.157-perf-g616268c8715f-dirty #134 SMP PREEMPT Wed Nov 10 15:13:53 CST 2021 aarch64 Android\r\nDevice manufacturer:\r\nQUALCOMM\r\nDevice model:\r\nNoteAir2\r\n```","comments":0,"created_at":"2023-02-14T16:37:02Z","labels":["bug report"],"number":3250,"title":"[Bug]: xdg-open can't open files containing % character.","updated_at":"2023-02-14T16:38:58Z"} +{"author":"shaunmulligan","body":"### Feature description\n\nI have successfully built bootstraps.zip using the pacman option, but now having installed that in my build of termux-app, I get the following error when trying to install apps:\r\n```\r\n/data/data/com.termux/files/usr/bin/pkg: line 348: pacman: command not found\r\n```\r\n\r\nOr do I just need to include pacman in the bootstraps.zip build?\n\n### Additional information\n\nN/A","comments":8,"created_at":"2023-02-14T07:21:47Z","labels":[],"number":3248,"title":"[Feature]: Is it possible to build termux-app with pacman as the default package manager?","updated_at":"2023-02-15T13:32:22Z"} +{"author":"zixijian","body":"### Feature description\r\n\r\n\u003eTreat ambiguous-width characters as double width\r\nSome characters (e.g., Chinese ideograms) are double-width, and take two cells to display. Other characters (e.g., Latin letters) are single width and take only one cell to display. There is another category of characters known as \"ambiguous width\". One example of ambiguous-width characters are Greek letters. Depending on your application, you may prefer to display them as double-width or single-width. If most of the text you deal with is double-width, then you should enable this setting as it will help things to line up correctly in that context.\r\n\r\nFrom iTerm2.\r\n\r\n![-2756c1ee6b9b2f5a](https://user-images.githubusercontent.com/4952406/218294316-3357b8dd-01c8-4462-ab34-89a377e880f2.jpg)\r\n\r\nThis feature Especially important for some Chinese environments.For some symbols on the rendering effect is also very helpful.\r\n\r\nSuch as:\r\n![Screenshot_2023-02-12-13-24-51-575_com termux-edit](https://user-images.githubusercontent.com/4952406/218294589-89424cfc-5dd5-4779-a765-f1e7f3b96564.jpg)\r\n![Screenshot_2023-02-12-13-25-40-358_com termux-edit](https://user-images.githubusercontent.com/4952406/218294593-bc4aecca-f8b2-4365-a2fd-dc1f3eac45c6.jpg)\r\n\r\n![Screenshot_2023-02-12-13-28-39-117_com termux-edit](https://user-images.githubusercontent.com/4952406/218294711-74bd3dce-21d2-4d3e-b0b5-bc85a815d8e9.jpg)\r\n![IMG_20230212_132912](https://user-images.githubusercontent.com/4952406/218294725-c47d3fa7-7607-44d8-9ca4-8f93837e39bf.jpg)\r\n\r\n\r\n[A partial list of commonly used characters](https://github.com/mudclient/paotin/blob/beta/plugins/lib/ui/beautify.tin)\r\n\r\n\r\n\r\n### Additional information\r\n\r\niTerm2 ..\r\n\r\n[iTerm2 Features](https://iterm2.com/documentation/2.1/documentation-preferences.html) \r\n","comments":0,"created_at":"2023-02-12T05:41:32Z","labels":[],"number":3245,"title":"[Feature]: Need Double-width rendering of ambiguous characters ","updated_at":"2023-02-12T05:43:13Z"} +{"author":"Anonymous2716","body":"### Problem description\r\n\r\nI use openboard https://github.com/openboard-team/openboard . with open board I can paste clipboard directly by long pressing the clipboard button of the keyboard. It also sends the enter key (i guess) bcs if I paste anything it also runs it as a command . \r\n\r\nI was pasting an emoji copied from browser and whenever I paste it using the clipboard button termux crashes. The hexadecimal value of it is `F09FA48C` and here is a link https://emojipedia.org/pinched-fingers/.\r\n\r\nBy default android doesn't support this emoji icon I guess bcs my device doesn't have it. Normally it would just show as a question mark character icon but instead termux-crashes.\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nCopy and paste the emoji with openboards clipboard button from this webpage https://emojipedia.org/pinched-fingers/ \r\n\r\nAnd/or \r\n\r\n```\r\necho f095a48c | xxd -r -p | termux-clipboard-set\r\n```\r\n\r\nAnd then paste it. Normal pasting doesn't crash Termux.\r\n\r\n### What is the expected behavior?\r\n\r\nPast the character to terminal from clipboard.\r\n\r\n### System information\r\n\r\nThe app is from fdroid.\r\n\r\n\r\n## Report Info\r\n\r\n\r\n**User Action**: `crash report` \r\n**Sender**: `TermuxActivity` \r\n**Report Timestamp**: `2023-02-10 16:01:28.458 UTC` \r\n##\r\n\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]` \r\n**Crash Timestamp**: `2023-02-10 16:01:26.157 UTC` \r\n\r\n**Crash Message**:\r\n```\r\nInvalid code point: 56588\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\njava.lang.IllegalArgumentException: Invalid code point: 56588\r\n\tat com.termux.terminal.TerminalSession.writeCodePoint(TerminalSession.java:185)\r\n\tat com.termux.view.TerminalView.inputCodePoint(TerminalView.java:832)\r\n\tat com.termux.view.TerminalView$2.sendTextToTerminal(TerminalView.java:383)\r\n\tat com.termux.view.TerminalView$2.commitText(TerminalView.java:315)\r\n\tat com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:341)\r\n\tat com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)\r\n\tat android.os.Handler.dispatchMessage(Handler.java:106)\r\n\tat android.os.Looper.loop(Looper.java:193)\r\n\tat android.app.ActivityThread.main(ActivityThread.java:6702)\r\n\tat java.lang.reflect.Method.invoke(Native Method)\r\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)\r\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.0` \r\n**VERSION_CODE**: `118` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `false` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `4.4.146` \r\n**SDK_INT**: `28` \r\n**RELEASE**: `9` \r\n**SECURITY_PATCH**: `2020-08-05` \r\n**IS_DEBUGGABLE**: `0` \r\n**IS_TREBLE_ENABLED**: `true` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n\r\n### Hardware\r\n\r\n**BOARD**: `MK008` \r\n**HARDWARE**: `mt6757` \r\n\r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \r\n##\r\n","comments":8,"created_at":"2023-02-10T16:14:13Z","labels":["bug report"],"number":3242,"title":"[Bug]: its a wierd bug. Pasting an emoji with openboard crashes termux.","updated_at":"2023-12-23T11:28:50Z"} +{"author":"ingeniumstudio","body":"### Problem description\r\n\r\nLetters are shaking inside vim when cursor is after a ligature; changing fonts keeps the issue; the issue happen with or without cursor blinking. I asked about this at libera.chat's #termux and an OP said it would be good to post it here.\r\n\r\n\r\n\r\n(cursor blinking; begins at ~ 00:26sec)\r\nhttps://user-images.githubusercontent.com/117122269/216950147-ca21c7c9-d8c2-4562-b347-47a3256d3455.mp4\r\n\r\n(without cursor blinking; begins at ~ 00:07)\r\nhttps://user-images.githubusercontent.com/117122269/216950298-bd9395dd-159d-4544-9040-dfd7c8369eb3.mp4\r\n\r\n\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nInstall vim and custom themes with termux-style:\r\n\r\n* https://github.com/adi1090x/termux-style\r\n\r\nZsh have customizations for changing cursor according to vim mode:\r\n\r\n* https://unix.stackexchange.com/questions/433273/changing-cursor-style-based-on-mode-in-both-zsh-and-vim\r\n\r\n### What is the expected behavior?\r\n\r\nThat this don't happen.\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118.0 (fdroid)\r\n* Android OS version: Android 12\r\n* Device model: Samsung Galaxy Tab A8","comments":0,"created_at":"2023-02-06T10:50:47Z","labels":["bug report"],"number":3236,"title":"[Bug]: terminal characters shaking (video)","updated_at":"2023-02-06T10:56:44Z"} +{"author":"cxyzzz","body":"### Feature description\n\ncould add a config to hide Termux:Plugins home launcher icon?\n\n### Additional information\n\nno","comments":1,"created_at":"2023-01-18T11:26:21Z","labels":[],"number":3194,"title":"[Feature]: hide plugin desktop icon","updated_at":"2023-10-14T08:27:34Z"} +{"author":"BLuFeNiX","body":"### Problem description\n\nHi, I think I've identified an incompatibility with the `termux-shared` library's [license](https://github.com/termux/termux-app/blob/master/termux-shared/LICENSE.md) and the instructions on the wiki [here](https://github.com/termux/termux-app/wiki/Termux-Libraries) and also [here](https://github.com/termux/termux-app/wiki/RUN_COMMAND-Intent).\r\n\r\n## Assumptions\r\n\r\n1. The Termux project intends for 3rd party apps to use the `termux-shared` [library constants](https://github.com/termux/termux-app/blob/master/termux-shared/src/main/java/com/termux/shared/termux/TermuxConstants.java) for integration.\r\n2. Integration with the library constants is **not** intended to cause the 3rd party app to adopt the GPLv3.\r\n\r\nThese assumptions seem clear based on the advice that:\r\n\u003eTermux plugins and 3rd party apps only need to import termux-shared library for interacting with the termux-app, like for using [TermuxConstants](https://github.com/termux/termux-app/tree/master/termux-shared/src/main/java/com/termux/shared/termux/TermuxConstants.java) and all other utilities provided by it.` \r\n\r\nAnd the license file specifies exceptions for the contants files by name:\r\n\u003e #### [GPLv3 only](https://www.gnu.org/licenses/gpl-3.0.html)\r\n\u003e\r\n\u003e- [`src/main/java/com/termux/shared/termux/*`](src/main/java/com/termux/shared/termux).\r\n\u003e\r\n\u003eThe `GPLv3 only` license applies to all files unless specifically specified by a file/directory, like the [`src/main/java/com/termux/shared/termux/TermuxConstants.java`](src/main/java/com/termux/shared/termux/TermuxConstants.java) and [`src/main/java/com/termux/shared/termux/settings/properties/TermuxPropertyConstants.java`](src/main/java/com/termux/shared/termux/settings/properties/TermuxPropertyConstants.java) files are released under the `MIT` license.\r\n\r\nIt seems clear that you want people to use the constants files freely, since they are MIT licensed.\r\n\r\n## The Problem\r\n\r\nThe GPLv3 affects any software that is compiled with or _linked to_ GPLv3-licensed code. The GPL uses a very broad definition for *linking*, including things like interpreted code and classpath resources. Specifically, this includes importing a GPLv3-licensed library via the wiki's suggestion of `implementation 'com.termux.termux-app:termux-shared:0.117'` or downloading the `aar` file directly. For this reason, there is a \"classpath exception\" that the author may apply to the GPLv3, but this is not currently the case for the files in `src/main/java/com/termux/shared/termux`.\r\n\r\nThis means that when including `termux-shared` in your project, you are linking to a GPLv3 library, and your application is now subject to the GPL. If the app is then distributed, it is not only **redistributing** `termux-shared`, but the app itself is also being conveyed as a **modified version** of `termux-shared` due to the classpath \"linking\" that occurs when importing the library. This results in the **entire app** being legally subject to the GPLv3, and any party that receives the application is now entitled to the entire source code, pursuant to the GPLv3 terms.\r\n\r\nI tested to make sure there wasn't something prevented this, and I have confirmed that a sample Android app that merely declares `implementation 'com.termux.termux-app:termux-shared:0.117'` **will** contain GPLv3 Java bytecode in the resulting APK.\r\n\r\n## Workarounds\r\n\r\nThis issue can be avoided by doing one of the following:\r\n* A developer can use a tool strip the GPLv3 artifacts/code out of the imported library, such that GPLv3 code is never classpath \"linked\" with the app.\r\n* A developer can simply copy the MIT licensed files from the `termux-shared` library, such that no GPLv3 files are ever in the project in any way.\r\n* Termux can modify its license to clarify the issue (ex: with a classpath exception).\r\n* Termux can release a new library that only contains the MIT licensed files. \n\n### Steps to reproduce the behavior.\n\nN/A\n\n### What is the expected behavior?\n\nA developer is provided a way to integrate with the Termux API without being forced to license their code under the GPLv3.\n\n### System information\n\n* Termux application version: all versions\r\n* Android OS version: N/A\r\n* Device model: N/A\r\n","comments":2,"created_at":"2022-12-19T19:29:09Z","labels":["bug report"],"number":3150,"title":"[Bug]: The LICENSE file describing termux-shared does not appear to allow the use case described in the wiki.","updated_at":"2022-12-20T15:52:54Z"} +{"author":"xandro0777","body":"### Feature description\n\nPlenty of my scripts don't expect any input and hiding the soft keyboard programmatically would help the readability of the script output enormously.\r\n\r\nI found ``` hide-soft-keyboard-on-startup=true``` but it would be nicer if every shell script could hide and pop-up the soft keyboard as it needs it.\n\n### Additional information\n\nNo idea","comments":2,"created_at":"2022-12-08T21:18:32Z","labels":[],"number":3135,"title":"[Feature]: shell cmd to hide soft keyboard","updated_at":"2023-08-25T05:27:25Z"} +{"author":"babaric-dev","body":"### Feature description\r\n\r\nThe font in Samsung DeX seems too big. If I resize it, it is too small for my phone. We can have an individual setting for DeX / phone screen so we don't need to resize everytime.\r\n### Additional information\r\n\r\n/","comments":11,"created_at":"2022-11-25T11:03:14Z","labels":[],"number":3119,"title":"[Feature]: Allow different zoom levels in Samsung DeX / phone screen","updated_at":"2023-11-28T14:08:48Z"} +{"author":"HJarausch","body":"### Problem description\n\nWhen an app - written in Python or Nim - reads from **stdin** the last character input gets lost.\r\nThe same apps compiled and run on a desktop Linux doesn't have this problem.\r\n\n\n### Steps to reproduce the behavior.\n\nEven command input (e.g. recalled by the up-arrow key) the last character gets lost even within a command after editing\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:\r\n* 0.118.0\r\n* Android OS version:\r\n* 8.1\r\n* Device model:\r\n* Galaxy Tab A10 2016 and Galaxy S5\r\n","comments":3,"created_at":"2022-11-19T16:09:22Z","labels":["bug report"],"number":3103,"title":"[Bug]: last character gets stripped on STDIN","updated_at":"2025-02-17T09:08:32Z"} +{"author":"vinc17fr","body":"### Problem description\n\nWith the hardware keyboard of the Astro Slide 5G Transformer, I get random missing key presses. Sometimes, the same character appears twice (but this is quite rare).\r\n\r\nThis issue doesn't occur with other applications. And it doesn't occur with Termux + an on-screen keyboard.\n\n### Steps to reproduce the behavior.\n\nUse the keyboard. All keys seem to be affected. For instance, when retyping the first paragraph above in Termux (using `cat \u003e foo`), I got:\r\n\r\nWh the hardwre keyboard f he Astro Slide 5G Transfomer, I getdm missing key presses. Sometimsethe asmearacter pearstice(but this is quite rare)\r\n\r\nNote also that, as seen above, characters are also sometimes swapped. This makes the hardware keyboard unusable with Termux.\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 11\r\n* Device model: Astro Slide 5G Transformer","comments":2,"created_at":"2022-11-18T00:58:09Z","labels":["bug report"],"number":3100,"title":"[Bug]: with a hardware keyboard, random missing key presses / keys swapped","updated_at":"2022-11-18T02:11:05Z"} +{"author":"stalek71","body":"### Problem description\n\nI tried to start termux, but it crashes. I can't reinstall it because installer says it is not installed while it is available. I have no link to it as it's not visible on all apps, but fdroid shows it's installed and tries to run it.\n\n### Steps to reproduce the behavior.\n\nJust run\n\n### What is the expected behavior?\n\nNot crashing\n\n### System information\n\n## Report Info\r\n\r\n\r\n**User Action**: `crash report` \r\n**Sender**: `TermuxActivity` \r\n**Report Timestamp**: `2022-11-17 22:20:16.771 UTC` \r\n##\r\n\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]` \r\n**Crash Timestamp**: `2022-11-17 22:16:40.806 UTC` \r\n\r\n**Crash Message**:\r\n```\r\nBad notification(tag=null, id=1337) posted from package com.termux, crashing app(uid=10454, pid=28846): Couldn't create icon StatusBarIcon(icon=Icon(typ=RESOURCE pkg=com.termux id=0x7f070072) visible user=0 )\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\nandroid.app.RemoteServiceException: Bad notification(tag=null, id=1337) posted from package com.termux, crashing app(uid=10454, pid=28846): Couldn't create icon StatusBarIcon(icon=Icon(typ=RESOURCE pkg=com.termux id=0x7f070072) visible user=0 )\r\n\tat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2185)\r\n\tat android.os.Handler.dispatchMessage(Handler.java:106)\r\n\tat android.os.Looper.loop(Looper.java:233)\r\n\tat android.app.ActivityThread.main(ActivityThread.java:8010)\r\n\tat java.lang.reflect.Method.invoke(Native Method)\r\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)\r\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.0` \r\n**VERSION_CODE**: `118` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `false` \r\n**APK_RELEASE**: `F-Droid` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `4.14.190-perf+` \r\n**SDK_INT**: `30` \r\n**RELEASE**: `11` \r\n**ID**: `RKQ1.201022.002` \r\n**DISPLAY**: `HD1913_14_220617` \r\n**INCREMENTAL**: `2206171335` \r\n**SECURITY_PATCH**: `2022-06-01` \r\n**IS_DEBUGGABLE**: `0` \r\n**IS_TREBLE_ENABLED**: `true` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `OnePlus` \r\n**BRAND**: `OnePlus` \r\n**MODEL**: `HD1913` \r\n**PRODUCT**: `OnePlus7TPro_EEA` \r\n**BOARD**: `msmnile` \r\n**HARDWARE**: `qcom` \r\n**DEVICE**: `OnePlus7TPro` \r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \r\n##","comments":7,"created_at":"2022-11-17T22:33:08Z","labels":["bug report"],"number":3099,"title":"Can't start or uninstall termux","updated_at":"2022-12-10T09:34:49Z"} +{"author":"cyrxdzj","body":"### Problem description\n\nI opened it and it crashed immediately.\r\nIt used to run normally for a month, but recently it crashed.\r\nI tried to uninstall it and install it again. But it still crashed.\r\n![Screenshot_20221101-194240](https://user-images.githubusercontent.com/63708985/199225305-fda50d6b-ea9d-49d2-8411-75db3b76bb6d.png)\r\n\n\n### Steps to reproduce the behavior.\n\nNo steps. Open it only.\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version:0.118.0\r\n* Android OS version:9\r\n* Device model:Leke Pad-L06\r\nThis is the learning tablet of a smart classroom company Leke in China.","comments":6,"created_at":"2022-11-01T11:44:07Z","labels":["bug report"],"number":3070,"title":"[Bug]: Termux crashed.","updated_at":"2022-11-06T13:28:02Z"} +{"author":"cbonet-sw","body":"### Problem description\n\nI used to use the Termux private (app-specific) storage directory on external storage (real SD card) to store files that we larger than I wanted to store in private internal storage ($HOME/) but now I don't seem to have permission to access it any more (and I had files stored in there).\r\n\r\nThis is under Android 11 on Samsung, and the change occurred within the last month: I wonder if it's related to a recent minor update to the Android OS? It might be intentional rather than a Termux bug.\r\n\r\nSpecifically, I have access to shares external storage at\r\n /storage/3934-6139/\r\nbut when I access the app-private folder for user files at\r\n /storage/3934-6139/Android/data/com.termux/files\r\nI get \"ls: cannot open directory '/storage/3934-6139/Android/data/com.termux/files': Permission denied\"\r\n\r\nI have tried\r\n- revoking then granting again the Android file storage permission for the Termux app\r\n- running termux-setup-storage to rebuild the symlinks in $HOME/storage again\r\nwith no success.\r\n\r\nI think Termux should have access itself to files in subdirs beneath\r\n /storage/3934-6139/Android/data/com.termux/\r\nand I wonder if it is just shell commands such as ls (implemented through coreutils) that have a problem and if within code of the app itself access is still possible?\r\n\r\nThanks for any insight!\n\n### Steps to reproduce the behavior.\n\nls -l /storage/3934-6139/Android/data/com.termux/files\r\n\r\nI get \"ls: cannot open directory '/storage/3934-6139/Android/data/com.termux/files': Permission denied\"\r\n\r\n(obviously substitute the label of the SD card on your system into the pathname above).\n\n### What is the expected behavior?\n\nShould give directory listing.\n\n### System information\n\n* Termux application version:\r\n 0.118.0\r\n (from F-droid)\r\n* Android OS version:\r\n 11\r\n Kernel 4.4.177-21848546 (26 Aug 2022)\r\n Security patchlevel 1 Aug 2022\r\n* Device model:\r\n Samsung A10","comments":8,"created_at":"2022-10-12T08:22:30Z","labels":["bug report"],"number":3041,"title":"Access to Termux private storage directory on External Storage (SD card) stopped working","updated_at":"2025-05-21T14:31:14Z"} +{"author":"ghost","body":"### Feature description\n\ntermux already have a share/view file receiver, a url receiver will be a nice feature to have too, we will be able to use termux to download files using `wget` or `aria2`, or checking the links before sending them to the browser, that will open a lot of possibilities!\n\n### Additional information\n\nnone","comments":6,"created_at":"2022-10-04T00:29:12Z","labels":[],"number":3024,"title":"[Feature]: Urls/Links Receiver","updated_at":"2022-10-24T10:02:54Z"} +{"author":"microo8","body":"### Feature description\n\nCSI 14 is an escape code, that returns the screen size in pixels.\r\n\r\nThis feature would allow the running application to get the screen size, it is used mainly in sixel supporting apps, that need to scale the image before printing it out. This would be needed if this #2973 would me merged.\r\n\r\nAnother alternative is TIOCGWINSZ syscall.\n\n### Additional information\n\nalacritty suports it:\r\n\r\nhttps://github.com/alacritty/alacritty/commit/cdf5e51e742d67d1b96940a5096210725a1e51e8","comments":7,"created_at":"2022-09-22T09:29:24Z","labels":[],"number":3002,"title":"[Feature]: Support for CSI 14","updated_at":"2022-12-31T22:03:05Z"} +{"author":"EduardDurech","body":"### Feature description\n\nAn option to self-update Termux, can be over CLI in packages\n\n### Additional information\n\nTelegram and other apps with stand-alone apk's usually support this feature, it would require [`INSTALL_PACKAGES` permission](https://developer.android.com/reference/android/Manifest.permission#INSTALL_PACKAGES) and use the [`PackageInstaller`](https://developer.android.com/reference/android/content/pm/PackageInstaller)","comments":4,"created_at":"2022-09-17T09:30:46Z","labels":[],"number":2995,"title":"[Feature]: Self-update","updated_at":"2023-02-10T06:59:36Z"} +{"author":"unoukujou","body":"### Feature description\n\nI asked about it here:\r\n\r\nhttps://github.com/termux/termux-app/discussions/2975\r\n\r\nAnd now I want to add it here as a feature request.\r\n\r\nBasically there could be a way to see which apps have access to termux storage. Be able to remove the permission or add new apps.\r\n\r\nGoing further, can it be possible to restrict certain apps to a certain folder in termux storage, without giving it full access to other termux folders that it has no business using.\r\n\r\nThen, also to be able to specify if the app has read-only access or read\u0026write access.\n\n### Additional information\n\nShowing a list of apps with permission will also tell me the specific folder it has access to and if it's read-only/read\u0026write.\r\n\r\nIn the absolute very least, at least just a simple way to list apps that I gave permission to use termux storage, and remove certain apps that I no longer want them to access termux. But the more fine-tuned control that I explained would be really useful. Thanks.","comments":0,"created_at":"2022-09-06T15:03:57Z","labels":[],"number":2980,"title":"[Feature]: See a list of apps that have permission to access termux storage, and manage the permission","updated_at":"2022-09-11T16:42:09Z"} +{"author":"Anonymous2716","body":"### Feature description\r\n\r\nThis works on any input field and in the slide on extra keys too. But not in the actual terminal . the charecters gets individually displayed instead of merged into a word. Don't know if it is possible bcs its a terminal not an usual text input field.\r\n\r\nExample :\r\n![Screenshot_20220824-023344](https://user-images.githubusercontent.com/78570872/186260243-7fc232b8-c903-4810-ab64-35a4ec4bf375.png)\r\n\r\n\r\n### Additional information\r\n\r\nThis would help a lot . cant text edit or write this kinda languages in termux terminal.also left to right, right to left directions.","comments":35,"created_at":"2022-08-23T20:38:15Z","labels":["enhancement"],"number":2953,"title":"[Feature]: add support for right-to-left languages","updated_at":"2025-07-11T09:49:43Z"} +{"author":"sylirre","body":"### Problem description\r\n\r\nThis was reported on Reddit by another person. But now I updated my device to Android 13 and got exactly same issue.\r\n\r\nThe text is white on white background of the toast message and is totally unreadable. Issue happens only when dark mode is turned on in system settings. When it is off, the text becomes black and readable.\r\n\r\n![Screenshot_20220817-234159](https://user-images.githubusercontent.com/107305601/185240646-e41b869c-22f7-441a-9ab6-aa8851f5022e.png)\r\n\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nUpgrade to Android 13 and start Termux app.\r\n\r\n### What is the expected behavior?\r\n\r\nThe text color should be readable regardless of device color theme.\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118\r\n* Android OS version: 13\r\n* Device model: Pixel 5\r\n","comments":3,"created_at":"2022-08-17T20:52:42Z","labels":["bug report"],"number":2942,"title":"[Bug]: Invisible session number text in toast message","updated_at":"2022-09-22T03:35:31Z"} +{"author":"thedoc013","body":"### Problem description\n\nhello when i type termux-usb -l it loads infinity and show no devices \r\n, when i plugin a usb my phone recognize it so i know that the usb stick is supported\r\n\r\nnow i want to use a wifi adapter TP-Link Nano Wlan Adapter (that supports monitormode)\r\nbut cant check if it recognize the adapter because the endless loading \r\n\r\n(wanna only use wifite2)\r\n\r\nplease fix it thanks , and great work :)\n\n### Steps to reproduce the behavior.\n\ntermux-usb -l \r\nsudo termux-usb -l \n\n### What is the expected behavior?\n\nshould list devices\n\n### System information\n\n* Termux application version: 0.95(95)\r\n* Android OS version: 11\r\n* Device model: s4 mini Ve\r\n","comments":14,"created_at":"2022-07-25T02:17:22Z","labels":["bug report"],"number":2907,"title":"[Bug]: termux-usb -l loads infinity","updated_at":"2024-02-14T22:04:25Z"} +{"author":"hi-ko","body":"### Feature description\n\nIt would be very helpful to be able to call termux from a web page link (e.g. to open a ssh connection to another system or even to run a script) as described in [Android App Links](https://developer.android.com/training/app-links)\r\n\r\nTermux could register for more than one scheme and users could activate/deactivate them by configuration [using filters](https://developer.android.com/training/app-links#web-links).\r\n\r\n\r\ne.g.\r\n* ssh://\r\n* termux://\r\n* shell://\n\n### Additional information\n\ne.g. [JuiceSSH](https://play.google.com/store/apps/details?id=com.sonelli.juicessh) registers for the ssh:// scheme. ","comments":1,"created_at":"2022-07-18T21:59:54Z","labels":["enhancement"],"number":2896,"title":"[Feature]: Support protocol scheme / Android App Links","updated_at":"2022-08-17T22:27:28Z"} +{"author":"linsui","body":"### Problem description\n\nCurrently the bootstraps packages are downloaded at build time. Since F-Droid doesn't allow binaries, they should be built from source along with the apk. I thought we can use a srclib for the [termux-packages](https://github.com/termux/termux-packages). The problem is that we can't autoupdate it. A better way is include it as a submodule. Could you please help? Thanks!\n\n### Steps to reproduce the behavior.\n\nNone\n\n### What is the expected behavior?\n\nThe bootstraps packages are built along with the apk in F-Droid build.\n\n### System information\n\n* Termux application version:\r\n* Android OS version:\r\n* Device model:\r\n","comments":19,"created_at":"2022-07-17T06:40:21Z","labels":["bug report"],"number":2892,"title":"[Bug]: The bootstrap package should be built along with the apk in F-Droid build","updated_at":"2022-07-18T18:47:44Z"} +{"author":"Duvio","body":"### Problem description\n\nWhen opening the text input view by dragging to the left on the extra key row, i cannot bring up the extra key row again by dragging to the right. Somehow i got lucky in the video but usually i can never get out of the text input view mode, not even after spending minutes dragging to the right.\r\n\r\nhttps://user-images.githubusercontent.com/29256280/177437868-216ebfa3-1ff0-4ded-adaf-1352c79d99e6.mp4\r\n\r\n\n\n### Steps to reproduce the behavior.\n\nOpen text input view mode by dragging to the left on the extra key row\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118\r\n* Android OS version: 12\r\n* Device model: SM-A528B/DS\r\n","comments":6,"created_at":"2022-07-06T00:29:20Z","labels":["bug report"],"number":2866,"title":"[Bug]: Text input mode cannot be changed","updated_at":"2025-01-05T13:15:50Z"} +{"author":"Anonymous2716","body":"### Feature description\r\n\r\nI have had 3 crashes last week and I don't have all the report logs in my storage. Add timestamps in the filenames so that each log will be saved. I had like to have all the reports if each crash for later submission.\r\n\r\n### Additional information\r\n\r\nAnd I don't fully understand how it works I had a crash few minutes ago and here is what I found in `/sdcard` \r\n\r\n Γ¥» cat *.log\r\n## Report Info\r\n\r\n\r\n**User Action**: `crash report`\r\n**Sender**: `TermuxActivity`\r\n**Report Timestamp**: `2022-06-12 20:24:22.468 UTC`\r\n##\r\n\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]`\r\n**Crash Timestamp**: `2022-06-12 20:24:16.363 UTC`\r\n\r\n**Crash Message**:\r\n```\r\nOutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack trace available\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\njava.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack trace available\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux`\r\n**PACKAGE_NAME**: `com.termux`\r\n**VERSION_NAME**: `0.118.0`\r\n**VERSION_CODE**: `118`\r\n**TARGET_SDK**: `28`\r\n**IS_DEBUGGABLE_BUILD**: `false`\r\n**APK_RELEASE**: `F-Droid`\r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42`\r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `4.4.146`\r\n**SDK_INT**: `28`\r\n**RELEASE**: `9`\r\n**HARDWARE**: `mt6757`\r\n**SECURITY_PATCH**: `2020-08-05`\r\n**IS_DEBUGGABLE**: `0`\r\n**IS_TREBLE_ENABLED**: `true`\r\n**TYPE**: `user`\r\n**TAGS**: `release-keys`\r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi`\r\n##%\r\n(I removed some info like device manufacturer)\r\n\r\n\r\nAnd here is what I found in `$HOME` directory:\r\n\r\nΓ¥» cat crash_log_backup.md\r\n## Crash Details\r\n\r\n**Crash Thread**: `Thread[main,5,main]`\r\n**Crash Timestamp**: `2022-06-20 11:10:48.140 UTC`\r\n\r\n**Crash Message**:\r\n```\r\nFailed to allocate a 552 byte allocation with 57296 free bytes and 55KB until OOM, max allowed footprint 268435456, growth limit 268435456; failed due to fragmentation (largest possible contiguous allocation 0 bytes)\r\n```\r\n\r\n\r\n### Stacktrace\r\n\r\n```\r\njava.lang.OutOfMemoryError: Failed to allocate a 552 byte allocation with 57296 free bytes and 55KB until OOM, max allowed footprint 268435456, growth limit 268435456; failed due to fragmentation (largest possible contiguous allocation 0 bytes)\r\n at com.termux.terminal.TerminalRow.\u003cinit\u003e(TerminalRow.java:30)\r\n at com.termux.terminal.TerminalBuffer.resize(TerminalBuffer.java:235)\r\n at com.termux.terminal.TerminalEmulator.resizeScreen(TerminalEmulator.java:397)\r\n at com.termux.terminal.TerminalEmulator.resize(TerminalEmulator.java:391)\r\n at com.termux.terminal.TerminalSession.updateSize(TerminalSession.java:108)\r\n at com.termux.view.TerminalView.updateSize(TerminalView.java:896)\r\n at com.termux.view.TerminalView.setTextSize(TerminalView.java:450)\r\n at com.termux.app.terminal.TermuxTerminalViewClient.changeFontSize(TermuxTerminalViewClient.java:490)\r\n at com.termux.app.terminal.TermuxTerminalViewClient.onScale(TermuxTerminalViewClient.java:167)\r\n at com.termux.view.TerminalView$1.onScale(TerminalView.java:144)\r\n at com.termux.view.GestureAndScaleRecognizer$3.onScale(GestureAndScaleRecognizer.java:85)\r\n at android.view.ScaleGestureDetector.onTouchEvent(ScaleGestureDetector.java:372)\r\n at com.termux.view.GestureAndScaleRecognizer.onTouchEvent(GestureAndScaleRecognizer.java:93)\r\n at com.termux.view.TerminalView.onTouchEvent(TerminalView.java:572)\r\n at android.view.View.dispatchTouchEvent(View.java:12545)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3084)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2741)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3084)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2741)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3084)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2741)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3084)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2741)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3084)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2741)\r\n at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3084)\r\n at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2741)\r\n at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:441)\r\n at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)\r\n at android.app.Activity.dispatchTouchEvent(Activity.java:3400)\r\n at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:399)\r\n at android.view.View.dispatchPointerEvent(View.java:12789)\r\n at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5280)\r\n at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5074)\r\n at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4587)\r\n at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4640)\r\n at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4606)\r\n at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4746)\r\n at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4614)\r\n at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4803)\r\n at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4587)\r\n at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4640)\r\n at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4606)\r\n at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4614)\r\n at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4587)\r\n at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7337)\r\n at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7306)\r\n at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7263)\r\n at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7454)\r\n at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)\r\n at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)\r\n at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:177)\r\n at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:7421)\r\n at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:7477)\r\n at android.view.Choreographer$CallbackRecord.run(Choreographer.java:953)\r\n at android.view.Choreographer.doCallbacks(Choreographer.java:765)\r\n at android.view.Choreographer.doFrame(Choreographer.java:691)\r\n at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:939)\r\n at android.os.Handler.handleCallback(Handler.java:873)\r\n at android.os.Handler.dispatchMessage(Handler.java:99)\r\n at android.os.Looper.loop(Looper.java:193)\r\n at android.app.ActivityThread.main(ActivityThread.java:6702)\r\n at java.lang.reflect.Method.invoke(Native Method)\r\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)\r\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux`\r\n**PACKAGE_NAME**: `com.termux`\r\n**VERSION_NAME**: `0.118.0`\r\n**VERSION_CODE**: `118`\r\n**TARGET_SDK**: `28`\r\n**IS_DEBUGGABLE_BUILD**: `false`\r\n**APK_RELEASE**: `F-Droid`\r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42`\r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `4.4.146`\r\n**SDK_INT**: `28`\r\n**RELEASE**: `9`\r\n\r\n**SECURITY_PATCH**: `2020-08-05`\r\n**IS_DEBUGGABLE**: `0`\r\n**IS_TREBLE_ENABLED**: `true`\r\n**TYPE**: `user`\r\n**TAGS**: `release-keys`\r\n\r\n### Hardware\r\n\r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi`\r\n##\r\n\r\nLook at the dates. And my terminal row is set to 50000.","comments":2,"created_at":"2022-06-20T11:26:57Z","labels":["enhancement"],"number":2850,"title":"[Feature]: add timestamps to crash report filename.","updated_at":"2022-06-30T22:53:25Z"} +{"author":"SunPodder","body":"### Feature description\n\nThe kali linux terminal looks cool with its background (kali logo). I know that is actually the wallpaper and the terminal it self is transparent. But can we add support for background image for Termux terminal? This would be just a matter of setting up a background bitmap.\n\n### Additional information\n\nInspired from Kali Linux terminal.","comments":7,"created_at":"2022-06-18T13:06:50Z","labels":[],"number":2847,"title":"[Feature]: terminal background image support","updated_at":"2025-01-29T08:34:09Z"} +{"author":"CZeil","body":"### Problem description\n\nCurrently I use termux mostly to be able to use yt-dlp and to be able to download content directly to my phone.\r\n\r\nI have configured a script that is termux-url-opener and basically what it does is to call yt-dlp to download the video.\r\n\r\nThe situation is as follows, every time I open a link with termux when the yt-dlp process ends it automatically closes (so far so good), but it turns out that when I have more than equal processes what happens is that it ends the first one and when the first one ends it automatically closes the rest of the open windows.\r\n\r\nAnd I made a superficial test (you could say) and this not only happens with the termux-url-opener script but it happens even with tabs that were opened normally.\r\n\r\nI don't know if I'm making a mistake, or if it's my phone that is doing this problem.\n\n### Steps to reproduce the behavior.\n\nOpen links with termux\r\n\r\nScript\r\n```\r\n~ $ cat bin/termux-url-opener\r\n#!/data/data/com.termux/files/usr/bin/bash\r\nurl=$1\r\nyt-dlp --config-location bin/crunchyroll.conf $url\r\n```\r\n\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: Android 11\r\n* Device model: LG K51S\r\n\r\n```~ $ termux-info\r\nTermux Variables:\r\nTERMUX_APK_RELEASE=F_DROID\r\nTERMUX_APP_PACKAGE_MANAGER=apt\r\nTERMUX_APP_PID=6949\r\nTERMUX_IS_DEBUGGABLE_BUILD=0\r\nTERMUX_MAIN_PACKAGE_FORMAT=debian\r\nTERMUX_VERSION=0.118.0\r\nPackages CPU architecture:\r\narm\r\nSubscribed repositories:\r\n# sources.list\r\ndeb https://packages-cf.termux.org/apt/termux-main/ stable main\r\nUpdatable packages:\r\nAll packages up to date\r\ntermux-tools version:\r\n0.187\r\nAndroid version:\r\n11\r\nKernel build information:\r\nLinux localhost 4.19.127 #1 SMP PREEMPT Mon Apr 11 12:15:38 IST 2022 armv7l Android\r\nDevice manufacturer:\r\nLGE\r\nDevice model:\r\nLM-K510","comments":1,"created_at":"2022-06-18T03:37:45Z","labels":["bug report"],"number":2845,"title":"This is a question","updated_at":"2026-02-27T01:00:10Z"} +{"author":"Freed-Wu","body":"### Feature description\n\nNow, config file of termux has many paths:\r\n\r\n- ~/.termux\r\n- ~/bin: termux hook use it\r\n- ~/shortcuts: termux-widgets use it\r\n- ~/.termuxrc: termux-packages use it\r\n\r\nWhy not use a same directory? Such as `~/.termux`, Or `${XDG_CONFIG_HOME:-$HOME/.config}/termux`? Use a same directory is more convenient for user to backup their config file by VCS, and respect some standard.\r\n\r\nThanks.\n\n### Additional information\n\nMost of app/terminal emulators use `${XDG_CONFIG_HOME:-$HOME/.config}/appname` to restore their config files.","comments":14,"created_at":"2022-06-05T09:25:32Z","labels":[],"number":2826,"title":"[Feature]: Use same directory to resotore config file of termux, not seperately","updated_at":"2024-11-25T13:39:34Z"} +{"author":"Ryu945","body":"### Problem description\n\nThe program will randomly launch itself in the background and take up battery power. I am not sure if turning on the work profile is related to this though Termux is not installed in the work profile. I only mention this because I have seen a bug with other programs where launching the work profile will cause a program to randomly start itself.\n\n### Steps to reproduce the behavior.\n\nInstall the program and don't ever launch it. Your find it just randomly starts itself in the background. Even if you force stop it, your find it running again.\n\n### What is the expected behavior?\n\nA program should never start itself unless the user starts it.\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: Android 11 (Lineage OS)\r\n* Device model: LG V20 H910\r\n","comments":5,"created_at":"2022-05-25T17:57:26Z","labels":["bug report"],"number":2796,"title":"[Bug]: Termux randomly starts itself","updated_at":"2022-09-23T18:40:25Z"} +{"author":"daviddean-x","body":"### Feature description\n\nNice to have would be a navigation bar on the top or left side for multiple window tabs, like on iTerm, so it would be easier to switch between windows\n\n### Additional information\n\nI had read that termux has shortkeys to switch between multiple session / windows","comments":5,"created_at":"2022-05-22T14:34:37Z","labels":[],"number":2785,"title":"[Feature]: request navigation bar","updated_at":"2026-05-25T16:19:17Z"} +{"author":"Hustoking","body":"### Problem description\n\n## Termux from F-Droid. Can't use ping command to ping a address. \r\n```\r\n$ ping localhost\r\n\u003e Do you want to ping boardcast? Then -b\r\n```\r\n\r\nAnd I cant download any package from pkg or apt.\r\n\r\n\u003e App network permission is granted.\n\n### Steps to reproduce the behavior.\n\n```\r\n$ pkg i xxx\r\n\r\nIgn:1 https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable InRelease\r\nErr:2 https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable Release\r\n Cannot initiate the connection to mirrors.tuna.tsinghua.edu.cn:443 (2402:f000:1:400::2). - connect (13: Permission denied) Cannot initiate the connection to mirrors.tuna.tsinghua.edu.cn:443 (101.6.15.130). - connect (13: Permission denied)\r\nReading package lists... Done\r\nE: The repository 'https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable Release' does not have a Release file.\r\nN: Metadata integrity can't be verified, repository is disabled now.\r\nN: Possible causes: unstable or tampered Internet connection, wrong sources.list, outdated keyring or host is down currently.\r\nN: Please note that all hosting problems or other serious issues we announce on our social media pages.\r\nN: Use termux-change-repo for switching to a mirror.\r\n```\r\n\r\n- Internet permission\r\n[-] WLAN\r\n[-] sdcard 1\r\n[-] sdcard 2\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 11\r\n* Device model: XiaoMi - MIUI 12.5\r\n","comments":41,"created_at":"2022-05-17T02:20:46Z","labels":["bug report"],"number":2778,"title":"[Bug]: Termux can't connect to internet anyway","updated_at":"2025-04-25T21:51:17Z"} +{"author":"edshamis","body":"### Feature description\n\nI'd like to have a shortcuts to jump to an existing sessions by for example Ctrl-1, Ctrl-2... \n\n### Additional information\n\nLike in Chrome browser.\r\nIt would perfectly complete implemented new/next/prev session shortcuts ","comments":0,"created_at":"2022-05-09T22:37:58Z","labels":[],"number":2766,"title":"[Feature]: add shortcuts to open existing session by index","updated_at":"2022-05-09T22:37:58Z"} +{"author":"FossPrime","body":"### Feature description\r\n\r\nMultiuser is still essential for maintaining privacy, as Android 12 has no way to stop apps from seeing what other apps you have installed. I can run Termux on my primary user as the app I'm hiding from has DRM protection that disables features, and Multi-user trips the DRM.\r\n\r\nIt would also be useful to have separate termux environments.\r\n\r\n![Screenshot_20220509-232949](https://user-images.githubusercontent.com/876076/167433742-ff985689-0dd0-4884-98bf-d68921943cc6.png)\r\n\r\n\r\n### Additional information\r\n\r\nNix-on-droid also doesn't work. I'll use termius instead.","comments":35,"created_at":"2022-05-09T14:37:31Z","labels":[],"number":2765,"title":"[Feature]: Multi-user support","updated_at":"2023-07-26T08:31:55Z"} +{"author":"tastytea","body":"### Problem description\n\n`TERM` is set to `xterm-256color` but it appears to not be xterm. It is important that terminals set `TERM` to a unique value because it makes it possible to react to quirks with workarounds. \r\n\r\nFor example, xterm sends `^H` for backspace and `^?` for control + backspace, most other terminals (including termux) do it the other way round. So I added this workaround:\r\n\r\n``` shell\r\nif [[ \"${TERM}\" == xterm* ]]; then\r\n bindkey '^H' backward-delete-char\r\n bindkey '^?' backward-delete-word\r\nfi\r\n```\r\n\r\nWorks fine in xterm but breaks termux. Related: \u003chttps://github.com/termux/termux-app/issues/212\u003e\n\n### Steps to reproduce the behavior.\n\n`echo ${TERM}`\n\n### What is the expected behavior?\n\nPlease set `TERM` to `termux` or so.\n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 11 (LineasgeOS 18.1)\r\n* Device model: \r\n","comments":3,"created_at":"2022-04-28T06:35:16Z","labels":["bug report"],"number":2744,"title":"[Bug]: Wrong TERM set","updated_at":"2022-06-09T02:05:11Z"} +{"author":"GJoe2","body":"### Feature description\n\nI would like to handle termux resolution using a config file (~/.termux/termux.properties) to make possible scripting. My use case would be launching a bash command (./script_resolution -80 50 -'ssh user@ip') at certain terminal resolution (80x50) and then returning to normal resolution (50x25) when the process is finished. \n\n### Additional information\n\nI haven't tried in others terminal emulator","comments":1,"created_at":"2022-04-25T00:53:19Z","labels":[],"number":2735,"title":"[Feature]: Ability to handle termux terminal resolution inside ~/.termux/termux.properties","updated_at":"2022-07-02T17:50:16Z"} +{"author":"chriswoope","body":"### Feature description\n\nA better way to support secondary users than the ones proposed so far could be to set the prefix to something like /data/////////data/ or /data/././././data, with enough slashes or /.s to be able to binary patch all instances of it in files of the package upon package installation to /data/user/NN/ for all practical values of NN without changing the string length (looking into any gzip/bz2/xz/zip archives if any, with special handling of checksummed files if any).\r\n\r\nWhile somewhat inelegant, it seems to me this is likely to work, with the exception of any non-standard compressed files or files with checksums (both of these are rare or nonexistent in common Linux packages and can be handled with ad-hoc code), or anything that doesn't like the paths not being canonical (also probably rare or non-existent, since due to the /usr merge everything is accessible via both / and /usr in common Linux distributions).\r\n\r\nThe few applications that might not work, if any, can be patched.\r\n\r\nUnlike other solutions, it doesn't have any performance or functionality downside, although it might have some slight aesthetic downside and there's a small risk of breaking compatibility in existing installation (but it's possible to build all packages twice, once like now and once with this scheme).\r\n\n\n### Additional information\n\nYes for secondary users support. None known for binary patching.","comments":3,"created_at":"2022-04-24T19:49:17Z","labels":[],"number":2734,"title":"[Feature]: Support secondary users via binary patching and extra slashes","updated_at":"2023-10-15T08:55:17Z"} +{"author":"emacs25","body":"### Feature description\n\nnow we can use \"termux-clip-set\" to copy content from termux to other app.\r\n\r\ni just wanna know is it possible to map the function to bind a key adding the termux keyboard.\n\n### Additional information\n\nnot sure","comments":3,"created_at":"2022-04-22T06:29:43Z","labels":[],"number":2725,"title":"[Feature]:copy content from termux to other app","updated_at":"2022-04-29T00:23:16Z"} +{"author":"Duvio","body":"### Problem description\n\nWhen you had already run termux-setup-storag once, removed the execute bit from the storage/ folder, and run termux-setup-storage again, it results in a termux crash report. This is because on linux you can only access folders when their execute bit is set. If you remove the execute bit from a folder using chmod, you can for example not cd into it anymore.\r\n\r\n## Report Info\r\n\r\n\r\n**User Action**: `crash report` \r\n**Sender**: `termux-storage` \r\n**Report Timestamp**: `2022-04-11 01:00:49.773 UTC` \r\n##\r\n\r\n## Setup Storage Error\r\n\r\n**Error Code**: `302` \r\n**Error Message (FileUtils Error)**:\r\n```\r\nClearing ~/storage directory at path \"/data/data/com.termux/files/home/storage\" failed.\r\nException: /data/data/com.termux/files/home/storage: failed to delete one or more files; see suppressed exceptions for details\r\n```\r\n\r\n\r\n### StackTraces\r\n\r\n```\r\njava.nio.file.FileSystemException: /data/data/com.termux/files/home/storage: failed to delete one or more files; see suppressed exceptions for details\r\n\tat com.google.common.io.MoreFiles.throwDeleteFailed(MoreFiles.java:828)\r\n\tat com.google.common.io.MoreFiles.deleteDirectoryContents(MoreFiles.java:642)\r\n\tat com.termux.shared.file.FileUtils.clearDirectory(FileUtils.java:1269)\r\n\tat com.termux.app.TermuxInstaller$2.run(TermuxInstaller.java:272)\r\n\tSuppressed: java.nio.file.AccessDeniedException: shared\r\n\t\tat sun.nio.fs.UnixSecureDirectoryStream$BasicFileAttributeViewImpl.readAttributes(UnixSecureDirectoryStream.java:391)\r\n\t\tat com.google.common.io.MoreFiles.isDirectory(MoreFiles.java:374)\r\n\t\tat com.google.common.io.MoreFiles.deleteRecursivelySecure(MoreFiles.java:655)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContentsSecure(MoreFiles.java:685)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContents(MoreFiles.java:628)\r\n\t\t... 2 more\r\n\tSuppressed: java.nio.file.AccessDeniedException: downloads\r\n\t\tat sun.nio.fs.UnixSecureDirectoryStream$BasicFileAttributeViewImpl.readAttributes(UnixSecureDirectoryStream.java:391)\r\n\t\tat com.google.common.io.MoreFiles.isDirectory(MoreFiles.java:374)\r\n\t\tat com.google.common.io.MoreFiles.deleteRecursivelySecure(MoreFiles.java:655)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContentsSecure(MoreFiles.java:685)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContents(MoreFiles.java:628)\r\n\t\t... 2 more\r\n\tSuppressed: java.nio.file.AccessDeniedException: dcim\r\n\t\tat sun.nio.fs.UnixSecureDirectoryStream$BasicFileAttributeViewImpl.readAttributes(UnixSecureDirectoryStream.java:391)\r\n\t\tat com.google.common.io.MoreFiles.isDirectory(MoreFiles.java:374)\r\n\t\tat com.google.common.io.MoreFiles.deleteRecursivelySecure(MoreFiles.java:655)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContentsSecure(MoreFiles.java:685)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContents(MoreFiles.java:628)\r\n\t\t... 2 more\r\n\tSuppressed: java.nio.file.AccessDeniedException: pictures\r\n\t\tat sun.nio.fs.UnixSecureDirectoryStream$BasicFileAttributeViewImpl.readAttributes(UnixSecureDirectoryStream.java:391)\r\n\t\tat com.google.common.io.MoreFiles.isDirectory(MoreFiles.java:374)\r\n\t\tat com.google.common.io.MoreFiles.deleteRecursivelySecure(MoreFiles.java:655)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContentsSecure(MoreFiles.java:685)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContents(MoreFiles.java:628)\r\n\t\t... 2 more\r\n\tSuppressed: java.nio.file.AccessDeniedException: music\r\n\t\tat sun.nio.fs.UnixSecureDirectoryStream$BasicFileAttributeViewImpl.readAttributes(UnixSecureDirectoryStream.java:391)\r\n\t\tat com.google.common.io.MoreFiles.isDirectory(MoreFiles.java:374)\r\n\t\tat com.google.common.io.MoreFiles.deleteRecursivelySecure(MoreFiles.java:655)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContentsSecure(MoreFiles.java:685)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContents(MoreFiles.java:628)\r\n\t\t... 2 more\r\n\tSuppressed: java.nio.file.AccessDeniedException: movies\r\n\t\tat sun.nio.fs.UnixSecureDirectoryStream$BasicFileAttributeViewImpl.readAttributes(UnixSecureDirectoryStream.java:391)\r\n\t\tat com.google.common.io.MoreFiles.isDirectory(MoreFiles.java:374)\r\n\t\tat com.google.common.io.MoreFiles.deleteRecursivelySecure(MoreFiles.java:655)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContentsSecure(MoreFiles.java:685)\r\n\t\tat com.google.common.io.MoreFiles.deleteDirectoryContents(MoreFiles.java:628)\r\n\t\t... 2 more\r\n\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.0` \r\n**VERSION_CODE**: `118` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `false` \r\n**APK_RELEASE**: `F-Droid` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `228FB2CFE90831C1499EC3CCAF61E96E8E1CE70766B9474672CE427334D41C42` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `5.4.86-qgki-23158112-abA528BXXU1BUL7` \r\n**SDK_INT**: `31` \r\n**RELEASE**: `12` \r\n**ID**: `SP1A.210812.016` \r\n**DISPLAY**: `SP1A.210812.016.A528BXXU1BUL7` \r\n**INCREMENTAL**: `A528BXXU1BUL7` \r\n**SECURITY_PATCH**: `2022-01-01` \r\n**IS_DEBUGGABLE**: `0` \r\n**IS_TREBLE_ENABLED**: `true` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `samsung` \r\n**BRAND**: `samsung` \r\n**MODEL**: `SM-A528B` \r\n**PRODUCT**: `a52sxqeea` \r\n**BOARD**: `lahaina` \r\n**HARDWARE**: `qcom` \r\n**DEVICE**: `a52sxq` \r\n**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi` \r\n##\r\n\n\n### Steps to reproduce the behavior.\n\ntermux-setup-storage\r\nchmod -x storage\r\ntermux-setup-storage\n\n### What is the expected behavior?\n\nExpected: Do what it is supposed to do and exit fine\r\n\r\nReality: Does what it is supposed to do but leaves a notification with a termux crash report behind\n\n### System information\n\nWritten down above","comments":2,"created_at":"2022-04-11T01:13:17Z","labels":["bug report"],"number":2703,"title":"[Bug]: Termux-storage-setup Crash","updated_at":"2022-05-08T19:31:45Z"} +{"author":"knyipab","body":"### Feature description\n\nIIRC, the current `termux-file-editor` only performs on a copy of the shared file. \r\n\r\nRecently, Termux:API has provided SAF API for programs to handle URI. It would be great if TermuxFileReceiverActivity.java could send URI to `termux-file-editor` so that it could save the file back to URI through the new SAF API. That way, Termux could really edit and save file in external storage (even on GDrive, if it is opened from `com.android.documentsui.files.FilesActivity` instead of official GDrive App). \r\n\r\nAnd this should somehow solve #766 . \n\n### Additional information\n\nI could think of some backward-compatible implementations. \r\n1. use second argument `$2`. It is easy to implement (add `dataUri` in [the EXTRA_ARGUMENTS line](https://github.com/termux/termux-app/blob/760ae78affdf5f53cefffcad073bd535b17e5a55/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java#L176) and change argument specification of `promptNameAndSave`)\r\n2. environment variable. This require to change `buildEnvironment` across a few java files. But this may be more consistent if one day Termux implements another version of file editor for multiple files. \r\n\r\nIf you don't mind me to make a pull request. I could help as well. Thanks a lot!","comments":12,"created_at":"2022-03-15T15:37:59Z","labels":[],"number":2658,"title":"[Feature]: pass to URI to `termux-file-editor` which enables file saving","updated_at":"2023-07-02T16:32:16Z"} +{"author":"zixijian","body":"### Feature description\n\nTermux can not echo blink effect.\r\n\r\n```\r\necho -e '\\x1b[5mhello'\r\n```\r\n\r\nSome Muds game use blink effect,I see that some people also have a need for cursor blinking, which should be considered the same thing.\n\n### Additional information\n\nAt present, there is no terminal that can realize this function in Android mobile phones.\r\n\r\nAs the best terminal software for Android, I think it is necessary for Termux to improve the basic functions.\r\n\r\nOn pc,xshell \u0026 iterm2 etc. can achieve this effect.","comments":5,"created_at":"2022-03-14T06:13:54Z","labels":[],"number":2656,"title":"[Feature]: Need CSI 5 m (blink) support","updated_at":"2026-05-13T05:16:37Z"} +{"author":"ivam3","body":"### Problem description\n\nWhen the termux special keys are enable its come with unnecessary additional black space on horizontal and vertical screen, I was play with termux.properties file but the issue is keeps even I deleted it \n\n### Steps to reproduce the behavior.\n\n![Screenshot_20220312-234053_Termux](https://user-images.githubusercontent.com/27752315/158048771-9cf30b7d-295f-4c66-b49f-276fac950552.jpg)\r\n\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.018.0\r\n* Android OS version: 11\r\n* Device model: SM-A305G\r\n","comments":1,"created_at":"2022-03-13T06:53:33Z","labels":["bug report"],"number":2655,"title":"[Bug]: Termux special keys comes with a big black space","updated_at":"2022-03-13T08:55:54Z"} +{"author":"tareksander","body":"### Feature description\n\nFor security reasons (privilege separation) and because f-droid seems to be slow when it comes to setting up signing apps with the same key (see Termux:GUI) it could be useful to have a plugin that doesn't share the same UID. The main problem with that would be security: If the apps are different users, they cannot call not exported components of each other, and completely open components are a security risk.\r\n\r\nMy idea is: Create a new signature-level permission for Termux and have the plugins BroadcastReceiver or Service require that permission to get called. That way only Termux can call these components.\r\n\r\nTo establish a 2-way communication between a plugin and a program you could make Termux expose another unix socket to programs like for the `am` integration. The program sends Termux the component it would like to call and if successful Termux sends a file descriptor for a unix socket pair to the program and the other end is send in the Intent via ParcelFileDescriptor to the plugin. If more connections are needed, the program or plugin can then send more file descriptors over the connection they have already.\n\n### Additional information\n\n[Create a ParcelFileDescriptor socket pair.](https://developer.android.com/reference/android/os/ParcelFileDescriptor#createSocketPair()) \r\n\r\n[Getting a FileDescriptor from a ParcelFileDescriptor.](https://developer.android.com/reference/android/os/ParcelFileDescriptor#getFileDescriptor()) \r\n\r\n[Sending a FileDescriptor over a LocalSocket.](https://developer.android.com/reference/android/net/LocalSocket#setFileDescriptorsForSend(java.io.FileDescriptor[])) \r\n\r\n[Putting a Parcelable into an Intent.](https://developer.android.com/reference/android/content/Intent#putExtra(java.lang.String,%20android.os.Parcelable)) ","comments":36,"created_at":"2022-03-11T18:06:45Z","labels":[],"number":2654,"title":"[Feature]: Plugins without shared UID","updated_at":"2023-03-09T17:32:17Z"} +{"author":"sudomain","body":"### Feature description\n\nThere's supported keys that I (and possibly other users) need occasionally, but don't want to commit them to my `termux.properties`. For me these are the `F1-F12` and `FN` keys. I could technically add them to my termux.properties, run `termux-reload-settings`, press them, and go back to my old config when I'm done. I think it would be nicer to have a key/popup/gesture which opens a menu displaying the list of the supported keys. When one of the menu items is tapped, that key gets sent. It would be useful for quickly accessing the supported keys that are not used very frequently (at least compared to the reload-settings process previously described).\n\n### Additional information\n\nN/A","comments":2,"created_at":"2022-03-09T23:34:04Z","labels":[],"number":2649,"title":"[Feature]: A key for extra-keys which opens a menu to select a less commonly used `supported keys`","updated_at":"2022-03-10T00:23:54Z"} +{"author":"tathastu871","body":"### Feature description\n\n\r\nUse termux-file-editor as termux-url-opener for note taking\n\n### Additional information\n\nwhile browsing i needed to make note of some text. when i select text and share it to termux file-editor hook is being called and every time i share new text it ask for new file name and is tedious. but if something like termux-url-opener can be used for note taking like echo \"$1\" \u003e\u003e file \u0026\u0026 exit . i can use termux for note taking","comments":2,"created_at":"2022-03-03T20:20:29Z","labels":[],"number":2632,"title":"[Feature]: termux-file-editor","updated_at":"2022-04-22T05:56:46Z"} +{"author":"sparkles-laurel","body":"### Feature description\n\nWhen I try to add multiple popup keys with an array in termux.properties, the extra keys keyboard is reset to its original configuration with a JSON serialization error. This is acceptable, but I want to add F1, F2, etc. as popup keys to the FN key I added. Can we have this feature?\n\n### Additional information\n\nI don't know any other apps or emulators having this feature.","comments":3,"created_at":"2022-02-27T09:22:54Z","labels":[],"number":2624,"title":"[Feature]: Add multiple popup keys for the extra keys","updated_at":"2023-09-06T04:02:10Z"} +{"author":"2096779623","body":"### Problem description\r\n\r\n\r\n\r\n![image](https://user-images.githubusercontent.com/57583560/155652575-393fdf3b-e76b-4c85-bdbb-08b92d1e80ab.png)\r\n\r\nbusybox:\r\n\r\n\r\n![image](https://user-images.githubusercontent.com/57583560/155652820-7327d3b7-ba20-4164-bdc1-43a8fff313a4.png)\r\n\r\n\r\nThis domain name belongs to @sqlsec .\r\n\r\nΓà½.πïÅ == xii.ltd\r\n\r\nThis domain name is registered in China and may be inaccessible now because [the domain owner](https://github.com/sqlsec) has no record filing under Chinese law,but can ping.\r\n\r\nOn Windows 10∩╝Ü\r\n\r\n![image](https://user-images.githubusercontent.com/57583560/155652982-41d556ef-9f5b-4f01-ac6f-52ff95153fb9.png)\r\n\r\nOn Powershell∩╝Ü\r\n\r\n![image](https://user-images.githubusercontent.com/57583560/155653053-ef5abbaf-f7a4-40eb-8ca8-a7277935f779.png)\r\n\r\nWhy can't I ping this domain name in termux?\r\n\r\nLog:\r\n\r\n## Transcript\r\n\r\n```\r\nWelcome to Termux!\r\n\r\nCommunity forum: https://termux.com/community\r\nGitter chat: https://gitter.im/termux/termux\r\nIRC channel: #termux on libera.chat\r\n\r\nWorking with packages:\r\n\r\n * Search packages: pkg search \u003cquery\u003e\r\n * Install a package: pkg install \u003cpackage\u003e\r\n * Upgrade packages: pkg upgrade\r\n\r\nSubscribing to additional repositories:\r\n\r\n * Root: pkg install root-repo\r\n * X11: pkg install x11-repo\r\n\r\nReport issues at https://termux.com/issues\r\n\r\n~ $ ping Γà½.πïÅ\r\nping: unknown host Γà½.πïÅ\r\n~ $\r\n```\r\n##\r\n\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.0` \r\n**VERSION_CODE**: `118` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `true` \r\n**APK_RELEASE**: `Github` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `B6DA01480EEFD5FBF2CD3771B8D1021EC791304BDD6C4BF41D3FAABAD48EE5E1` \r\n##\r\n\r\n\r\n## Termux APT Info\r\n\r\n\r\n### Subscribed Repositories\r\n\r\n#### sources.list\r\n`deb https://termux.librehat.com/apt/termux-main/ stable main`\r\n##\r\n\r\n\r\n### Updatable Packages\r\n\r\n```\r\napt/stable 2.3.15 i686 [upgradable from: 2.3.13-3]\r\nbash/stable 5.1.16 i686 [upgradable from: 5.1.12-2]\r\ncommand-not-found/stable 1.73 i686 [upgradable from: 1.71]\r\ndebianutils/stable 5.7 i686 [upgradable from: 5.5]\r\ned/stable 1.18 i686 [upgradable from: 1.17-4]\r\nlibexpat/stable 2.4.6 i686 [upgradable from: 2.4.2]\r\nlibgnutls/stable 3.7.3 i686 [upgradable from: 3.6.16-1]\r\nlibnghttp2/stable 1.47.0 i686 [upgradable from: 1.46.0]\r\nlibtirpc/stable 1.3.2-1 i686 [upgradable from: 1.3.2]\r\nlibunistring/stable 1.0 i686 [upgradable from: 0.9.10-5]\r\nnano/stable 6.2 i686 [upgradable from: 6.0]\r\nncurses/stable 6.3 i686 [upgradable from: 6.2.20200725-6]\r\nopenssl/stable 1.1.1m-2 i686 [upgradable from: 1.1.1l]\r\ntermux-keyring/stable 3.0 all [upgradable from: 2.4]\r\ntermux-licenses/stable 2.0-2 all [upgradable from: 2.0-1]\r\ntermux-tools/stable 0.163 all [upgradable from: 0.155]\r\n```\r\n##\r\n\r\n\r\n\r\n##\r\n\r\n\r\n## Termux Files Info\r\n\r\n\r\n**TERMUX_REQUIRED_FILES_DIR_PATH ($PREFIX)**: `/data/data/com.termux/files` \r\n**ANDROID_ASSIGNED_FILES_DIR_PATH**: `/data/user/0/com.termux/files` \r\n\r\n```\r\n$ echo 'ls info:'\r\n/system/bin/ls -lhdZ '/data/data' '/data/user/0' '/data/data/com.termux' '/data/user/0/com.termux' '/data/data/com.termux/files' '/data/user/0/com.termux/files' '/data/user/0/com.termux/files' '/data/user/com.termux/files' '/data/data/com.termux/files/usr-staging' '/data/data/com.termux/files/usr' '/data/data/com.termux/files/home' '/data/data/com.termux/files/usr/bin/login' 2\u003e\u00261\r\necho; echo 'mount info:'\r\n/system/bin/grep -E '( /data )|( /data/data )|( /data/user/[0-9]+ )' /proc/self/mountinfo 2\u003e\u00261 | /system/bin/grep -v '/data_mirror' 2\u003e\u00261\r\n\r\nls info:\r\nls: /data/user/com.termux/files: No such file or directory\r\nls: /data/data/com.termux/files/usr-staging: No such file or directory\r\ndrwxrwx--x 57 system system ? 4.0K 2022-02-25 12:13 /data/data\r\ndrwx------ 6 u0_a42 u0_a42 ? 4.0K 2022-02-25 12:13 /data/data/com.termux\r\ndrwxrwx--x 4 u0_a42 u0_a42 ? 4.0K 2022-02-25 12:13 /data/data/com.termux/files\r\ndrwx------ 3 u0_a42 u0_a42 ? 4.0K 2022-02-25 12:13 /data/data/com.termux/files/home\r\ndrwx------ 11 u0_a42 u0_a42 ? 4.0K 2022-02-25 12:13 /data/data/com.termux/files/usr\r\n-rwx------ 1 u0_a42 u0_a42 ? 1.4K 2022-02-25 12:13 /data/data/com.termux/files/usr/bin/login\r\nlrwxrwxrwx 1 root root ? 10 2019-09-10 18:54 /data/user/0 -\u003e /data/data\r\ndrwx------ 6 u0_a42 u0_a42 ? 4.0K 2022-02-25 12:13 /data/user/0/com.termux\r\ndrwxrwx--x 4 u0_a42 u0_a42 ? 4.0K 2022-02-25 12:13 /data/user/0/com.termux/files\r\ndrwxrwx--x 4 u0_a42 u0_a42 ? 4.0K 2022-02-25 12:13 /data/user/0/com.termux/files\r\n\r\nmount info:\r\n1130 1087 8:19 / /data rw,nosuid,nodev,relatime master:15 - ext4 /dev/block/sdb3 rw,data=ordered\r\n\r\n```\r\n##\r\n\r\n\r\n## Logcat Dump\r\n\r\n\r\n\r\n``````\r\n$ /system/bin/logcat -d -t 3000 2\u003e\u00261\r\n--------- beginning of main\r\n02-25 12:13:32.333 4593 4593 I art : Late-enabling -Xcheck:jni\r\n02-25 12:13:32.334 4593 4593 W art : Unexpected CPU variant for X86 using defaults: x86\r\n02-25 12:13:32.386 4593 4593 W System : ClassLoader referenced unknown path: \r\n02-25 12:13:32.386 4593 4593 D ApplicationLoaders: ignored Vulkan layer search path /data/app/com.termux-1/lib/x86:/data/app/com.termux-1/base.apk!/lib/x86 for namespace 0xc1c01090\r\n02-25 12:13:32.403 4593 4593 W Termux:SharedProperties: Not loading properties since file is null\r\n02-25 12:13:32.442 4593 4615 E WVMExtractor: Failed to open libwvm.so: dlopen failed: library \"libwvm.so\" not found\r\n02-25 12:13:32.454 4593 4617 I OMXClient: MuxOMX ctor\r\n02-25 12:13:32.455 4593 4593 D : HostConnection::get() New Host Connection established 0xb9bde5c0, tid 4593\r\n02-25 12:13:32.455 4593 4593 W : Process pipe failed\r\n02-25 12:13:32.510 4593 4616 D : HostConnection::get() New Host Connection established 0xa9437240, tid 4616\r\n02-25 12:13:32.513 4593 4616 I OpenGLRenderer: Initialized EGL, version 1.4\r\n02-25 12:13:32.513 4593 4616 D OpenGLRenderer: Swap behavior 1\r\n02-25 12:13:32.513 4593 4616 E EGL_adreno: CreateContext rcMajorVersion:3, minorVersion:1\r\n02-25 12:13:32.528 4593 4616 D EGL_adreno: eglCreateContext: 0xc2e45760: maj 3 min 1 rcv 3\r\n02-25 12:13:32.554 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:13:32.554 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xc2675fa0, error=EGL_BAD_MATCH\r\n02-25 12:13:32.559 4593 4625 I Termux:TermuxInstaller: Installing Termux bootstrap packages.\r\n02-25 12:13:32.561 4593 4625 I Termux:TermuxInstaller: Extracting bootstrap zip to prefix staging directory \"/data/data/com.termux/files/usr-staging\".\r\n02-25 12:13:32.655 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:13:32.655 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xb9b6df60, error=EGL_BAD_MATCH\r\n02-25 12:13:34.405 4593 4625 I Termux:TermuxInstaller: Moving termux prefix staging to prefix directory.\r\n02-25 12:13:34.405 4593 4625 I Termux:TermuxInstaller: Bootstrap packages installed successfully.\r\n02-25 12:13:34.405 4593 4593 W Termux:SharedProperties: Not loading properties since file is null\r\n02-25 12:13:34.451 4593 4593 W Termux:SharedProperties: Not loading properties since file is null\r\n02-25 12:13:34.453 4593 4598 I art : Do partial code cache collection, code=30KB, data=29KB\r\n02-25 12:13:34.454 4593 4598 I art : After code cache collection, code=24KB, data=25KB\r\n02-25 12:13:34.454 4593 4598 I art : Increasing code cache capacity to 128KB\r\n02-25 12:13:34.456 4593 4593 W Termux:SharedProperties: Not loading properties since file is null\r\n02-25 12:13:34.484 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:13:34.485 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa945f6e0, error=EGL_BAD_MATCH\r\n02-25 12:16:53.830 4593 4598 I art : Do partial code cache collection, code=52KB, data=48KB\r\n02-25 12:16:53.830 4593 4598 I art : After code cache collection, code=47KB, data=45KB\r\n02-25 12:16:53.830 4593 4598 I art : Increasing code cache capacity to 256KB\r\n02-25 12:21:38.132 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:38.133 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa862f500, error=EGL_BAD_MATCH\r\n02-25 12:21:38.171 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:38.171 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa862f540, error=EGL_BAD_MATCH\r\n02-25 12:21:38.267 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:38.267 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa43ff080, error=EGL_BAD_MATCH\r\n02-25 12:21:44.266 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:44.266 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa43ff660, error=EGL_BAD_MATCH\r\n02-25 12:21:45.096 4593 4616 D OpenGLRenderer: endAllActiveAnimators on 0xa43df100 (RippleDrawable) with handle 0xa8608010\r\n02-25 12:21:51.293 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:51.293 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa43fff00, error=EGL_BAD_MATCH\r\n02-25 12:21:51.306 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:51.306 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa43fffc0, error=EGL_BAD_MATCH\r\n02-25 12:21:51.386 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:51.386 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa4470060, error=EGL_BAD_MATCH\r\n02-25 12:21:51.979 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:51.979 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xc2e29b20, error=EGL_BAD_MATCH\r\n02-25 12:21:52.125 4593 4616 D OpenGLRenderer: endAllActiveAnimators on 0xa43f8300 (RippleDrawable) with handle 0xa86080d0\r\n02-25 12:21:53.907 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:53.907 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa43fff20, error=EGL_BAD_MATCH\r\n02-25 12:21:55.866 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:55.866 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa84fe1c0, error=EGL_BAD_MATCH\r\n02-25 12:21:56.832 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:56.832 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa4366b20, error=EGL_BAD_MATCH\r\n02-25 12:21:56.853 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:56.853 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa4366be0, error=EGL_BAD_MATCH\r\n02-25 12:21:56.941 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:56.941 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa4366c60, error=EGL_BAD_MATCH\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: (1) APT Info Command:\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: Previous State: `Executed`\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: Current State: `Success`\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: \r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: Stdout:\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: ```\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: (truncated) gradable from: 5.1.12-2]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: command-not-found/stable 1.73 i686 [upgradable from: 1.71]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: debianutils/stable 5.7 i686 [upgradable from: 5.5]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: ed/stable 1.18 i686 [upgradable from: 1.17-4]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: libexpat/stable 2.4.6 i686 [upgradable from: 2.4.2]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: libgnutls/stable 3.7.3 i686 [upgradable from: 3.6.16-1]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: libnghttp2/stable 1.47.0 i686 [upgradable from: 1.46.0]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: libtirpc/stable 1.3.2-1 i686 [upgradable from: 1.3.2]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: libunistring/stable 1.0 i686 [upgradable from: 0.9.10-5]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: nano/stable 6.2 i686 [upgradable from: 6.0]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: ncurses/stable 6.3 i686 [upgradable from: 6.2.20200725-6]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: openssl/stable 1.1.1m-2 i686 [upgradable from: 1.1.1l]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: termux-keyring/stable 3.0 all [upgradable from: 2.4]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: termux-licenses/stable 2.0-2 all [upgradable from: 2.0-1]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: termux-tools/stable 0.163 all [upgradable from: 0.155]\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: ```\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: ##\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: \r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: \r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: \r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: ```\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: \r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: Stderr:\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: ```\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: find: ΓÇÿ/data/data/com.termux/files/usr/etc/apt/sources.list.dΓÇÖ: No such file or directory\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: \r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: ```\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: \r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: Exit Code: `0`\r\n02-25 12:21:57.145 4593 6003 E Termux:TermuxUtils: \r\n02-25 12:21:57.157 4593 4593 W art : Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable\r\n02-25 12:21:57.275 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:21:57.275 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa3f1d640, error=EGL_BAD_MATCH\r\n02-25 12:21:57.371 4593 4593 W IInputConnectionWrapper: finishComposingText on inactive InputConnection\r\n02-25 12:22:01.552 4593 4598 I art : Do full code cache collection, code=124KB, data=103KB\r\n02-25 12:22:01.553 4593 4598 I art : Starting a blocking GC JitCodeCache\r\n02-25 12:22:01.553 4593 4598 I art : After code cache collection, code=105KB, data=77KB\r\n02-25 12:22:07.376 4593 4593 W art : Before Android 4.1, method int androidx.appcompat.widget.DropDownListView.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView\r\n02-25 12:22:07.377 4593 4593 W art : Before Android 4.1, method int androidx.appcompat.widget.MenuPopupWindow$MenuDropDownListView.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView\r\n02-25 12:22:07.414 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:07.414 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa43b5ac0, error=EGL_BAD_MATCH\r\n02-25 12:22:07.421 4593 4598 I art : Do partial code cache collection, code=122KB, data=95KB\r\n02-25 12:22:07.421 4593 4598 I art : After code cache collection, code=115KB, data=90KB\r\n02-25 12:22:07.421 4593 4598 I art : Increasing code cache capacity to 512KB\r\n02-25 12:22:12.204 4593 6140 I OMXClient: MuxOMX ctor\r\n02-25 12:22:12.253 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:12.253 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa43b5ac0, error=EGL_BAD_MATCH\r\n02-25 12:22:19.774 4593 4593 W IInputConnectionWrapper: reportFullscreenMode on inexistent InputConnection\r\n02-25 12:22:19.775 4593 4593 W IInputConnectionWrapper: finishComposingText on inactive InputConnection\r\n02-25 12:22:20.422 4593 6183 I OMXClient: MuxOMX ctor\r\n02-25 12:22:20.513 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:20.513 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa4468c20, error=EGL_BAD_MATCH\r\n02-25 12:22:20.588 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:20.588 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa9210320, error=EGL_BAD_MATCH\r\n02-25 12:22:30.314 4593 4593 E ViewDragHelper: Ignoring pointerId=0 because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream.\r\n02-25 12:22:30.314 4593 4593 E ViewDragHelper: Ignoring pointerId=0 because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream.\r\n02-25 12:22:30.314 4593 4593 E ViewDragHelper: Ignoring pointerId=0 because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream.\r\n02-25 12:22:30.314 4593 4593 E ViewDragHelper: Ignoring pointerId=0 because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream.\r\n02-25 12:22:30.341 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:30.341 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa9210ae0, error=EGL_BAD_MATCH\r\n02-25 12:22:30.357 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:30.357 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa36ff540, error=EGL_BAD_MATCH\r\n02-25 12:22:30.357 4593 4593 E ViewDragHelper: Ignoring pointerId=0 because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream.\r\n02-25 12:22:30.357 4593 4593 E ViewDragHelper: Ignoring pointerId=0 because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream.\r\n02-25 12:22:30.357 4593 4593 E ViewDragHelper: Ignoring pointerId=0 because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream.\r\n02-25 12:22:30.357 4593 4593 E ViewDragHelper: Ignoring pointerId=0 because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream.\r\n02-25 12:22:30.689 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:30.689 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa43ff1a0, error=EGL_BAD_MATCH\r\n02-25 12:22:31.140 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:31.140 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa36ff560, error=EGL_BAD_MATCH\r\n02-25 12:22:31.275 4593 4616 D OpenGLRenderer: endAllActiveAnimators on 0xa3634680 (RippleDrawable) with handle 0xa8640a80\r\n02-25 12:22:32.670 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:32.670 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa36ff520, error=EGL_BAD_MATCH\r\n02-25 12:22:33.726 4593 4616 E EGL_adreno: tid 4616: eglSurfaceAttrib(1582): error 0x3009 (EGL_BAD_MATCH)\r\n02-25 12:22:33.726 4593 4616 W OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa36ffd00, error=EGL_BAD_MATCH\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: (1) APT Info Command:\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: Previous State: `Executed`\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: Current State: `Success`\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: \r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: Stdout:\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: ```\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: (truncated) gradable from: 5.1.12-2]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: command-not-found/stable 1.73 i686 [upgradable from: 1.71]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: debianutils/stable 5.7 i686 [upgradable from: 5.5]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: ed/stable 1.18 i686 [upgradable from: 1.17-4]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: libexpat/stable 2.4.6 i686 [upgradable from: 2.4.2]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: libgnutls/stable 3.7.3 i686 [upgradable from: 3.6.16-1]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: libnghttp2/stable 1.47.0 i686 [upgradable from: 1.46.0]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: libtirpc/stable 1.3.2-1 i686 [upgradable from: 1.3.2]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: libunistring/stable 1.0 i686 [upgradable from: 0.9.10-5]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: nano/stable 6.2 i686 [upgradable from: 6.0]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: ncurses/stable 6.3 i686 [upgradable from: 6.2.20200725-6]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: openssl/stable 1.1.1m-2 i686 [upgradable from: 1.1.1l]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: termux-keyring/stable 3.0 all [upgradable from: 2.4]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: termux-licenses/stable 2.0-2 all [upgradable from: 2.0-1]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: termux-tools/stable 0.163 all [upgradable from: 0.155]\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: ```\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: ##\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: \r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: \r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: \r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: ```\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: \r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: Stderr:\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: ```\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: find: ΓÇÿ/data/data/com.termux/files/usr/etc/apt/sources.list.dΓÇÖ: No such file or directory\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: \r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: ```\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: \r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: Exit Code: `0`\r\n02-25 12:22:35.116 4593 6236 E Termux:TermuxUtils: \r\n\r\n``````\r\n##\r\n\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nping Γà½.πïÅ\r\n\r\n### What is the expected behavior?\r\n\r\nPING x.sqlsec.com (121.196.37.183) 56(84) bytes of data.\r\n64 bytes from 121.196.37.183 (121.196.37.183): icmp_seq=1 ttl=53 time=45.9 ms\r\n64 bytes from 121.196.37.183 (121.196.37.183): icmp_seq=2 ttl=53 time=42.9 ms\r\n64 bytes from 121.196.37.183 (121.196.37.183): icmp_seq=3 ttl=53 time=42.6 ms\r\n64 bytes from 121.196.37.183 (121.196.37.183): icmp_seq=4 ttl=53 time=43.4 ms\r\n\r\n--- x.sqlsec.com ping statistics ---\r\n4 packets transmitted, 4 received, 0% packet loss, time 7125ms\r\nrtt min/avg/max/mdev = 42.593/43.701/45.898/1.301 ms\r\n\r\n\r\n### System information\r\n\r\n## Termux App Info\r\n\r\n**APP_NAME**: `Termux` \r\n**PACKAGE_NAME**: `com.termux` \r\n**VERSION_NAME**: `0.118.0` \r\n**VERSION_CODE**: `118` \r\n**TARGET_SDK**: `28` \r\n**IS_DEBUGGABLE_BUILD**: `true` \r\n**APK_RELEASE**: `Github` \r\n**SIGNING_CERTIFICATE_SHA256_DIGEST**: `B6DA01480EEFD5FBF2CD3771B8D1021EC791304BDD6C4BF41D3FAABAD48EE5E1` \r\n##\r\n\r\n\r\n## Device Info\r\n\r\n### Software\r\n\r\n**OS_VERSION**: `4.0.9` \r\n**SDK_INT**: `25` \r\n**RELEASE**: `7.1.2` \r\n**ID**: `N2G48H` \r\n**DISPLAY**: `OnePlus-user 7.1.2 20171130.276299 release-keys` \r\n**INCREMENTAL**: `rel.se.infra.20200730.150525` \r\n**SECURITY_PATCH**: `2017-10-05` \r\n**IS_DEBUGGABLE**: `0` \r\n**TYPE**: `user` \r\n**TAGS**: `release-keys` \r\n\r\n### Hardware\r\n\r\n**MANUFACTURER**: `OnePlus` \r\n**BRAND**: `OnePlus` \r\n**MODEL**: `HD1910` \r\n**PRODUCT**: `HD1910` \r\n**BOARD**: `SM8150-AC` \r\n**HARDWARE**: `intel` \r\n**DEVICE**: `HD1910` \r\n**SUPPORTED_ABIS**: `x86, armeabi-v7a, armeabi` \r\n##\r\n\r\n","comments":8,"created_at":"2022-02-25T04:25:35Z","labels":["bug report"],"number":2618,"title":"[Bug]: Cannot ping domains with roman symbols?","updated_at":"2022-03-31T04:28:02Z"} +{"author":"sentinel3","body":"### Problem description\n\nI posted on the [discussion](https://github.com/termux/termux-app/discussions/2588) but not received a feedback, so re-post here with some further details.\r\n\r\nI use a Samsung s7+ tablet (android 12, kernel: 4.19.113, Termux via F-droid: 0.118.0), and a physical keyboard (Apple magic keyboard2) connected via bluetooth. The keyboard works with other apps on the `Fn` key combinations.\r\nin Termux, all the Fn combs are not work: when I press `Fn+ Key`, it flashes very fast with the `menu` popup window as I screenshot in the other post, but not give expected keys. Specifically I mean: `Fn+Left`, `Fn+Right`, `Fn+Backescape` for `Home`, `End`, and `Delete`.\r\n\r\nWhat I tried:\r\n1. monitor the key event, such as `Fn+Left` to see the keycodes:\r\n```\r\nKeyDown : action=0 code=119 repeat=0 meta=2097160 scanCode=464 flags=8 label='0' chars='null' number='0'\r\nKeyUp : action=1 code=122 repeat=0 meta=2097160 scanCode=102 flags=8 label='0' chars='null' number='0'\r\nKeyUp : action=1 code=119 repeat=0 meta=2097152 scanCode=464 flags=8 label='0' chars='null' number='0'\r\n```\r\n2. tried to add customized key in the `~/.termux/termux.properties`: such as `HOME=FN+LEFT`, not work\r\n3. try to modify `/system/usr/keychars/Generic.kcm`, according [another post](https://github.com/termux/termux-app/pull/2237) but not allowed since I am not a root user.\r\n\r\nany suggestion please?\n\n### Steps to reproduce the behavior.\n\nas described above\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: 0.118.0 (Termux via F-droid)\r\n* Android OS version:12 , kernel: 4.19.113\r\n* Device model:SM-T970","comments":5,"created_at":"2022-02-22T19:38:03Z","labels":["bug report"],"number":2611,"title":"[Bug]: physical keyboard Fn key not work","updated_at":"2025-04-25T01:22:32Z"} +{"author":"orzomaxx","body":"### Feature description\n\nIf I install NerdFont-patched font (i.e. JetbrainsMono) 'Mono' variant (Where all nerdfont symbols are monospaced) everything is ok.\r\n\r\nBut if I install not 'Mono' variant of font, some icons are vertically stretched, because they must be displayed as double-width characters, but they aren't\n\n### Additional information\n\nSome info: https://github.com/ryanoasis/nerd-fonts/wiki/Terminal-Emulators#urxvt\r\n\r\nRelated issues: https://github.com/ryanoasis/nerd-fonts/issues/155, https://github.com/ryanoasis/nerd-fonts/issues/37\r\n\r\nhttps://github.com/powerman/wcwidth-icons provides .so library for LD_PRELOAD which enable support for full size icons","comments":0,"created_at":"2022-02-19T08:42:29Z","labels":[],"number":2602,"title":"[Feature]: Support NerdFont double-width characters","updated_at":"2022-02-19T08:42:29Z"} +{"author":"agnostic-apollo","body":"This is a vulnerability report for `termux-app`, `termux-tasker` and `termux-widget` being released on `2022-02-15`. Users are advised to immediately update to [`Termux` `v0.118.0`](https://github.com/termux/termux-app/releases/tag/v0.118.0), [`Termux:Tasker` `v0.5`](https://github.com/termux/termux-tasker/releases/tag/v0.5) and [`Termux:Widget` `v0.13.0`](https://github.com/termux/termux-widget/releases/tag/v0.13.0) if they are using any older version.\r\n\r\n**All private files like security keys for `ssh` or encryption keys should be assumed to be compromised for users who were using termux app version `\u003c= v0.117` . It is highly advisable to replace any such keys with new ones and look into any suspicious authorized access on any remote servers being connected to from termux.**\r\n\r\nPeople who are still using Google Playstore version are advised to **immediately** shift to F-Droid or Github releases since updates will not be released on Google Playstore any time soon, if ever, due to [Android `10` issues](https://github.com/termux/termux-packages/wiki/Termux-and-Android-10). Playstore builds were [deprecated](https://github.com/termux/termux-app#google-play-store-deprecated) more than `~150` days ago and are no longer supported. Check https://github.com/termux/termux-app#installation for more info on where to install/update the Termux app.\r\n\r\nhttps://termux.github.io/general/2022/02/15/termux-apps-vulnerability-disclosures.html\r\n","comments":5,"created_at":"2022-02-15T18:12:21Z","labels":[],"number":2595,"title":"[NOTICE] 2022-02-15 Termux Apps Vulnerability Disclosures","updated_at":"2024-08-27T08:09:29Z"} +{"author":"Mark-Joy","body":"### Problem description\n\nWith hardware keyboard, while Alt+key is working fine, Alt+Ctrl+key is not working.\r\nExample:\r\nAlt+Ctrl+e is used to expand command line.\n\n### Steps to reproduce the behavior.\n\nAt prompt, type `~`, then `Alt+Ctrl+e`.\n\n### What is the expected behavior?\n\n`~` should be expanded to: `/data/data/com.termux/files/home`\r\n\r\nWorkAround: `Esc+Ctrl+E` works but it's cumbersome. \n\n### System information\n\n* Termux application version: 0.118.0\r\n* Android OS version: 9\r\n* Device model: Redmi Note 8 Pro\r\n","comments":0,"created_at":"2022-02-13T06:01:26Z","labels":["bug report"],"number":2585,"title":"[Bug]: Hardware keyboard Alt+Ctrl+key is not working","updated_at":"2022-02-13T06:01:26Z"} +{"author":"freebrowser1","body":"### Problem description\r\n\r\nWhen using 'midnight commander' (mc) and there is no onscreen keyboard popped up, the keyboard cannot be popped up when clicking on the cursor bottom left.\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nLoad Termux.\r\n\r\nLoad mc (can be installed by `apt install mc`).\r\n\r\nRemove the onscreen keyboard, how to do that is dependant on which keyboard is used. I use 'Multiling-O' 1.02 as this one already contains 'terminal friendly keys' such as Ctrl, Esc, Tab, arrows, etc.' so it does not need the extra-keys setting which consumes precious screen space.\r\n\r\nThen two panes will be shown with the current folder with a cursor bottom left. \r\nClick on the cursor bottom left.\r\n\r\n### What is the expected behavior?\r\n\r\nKeyboard should pop up as in any other case in Termux when clicking on the cursor, but does not when mc is active. It does not pop up in both full screen mode and the mode with the Android notification bar on top.\r\n\r\n### System information\r\n\r\n* Termux application version: 0.118\r\n* Android OS version: 10.6\r\n* Device model: Oneplus 6\r\n\r\n### termux.properties contents\r\n```\r\n### After making changes and saving you need to run `termux-reload-settings`\r\n### to update the terminal. All information here can also be found on the\r\n### wiki: https://wiki.termux.com/wiki/Terminal_Settings\r\n\r\n###############\r\n# Extra keys\r\n###############\r\n\r\n### Settings for choosing which set of symbols to use for illustrating keys.\r\n### Choose between default, arrows-only, arrows-all, all and none\r\n# extra-keys-style = default\r\n\r\n### Default extra-key configuration\r\n# extra-keys = [[ESC, TAB, CTRL, ALT, {key: '-', popup: '|'}, DOWN, UP]]\r\nextra-keys = []\r\n\r\n### Two rows with more keys\r\n# extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'], \\\r\n# ['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]\r\n\r\n### Configuration with additional popup keys (swipe up from an extra key)\r\n# extra-keys = [[ \\\r\n# {key: ESC, popup: {macro: \"CTRL f d\", display: \"tmux exit\"}}, \\\r\n# {key: CTRL, popup: {macro: \"CTRL f BKSP\", display: \"tmux ΓåÉ\"}}, \\\r\n# {key: ALT, popup: {macro: \"CTRL f TAB\", display: \"tmux ΓåÆ\"}}, \\\r\n# {key: TAB, popup: {macro: \"ALT a\", display: A-a}}, \\\r\n# {key: LEFT, popup: HOME}, \\\r\n# {key: DOWN, popup: PGDN}, \\\r\n# {key: UP, popup: PGUP}, \\\r\n# {key: RIGHT, popup: END}, \\\r\n# {macro: \"ALT j\", display: A-j, popup: {macro: \"ALT g\", display: A-g}}, \\\r\n# {key: KEYBOARD, popup: {macro: \"CTRL d\", display: exit}} \\\r\n# ]]\r\n\r\n# extra-keys-style = none\r\n\r\n###############\r\n# Colors/themes\r\n###############\r\n\r\n### Force black colors for drawer and dialogs\r\n use-black-ui = true\r\n\r\n###############\r\n# Keyboard shortcuts\r\n###############\r\n\r\n### Open a new terminal with ctrl + t (volume down + t)\r\n# shortcut.create-session = ctrl + t\r\n\r\n### Go one session down with (for example) ctrl + 2\r\n# shortcut.next-session = ctrl + 2\r\n\r\n### Go one session up with (for example) ctrl + 1\r\n# shortcut.previous-session = ctrl + 1\r\n\r\n### Rename a session with (for example) ctrl + n\r\n# shortcut.rename-session = ctrl + n\r\n\r\n###############\r\n# Bell key\r\n###############\r\n\r\n### Vibrate device (default).\r\n# bell-character = vibrate\r\n\r\n### Beep with a sound.\r\n# bell-character = beep\r\n\r\n### Ignore bell character.\r\n# bell-character = ignore\r\n\r\n###############\r\n# Back key\r\n###############\r\n\r\n### Send the Escape key.\r\n# back-key=escape\r\n\r\n### Hide keyboard or leave app (default).\r\n# back-key=back\r\n\r\n###############\r\n# Keyboard issue workarounds\r\n###############\r\n\r\n### Letters might not appear until enter is pressed on Samsung devices\r\n enforce-char-based-input = true\r\n\r\n### ctrl+space (for marking text in emacs) does not work on some devices\r\n# ctrl-space-workaround = true\r\n\r\n#hide-soft-keyboard-on-startup = true\r\n\r\n# https://github.com/termux/termux-app/wiki/RUN_COMMAND-Intent\r\nallow-external-apps = true\r\n```","comments":2,"created_at":"2022-01-29T21:16:18Z","labels":["bug report"],"number":2551,"title":"[Bug]: Keyboard sometimes does not pop up","updated_at":"2023-09-24T13:56:05Z"} +{"author":"shindere","body":"TErmux is almost usable with a screen reader like\n[brltt](https://brltty.ap).\n\nOne major barrier to its use, though, is that brltty does not know where\nthe cursor is. More specifically, no matter her the crr iviually,\nbrlttyshows it at the botom-right of the reen.\n\nCould this please be fixed?\n\nIf made usable with brltty, termux could become a fundamental app for\nvisually impaired persons, especially since braille notetakesrs like HIMS\n[Braille Sense 6]() are running\nAndroid.","comments":56,"created_at":"2022-01-24T22:47:43Z","labels":[],"number":2543,"title":"Let screen readers catch cursor position","updated_at":"2022-10-15T16:22:30Z"} +{"author":"beroal","body":"### Feature description\n\nIf I understand it correctly, any program executed in the Termux shell can write to `$PREFIX/bin`. If any Termux program (say, `$PREFIX/bin/$E`) is executed as root, then **any** Termux program has root privileges by infecting `$PREFIX/bin/$E`. In this case, a user should only execute programs from a very restricted set for security reasons. This reduces the usefulness of Termux.\r\n\r\nIf Termux programs are executed as root only in the separate Android package, then Termux programs executed in the main package can't obtain root privileges since Android packages are isolated.\r\n\r\nTherefore, having a separate Termux package for root will increase the usefulness of Termux without compromising security.\n\n### Additional information\n\nObviously, Linux has this feature. In Linux, an ordinary user can't write to `/bin`.","comments":12,"created_at":"2022-01-19T19:16:09Z","labels":[],"number":2536,"title":"[Feature]: separate termux for root","updated_at":"2023-12-23T09:56:39Z"} +{"author":"siccovansas","body":"### Feature description\r\n\r\nI have to enter passwords quite often and use the 'Autofill password' option to summon my password manager. It currently takes 3 steps to do this:\r\n\r\n- long press the terminal\r\n- tap 'More...'\r\n- tap 'Autofill password'\r\n\r\nWould it be possible to make the terminal toolbar configurable to allow people to add an 'Autofill password' button to it (maybe just a small button with a key/≡ƒöæ icon)? This would make password input a lot faster :).\r\n\r\n### Additional information\r\n\r\n-","comments":7,"created_at":"2022-01-14T09:51:30Z","labels":[],"number":2526,"title":"[Feature]: add 'Autofill password' to terminal toolbar","updated_at":"2025-04-15T12:57:12Z"} +{"author":"gety9","body":"### Feature description\n\nMore and more users use termux with external keyboard (android tablets become more popular, samsung dex set-up, etc) and because each user have different \"muscle memories\" it will be useful to add ability to rebind short cuts. \r\n\r\nThis will fix issues / disagreements like https://github.com/termux/termux-app/issues/1891\n\n### Additional information\n\nyes, it's very common.","comments":0,"created_at":"2022-01-04T07:23:50Z","labels":[],"number":2505,"title":"[Feature]: Add rebinding of hardware shortcuts.","updated_at":"2022-01-04T07:23:50Z"} +{"author":"laimison","body":"### Feature description\n\nHi,\r\n\r\nDo you have any plans to support cursor navigation by holding/pressing spacebar?\r\n\r\nThanks\n\n### Additional information\n\nhttps://youtu.be/V_4yMGKbe90?t=60 (watch from 1.00 - 1.30)","comments":1,"created_at":"2021-12-24T12:50:59Z","labels":[],"number":2488,"title":"[Feature]: cursor navigation by holding/pressing spacebar","updated_at":"2023-12-23T09:41:01Z"} +{"author":"tareksander","body":"### Problem description\n\nI got Termux:GUI included into F-Droid, but it seems the signing key was changed between the last Termux update and the inclusion, leading to signature errors. I created an issue here because that would also be a problem when an update to Termux or any other plugin is released, because the new releases will be signed with the different key. A solution would be to create dummy updates for the app and all plugins at the same time that just bump the version, so they are all signed with the new key. Users would then have to uninstall all plugins, update the app and then reinstall the plugins, but I think it's better to do that in a controlled way than just having an uninstallable Termux or plugin update. \r\n \r\nHere are the apk signatures:\r\n```\r\n$ keytool -printcert -jarfile com.termux.gui_4.apk \r\nSigner #1:\r\n\r\nSignature:\r\n\r\nOwner: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK\r\nIssuer: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK\r\nSerial number: 51024fec\r\nValid from: Thu Dec 16 08:14:42 CET 2021 until: Mon May 03 09:14:42 CEST 2049\r\nCertificate fingerprints:\r\n SHA1: 13:F1:BF:EB:1F:12:3D:DA:FC:88:D3:03:B2:0D:B9:E2:30:BD:5C:8E\r\n SHA256: 7D:C2:91:1E:6B:90:D2:D8:0E:71:BC:B4:C9:06:AE:F3:CB:A7:4C:10:3B:5B:14:5A:76:40:49:C9:6F:D4:AD:D2\r\nSignature algorithm name: SHA256withRSA\r\nSubject Public Key Algorithm: 2048-bit RSA key\r\nVersion: 3\r\n\r\nExtensions: \r\n\r\n#1: ObjectId: 2.5.29.14 Criticality=false\r\nSubjectKeyIdentifier [\r\nKeyIdentifier [\r\n0000: A3 BF 73 28 6F 57 3A 0A 37 CE 97 5E 12 99 40 F4 ..s(oW:.7..^..@.\r\n0010: 34 C7 CF B7 4...\r\n]\r\n]\r\n\r\n$ keytool -printcert -jarfile com.termux_117.apk \r\nSigner #1:\r\n\r\nSignature:\r\n\r\nOwner: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK\r\nIssuer: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK\r\nSerial number: cd73f88\r\nValid from: Mon Oct 26 08:35:59 CET 2015 until: Fri Mar 13 08:35:59 CET 2043\r\nCertificate fingerprints:\r\n SHA1: E8:75:4A:2C:61:43:92:07:1D:27:02:1B:BC:DF:B8:DD:A7:E0:71:1C\r\n SHA256: 22:8F:B2:CF:E9:08:31:C1:49:9E:C3:CC:AF:61:E9:6E:8E:1C:E7:07:66:B9:47:46:72:CE:42:73:34:D4:1C:42\r\nSignature algorithm name: SHA256withRSA\r\nSubject Public Key Algorithm: 2048-bit RSA key\r\nVersion: 3\r\n\r\nExtensions: \r\n\r\n#1: ObjectId: 2.5.29.14 Criticality=false\r\nSubjectKeyIdentifier [\r\nKeyIdentifier [\r\n0000: 90 7C B4 50 85 65 90 90 99 E3 58 04 AB FD CF CC ...P.e....X.....\r\n0010: B9 06 C8 22 ...\"\r\n]\r\n]\r\n\r\n$ keytool -printcert -jarfile com.termux.api_49.apk \r\nSigner #1:\r\n\r\nSignature:\r\n\r\nOwner: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK\r\nIssuer: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK\r\nSerial number: cd73f88\r\nValid from: Mon Oct 26 08:35:59 CET 2015 until: Fri Mar 13 08:35:59 CET 2043\r\nCertificate fingerprints:\r\n SHA1: E8:75:4A:2C:61:43:92:07:1D:27:02:1B:BC:DF:B8:DD:A7:E0:71:1C\r\n SHA256: 22:8F:B2:CF:E9:08:31:C1:49:9E:C3:CC:AF:61:E9:6E:8E:1C:E7:07:66:B9:47:46:72:CE:42:73:34:D4:1C:42\r\nSignature algorithm name: SHA256withRSA\r\nSubject Public Key Algorithm: 2048-bit RSA key\r\nVersion: 3\r\n\r\nExtensions: \r\n\r\n#1: ObjectId: 2.5.29.14 Criticality=false\r\nSubjectKeyIdentifier [\r\nKeyIdentifier [\r\n0000: 90 7C B4 50 85 65 90 90 99 E3 58 04 AB FD CF CC ...P.e....X.....\r\n0010: B9 06 C8 22 ...\"\r\n]\r\n]\r\n```\r\nThere is also another app on F-Droid with plugins that use sharedUserId that has the same problem: https://gitlab.com/fdroid/fdroiddata/-/issues/2457\r\n\r\nThe concrete error in logcat is this:\r\n```\r\n2021-12-17 11:59:38.527 503-546/? I/PackageManager: Integrity check passed for file:///data/app/vmdl23637881.tmp\r\n2021-12-17 11:59:38.928 503-546/? E/PackageManager: Adding duplicate app id: 10157 name=com.termux.gui\r\n2021-12-17 11:59:38.929 503-546/? W/PackageManager: Reconciliation failed...\r\n com.android.server.pm.PackageManagerService$ReconcileFailure: Reconcile failed: Package com.termux.gui has no signatures that match those in shared user com.termux; ignoring!\r\n at com.android.server.pm.PackageManagerService.reconcilePackagesLocked(PackageManagerService.java:16484)\r\n```\r\n\r\n\r\n\n\n### Steps to reproduce the behavior.\n\nTry to install Termux:GUI from F-Droid.\n\n### What is the expected behavior?\n\nIt installs like any other plugin.\n\n### System information\n\n* Termux application version: 0.117\r\n* Android OS version: Any\r\n* Device model: Any\r\n","comments":19,"created_at":"2021-12-17T13:00:02Z","labels":["bug report"],"number":2480,"title":"[Bug]: F-Droid signatures","updated_at":"2022-10-03T07:26:26Z"} +{"author":"donmor","body":"### Problem description\n\nI'm trying to access files in termux's private storage via SAF. Currently I'm using an Oreo(8.1) device, and can read or write files in termux using my [Hyperpad](https://github.com/donmor/Hyperpad)(just another notepad clone using SAF) with no problem.\r\nBut things got tricky on Android 11. I tried to do the same thing in an Android 11 AVD, at first I created a file successfully, but when I removed some words from that file, it got corrupted(see reproduction).\r\nI not only reproduced this, but also found that several DocumentProviders including External Storage (shipped with system), Nutstore, [ianhanniballake/LocalStorage](https://githob.com/ianhanniballake/LocalStorage) have the same problem, except Google Drive. I wonder why there's not so many people noticed this problem since Android 11 came out -- but there's some people created issues about malfunctions of my apps, which corrupts files on Android 11.\n\n### Steps to reproduce the behavior.\n\n* Get Hyperpad or any other text editor with SAF support\r\n* Create a file in termux's home directory via SAF\r\n* type `%%%%%%#####@@@@@@\u0026\u0026` and save then close the file\r\n* Reopen the file. It has correct content.\r\n* Delete all '#'s in the file, save and close\r\n* Reopen the file. The content is expected to be `%%%%%%@@@@@@\u0026\u0026`, which is what happened on my Android 8.1 phone, but on Android 11, I got `%%%%%%@@@@@@\u0026\u0026@@@\u0026\u0026`. Obviously the file is not shrinked as expected.\n\n### What is the expected behavior?\n\n_No response_\n\n### System information\n\n* Termux application version: Latest on F-Droid\r\n* Android OS version: 11\r\n* Device model: AVD of Android Studio\r\n","comments":3,"created_at":"2021-12-09T05:53:11Z","labels":["bug report"],"number":2460,"title":"[Bug]: Written file corrupted via Storage Access Framework on Android 11","updated_at":"2022-08-13T19:10:19Z"} +{"author":"Theoneflop","body":"### Feature description\n\nHi!\r\nSometimes when I'm running a ceratain program on termux, I'm not able to use the CTRL + C to end the program. And so, I request this:\r\nLet us be able to kill asession by hitting a button that would appear after you press and hold a button dedicated to said session on the left hidden toolbar.\n\n### Additional information\n\n![The left hidden toolbar](https://user-images.githubusercontent.com/91429098/144708147-0aca0b64-b06d-4bcf-8b97-7b0d0425f280.jpg)\r\n","comments":2,"created_at":"2021-12-04T11:41:51Z","labels":[],"number":2451,"title":"[Feature]: Exit sessions through the toolbar","updated_at":"2021-12-12T20:34:23Z"} +{"author":"fxmbsw7","body":"### Problem description\n\ni do something, then later i return, with or without rotation, ans empty nrwlinesnget mangled away and here in picture send see messed up\r\nive seen this halfway lots since ever, its disturbing\r\n\r\n![Screenshot_2021-12-02-19-13-47-54_84d3000e3f4017145260f7618db1d683](https://user-images.githubusercontent.com/39368685/144481646-534fb46c-66ee-402f-a6fa-cf1ef0c409f9.jpg)\r\n\r\nto say about the picture, i copypasted one which wasnt mangled to gmail and it showed problems ( portrait mode ) .. the same then i saw later and screenshotted\r\n\r\nthe last one entry is where they are original\n\n### Steps to reproduce the behavior.\n\nsometimes after long time away return happens\n\n### What is the expected behavior?\n\nno newline mangling\n\n### System information\n\n* Termux application version: 0.117 ( 117 is swiss number for police btw.. )\r\n* Android OS version: realme ui 2 android 11 july patch\r\n* Device model: realme gt 5g global\r\n","comments":5,"created_at":"2021-12-02T18:29:44Z","labels":["bug report"],"number":2443,"title":"[Bug]: terminal newlines sometimes after switching back from long time get messed upa","updated_at":"2021-12-13T09:14:59Z"} +{"author":"rijobro","body":"### Problem description\r\n\r\nspaces in command get randomly deleted, and I'm not sure why.\r\n\r\n### Steps to reproduce the behavior.\r\n\r\n`cd ~/Documents` (with space)\r\n\u003e `-bash~/Documents: No such file or directory`\r\n\r\nIf i then click the upwards arrow, the executed command was\r\n`cd~/Documents` (no space)\r\nSo I re-add the space and re-execute:\r\n\u003e `-bash~/Documents: No such file or directory`\r\n\r\nThis doesn't happen all the time, I'm not sure what triggers it.\r\n\r\n### What is the expected behavior?\r\n\r\nfor spaces not to be deleted\r\n\r\n### System information\r\n\r\n* Termux application version: 0.117\r\n* Android OS version: 8.0.0\r\n* Device model: samsung s7 edge\r\n","comments":21,"created_at":"2021-11-25T09:20:05Z","labels":["bug report"],"number":2421,"title":"[Bug]: spaces in commands get deleted","updated_at":"2025-04-17T12:14:25Z"} +{"author":"ghost","body":"### Problem description\r\n\r\nI use the **Acode** app to edit files on Termux. If I try to delete a non-empty Termux directory using Acode app, then it shows a FileNotFoundException error. However, if the directory is empty, or is a file, then it can be deleted without any error. However, I can never rename or cut any file or directory in Termux using the Acode app, doing so shows the same error. The bug is not in Acode app, but maybe in Termux (or maybe a restriction in the Android framework?). I can manipulate (delete/cut/paste) any file or directory in the device internal storage without any single error from Acode app. I also tried with other code editors (like QuickEdit), and the same happens.\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nSuppose, I have a folder named ___Projects___ in the home directory. ___Projects___ folder contains many other folders and files in it: ~/\r\n![IMG_20211122_204209](https://user-images.githubusercontent.com/78401450/142881087-707616eb-fd1a-42f9-9bac-9a07675d41bd.jpg)\r\n\r\nNow if I try to delete (or rename or cut or copy) the ___Projects___ folder:\r\n![Screenshot_2021-11-22-20-40-55-536_com foxdebug acode](https://user-images.githubusercontent.com/78401450/142881821-d2a12eba-c688-4f41-aa36-6ea9124b1d79.jpg)\r\n\r\nIt shows error:\r\n![Screenshot_2021-11-22-20-41-01-737_com foxdebug acode](https://user-images.githubusercontent.com/78401450/142881896-fe1e7f26-5798-4979-af1a-a0a99bd3cb1d.jpg)\r\n\r\n### What is the expected behavior?\r\n\r\nI should be able to rename, cut, copy, paste any file or directory in Termux from any outside app.\r\n\r\n### System information\r\n\r\n* Termux application version: 0.117\r\n* Android OS version: 10\r\n* Device model: Redmi Y3","comments":6,"created_at":"2021-11-22T14:58:30Z","labels":["bug report"],"number":2415,"title":"[Bug]: Can't manipulate files from external app","updated_at":"2022-06-25T11:22:04Z"} +{"author":"867380699","body":"### Feature description\n\nswiping left and right is not convenient\n\n### Additional information\n\nmake `TextInput` can be config into extra key row","comments":1,"created_at":"2021-11-11T03:48:52Z","labels":[],"number":2390,"title":"[Feature]: add `TextInput` to extra key row","updated_at":"2023-12-23T10:01:52Z"} +{"author":"eadmaster","body":"### Feature description\n\ninstead of having a separate button for each arrow key as [shown here](https://github.com/termux/termux-app/issues/12#issuecomment-613662854), it would save more space having a single key with 4 directions selectable with a swipe gesture.\r\n\r\n\n\n### Additional information\n\n\u003e iSH provides its own keyboard icon strip to make touchscreen terminal usage simpler. The four buttons to the left of the strip are Tab, Control, Escape and arrow keys respectively. Swipe the arrow key button in the direction youΓÇÖd like the cursor to navigate.\r\n\r\n[source](https://www.cloudsavvyit.com/9787/how-to-run-a-linux-shell-on-ios/)","comments":0,"created_at":"2021-11-09T04:33:30Z","labels":[],"number":2386,"title":"[Feature]: add single button arrow keys in overlay keyboard","updated_at":"2021-11-09T04:33:30Z"} +{"author":"ghost","body":"### Feature description\n\nCurrently Termux only supports changing font size by two-finger pinch-zooming, which is not doable on devices without touchscreen like Android-x86 VM and WSA. \n\n### Additional information\n\nAlthough I could also use ADB it was always to cumbersome to choose device by IP (I sometimes have up to 4 devices hooked on my PC).","comments":6,"created_at":"2021-11-07T12:23:56Z","labels":[],"number":2383,"title":"[Feature]: Zoom on device without touchscreen (WSA)","updated_at":"2025-02-14T00:52:47Z"} +{"author":"mglh","body":"### Feature description\n\nI assume that swiping up and down sends \\\u003ccursor up\\\u003e and \\\u003ccursor down\\\u003e key presses to the program running in the terminal. This works well for programs like vim and newsboat, where swiping scrolls up and down the main screen content line-wise.\r\n\r\nHowever, in other programs \\\u003ccursor up\\\u003e and \\\u003ccursor down\\\u003e key presses do browse through the command history, and scrolling is done page-wise with the \\\u003cpage up\\\u003e and \\\u003cpage down\\\u003e keys. Irssi is an example.\r\n\r\nFurther programs in turn may use other keys or key combinations for scrolling the screen content.\r\n\r\nI would suggest to create a new termux-* tool which offers to change / customize the key presses sent by swiping, separately for each session. This way a shell alias could be set up to suit for a certain program.\r\n\r\nSince page-wise scrolling needs much less key presses than line-wise scrolling, to be usable this method would require the number of key presses sent by swiping to be adjustable, too.\n\n### Additional information\n\nI admit that using terminal multiplexers like screen or tmux would lead to problems here, as they would allow multiple programs to be run within one session, each of which could have different requirements on the keys presses sent by swiping.","comments":0,"created_at":"2021-10-22T14:40:45Z","labels":[],"number":2355,"title":"[Feature]: Scrolling by swiping in programs which expect \u003cpage up\u003e and \u003cpage down\u003e key presses for that","updated_at":"2021-10-22T14:40:45Z"} +{"author":"Yonle","body":"### Problem description\n\nThe temporary directory (TMPDIR) should contain nothing on it after restart. However, TMPDIR is not wiped for most devices (including me). \r\n\r\n[This code](https://github.com/termux/termux-app/blob/v0.117/app/src/main/java/com/termux/app/TermuxService.java#L167) DOES NOT SOLVE the problem that i just mention. \n\n### Steps to reproduce the behavior.\n\nClose the Termux app, By Exit from Termux completely, close all sessions, and etc\n\n### What is the expected behavior?\n\nTMPDIR should has nothing on it\n\n### System information\n\n* Termux application version: 0.117 (117)\r\n* Android OS version: 8.1.1\r\n* Device model: vivo 1820\r\n","comments":11,"created_at":"2021-10-17T16:27:41Z","labels":["bug report"],"number":2350,"title":"[Bug]: TMPDIR is not wiped correctly","updated_at":"2021-11-02T05:58:09Z"} +{"author":"PandaCoderPL","body":"### Feature description\n\nIn my opinion it would be good idea to let users backup Termux application using [Seedvault](https://github.com/seedvault-app/seedvault). [Here](https://github.com/grote/Transportr/commit/4dc38f429f75909a088d8bd8a5b3b5ddd8030f71) you can see example of how such backup option could be implemented in privacy-respecting way. More details about it [here](https://github.com/seedvault-app/seedvault/wiki/FAQ#why-do-some-apps-not-allow-to-get-backed-up). Thank you in advance.\n\n### Additional information\n\nI don't think so.","comments":8,"created_at":"2021-10-02T22:05:43Z","labels":[],"number":2312,"title":"[Feature]: Enable Seedvault encrypted backups","updated_at":"2022-12-23T16:00:33Z"} +{"author":"cmosetick","body":"### Feature description\r\n\r\nHello, I am a part-time security researcher.\r\nI have been testing Termux app on _Android-like_ Operating Systems.\r\n\r\nThese operating systems have similar functionality to standard desktop Linux OS's. To be specific, they have ability to create users beyond the \"primary\" user.\r\nThese users then have ability to install their own set of non-primary user applications.\r\ne.g. `Termux.app`\r\n\r\nI have ability to install Termux via F-Droid as a non-primary user without issue.\r\n\r\nHowever, upon starting Termux there is no ability to bootstrap.\r\n\r\nI get a failure message because of hard-coded `$PREFIX` path:\r\n`/data/data/com.termux/files/usr`\r\n\r\n![Screenshot from 2021-09-23 15-07-57](https://user-images.githubusercontent.com/4873085/134504119-4b88116f-0c06-4e79-a7ca-4aa19e5482c2.png)\r\n\r\n\r\n### Additional information\r\n\r\nI have been unable to find a similar feature request / bug report open for this feature here. Please feel free to close this item as a duplicate if I missed one.\r\n\r\nTermux Version: `0.117`\r\n","comments":5,"created_at":"2021-09-23T12:15:57Z","labels":[],"number":2291,"title":"[Feature]: non-primary user bootstrap functionality","updated_at":"2025-08-10T08:16:46Z"} +{"author":"sk-Prime","body":"### Feature description\r\n\r\nCurrently, You can share single file to termux and then that file will be handled by `termux-file-editor` as it mentioned in here https://wiki.termux.com/wiki/Intents_and_Hooks \r\n#### Proposal\r\n- Add capabilities to share multiple files.\r\n- Add a mechanism to pass command line argument to that `termux-file-editor` so it will pass that argument to linked binary or script.\r\n- Optional: `termux-open --file-chooser` command. it will return selected file as a string list. So inside python script, we can call like this (I don't know if it is possible or not)\r\n```\r\nimport subprocess \r\nselected_files=subprocess.check_output(['termux-open --file-chooser']))\r\n```\r\n#### Why I want it\r\nThere are numerous application of this feature.\r\n- Image to PDF: Select multiple files from gallery and then share it to termux. `termux-file-editor` will call linked script, in this case a python script which can convert all those images to pdf.\r\n- Image/documents batch processing\r\n- File sharing service using python + flask\r\n\r\nAs termux-file-editor linked to a single script, Passing command line argument is crucial because it can direct behavior of that script. Those argument can tell what to do with those files. There can be a text entry box above edit button. Look at the image.\r\n![sdf](https://user-images.githubusercontent.com/26684644/134054207-8a78a267-1759-4463-a0d9-ecf3d7aa54cf.png)\r\n\r\n\r\n### Additional information\r\n\r\nDoes another app/terminal emulator have this feature?\r\nAns: Probably not.","comments":9,"created_at":"2021-09-20T18:33:16Z","labels":[],"number":2285,"title":"[Feature]: Multiple file sharing to termux","updated_at":"2025-08-17T04:43:30Z"} +{"author":"IO-Breaker","body":"### Problem description\r\n\r\nwhen i open termux on android and start writing a bug occurrence and appears on comand line and even chaging keyboard app does not work .\r\n\r\n![Screenshot_20210917-220254](https://user-images.githubusercontent.com/50207211/133855167-9d39479b-6778-4199-a22f-e31fc3abd9ab.png)\r\n\r\n![Screenshot_20210917-220931](https://user-images.githubusercontent.com/50207211/133855179-9d5e387f-9cc3-4a16-bb35-7f9e0298241d.png)\r\n \r\n![Screenshot_20210917-223117](https://user-images.githubusercontent.com/50207211/133855741-46f8b0b6-5012-41e4-864a-ee56d5b6adf9.png)\r\n\r\n\r\n### Steps to reproduce the behavior.\r\n\r\nWriting and dowloading in youtube-dl\r\n\r\n### What is the expected behavior?\r\n\r\nNo carecters like this \"~~~~\" or \"~^[[23~^[[23~^[[23~^[[23\" appears when im not pressing noting\r\n\r\n### System information\r\n\r\n* Termux application version: 0.117\r\n* Android OS version: 9\r\n* Device model: blackview bv9100\r\n","comments":2,"created_at":"2021-09-17T21:38:42Z","labels":["bug report"],"number":2279,"title":"[Bug]: Key press bug ","updated_at":"2022-02-09T11:42:44Z"} +{"author":"julkhami","body":"### Problem description\n\nI was not able to find discussion of remapping the value of the volume keys in the Termux documentation.\r\n\r\nI would like Volume-Up to have the value F1.\r\n\r\nHow would this be possible?\r\n\r\nThank you.\n\n### Steps to reproduce the behavior.\n\nPress volume up key.\n\n### What is the expected behavior?\n\nInput F1 key.\n\n### System information\n\n* Termux application version: Latest\r\n* Android OS version: 11\r\n* Device model: Motorola G8\r\n","comments":6,"created_at":"2021-09-09T18:32:27Z","labels":["enhancement"],"number":2263,"title":"How to remap volume keys?","updated_at":"2022-01-26T08:30:51Z"} +{"author":"sgtpep","body":"### Feature description\n\nI noticed that, like many other Android apps, Termux changes the color of the status and navigation bars based on the background color. I.e., if I change the background color to `#FFFFFF` I observe light-greyish status and navigation bars while I would prefer them to remain black.\r\n\r\nWould love to see a preference that would either let a user to opt out from coloring bars, or would allow to set the bar color explicitly.\n\n### Additional information\n\n-","comments":0,"created_at":"2021-09-05T19:13:23Z","labels":[],"number":2259,"title":"[Feature]: Override the color of the status and navigation bar s","updated_at":"2021-09-05T19:13:23Z"} +{"author":"Fs00","body":"#### Feature description\r\n\r\nTermux provides a great terminal UX, however it's a very big app (~150MB) for those users that don't take advantage of all of its features.\r\nActually, I use Termux only to run system commands as root (`pm`, `appops`, `am`, ecc.) from time to time and I'm not interested in installing packages or running Linux binaries. However, I **love** the extra keys row and just this feature is a strong enough motivation to use Termux simply as a terminal emulator.\r\nTherefore, I think that a \"lite\"/\"core\" flavor of the app without package management nor pre-installed packages would better fit those people who want to use Termux just for its UX, without taking too much storage space.\r\n\r\nAlso, this alternative flavor would (theoretically) not be subject to the W^X restriction (#2155) and could be updated through the Play Store. \r\n\r\n#### Reference implementation\r\n\r\nThe \"failsafe\" mode of Termux is a good example of how a trimmed version of Termux could look like.\r\n","comments":9,"created_at":"2021-08-02T16:22:47Z","labels":[],"number":2201,"title":"Feature: Lightweight flavor of the app without package management","updated_at":"2021-11-07T11:14:50Z"} +{"author":"omecamtiv","body":"![Screenshot_20210719_004303_com.termux.jpg](https://user-images.githubusercontent.com/25419259/126079504-4355ef54-1e48-4a56-a631-bae7c6df5273.jpg)\n\nI have using termux for almost an year... But the problem is this while using vim or emacs there is a border around the cli app. I'm using lucario theme for termux and material theme foe emacs. Is this normal to happen?","comments":1,"created_at":"2021-07-18T19:16:14Z","labels":[],"number":2177,"title":"Presence of a border when running cli apps in termux","updated_at":"2021-07-18T22:11:59Z"} +{"author":"rsola","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\nHi. I have been using Termux for a long time and I find it very useful, but a few annoying issues surface from time to time. Some of them are easy to reproduce in order to avoid as much as possible the circumstances which trigger them. Some other issues are harder to track down.\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\nSuppose you have the default extra keys bar with the four arrow keys, or you customized it via termux.properties. Arrows, DEL and BKSP have autorepeat behavior, so they are sent continuously as long as you hold them. When two of these keys are tapped at the same time, autorepeat gets stuck.\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\nTo make the problem more obvious, open a full screen editor with some text loaded. Then, tap (no need to hold or keep tapping) any two arrows or an arrow and DEL or BKSP at the same time on the extra keys bar. It may also work with DEL and BKSP if you have included them both on your extra keys settings.\r\n\r\nFor example, you are editing a file. A few consecutive lines have a comment character at the beginning and you want to remove it from all these lines (suppose your editor doesn't have a macro feature). Then, you repeatedly tap DEL and DOWN in rapid succession, which will trigger this issue. Cursor moves like crazy, history lines are recalled or characters are being deleted at great speed. There is just a little you can do to stop this madness. Ctrl and Alt extra keys cannot be used because they get cancelled whenever a key is sent to the terminal.\r\n\r\nWorkaround: long tap on screen so selection handles and the copy/paste/more menu appear. Then, autorepeat stops. However, a ghost handle or menu could remain on screen when dismissed.\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\nAutorepeat mode must not get stuck, i.e., maybe simultaneous key presses with autorepeat should be processed serially.\r\n\r\n**Additional information**\r\n\r\n* Termux application version: 0.114\r\n* Android OS version: 8.1\r\n* Device model: Samsung SM-J710F (Galaxy J7 from 2016)\r\n","comments":4,"created_at":"2021-07-03T11:30:15Z","labels":[],"number":2156,"title":"Autorepeat gets stuck when pressing two arrows or arrow+DEL/BKSP at the same time on extra keys bar","updated_at":"2021-07-03T17:38:59Z"} +{"author":"iamahuman","body":"\r\n**Feature description**\r\nTermux should circumvent Play Store policy of restricting execution of arbitrary code from third parties, by imitating what Google Chrome does. Bundling packages into APKs is certainly _not_ the way to go.\r\n\r\n1. Consult Firefox and Chrome as to how it executes external code (e.g. JavaScript) while still managing to comply with Play Store policy.\r\n2. Run user code in a sandbox (`isolated_app`?), emulating forbidden system calls as needed. (Note that we already do this with execve to handle `#!/usr/bin/...` shebangs).\r\n - Additional permissions to control system can be granted through some kind of broker, which user code can communicate to via IPC.\r\n - Don't rely exclusively on ptrace through; rather, approach the problem with a mix of ptrace+seccomp+recompilation.\r\n3. Circumvent W^X restriction by using a custom binary loader (instead of e.g. `/system/bin/linker`).\r\n\r\n**Reference implementation**\r\n\r\nN/A\r\n\r\n**Related**\r\n\r\n- #655\r\n- #1072","comments":152,"created_at":"2021-07-03T08:18:07Z","labels":["discussion"],"number":2155,"title":"Revisit the Android W^X problem","updated_at":"2026-03-28T14:41:35Z"} +{"author":"yesco","body":"In the old (and current) xterm you can pick the 1x1 font named Unreadable to get an overview of larger texts. It would be nice if this was supported in the termux terminal. Especially if the pixel was 1x1 proportion. Typically, all visible characters would be a set pixel and all others (and spaces) would be an unset pixel.\r\n","comments":4,"created_at":"2021-06-21T13:59:17Z","labels":[],"number":2142,"title":"Asking for an 1x1 font (size)","updated_at":"2021-07-07T09:26:01Z"} +{"author":"yesco","body":"Using Termux daily with external Keyboard, and using CTRL-ALT-num with the session number. It's a very useful feature!\r\n\r\nI just noticed that if an session exits, all higher number sessions gets renumbered. This is somewhat unexpected and defeats the purpose of associating a number with a specific session.\r\n\r\nI'd have expected the numbered \"slot\" to have been left empty.\r\n\r\nAlso, from the UI, it could be marked as such, and have a \"restart/new\" option.\r\n\r\nThen at the next CTRL-ALT-Create I'd expect it to create a new session in the first empty slot. As it stands now, if you loose a session, I'll be confused until i restart it, which also cannot be automated, I think.","comments":4,"created_at":"2021-06-21T13:36:22Z","labels":[],"number":2141,"title":"Terminal Sessions change number","updated_at":"2021-06-22T16:19:29Z"} +{"author":"alou-S","body":"When changing Display Density (using `wm density \u003cnumber\u003e` as shell user(adb)), Termux won't change font size or the size of its elements such as Extra Keys and the Side Menu.\r\n\r\nMost Android apps adjust themselves including the SystemUI.\r\nClosing Termux and Re Opening it generally fixes the issue.","comments":0,"created_at":"2021-06-18T15:45:13Z","labels":[],"number":2134,"title":"Feature Request : Auto adjust font and app element sizes when Display Density (DPI) changed","updated_at":"2021-06-18T15:45:13Z"} +{"author":"ASoTNetworks","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\nAudio does not work when phone is connected to Android Auto using USB.\r\nAudio works over normal Bluetooth audio connection or from the phone's speaker.\r\n\r\nAudio from other apps works with Android Auto.\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\n1. Plug phone into the Android Auto USB port\r\n2. Open Termux App\r\n3. Start any program that can play audio in the command line like the play command `play audiofile.mp3`\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\nAudio should be able to play over Android Auto like other apps.\r\n\r\n**Additional information**\r\n\r\n* Termux application version: 0.113\r\n* Android OS version: LineageOS 18.1, Android 11\r\n* Device model: OnePlus One\r\n","comments":0,"created_at":"2021-06-03T23:11:03Z","labels":[],"number":2109,"title":"Audio not working when connected to Android Auto","updated_at":"2021-06-04T16:34:57Z"} +{"author":"dead10ck","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\n\r\nWhen you select a few lines from Termux and copy them, a whole bunch of extra whitespace gets copied to the clipboard. It's as if all the blank space on the screen is rendered as whitespace characters, instead of... well, nothing. e.g. if your screen is 120 characters wide, and a line only has 20 characters, what gets copied to the clipboard is those 20 characters and then 100 whitespaces.\r\n\r\nIt makes it pretty useless for copying more than one line at a time.\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\n\r\nRun a command that prints out a few short lines, then copy all the lines, then paste in another app.\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\n\r\nOnly the actual text should be copied.\r\n\r\n**Additional information**\r\n\r\n* Termux application version: 0.113\r\n* Android OS version: Oxygen OS 11.0.1.1.HD65A\r\n* Device model: OnePlus 7T\r\n","comments":8,"created_at":"2021-06-03T01:02:54Z","labels":[],"number":2108,"title":"copied text includes whitespace","updated_at":"2026-01-10T04:30:20Z"} +{"author":"ghost","body":"All Termux repositories previously hosted on JFrog Bintray are down since 1st May, 2021. This means that all repositories hosted on `dl.bintray.com` domain are not available anymore. There nothing can be done on our side because Bintray service [announced its sunset](https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/).\r\n\r\n```\r\nIgn:2 https://dl.bintray.com/grimler/game-packages-24 games InRelease\r\nIgn:3 https://dl.bintray.com/grimler/science-packages-24 science InRelease\r\nErr:4 https://dl.bintray.com/grimler/game-packages-24 games Release\r\n 403 Forbidden\r\nErr:5 https://dl.bintray.com/grimler/science-packages-24 science Release\r\n 403 Forbidden\r\nGet:1 https://grimler.se/termux-packages-24 stable InRelease [13.1 kB]\r\nGet:6 https://grimler.se/termux-packages-24 stable/main all Packages [21.6 kB]\r\nGet:7 https://grimler.se/termux-packages-24 stable/main aarch64 Packages [269 kB]\r\nReading package lists... Done\r\nE: The repository 'https://dl.bintray.com/grimler/game-packages-24 games Release' does not have a Release file.\r\nN: Metadata integrity can't be verified, repository is disabled now.\r\nN: Possible cause: repository is under maintenance or down (wrong sources.list URL?).\r\nE: The repository 'https://dl.bintray.com/grimler/science-packages-24 science Release' does not have a Release file.\r\nN: Metadata integrity can't be verified, repository is disabled now.\r\nN: Possible cause: repository is under maintenance or down (wrong sources.list URL?).\r\n```\r\n\r\n## What you should do as Termux user (only for Android 7+)\r\n\r\nYou need to pick a one of the available mirrors by using utility `termux-change-repo` or manually edit `sources.list` by replacing the Bintray URL with value obtained from [Termux Mirrors List](https://github.com/termux/termux-packages/wiki/Mirrors).\r\n\r\n**Beware of third-party scripts claiming theirselves as repository fixers! They could install untrusted GPG key and redirect your Termux installation onto malicious repository.** *Official tool for changing repositories is bundled within Termux and called `termux-change-repo`.*\r\n\r\nUsage of `termux-change-repo` is simple:\r\n1. Select one or more repositories for which you want to change mirror by tapping \"space\" and navigating over list by up/down arrow keys. Tap enter to confirm the choice.\r\n ![Screenshot_20210602-004033](https://user-images.githubusercontent.com/25881154/120394005-85c99700-c33b-11eb-998a-0797c0b74f7b.png)\r\n2. Pick a mirror, it is recommended to begin with mirror hosted by Grimler. Same as previously, navigate over list by arrow keys, pick mirror by space key and confirm choice by pressing \"enter\".\r\n ![Screenshot_20210602-004103](https://user-images.githubusercontent.com/25881154/120394033-8feb9580-c33b-11eb-8c7a-cf440783abe4.png)\r\n\r\n\r\nHighly recommended to run `pkg upgrade` after changing mirror.\r\n\r\nhttps://user-images.githubusercontent.com/25881154/116244521-ad43a780-a770-11eb-88c6-054fb1950bfd.mp4\r\n\r\n### If you get `E: Repository .. changed its .. value from 'Bintray' to ..`\r\n\r\nPackage manager can show you a notification with prompt which look like this one:\r\n```\r\nE: Repository 'https://grimler.se/termux-root-packages-24 root InRelease' changed its 'Origin' value from 'Bintray' to 'termux-root-packages-24 root'\r\nE: Repository 'https://grimler.se/termux-root-packages-24 root InRelease' changed its 'Label' value from 'Bintray' to 'termux-root-packages-24 root'\r\nN: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.\r\nDo you want to accept these changes and continue updating from this repository? [y/N] \r\n```\r\n\r\nIt is completely normal. Answer \"yes\" to this prompt. It will be shown only once per repository, so package manager will ask you to confirm for `game-repo`, `science-repo`, etc separately but you will need to confirm them only one time.\r\n\r\n***\r\n\r\n## Do not use Termux app from Google Play. It is deprecated.\r\n\r\nUse Termux application from F-Droid, here is the link: https://f-droid.org/en/packages/com.termux/. Google Play variant is deprecated, doesn't receive updates and contains issues as well as outdated repository URLs.\r\n\r\nBefore migrating to F-Droid Termux version, uninstall the application and all add-ons like Termux:API, Termux:Styling, Termux:Widget and others. This is a required step because of signature mismatch between F-Droid and Google Play variants. If you need to back up data before uninstalling app, you can use suggestions from https://wiki.termux.com/wiki/Backing_up_Termux.\r\n\r\n***\r\n\r\n## Remember that Android 5.x - 6.x is NOT SUPPORTED!\r\n\r\nAndroid OS version range 5.x - 6.x has been deprecated since 01.01.2020 and no longer worked on anymore. Provided here repository workarounds are only for Android 7.0. We never announced that bringing back support of legacy Android versions.\r\n\r\nIf you managed to put an URL of our mirrors to your sources.list and upgrade your legacy Termux, do not complain about broken installation. *If maintainers marked something as unsupported, perhaps there is a reason for that, isn't it?*\r\n\r\nDiscussions about Android 5.x - 6.x are off-topic here.\r\n\r\n## Remember that VMOS and F1VM environments are NOT SUPPORTED!\r\n\r\nThese \"virtual\" environments are not supported by Termux. They have a number of issues including broken `apt-key`.\r\n\r\nDiscussions about VMOS and F1VM are off-topic here.","comments":26,"created_at":"2021-05-16T16:43:22Z","labels":["information"],"number":2067,"title":"[README] Bintray repository hosting shut down | Error 403 Forbidden | Error 404","updated_at":"2026-03-24T20:23:22Z"} +{"author":"mguinhos","body":"**Feature description**\nPlease add SDL2 support to Termux or an integrated VNC server, this will be a great improvement that will make termux officially a development platform and not just a generic Terminal emulator.\n\n**Reference implementation**\nCXXdroid from IIEC already implemented SDL2 and Allegro","comments":7,"created_at":"2021-05-13T18:52:59Z","labels":["enhancement"],"number":2059,"title":"Integrated graphics (VNC/SDL2)","updated_at":"2023-01-21T12:00:01Z"} +{"author":"eda-abec","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\nAfter doing a fling gesture on terminal scrollback (either up or down), user has to wait for the fling to stop and cannot stop it manually (normally tap / touch / \"hold\" stops the fling in standard Android scrollable Views).\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\n- generate few screens of output\r\n- fling to scroll up\r\n- try to stop the scroll and not wait until it stops by itself\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\nWhen scrolling by fling, it should be possible to stop anytime by tapping to the scrolling area.\r\n\r\n**Additional information**\r\nFling gesture: https://developer.android.com/guide/topics/graphics/fling-animation\r\n\r\n* Termux application version:\r\n0.108\r\n* Android OS version:\r\n7\r\n* Device model:\r\nnot relevant","comments":0,"created_at":"2021-04-03T20:01:20Z","labels":[],"number":1990,"title":"Stop fling scroll anytime","updated_at":"2021-04-03T20:01:20Z"} +{"author":"tathastu871","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Feature description**\r\n\u003c!--\r\nDescribe the feature and why you want it.\r\n--\u003e\r\n\r\n**Reference implementation**\r\n\r\nDoes another app/terminal emulator have this feature?\r\nProvide links to more background information.\r\n","comments":1,"created_at":"2021-03-30T14:25:54Z","labels":[],"number":1984,"title":"Run termux-url-opener without opening terminal in background","updated_at":"2022-02-12T18:58:52Z"} +{"author":"kiranshetty07","body":"Hi,\r\nI am Running my Mosquitto broker on android through TERMUX .Previously (old version) is working fine with connection with Node mcu .But after updation i am not able to connect to the broker\r\n\r\nIt showing like this\r\n------------------------------------------------------\r\n1616485604: mosquitto version 2.0.7 starting\r\n1616485604: Using default config.\r\n1616485604: Starting in local only mode. Connections will only be possible from clients running on this machine.\r\n1616485604: Create a configuration file which defines a listener to allow remote access.\r\n1616485604: Opening ipv4 listen socket on port 1883.\r\n1616485604: Opening ipv6 listen socket on port 1883.\r\n1616485604: mosquitto version 2.0.7 running\r\n-----------------------------------------------------\r\nBy adding two lines\r\n\" listener 1883\r\nallow_anonymous true \"\r\n\r\nat the end of the config file but still it showing same thing\r\n\r\nBad thing is every article give solution for mosquitto which is running on Linux(terminal) not for ANDROID (Termux) :joy:\r\n\r\nplease guide me to achieve the goal\r\n\r\nthank you\r\n","comments":3,"created_at":"2021-03-24T12:58:09Z","labels":[],"number":1977,"title":"Not able to connect Mosquitto which is running On ANDROID(TERMUX)","updated_at":"2022-01-20T11:00:48Z"} +{"author":"tidux","body":"Most modern Android phones ship with the kernel support necessary to use a USB-serial adapter in host mode. I'd like to see a Termux command that acquires wake lock and executes a `getty` command on a specified USB serial port, thus allowing a user to log in as the Termux app's user account from a machine that might not have a network connection at all, like an old 80s micro, an ISA PC, or a serial terminal.","comments":2,"created_at":"2021-02-04T08:34:55Z","labels":[],"number":1921,"title":"Feature request: USB and getty","updated_at":"2021-05-17T21:18:01Z"} +{"author":"FardeenCodes","body":"","comments":7,"created_at":"2021-01-20T14:07:19Z","labels":[],"number":1894,"title":"Python speech recognition not working.","updated_at":"2021-07-09T14:23:02Z"} +{"author":"aurium","body":"**Feature description**\r\nA file header comment can describe how the file must be send to `~/bin/termux-file-editor`. Allowing us to receive the raw data from STDIN rather than a file path from a parameter.\r\n\r\nMost of time we wont save the original input data. So we don't need to noise the user or interact with FS.\r\n\r\nThe content-type will be important and that can be informed by an env var, simpler then parse CLI parameters.\r\n\r\n**Example:**\r\n```bash\r\n#!/data/data/com.termux/files/usr/bin/bash -e\r\n# === This is a termux-file-editor script configuration header ===\r\n# TERMUX_RECEIVE_FILE_BY=STDIN\r\n# === That was a termux-file-editor script configuration header ===\r\n\r\nif [ \"$TERMUX_RECEIVE_FILE_MIME\" = \"text/plain\" ]; then\r\n tot=$(wc -l)\r\n termux-toast -b blue \"This text has $tot lines.\"\r\nelse\r\n termux-toast -b red \"I don't know what to do.\"\r\nfi\r\n```\r\n\r\n`TERMUX_RECEIVE_FILE_BY` could accept this values:\r\n* `ASK`: The current approach, that opens a file save dialog **(default)**\r\n* `TEMP`: Save to a temp file without user interaction. (Solves #1887 without breaking any script)\r\n* `STDIN`: Push the file data as input without save any file. Most of times we wont save the original input data.\r\n\r\n`TERMUX_RECEIVE_FILE_MIME` is a interesting information, useful for any receive method.\r\n\r\n**Reference implementation**\r\n\r\n_Does another app/terminal emulator have this feature?_\r\nYou can see the header configuration idea at:\r\n* [Init scripts](https://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html)\r\n* [User Scripts](https://wiki.greasespot.net/Metadata_Block)\r\n","comments":0,"created_at":"2021-01-14T20:48:37Z","labels":[],"number":1888,"title":"Optionally send raw file data to termux-file-editor","updated_at":"2021-01-14T20:48:37Z"} +{"author":"aurium","body":"**Feature description**\r\nTermux must save the shared file to a temp file and then give it to `~/bin/termux-file-editor`.\r\nAfter `~/bin/termux-file-editor` exits, the temp file must be erased.\r\n\r\n**Breaking change**\r\nThis change will not break most scripts. Scripts that need the file to be saved at an specific path will break.\r\n\r\n**Why**\r\nToday Termux asks the user to save the shared file before sending it to `~/bin/termux-file-editor`. It's not a necessary step and is not clear to the user why it is necessary. This must to be transparent to the non hacker user, and can be more direct to the hacker user.","comments":0,"created_at":"2021-01-14T19:26:04Z","labels":[],"number":1887,"title":"Remove file save dialog before termux-file-editor call","updated_at":"2021-01-14T19:26:04Z"} +{"author":"coin3x","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\nWhen recalling command history, if encountered long commands, the rendering behaves weird.\r\n\r\nShell: fish 3.1.2\r\nUsing oh-my-fish with `bobthefish` theme\r\n\r\n[Ascinema recording that contains the problematic sequences](https://asciinema.org/a/9ipSggcjhXn78YchqZSUvKQ64)\r\n[Screen recording of asciinema replaying the above cast in Termux](https://user-images.githubusercontent.com/9127594/103159062-eb9b7b00-47ff-11eb-84cd-718cb40ffc90.mp4)\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\n1. `pkg install fish`\r\n2. Install [oh-my-fish](https://github.com/oh-my-fish/oh-my-fish).\r\n3. Use `omf theme bobthefish` to switch theme.\r\n4. Type a long enough command that exceeds the maximum width and wraps.\r\n5. Press up to recall and observe weird behaviors, for example, characters disappearing, or the whole line moving backwards for one character.\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\nTermux should render just like how the above asciinema recording renders on the website.\r\n\r\n**Additional information**\r\n\r\n* Termux application version: 0.103\r\n* Android OS version: 10 (LineageOS 17.1)\r\n* Device model: Sony Xperia XZ1\r\n","comments":6,"created_at":"2020-12-26T21:05:24Z","labels":["help wanted"],"number":1860,"title":"Weird rendering when using specific shell theme and then recalling command history with long commands","updated_at":"2021-09-09T07:00:51Z"} +{"author":"rcartesius","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Feature description**\r\n\u003c!--\r\nDescribe the feature and why you want it.\r\n--\u003e\r\nI need to routinely swap between typing in Korean and English, but when using an external keyboard termux does not follow the language input setting of android (with the software keyboard though it works fine :) ). In Emacs I have to change the Emacs input settings every time I need to swap languages. In the terminal it does not even seem to be possible. It would be nice if termux followed the input language setting of android.\r\n \r\n\r\n**Reference implementation**\r\n\r\nTermux itself implements this feature well when the software keyboard is used.","comments":8,"created_at":"2020-12-02T22:36:50Z","labels":[],"number":1839,"title":"Typing in Korean with an external keyboard","updated_at":"2025-07-31T06:31:42Z"} +{"author":"richardb64","body":"**Feature description**\r\nThe terminal emulation of Termux needs the ability to configure the byte string generated by the \"backspace\" key on the keyboard (physical, soft, or \"BKSP\" in the extra-keys row of Termux itself), with keycode `KeyEvent.KEYCODE_DEL`. Currently it seems to be hard-wired to send `^?` (ASCII DEL), with no way of changing it. This might be the default expectation of many packages on Linux, but it is _not_ the expectation on many other systems, nor of the upstream packages (ncurses, xterm, etc) - Linux is the odd one out here.\r\n\r\nAn \"advanced\" option in `termux.properties` would be OK, though a GUI option would be better, and more in keeping with other terminal emulators.\r\n\r\nLocally on the Android device within Termux, things are mostly consistent (eg. `stty erase` is set by default to `^?`). However, when connecting remotely to other machines, often the remote machine expects `^H`, and there are usually reasons why this cannot be changed - notably not to break compatibility with other clients. Therefore Termux needs to be able to send this character.\r\n\r\nThe Termux code (KeyHandler.java) attempts to send `^H` if the `Ctrl` key is used as a modifier with the Backspace key. However, not all keyboards allow modifiers to be applied to this key (eg. \"Hacker's Keyboard\" doesn't), and in any case, having to use a modifier for the most common function would be a poor workaround. The other workaround (to type `Ctrl-H` directly) is similarly a poor experience.\r\n\r\nIn addition to an explicit configuration option, it might also be worth supporting the \"DEC Private Mode\" codes - in this case, specifically `^[[?67h` and `^[[?67l` - as that would allow remote .bashrc scripts to adjust the emulation to match the expectations of the remote machine.\r\n\r\nSimilarly, the string sent by the \"delete\" key which appears on some keyboards with keycode `KeyEvent.KEYCODE_FORWARD_DEL` (and is available as \"DEL\" in Termux's extra-keys row) currently seems to be hard-wired to send the DEC/ANSI Keypad Delete sequence `^[[3~`. That should be configurable too (eg. to send `^?`).\r\n\r\n**Reference implementation**\r\nPretty much all terminal emulator programs allow this to be configured with a prominent GUI option - xterm, Gnome Terminal, PuTTY, etc. Elsewhere in the Android world, ConnectBot also allows the action of the backspace key to be configured.\r\n","comments":1,"created_at":"2020-11-02T14:43:34Z","labels":["enhancement"],"number":1808,"title":"Terminal emulation: allow configuration of string sent by backspace key","updated_at":"2022-03-14T15:38:59Z"} +{"author":"532910","body":"![image](https://user-images.githubusercontent.com/14617699/96517947-81e87900-1272-11eb-8ad6-aa3d5f1198ff.png)\r\n\r\nKnown apps with adaptive shortcut icons:\r\n[Element](https://github.com/vector-im/element-android), [Orgzly](https://github.com/orgzly/orgzly-android), [Calendar](https://github.com/LineageOS/android_packages_apps_Etar), [SELinuxModeChanger](https://github.com/MrBIMC/SELinuxModeChanger), SoundCloud\r\n![image](https://user-images.githubusercontent.com/14617699/96517260-4ef1b580-1271-11eb-8723-448ca6413dc2.png)\r\n\r\nAll of these shortcuts are created the same way, via long press from the main icon and dragging it to the desktop.","comments":8,"created_at":"2020-10-19T22:21:23Z","labels":[],"number":1796,"title":"Please make shourcut icons adaptive","updated_at":"2024-09-02T07:11:52Z"} +{"author":"mvolfik","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\nWhen termux is open and I trigger the url opener intent via adb, it quickly flashes and disappears\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\n1. Open termux\r\n3. `mkdir bin`\r\n2. `echo -e '#!/usr/bin/bash\\necho \"$@\"\\nread' \u003e bin/termux-url-opener`\r\n4. connect to your phone with `adb shell` (leave termux open on mobile)\r\n5. in the `adb` shell, run command `am start-activity -a android.intent.action.SEND -t text/plain -e android.intent.extra.TEXT \"https://example.com/\" com.termux/com.termux.filepicker.TermuxFileReceiverActivity`. nothing happens\r\n6. now go to home screen on mobile (don't kill termux, just \"minimalize\" it)\r\n7. repeat step 5, just with different domain to see difference. now the opener script shows up with this domain\r\n8. press enter on mobile. the second script ends, and the first one opens again\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\nThe opener script should open directly after the intent is run, even when termux is open\r\n\r\n**Additional information**\r\n\r\n* Termux application version: 0.101\r\n* Android OS version: 9 / MIUI Global 11.0.4\r\n* Device model: Xiaomi Redmi 6\r\n","comments":7,"created_at":"2020-10-12T13:24:44Z","labels":[],"number":1792,"title":"termux-url-opener just flashes when termux is currently open","updated_at":"2022-01-07T19:17:36Z"} +{"author":"bubnikv","body":"**Problem description**\r\n\r\nWhen using the Midnight Commander, the Shift-Cursor Up/Down combination is used to select items and the Ctrl-Page Up/Down are used to navigate directories. In Termux App, modifiers are not delivered for these keys.\r\n\r\n**Steps to reproduce**\r\n\r\nOpen mc, hold Shift and press the \"arrow down\" cursor key. Expected behavior: Files or directories are marked as selected and the cursor in mc moves down. Current behavior: Cursor does not move at all.\r\n","comments":3,"created_at":"2020-09-15T06:55:26Z","labels":[],"number":1758,"title":"hardware keyboard - modifier keys not delivered with cursor keys and page up / down","updated_at":"2020-09-20T04:09:48Z"} +{"author":"bubnikv","body":"Allow mapping of custom actions to the Samsung S-pen button. For example, I can think of showing / hiding the keyboard or showing / hiding the menu.","comments":1,"created_at":"2020-09-06T10:23:48Z","labels":[],"number":1744,"title":"support for the Samsung S-pen button","updated_at":"2020-09-09T06:01:00Z"} +{"author":"littlefroy","body":"tested over 4 imes\r\n\r\n**Additional information**\r\n\r\n* Termux application version: 0.96\r\n* Android OS version: 10\r\n* Device model: xiaomi redmi note 8 pro\r\n","comments":0,"created_at":"2020-08-28T00:35:32Z","labels":[],"number":1731,"title":"touchscreen ime keyboard key\"enter\" and \"backspace\" invalid sometimes","updated_at":"2020-08-28T00:35:32Z"} +{"author":"easyaspi314","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\nWhen selecting text near the bottom of the screen (especially with a small font size), the \"Copy/Paste\" popup sometimes does not show.\r\n![Screenshot_20200822-172228](https://user-images.githubusercontent.com/6258309/90966122-ba4f1f00-e49c-11ea-81da-09eff5c8353b.png)\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\n1. Zoom to a very small font size (may vary on the device)\r\n2. Get some text on the bottom of the screen.\r\n3. Try to copy the bottom line.\r\n4. Notice that the popup does not show.\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\nThe selection popup shows.\r\n\r\n**Additional information**\r\n\r\n* Termux application version: v0.96\r\n* Android OS version: 10.0\r\n* Device model: Google Pixel 2 XL\r\n","comments":0,"created_at":"2020-08-22T21:27:28Z","labels":[],"number":1724,"title":"Selection popup not visible at small font + bottom of screen","updated_at":"2020-08-22T21:27:28Z"} +{"author":"khasburrahman","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Feature description**\r\nThis feature will keep the cursor moving when we hold arrow button on keyboard (VolUP+WASD)\r\nThe implementation should be as our PC terminal, we would move the cursor once, then after certain delay it would move the cursor. \r\nOr as termux up and down virtual keyboard does!\r\nIt would be very useful for code editing / reading\r\n\r\n**Reference implementation**\r\nTermux up and down virtual keyboard. ","comments":0,"created_at":"2020-08-19T04:12:16Z","labels":[],"number":1718,"title":"Text file navigation: keep cursor moving when holding VolUp+WASD","updated_at":"2020-08-19T04:12:16Z"} +{"author":"quite","body":"I think there is a regression in 0.95, possibly due to 0af823607 (otherwise nice improvements!). I'm fairly sure it used to be possible to press extra key Alt, and then Shift down in the keyboard, to produce e.g. Alt-Shift-c. Shift now causes Alt to be \"releasedx.\r\n\r\n\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\n\r\n**Additional information**\r\n\r\n* Termux application version:\r\n* Android OS version:\r\n* Device model:\r\n","comments":7,"created_at":"2020-06-29T16:14:49Z","labels":[],"number":1620,"title":"can no longer produce modifier Alt + Shift","updated_at":"2020-06-30T17:20:53Z"} +{"author":"bartekpacia","body":"**Change description**\r\nI was recently thinking about rewriting Termux to Kotlin. I haven't seen this topic discussed before, so that's why I created this issue.\r\nWhat is your opinion on this? \r\n\r\n**Advantages:**\r\n- many new Android APIs are Kotlin-first and provide useful extension methods for Kotlin\r\n- [all benefits of the Kotlin language](https://kotlinlang.org/#why-kotlin)","comments":4,"created_at":"2020-06-14T11:44:00Z","labels":["enhancement"],"number":1599,"title":"Kotlin adoption","updated_at":"2020-06-15T15:08:44Z"} +{"author":"ilyapashuk","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Feature description**\r\n\u003c!--\r\nDescribe the feature and why you want it.\r\n--\u003e\r\n\r\nTermux is most screen reader accessible terminal emulator that I seen.\r\nIn most popular android terminals screenreaders was even unable get a terminal view text, so that apps was fully unaccessible.\r\nIn termux, you provided a good accessibility because screenreaders are able to get view's text and notified about all it's changes.\r\nbut android screenreaders knows nothing about cli consoles and often handles sutch events incorrectly.\r\nfor exampl, on text change, they re reads full text, not only changed part, or reads nothing. Also, it's common practice that when some letter typed on the keyboard, physical or touch, screeners read that character and, when space are pressed, they read full word to make sure that it is correct, but in termux nothing of this works.\r\n\r\nto make this app more accessible, you should add some changes to it's behavior:\r\nview should not generate default TextChanged event, but it should use an AnnounceForAccessibility method to announce only new or changed textparts.\r\nwhen a letter are typed, it should send that letter to AnnounceForAccessibility too.\r\nwhen del key are typed, it should speak something like \"%l deleted\" where %l is deleted letter.\r\nand on any cursor movement it should speak new cursor position (new cursored line in up-down movement and new word on left-right movement)\r\n\r\nalso, I want to test that changes before publication as an accessibility user, but I need a ready apk because at this time have not a working build instrumentation. And also it's version code should be equal with current release code because I have a lot of data in termux env and can't reinstall it to downgrade. The same sing for signing.\r\nor it should be as different package name, failsafe mode will be enough for first time.\r\n\r\nthank you","comments":0,"created_at":"2020-06-05T15:26:06Z","labels":["enhancement"],"number":1586,"title":"feature request: request for some accessibility impruvments","updated_at":"2020-06-05T20:35:28Z"} +{"author":"yesco","body":"The URL-picker is a great too, as selecting text to copy is difficult, wish there was a way to do it with external keyboard instead.\r\n\r\nIn any case, I have an edge case of an URL going past then end of the screen, in *emacs*, and this maybe the case in other editors, and it's not recognized at the emacs sets the back-slash and the last position on the row to indicate that it continues below.\r\n\r\nScreen shot attached.\r\n\r\n![Screenshot_2020-05-25-23-05-21-986_com termux](https://user-images.githubusercontent.com/2121626/82830558-45416d00-9ee0-11ea-9bd6-de0964dafafc.jpg)\r\n","comments":4,"created_at":"2020-05-25T16:40:29Z","labels":[],"number":1636,"title":"URL picker: cannot copy multiline url","updated_at":"2020-07-09T10:41:57Z"} +{"author":"lapo-luchini","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\nMany Termux Styles use complete black for extra keys background (I guess that's a default and most styles just don't override it?); as many dark styles use black for terminal background too, that doesn't allow to have a clear understanding of the upper limit of the buttons.\r\n\r\nThis is the default theme (but the same goes for Argonaut and many of the other dark themes:\r\n![image](https://user-images.githubusercontent.com/420454/81276600-87029480-9053-11ea-910a-7cc3fb89bde5.png)\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\nOpen up terminal. Volup-Q to enable Extra Keys if not already.\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\nBe able to understand the limit between terminal and extra keys panel.\r\n\r\n**Additional information**\r\n\r\n* Termux application version: 0.94\r\n* Android OS version: 9\r\n* Device model: Xiaomi Mi A3\r\n","comments":7,"created_at":"2020-05-07T09:18:07Z","labels":[],"number":1544,"title":"[RFE] Allow Termux Styles to define a color for extra keys background","updated_at":"2026-03-15T21:50:43Z"} +{"author":"torappinfo","body":"**Problem description**\r\nwhen gboard input method is used with termux, only ascii keyboard can be used.\r\n\r\n**Steps to reproduce**\r\nInstall google gboard keyboard, and use it with termux\r\n\r\n**Expected behavior**\r\n\r\n**Additional information**\r\nnever worked with any version of termux\r\n\r\n* Termux application version:\r\n* Android OS version:\r\n* Device model:\r\n","comments":27,"created_at":"2020-05-05T07:52:28Z","labels":[],"number":1539,"title":"Gboard keyboard can not be used properly in termux","updated_at":"2026-04-27T05:05:58Z"} +{"author":"jdrch","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\r\nTermux does not properly support immersive mode on the Samsung Galaxy Note9 running Android 10 (One UI 2.0.) This results in the keyboard covering most of the terminal display, including the prompt, when it is raised.\r\n\r\n**Steps to reproduce**\r\n\r\n1. Start Termux\r\n2. Run any command with output that fills the terminal display, such as `pkg upgrade` or `pkg install`\r\n3. Tap the prompt to raise the keyboard. \r\n\r\nThe keyboard will cover most of the terminal display, including the prompt. This forces the user to type blind, as shown below:\r\n\r\n![Screenshot_20200421-094628_Termux](https://user-images.githubusercontent.com/1056759/79880798-17837880-83b6-11ea-914b-5c352fe23b30.png)\r\n\r\n**Expected behavior**\r\n\r\nThe terminal display should resize to end where the keyboard starts, thereby making the prompt always visible\r\n\r\n**Additional information**\r\n\r\n* Termux application version: 0.94\r\n* Android OS version: 10 (Samsung One UI 2.0, 2020-04-01 Security Patch Level)\r\n* Device model: Verizon Samsung Galaxy Note9 512GB (Snapdragon) | Model Number SM-N960UZBFVZW\r\n","comments":0,"created_at":"2020-04-21T14:54:35Z","labels":[],"number":1525,"title":"Termux does not support immersive mode properly on Samsung One UI","updated_at":"2020-04-21T14:54:35Z"} +{"author":"marioidival","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\nI can't reduce font size\r\n\r\n**Steps to reproduce**\r\nhit:CTRL ALT -\r\n\r\n**Expected behavior**\r\nreduce font size\r\n\r\n**Additional information**\r\nI can just increase font size\r\n\r\n* Termux application version: 0.94\r\n* Android OS version: 10\r\n* Device model: SM-T865\r\n","comments":4,"created_at":"2020-04-19T15:43:37Z","labels":["bug report"],"number":1519,"title":"╦ïCTRL ALT -╦ï dont change font size","updated_at":"2020-07-06T04:04:44Z"} +{"author":"s20208413","body":"\u003c!--\r\nIMPORTANT:\r\n\r\n1. Support of Android 5.x - 6.x is finished.\r\n2. Fill the template AFTER comments.\r\n--\u003e\r\n\r\n**Problem description**\r\n\u003c!--\r\nA clear and concise description of what the problem is.\r\nYou may post screenshots in addition to description.\r\n--\u003e\r\n\r\nTermux does not work on [MiReader](https://www.gearbest.com/blog/new-gear/xiaomi-mireader-e-book-review-an-excellent-amazon-kindle-alternative-9314) (MiReader is an eBook Reader by Xiaomi).\r\n\r\nIt just shows black screen:\r\n\r\n![screenshot](https://raw.githubusercontent.com/sceext2/termux-app/screenshot/1-black.png)\r\n\r\n**Steps to reproduce**\r\n\u003c!--\r\nSteps to reproduce the behavior. Please post all necessary\r\ncommands that are needed to reproduce the issue.\r\n--\u003e\r\n\r\n1. Install termux on MiReader.\r\n\r\n2. Run termux (start [TermuxActivity](https://github.com/termux/termux-app/blob/v0.94/app/src/main/java/com/termux/app/TermuxActivity.java)).\r\n\r\n**Expected behavior**\r\n\u003c!--\r\nA clear and concise description of what you expected to happen.\r\n--\u003e\r\n\r\nThe command prompt should appear.\r\n\r\n**Additional information**\r\n\r\n* Termux application version: `v0.94`\r\n* Android OS version: `Android 8.1`\r\n* Device model: MiReader (system version `1.1.3.200115`)\r\n\r\n**A workaround**\r\n\r\nThere is probably a BUG of the Android system on MiReader: When start `TermuxActivity`, [`startService()`](https://github.com/termux/termux-app/blob/v0.94/app/src/main/java/com/termux/app/TermuxActivity.java#L318) in the [`onCreate()`](https://github.com/termux/termux-app/blob/v0.94/app/src/main/java/com/termux/app/TermuxActivity.java#L201) method does not work. So [`TermuxService`](https://github.com/termux/termux-app/blob/v0.94/app/src/main/java/com/termux/app/TermuxService.java) will not start, and `mTermService` in the [`addNewSession()`](https://github.com/termux/termux-app/blob/v0.94/app/src/main/java/com/termux/app/TermuxActivity.java#L601) method is `null`.\r\n\r\nAdd [these lines of code](https://github.com/sceext2/termux-app/blob/sceext-debug/app/src/main/java/com/termux/app/TermuxActivity.java#L605) will solve this problem:\r\n\r\n```\r\n void addNewSession(boolean failSafe, String sessionName) {\r\n if (mTermService == null) {\r\n Intent serviceIntent = new Intent(this, TermuxService.class);\r\n startService(serviceIntent);\r\n return;\r\n }\r\n```\r\n\r\nThere will still be a black screen on the start, but slide from left of the screen and click the \"NEW SESSION\" button, then everything will be OK.\r\n\r\n![screenshot-new-session](https://raw.githubusercontent.com/sceext2/termux-app/screenshot/2-new-session.png)\r\n\r\n![screenshot-ok](https://raw.githubusercontent.com/sceext2/termux-app/screenshot/3-ok.png)\r\n\r\n;-)\r\n","comments":1,"created_at":"2020-04-15T11:52:28Z","labels":["bug report"],"number":1513,"title":"Termux does not work on MiReader","updated_at":"2023-12-23T14:17:50Z"} +{"author":"tyayers","body":"\r\n**Problem description**\r\n\r\nI love Termux, it runs great on my Chromebook with Android. I live in Germany, and the German keyboard layout has one bug - the \u003c and \u003e keys don't work, which is a killer when writing HTML. When pressing the \u003c and \u003e keys, the # symbol comes instead (# and '). \r\n\r\n**Steps to reproduce**\r\n\r\nSwitch to German keyboard layout, press \u003c and \u003e and see how # and ' symbols come.\r\n\r\n**Expected behavior**\r\n\r\n\u003c and \u003e keys produce \u003c and \u003e symbols.\r\n\r\n**Additional information**\r\n\r\n```\r\n$ termux-info\r\nUpdatable packages:\r\nadwaita-icon-theme/x11 3.34.3-2 all [upgradable from: 3.34.3]\r\napt/stable 1.4.9-25 i686 [upgradable from: 1.4.9-19]\r\naterm/x11 1.0.1-16 i686 [upgradable from: 1.0.1-15]\r\natk/x11 2.34.1-3 i686 [upgradable from: 2.34.1-2]\r\nbash/stable 5.0.16 i686 [upgradable from: 5.0.11]\r\nbinutils/stable 2.34 i686 [upgradable from: 2.33.1]\r\nbusybox/stable 1.31.1-6 i686 [upgradable from: 1.30.1-9]\r\nca-certificates/stable 20200101 all [upgradable from: 20190828]\r\ncommand-not-found/stable 1.47 i686 [upgradable from: 1.42]\r\ncurl/stable 7.68.0 i686 [upgradable from: 7.66.0-1]\r\ndbus/x11 1.12.16-8 i686 [upgradable from: 1.12.16-7]\r\ndesktop-file-utils/x11 0.24-3 i686 [upgradable from: 0.24-2]\r\nexo/x11 0.12.11-1 i686 [upgradable from: 0.12.11]\r\nfeh/x11 3.3-1 i686 [upgradable from: 3.3]\r\nfluxbox/x11 1.3.7-17 i686 [upgradable from: 1.3.7-16]\r\ngit/stable 2.25.0-2 i686 [upgradable from: 2.24.1]\r\ngolang/stable 2:1.13.7 i686 [upgradable from: 2:1.13.6]\r\ngpgv/stable 2.2.19 i686 [upgradable from: 2.2.17]\r\ngrep/stable 3.4 i686 [upgradable from: 3.3-2]\r\ngtk-update-icon-cache/x11 3.24.13-2 i686 [upgradable from: 3.24.13-1]\r\ngtk2/x11 2.24.32-20 i686 [upgradable from: 2.24.32-19]\r\ngtk3/x11 3.24.13-2 i686 [upgradable from: 3.24.13-1]\r\nhicolor-icon-theme/x11 0.17-13 all [upgradable from: 0.17-12]\r\nhugo/stable 0.64.1 i686 [upgradable from: 0.62.2]\r\ninetutils/stable 1.9.4-8 i686 [upgradable from: 1.9.4-7]\r\nlibcurl/stable 7.68.0 i686 [upgradable from: 7.66.0-1]\r\nlibdrm/x11 2.4.100-3 i686 [upgradable from: 2.4.100-2]\r\nlibepoxy/x11 1.5.4-1 i686 [upgradable from: 1.5.4]\r\nlibfontenc/x11 1.1.4-6 i686 [upgradable from: 1.1.4-5]\r\nlibgcrypt/stable 1.8.5-1 i686 [upgradable from: 1.8.5]\r\nlibgmp/stable 6.2.0 i686 [upgradable from: 6.1.2-4]\r\nlibgnutls/stable 3.6.12 i686 [upgradable from: 3.6.11.1]\r\nlibgpg-error/stable 1.37 i686 [upgradable from: 1.36-1]\r\nlibice/x11 1.0.10-7 i686 [upgradable from: 1.0.10-6]\r\nlibnghttp2/stable 1.40.0 i686 [upgradable from: 1.39.2]\r\nlibsm/x11 1.2.3-9 i686 [upgradable from: 1.2.3-8]\r\nlibxaw/x11 1.0.13-17 i686 [upgradable from: 1.0.13-16]\r\nlibxcomposite/x11 0.4.5-6 i686 [upgradable from: 0.4.5-5]\r\nlibxcursor/x11 1.2.0-6 i686 [upgradable from: 1.2.0-5]\r\nlibxdamage/x11 1.1.5-6 i686 [upgradable from: 1.1.5-5]\r\nlibxfce4ui/x11 4.15.1-1 i686 [upgradable from: 4.15.0]\r\nlibxfce4util/x11 4.15.0-1 i686 [upgradable from: 4.14.0-4]\r\nlibxfixes/x11 5.0.3-10 i686 [upgradable from: 5.0.3-9]\r\nlibxfont2/x11 2.0.4-3 i686 [upgradable from: 2.0.4-2]\r\nlibxi/x11 1.7.10-5 i686 [upgradable from: 1.7.10-4]\r\nlibxinerama/x11 1.1.4-9 i686 [upgradable from: 1.1.4-8]\r\nlibxkbfile/x11 1.1.0-6 i686 [upgradable from: 1.1.0-5]\r\nlibxmu/x11 1.1.3-7 i686 [upgradable from: 1.1.3-6]\r\nlibxpm/x11 3.5.13-1 i686 [upgradable from: 3.5.13]\r\nlibxrandr/x11 1.5.2-6 i686 [upgradable from: 1.5.2-5]\r\nlibxshmfence/x11 1.3-10 i686 [upgradable from: 1.3-9]\r\nlibxt/x11 1.2.0-6 i686 [upgradable from: 1.2.0-5]\r\nlibxxf86vm/x11 1.1.4-12 i686 [upgradable from: 1.1.4-11]\r\nmesa/x11 17.3.9-16 i686 [upgradable from: 17.3.9-15]\r\nnano/stable 4.8 i686 [upgradable from: 4.7]\r\nndk-sysroot/stable 20-7 i686 [upgradable from: 20-6]\r\nnet-tools/stable 1.60.2017.02.21-3 i686 [upgradable from: 1.60.2017.02.21-2]\r\nnetsurf/x11 3.9-6 i686 [upgradable from: 3.9-4]\r\nnodejs/stable 13.0.0-1 i686 [upgradable from: 13.0.0]\r\nprocps/stable 3.3.16 i686 [upgradable from: 3.3.15-6]\r\npsmisc/stable 23.3-2 i686 [upgradable from: 23.2-1]\r\nreadline/stable 8.0.4 i686 [upgradable from: 8.0.1]\r\nsed/stable 4.8 i686 [upgradable from: 4.7-1]\r\nshared-mime-info/x11 1.15-1 i686 [upgradable from: 1.15]\r\nstartup-notification/x11 0.12-11 i686 [upgradable from: 0.12-10]\r\ntar/stable 1.32-5 i686 [upgradable from: 1.32-4]\r\ntermux-tools/stable 0.74 all [upgradable from: 0.72]\r\ntigervnc/x11 1.10.1-1 i686 [upgradable from: 1.10.1]\r\nutil-linux/stable 2.35.1 i686 [upgradable from: 2.34-2]\r\nvim/stable 8.2.0200 i686 [upgradable from: 8.1.2350]\r\nvim-runtime/stable 8.2.0200 all [upgradable from: 8.1.2350]\r\nxcb-util/x11 0.4.0-10 i686 [upgradable from: 0.4.0-9]\r\nxfconf/x11 4.14.1-6 i686 [upgradable from: 4.14.1-5]\r\nxkeyboard-config/x11 2.29 all [upgradable from: 2.28-2]\r\nxorg-font-util/x11 1.3.2-3 i686 [upgradable from: 1.3.2-2]\r\nxorg-fonts-75dpi/x11 1.0.3-10 all [upgradable from: 1.0.3-9]\r\nxorg-fonts-alias/x11 1.0.3-8 all [upgradable from: 1.0.3-7]\r\nxorg-fonts-encodings/x11 1.0.5-5 all [upgradable from: 1.0.5-4]\r\nxorg-mkfontscale/x11 1.2.1-8 i686 [upgradable from: 1.2.1-7]\r\nxorg-xauth/x11 1.1-5 i686 [upgradable from: 1.1-4]\r\nxorg-xkbcomp/x11 1.4.2-8 i686 [upgradable from: 1.4.2-7]\r\nxorg-xmessage/x11 1.0.5-10 i686 [upgradable from: 1.0.5-9]\r\nSubscribed repositories:\r\nhttps://dl.bintray.com/xeffyr/x11-packages x11/main\r\nhttps://dl.bintray.com/grimler/science-packages-24 science/stable\r\nhttps://dl.bintray.com/grimler/game-packages-24 games/stable\r\nhttps://termux.org/packages stable/main\r\nSystem information:\r\nLinux localhost 3.18.0-19937-g5da699e3897c termux/termux-packages#1 SMP PREEMPT Wed Feb 5 22:59:00 PST 2020 i686 Android\r\nTermux-packages arch:\r\ni686\r\nAndroid version:\r\n9\r\nDevice manufacturer:\r\nGoogle\r\nDevice model:\r\nASUS Chromebook Flip C302\r\n```\r\n","comments":3,"created_at":"2020-02-15T09:58:30Z","labels":[],"number":1463,"title":"German keyboard layout problem: '\u003c' and '\u003e' keys wrongly mapped","updated_at":"2021-03-26T19:31:59Z"} +{"author":"ghost","body":"**Feature description**\r\nI don't know if this is possible or not, but I was hoping there was a way to toggle settings through Termux. For my use case, I would like to create a script on a cron that checks for certain criteria and enables or disables the location services on my phone. Basically an automated way of doing stuff.\r\n\r\n**Reference implementation**\r\nDoes another app/terminal emulator have this feature? \r\nProvide links to more background information\r\n\r\nProbably apps like AutoApp or whatever but because they require pay or have ads, I don't really trust them to control my phone settings. :)","comments":1,"created_at":"2020-01-31T13:55:26Z","labels":[],"number":1451,"title":"Toggling services like location services","updated_at":"2020-03-09T10:19:54Z"} +{"author":"keyolk","body":"**Feature description**\r\nhttps://wiki.termux.com/wiki/Hardware_Keyboard\r\n\r\nfrom above\r\n\u003e The following shortcuts are available when using Termux with a hardware (e.g. bluetooth) keyboard by combining them with Ctrl+Alt: \r\n\r\nIn my case I prefer to use ctrl+alt prefix for my vim and tmux binding.\r\nWould Great if I can set another prefix combination for hardware keyboard.\r\n\r\nThanks to nice app : )\r\n\r\n**Reference implementation**\r\nDont know yet : /","comments":1,"created_at":"2020-01-29T13:14:49Z","labels":[],"number":1449,"title":"Add ability to set combination prefix for hardware keyboard","updated_at":"2020-11-21T19:56:24Z"} +{"author":"tevig","body":"**Problem description**\r\nI don't now maybe is not termux problem.\r\nIf I use CTRL+Y (emacs, mc) - application is stoped.\r\nIf I use VOLUME_DOWN+Y - Work is good.","comments":3,"created_at":"2020-01-26T05:15:43Z","labels":[],"number":1444,"title":"Hardware Blackberry keyboard and CTRL+Y","updated_at":"2020-01-26T17:10:24Z"} +{"author":"jemadux","body":"I am using in my android tv the [remote android tv ](https://play.google.com/store/apps/details?id=com.google.android.tv.remote\u0026hl=en) \r\nand when I press in virtual keybaord , not instered to termux \r\n\r\nthe android remote tv working on tv box .. \r\ncould you please fix that for android tv ? ","comments":0,"created_at":"2020-01-19T15:05:43Z","labels":[],"number":1432,"title":"Termux in android TV not working as should be ","updated_at":"2020-01-19T15:05:43Z"} +{"author":"fhteagle","body":"Long time Termux user, first bug report here though.\r\n\r\nUsing Jan 4, 2020 Google Play Store version of the app, I am getting a continuous haptic feedback about twice per second as soon as I launch the app. As soon as I enter a command, the symbols ^[OS are inserted continuously as well. This makes password entry impossible, for example. \r\n\r\nI am using a Oneplus 7T with Android 10.0.7 currently, and can test with other devices and android versions if need be. I did notice this behavior with previous versions of Termux, but only if Termux was left in the background for a long time and then I returned to Termux activity in the foreground. Previously, it could be cleared by exiting and relaunching Termux. Now, the undesired behavior begins on app open, every time. Uninstalling / reinstalling the app, clearing storage, etc have not improved the situation any.\r\n\r\nLet me know what other troubleshooting / bug hunting steps you might need.\r\n\r\nThanks\r\n- DH\r\n","comments":3,"created_at":"2020-01-13T23:15:39Z","labels":["bug report"],"number":1425,"title":"Continuous haptic bell / ^[OS characters inserted","updated_at":"2020-09-24T18:04:25Z"} +{"author":"remo7777","body":"**Feature description**\r\nDescribe the feature and why you want it.\r\n\r\n**Reference implementation**\r\nDoes another app/terminal emulator have this feature?\r\nProvide links to more background information\r\n","comments":5,"created_at":"2020-01-06T03:36:25Z","labels":[],"number":1416,"title":"can we set *keep screen on* option through command line ?","updated_at":"2023-12-23T22:08:41Z"} +{"author":"he852100","body":"With a double width character wrapping, a failure occurs when only one English character can be tolerated at the end of the line.\r\n\r\n![Screenshot_20191226_234232](https://user-images.githubusercontent.com/26913892/71482123-ecd84780-283b-11ea-80f4-a7b368a96014.jpg)\r\n![Screenshot_20191226_234434](https://user-images.githubusercontent.com/26913892/71482124-ed70de00-283b-11ea-8f65-5e0893ee022b.jpg)\r\n\r\nCopy results will increase the space character\r\n```\r\ndndynyenethtsnydntsbtsntsbtsbstnstbstb Σ╜áσ░▒\r\n```\r\n","comments":3,"created_at":"2019-12-26T16:09:18Z","labels":["bug report","help wanted"],"number":1397,"title":"Line breaks and copy issues","updated_at":"2025-08-11T06:07:22Z"} +{"author":"scandum","body":"When mouse tracking is enabled Termux sends scroll-wheel up and down codes when swiping up and down.\r\n\r\nWhile this is cute it prevents implementing any kind of advanced mouse functionality in Termux, like dragging.\r\n\r\n![drag](https://user-images.githubusercontent.com/52607428/70944197-dcadb480-2052-11ea-95a5-409821e827c5.gif)\r\n\r\nDrag support is essential functionality to me while mouse-wheel support is not. ","comments":7,"created_at":"2019-12-16T21:37:08Z","labels":["enhancement"],"number":1384,"title":"Mouse tracking translates dragging with finger down to scroll wheel events","updated_at":"2020-04-15T10:23:29Z"} +{"author":"snogglethorpe","body":"\u003c!-- Important note: Refusing to provide needed information may result in issue closing. If you are having problems with a package in termux then a bug report should be filed in the termux-packages repo: https://github.com/termux/termux-packages --\u003e\r\n\r\n**Problem description**\r\n\r\nTermux magic keybindings in general seem to work on my Chromebook, but a few don't.\r\n\r\nThese key-bindings work:\r\n\r\n- Ctl-Alt-V works to paste\r\n- Ctl-Alt-C works to create a new session\r\n- Ctl-Alt-R works to rename a session\r\n- Ctl-Alt-N and Ctl-Alt-P work properly to switch between sessions\r\n- Ctl-Alt-2 - Ctl-Alt-4 work properly for switching to the associated session (I didn't test beyond 4, but I'd guess 5-9 work as well)\r\n- Ctl-Alt-M works to pop up the menu\r\n- Ctl-Alt-+ and Ctl-Alt-- work to adjust the font size\r\n- Ctl-Alt-ΓåÉ and Ctl-Alt-ΓåÆ work to open/close the side menu\r\n- Ctl-Alt-U works to pop up a URL menu\r\n\r\nHowever, the following key-bindings *don't* seem to work properly:\r\n\r\n- Ctl-Alt-1 does not work to switch to session 1 (odd, as the other numbered keys do work)\r\n- Ctl-Alt-Γåæ and Ctl-Alt-Γåô do not work to switch between sessions\r\n- Ctl-Alt-F does not work to toggle full-screen (however the display/windowing on ChromeOS is sufficiently different from Android that I'm not sure I actually expected this to work)\r\n\r\nThese non-working keys seem to simply do nothing.\r\n\r\n\r\n**Steps to reproduce**\r\n\r\n1. Create multiple sessions in Termux on a Chromebook.\r\n2. Try to switch between them using Ctl-Alt-Γåæ and Ctl-Alt-Γåô; notice nothing happens\r\n3. Switch to session 2 (e.g.)\r\n4. Try to switch to session 1 using Ctl-Alt-1; notice nothing happens\r\n\r\n**Expected behavior**\r\n\r\nThese keys should work as described in https://wiki.termux.com/wiki/Hardware_Keyboard\r\n\r\n**Additional information**\r\n\r\n```\r\nPackages CPU architecture:\r\ni686\r\nSubscribed repositories:\r\n# sources.list\r\ndeb https://termux.org/packages/ stable main\r\n# game-repo (sources.list.d/game.list)\r\ndeb https://dl.bintray.com/grimler/game-packages-24 games stable\r\n# science-repo (sources.list.d/science.list)\r\ndeb https://dl.bintray.com/grimler/science-packages-24 science stable\r\nUpdatable packages:\r\nAll packages up to date\r\nAndroid version:\r\n9\r\nKernel build information:\r\nLinux localhost 3.18.0-19837-gcb1d329595aa #1 SMP PREEMPT Tue Nov 19 23:54:08 PST 2019 i686 Android\r\nDevice manufacturer:\r\nGoogle\r\nDevice model:\r\nSamsung Chromebook Pro\r\n\r\n```","comments":2,"created_at":"2019-11-27T00:14:25Z","labels":[],"number":1361,"title":"Some Termux key-bindings don't work on Chromebook (with hardware keyboard)","updated_at":"2021-02-08T19:14:29Z"} +{"author":"Merith-TK","body":"I want to run some services, but I don't want accidentaly close it.\n(aka, no `exit button`)\n\nOr maybe have it so that when termux-wake-lock is enabled, the exit button is hidden?\n\nOr maybe a button to trigger a termux-boot event incase you close things","comments":1,"created_at":"2019-11-22T15:30:49Z","labels":[],"number":1356,"title":"{Idea} is it possible to keep termux boot services open? ","updated_at":"2020-03-09T10:33:38Z"} +{"author":"tualadream","body":"\u003c!-- Important note: Refusing to provide needed information may result in issue closing. --\u003e\r\n\r\n**Problem description**\r\nTermux loaded from Play store to an Acer Chrome Tab 10. This is a Chromebook in tablet form - i.e. tablet running Chrome OS.\r\n\r\n**Steps to reproduce**\r\nTap to launch Termux. Then tap on the Termux screen to activate the keyboard. I can see the keyboard for a split second but it doesn't stay up - it disappears. I'm not able to make the keyboard come up and stay up.\r\n\r\n**Expected behavior**\r\nThe keyboard should load when the screen is tapped so that the user can start inputting commands at the terminal prompt.\r\n\r\n**Additional information**\r\nThere's no terminal output or warning. The keyboard simply fails to load. This is my first time attempting to use Termux in Chrome OS. So the keyboard has never worked for me.\r\n","comments":1,"created_at":"2019-11-10T02:27:27Z","labels":["help wanted","chrome-os"],"number":1343,"title":"Virtual keyboard doesn't load in Chrome Tab 10","updated_at":"2019-11-10T18:20:26Z"} +{"author":"ashafer01","body":"I open URLs much more frequently than I copy them. I'd like to be able to invert the actions on the Select URL menu, so that its tap to open, and long press to copy. ","comments":0,"created_at":"2019-11-06T03:05:51Z","labels":["enhancement"],"number":1338,"title":"Configuration to invert tap and long press actions in Select URL","updated_at":"2019-11-06T07:56:52Z"} +{"author":"532910","body":"It will be cool to set custom brightness when termux window is active and restore it back on inactivity. The problem is that termux with the small font and absolutely black OLED background requires higher brightness level for comfortable use comparing to other applications with big sized elements and bright themes. When I use termux and firefox at night I need to change brightness level every time I switch between these apps manually.\r\n\r\nI'm not sure if this is the right place for this feature request, hope you'll correct me if it's wrong.","comments":3,"created_at":"2019-11-05T03:37:53Z","labels":["enhancement"],"number":2698,"title":"set custom brightness for termux ","updated_at":"2022-04-08T14:09:38Z"} +{"author":"Atlas-Parasite","body":"Hi all, just installed Termux on my chromebook so I can use git. \r\nI have a small problem though, because Termux doesn't seem to take either \" input or ' input. \r\nI press the key on the keyboard for it but Termux does not print it, which makes interacting a bit more tedious than I'd like because I now have to copy the \" or ' character and paste it into Termux.\r\n I know that chrome OS delays the printing of \" or ' (and several other characters) because they are accents for letters, but I cannot find how to either disable this delay or how to get Termux to recognize the input","comments":4,"created_at":"2019-10-30T14:41:53Z","labels":["chrome-os"],"number":1331,"title":"Termux not recognizing \" character and ' character on chromebook os 77","updated_at":"2020-06-26T00:01:32Z"} +{"author":"snogglethorpe","body":"\u003c!-- Important note: Refusing to provide needed information may result in issue closing. If you are having problems with a package in termux then a bug report should be filed in the termux-packages repo: https://github.com/termux/termux-packages --\u003e\r\n\r\n**Problem description**\r\n\r\nI'm using Termux on ChromeOS (with Android support), on a Samsung Chromebook Pro, on the Beta channel (ChromeOS version 78.0.3904.70).\r\n\r\nWhen Termux is in \"full screen mode\" -- no title bar, uses entire screen, as enabled by the dedicated \"full screen\" key on the keyboard -- there's a big chunk of wasted space at the bottom of the Termux window, about 2cm high, which is entirely black.\r\n\r\nThis isn't the \"extra keys\" display; I've disabled that via the side-swipe menu. If I enable that, the row of extra key buttons is shown _above_ the blank chuck at the bottom of the window.\r\n\r\nIncreasing or decreasing the font size via two-finger pinching does not change this; the font size correctly changes, and the terminal redisplays, but the unused black chunk remains at the bottom.\r\n\r\nI've attached a screenshot; this is pretty basic, just notice that at the bottom there's a big black area (this isn't the Emacs echo/message area, which is only a single line high).\r\n\r\nIf I _don't_ use the \"full screen\" mode (so that a title bar is shown at the top of the Termux window), even if I drag the window boundaries so that the window occupies the entire display, the wasted black space goes away, and Termux correctly uses all space down to the bottom of its window. However, in this case there's of course space wasted due to the titlebar at the top of the Termux window.... \u003e\u003c\r\n\r\nI notice that the wasted space is roughly the same as the size of the ChromeOS shelf, so my guess is that Termux is somehow trying to avoid conflicting with the shelf ... however as I have shelf auto-hiding turned on (not sure whether this is the default), the shelf is not displayed most of the time, so Termux really shouldn't be worrying about it.\r\n\r\nThanks!\r\n\r\n![Screenshot 2019-10-27 at 12 23 09](https://user-images.githubusercontent.com/398170/67640035-a787b000-f8b4-11e9-932d-73a95112487e.png)\r\n\r\n\r\n**Steps to reproduce**\r\n\r\n1. Use a ChromeOS system (e.g. a Chromebook) with Android support.\r\n2. Install Termux from the Play Store.\r\n3. Make sure ChromeOS shelf auto-hiding is enabled. From the ChromeOS help text: \"To configure the Shelf to hide itself automatically, right-click or ALT-click on the Shelf. From the menu that appears, click on the Autohide Shelf option.\"\r\n4. Start Termux.\r\n5. Make sure Termux is in \"full screen mode\" (no title bar) by using the dedicated Chromebook key.\r\n6. Do something that allows you to see how much of the terminal window is actually used by Termux (e.g. just type \"termux-info\" to show a bunch of text).\r\n7. Notice that there's a black area about 2cm high at the bottom which is never used.\r\n\r\n\r\n**Expected behavior**\r\n\r\nI expected Termux to use its entire window to display text.\r\n\r\n\r\n**Additional information**\r\nPost output of command `termux-info`.\r\nIf you are rooted or have access to adb then capture a logcat with `logcat -d \"*:W\"`, from a adb or root shell.\r\n\r\nUpdatable packages:\r\napt/stable 1.4.9-19 i686 [upgradable from: 1.4.9-15]\r\nbash/stable 5.0.11 i686 [upgradable from: 5.0.9]\r\nbinutils/stable 2.33.1 i686 [upgradable from: 2.32-5]\r\nca-certificates/stable 20191016 all [upgradable from: 20190515]\r\nclang/stable 9.0.0 i686 [upgradable from: 8.0.1]\r\ncommand-not-found/stable 1.42 i686 [upgradable from: 1.39]\r\ncoreutils/stable 8.31-8 i686 [upgradable from: 8.31-7]\r\ncurl/stable 7.66.0-1 i686 [upgradable from: 7.65.3-6]\r\ndos2unix/stable 7.4.1 i686 [upgradable from: 7.4.0-1]\r\nemacs/stable 26.3-1 i686 [upgradable from: 26.3]\r\nfindutils/stable 4.7.0 i686 [upgradable from: 4.6.0-4]\r\ngdb/stable 8.3.1 i686 [upgradable from: 8.3-4]\r\nglib/stable 2.60.7 i686 [upgradable from: 2.60.6-1]\r\ngnutls/stable 3.6.10 i686 [upgradable from: 3.6.9-1]\r\nlibandroid-support/stable 25-2 i686 [upgradable from: 25-1]\r\nlibcurl/stable 7.66.0-1 i686 [upgradable from: 7.65.3-6]\r\nlibexpat/stable 2.2.9 i686 [upgradable from: 2.2.7-1]\r\nlibffi/stable 3.2.1-5 i686 [upgradable from: 3.2.1-4]\r\nlibgcrypt/stable 1.8.5 i686 [upgradable from: 1.8.4-1]\r\nlibgnutls/stable 3.6.10 i686 [upgradable from: 3.6.9-1]\r\nlibllvm/stable 9.0.0 i686 [upgradable from: 8.0.1]\r\nm4/stable 1.4.18-3 i686 [upgradable from: 1.4.18-1]\r\nncurses/stable 6.1.20190928 i686 [upgradable from: 6.1.20190511-7]\r\nndk-sysroot/stable 20-6 i686 [upgradable from: 20-1]\r\nopenssh/stable 8.1p1 i686 [upgradable from: 8.0p1-4]\r\nopenssl/stable 1.1.1d-1 i686 [upgradable from: 1.1.1c-2]\r\nstrace/stable 5.3 i686 [upgradable from: 5.2]\r\ntermux-tools/stable 0.72 all [upgradable from: 0.69-2]\r\ntexinfo/stable 6.7 i686 [upgradable from: 6.6-1]\r\nSubscribed repositories:\r\nhttps://dl.bintray.com/grimler/science-packages-24 science/stable\r\nhttps://dl.bintray.com/grimler/game-packages-24 games/stable\r\nhttps://dl.bintray.com/termux/termux-packages-24 stable/main\r\nSystem information:\r\nLinux localhost 3.18.0-19747-gd0dcdfafc1b5 #1 SMP PREEMPT Mon Oct 21 01:01:50 PDT 2019 i686 Android\r\nTermux-packages arch:\r\ni686\r\nAndroid version:\r\n9\r\nDevice manufacturer:\r\nGoogle\r\nDevice model:\r\nSamsung Chromebook Pro","comments":8,"created_at":"2019-10-27T19:37:13Z","labels":[],"number":1326,"title":"On ChromeOS, in full-screen mode, with \"shelf\" auto-hiding enabled, Termux has a big chunk of unused space at the bottom of its display","updated_at":"2023-02-15T17:36:42Z"} +{"author":"dattas","body":"\u003c!-- Important note: Refusing to provide needed information may result in issue closing. If you are having problems with a package in termux then a bug report should be filed in the termux-packages repo: https://github.com/termux/termux-packages --\u003e\r\n\r\n**Problem description**\r\nUsing a Pixel device, if you enable gesture navigation (which is the default on the new pixel 4) you can no longer swipe in from the left to get the session drawer. I haven't been able to isolate it but typically you only get the back gesture with some weird gestures sometimes getting the session drawer. When disabling gesture navigation it is very easy to open it.\r\n\r\n**Steps to reproduce**\r\nOn Android 10, enable system gesture navigation then open Termux and try to swipe from the left to open the session drawer, you get the back gesture instead.\r\n\r\n**Expected behavior**\r\nSession drawer should be opened or there should be an option to open it via the long click menu\r\n\r\n**Additional information**\r\n```Updatable packages:\r\nAll packages up to date\r\nSubscribed repositories:\r\nhttps://dl.bintray.com/grimler/science-packages-24 science/stable\r\nhttps://dl.bintray.com/grimler/game-packages-24 games/stable\r\nhttps://termux.org/packages stable/main\r\nSystem information:\r\nLinux localhost 4.14.111-gb7713fd5d6ed-ab5820689 #1 SMP PREEMPT Wed Aug 21 22:50:41 UTC 2019 aarch64 Android\r\nTermux-packages arch:\r\naarch64\r\nAndroid version:\r\n10\r\nDevice manufacturer:\r\nGoogle\r\nDevice model:\r\nPixel 4 XL\r\n```\r\n","comments":43,"created_at":"2019-10-27T01:35:46Z","labels":[],"number":1325,"title":"Gesture navigation makes opening session drawer nearly impossible","updated_at":"2026-05-11T01:25:13Z"} +{"author":"tbodt","body":"**Feature description**\r\nWhen the terminal produces output and the screen reader is on, it should automatically read the output.\r\n\r\n**Reference implementation**\r\nhterm does a pretty good job. I've enabled hterm's automatic reading in iSH (https://ish.app) and gotten a lot of positive feedback from blind users.\r\n","comments":1,"created_at":"2019-10-19T18:55:57Z","labels":["enhancement","help wanted"],"number":1310,"title":"Automatic reading of output with a screenreader","updated_at":"2019-12-31T00:11:01Z"} +{"author":"dagelf","body":"**Multiple Windows in DEX mode**\r\nSeems simple to add - and I will try it soon as I get a chance - unless someone beats me to it.\r\n\r\n[From DEX docs](http://developer.samsung.com/samsung-dex\r\n):\r\n```\r\nQ03 Why doesnΓÇÖt Multi-Window work, even though android:resizeableActivity=\"true\" has been declared in the Manifest?\r\n\r\nYour app might have targeting the wrong targetSDKVersion. Android:resizeableActivity is supported when the targetSDK version is greater than or equal to 24 (Android N). IF targetSDKVesion is under 24, activities are only resizable when the screenOrientation is not set as fixed. Check to make sure you do not have this code in your manifest:\r\n\r\n\u003cactivity\r\nandroid:screenOrientation=\"portrait | landscape\"\u003e\r\n\u003c/activity\u003e\r\n\r\n","comments":12,"created_at":"2019-10-19T06:47:34Z","labels":[],"number":1308,"title":"Samsung Dex support - multiple windows ","updated_at":"2022-10-29T10:07:23Z"} +{"author":"patham9","body":"**Feature description**\r\nWith Termux, Vi supports touch-based up/down vertical scrolling, so somehow Termux maps touch input to the relevant keys. It would be good to be allowed for left/right too. Or is there a way to allow proper left/right scrolling already too? If so, how?\r\n\r\n**Reference implementation**\r\nDoes another app/terminal emulator have this feature?\r\nI don't know.\r\n","comments":4,"created_at":"2019-10-17T21:22:31Z","labels":[],"number":1306,"title":"Horizontal scrolling for vi","updated_at":"2026-04-01T02:50:12Z"} +{"author":"easyaspi314","body":"\u003c!-- Important note: Refusing to provide needed information may result in issue closing. If you are having problems with a package in termux then a bug report should be filed in the termux-packages repo: https://github.com/termux/termux-packages --\u003e\r\n\r\n**Problem description**\r\nLong lines which are overwritten with `'\\r'` are very buggy, causing issues with wrapping.\r\n\r\n**Steps to reproduce**\r\n\r\n1. Compile this C program:\r\n```c\r\n#include \u003cstdio.h\u003e\r\n#include \u003cstdlib.h\u003e\r\n\r\nint main(int argc, char *argv[])\r\n{\r\n if (argc != 2) {\r\n printf(\"usage: %s cols\\n\", argv[0]);\r\n return 1;\r\n }\r\n\r\n int cols = atoi(argv[1]);\r\n if (cols \u003c 3) return 1;\r\n\r\n for (int i = 0; i \u003c 3; i++) {\r\n for (int j = 0; j \u003c 3; j++) {\r\n putchar('0' + i);\r\n putchar(' ');\r\n for (int k = 0; k \u003c cols - 2; k++) {\r\n putchar('A' + (k % 26));\r\n }\r\n putchar('\\r');\r\n }\r\n putchar('\\n');\r\n }\r\n}\r\n```\r\n```\r\n$ cd\r\n$ termux-clipboard-get \u003e cols.c\r\n$ clang cols.c -o cols\r\n```\r\n2. Run the following commands:\r\n```\r\n$ ./cols $(( $COLUMNS ))\r\n$ ./cols $(( $COLUMNS + 1 ))\r\n```\r\n3. Zoom, block copy, etc and more.\r\n\r\n\r\n**Expected behavior**\r\nGiven a 10 column Termux, we should see:\r\n```\r\n$ ./cols 10\r\n0 ABCDEFGH\r\n1 ABCDEFGH\r\n2 ABCDEFGH\r\n$ ./cols 11\r\n0 ABCDEFGH\r\nI\r\n1 ABCDEFGH\r\nI\r\n2 ABCDEFGH\r\nI\r\n```\r\nWhat actually happens:\r\n```\r\n0 ABCDEFGH\r\n0 ABCDEFGH\r\n0 ABCDEFGH\r\nI\r\n1 ABCDEFGH\r\n1 ABCDEFGH\r\n1 ABCDEFGH\r\nI\r\n2 ABCDEFGH\r\n2 ABCDEFGH\r\n2 ABCDEFGH\r\nI\r\n```\r\n\r\nZooming also breaks columns (it staggers), and copying often replaces newlines with excess spaces.\r\n\r\n","comments":0,"created_at":"2019-10-08T01:35:27Z","labels":[],"number":1296,"title":"Long lines with \\r are not handled properly","updated_at":"2019-10-08T01:36:41Z"} +{"author":"rakleed","body":"**Feature description**\r\nPlease make adaptive icons for your application shortcuts. This is useful if IΓÇÖm tired of some form of icon (for example, a circle), and I want to change it (for example, to a drop-shaped one). But since the shortcuts of your application do not support the adaptive icon, it looks very ugly when for most applications the shortcut icons of the application are drop-shaped, and you have left with your form.\r\n\r\n**Reference implementation**\r\nHelpful links: https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive, https://source.android.com/devices/tech/display/adaptive-icons.","comments":5,"created_at":"2019-10-05T19:16:32Z","labels":[],"number":1290,"title":"Adaptive icons in application shortcuts","updated_at":"2025-01-23T11:56:27Z"} +{"author":"qidizi","body":"**Feature description**\r\n1. double -click trigger tab \r\n1. swipe-left trigger left \r\n1. swipe-right trigger right \r\n1. swipe-up trigger up \r\n1. swipe-dow trigger down\r\n1. two finger scroll or single finger drag trigger scroll \r\n\r\n\r\n**Reference implementation**\r\ntermius\r\n","comments":0,"created_at":"2019-09-09T14:44:01Z","labels":[],"number":1243,"title":"double∩╝ìclick trigger tab","updated_at":"2019-09-09T14:44:01Z"} +{"author":"qidizi","body":"**Feature description**\r\nsomething will cost a long time,\r\nsometime i want to find out what it say,\r\nbut i can not .\r\neither press ctrl+c to break working for read,\r\nor wait for work is finish,but may be some output is loss.\r\n\r\n**Reference implementation**\r\nmac osx terminal\r\nwhen you scrollup,autoscroll will stoping,\r\nwhen scrollend it will keeping scrolling.\r\n\r\n","comments":23,"created_at":"2019-09-09T14:30:51Z","labels":[],"number":1242,"title":"Unable to pause autoscrolling","updated_at":"2022-03-19T07:08:14Z"} +{"author":"jpclouduk","body":"**Feature description**\r\nCurrently there is limited key mapping options in termux.properties such as mapping the home button to ESC. Is it possible to also provide mapping of some special characters such as the \"broken pipe\" key to the \"pipe\" key? Something like;\r\npipe-key=['┬ª']\r\nNo idea why all the bluetooth keyboards don't have a pipe key and the broken pipe character is rarely used in programming unlike \"pipe\".\r\n\r\n**Reference implementation**\r\nNo other emulator seems to have this feature or any key mapping options. Here is a typical BT keyboard, note the characters available and the \"broken pipe\".\r\n[https://images-na.ssl-images-amazon.com/images/I/61n4an%2B5BOL._SL1000_.jpg](url)","comments":5,"created_at":"2019-08-12T06:58:25Z","labels":["enhancement"],"number":1210,"title":"Hardware Keyboard Mapping","updated_at":"2025-02-20T21:25:20Z"} +{"author":"jmdugan","body":"**Feature description**\r\nwhen the read of 'extra-keys' setting fails[ie, bad JavaScript format], have the default keybar appear. currently the app shows a bar with nothing: a blank black bar with no ctrl or fntn keys. \r\n\r\nif the user uses emacs to edit the settings file, this results in a terminal that we cannot do anything in if emacs is in the foreground, [ctrl is reqired at the least with emacs] thus effectively locking the terminal. \r\n\r\na hacky workaround is to then open another terminal and 'kill -9' the running emacs, and then mv or delete the faulty properties file, ... or use a different editor that doers not require ctrl and esc to work.\r\n\r\nloading a blank bar is worse than the default key bar, and the default is easy to load instead, just do the same thing as when the settings file is not there.\r\n\r\n**Reference implementation**\r\nnone, n/a\r\n","comments":2,"created_at":"2019-08-09T17:10:17Z","labels":[],"number":1208,"title":"default to the default key line when the property read for extra-keys fails","updated_at":"2020-04-24T02:01:51Z"} +{"author":"Mhowser","body":"**Problem description**\r\nThe text selection highlighting blocks pure white characters.\r\n\r\n**Steps to reproduce**\r\nLong tap to enter text selection mode and highlight some white text.\r\n\r\n**Expected behavior**\r\nThe pure white text should be inverted while highlighted\r\n\r\n**Additional information**\r\nVideo: https://gfycat.com/inferiorvelvetyagama\r\n","comments":1,"created_at":"2019-08-04T21:18:09Z","labels":[],"number":1199,"title":"Text selection does not invert pure white characters","updated_at":"2019-08-10T06:07:05Z"} +{"author":"arndtc","body":"**Feature description**\r\nIt would be useful to have the ability to turn off vibration when using the extra keys.\r\n\r\n**Reference implementation**\r\nCurrently I have haptic feedback turned on my keyboard, but I want it for other things. The problem is that this causes the Extra Keys to vibrate when pressed. It would be useful if we could turn off the haptic feedback vibration on just the extra keys.\r\n","comments":2,"created_at":"2019-07-21T22:24:51Z","labels":[],"number":1183,"title":"Turn off vibrate when using Extra Keys","updated_at":"2020-01-03T00:56:17Z"} +{"author":"LordCorvin","body":"For some reason my fingerprint sensor is counted as a swung dash keystroke. \"~\"\r\nAs it's located on the side, it's easy to trigger it while typing in Termux\r\n\r\n\r\n$ termux-info\r\nUpdatable packages:\r\ndpkg/stable 1.19.7 aarch64 [upgradable from: 1.19.6]\r\ngpgv/stable 2.2.16 aarch64 [upgradable from: 2.2.15-3]\r\nlibcurl/stable 7.65.1 aarch64 [upgradable from: 7.65.0]\r\nlibiconv/stable 1.16-1 aarch64 [upgradable from: 1.16]\r\nlibnghttp2/stable 1.39.1 aarch64 [upgradable from: 1.38.0]\r\nopenssl/stable 1.1.1c aarch64 [upgradable from: 1.1.1b-3]\r\nvim/stable 8.1.1500 aarch64 [upgradable from: 8.1.1450]\r\nvim-runtime/stable 8.1.1500 all [upgradable from: 8.1.1450]\r\nSubscribed repositories:\r\nhttps://dl.bintray.com/grimler/science-packages-24 science/stable\r\nhttps://dl.bintray.com/grimler/termux-root-packages-24 root/stable\r\nhttps://dl.bintray.com/grimler/game-packages-24 games/stable\r\nhttps://dl.bintray.com/termux/termux-packages-24 stable/main\r\nSystem information:\r\nLinux localhost 4.4.95 #9 SMP PREEMPT Wed Mar 20 18:03:34 CST 2019 aarch64 Android\r\nTermux-packages arch:\r\naarch64\r\nAndroid version:\r\n8.1.0\r\nDevice manufacturer:\r\nA-gold\r\nDevice model:\r\nBV9500Pro\r\n$\r\n[logcat_06-15-2019_22-54-39.txt](https://github.com/termux/termux-app/files/3293867/logcat_06-15-2019_22-54-39.txt)\r\n","comments":0,"created_at":"2019-06-16T05:48:13Z","labels":[],"number":1162,"title":"Fingerprint reader proceseses as swung dash keystroke ~","updated_at":"2019-06-16T06:01:33Z"} +{"author":"RobertGoulding","body":"\u003c!-- Important note: Refusing to provide needed information may result in issue closing. --\u003e\r\n\r\n**Problem description**\r\nWhen I type into a fresh install of Termux on my Chromebook (Lenovo C330), it registers one keystroke behind. That is, if I type \"p\" nothing happens; I then type \"k\" and the \"p\" appears, \"g\" and the \"k\" appears and so on.\r\n\r\n**Steps to reproduce**\r\nOpen Termux, start typing literally anything.\r\n\r\n**Expected behavior**\r\nCall me old-fashioned, but when I type a key, I want that letter to appear on the screen.\r\n\r\n**Additional information**\r\nPost output of command `termux-info`.:\r\n\r\nUnfortunately I can't do that, since cut and paste doesn't work either on the touchscreen; it also seems to register one touch \"late.\"\r\n","comments":0,"created_at":"2019-06-08T03:34:18Z","labels":[],"number":1157,"title":"Chromebook: single keystroke lag","updated_at":"2019-06-08T12:12:59Z"} +{"author":"ghost","body":"Feature request: set the terminal size in rows X cols (exactly, as opposed to pinch-zoom) via a key in ~/.termux/termux.properties ","comments":1,"created_at":"2019-05-31T05:15:16Z","labels":[],"number":1148,"title":"Set term size via termux.properties","updated_at":"2021-02-17T22:35:39Z"} +{"author":"maxigaz","body":"**Feature description**\r\nI use the python program called termdown (which can be installed via `pip install termdown`) as a timer by letting it run in a session while I'm working in another one.\r\n\r\nThe problem is that as soon as I switch to another session, a heads-up notification keeps displaying the current status of the timer. This can make work quite difficult because it covers some of the screen elements and distracts me by constantly showing the currently remaining time.\r\n\r\nHere's an example screenshot when `termdown 10m` is running in a background session:\r\n\r\n![Screenshot_20190528-111316_termux](https://user-images.githubusercontent.com/10419911/58554755-1a163600-8218-11e9-8233-c6dd51e585ff.png)\r\n\r\nIs it possible to make this heads-up notification optional or configurable, at least in this case?\r\n\r\n**Reference implementation**\r\nKonsole and Yakuake (together with KDE Plasma) normally show a notification only when termdown has ended. (This behaviour is fully configurable under NotificationsΓǪ ΓåÆ Activity detected.) I think if Termux did the same, it would be much more convenient.\r\n","comments":3,"created_at":"2019-05-29T11:50:00Z","labels":[],"number":1147,"title":"Option to disable/customise heads-up notification for background sessions","updated_at":"2026-03-16T16:39:37Z"} +{"author":"axgfn","body":"**Feature description**\r\nI was looking to possibly add my [parchment](https://github.com/ajgrf/parchment) theme to Termux, but it's unclear to me whether it's possible to suppress using bright colors for bold text. Without this feature I would frequently run into illegible text using my theme.","comments":0,"created_at":"2019-04-22T20:34:35Z","labels":["enhancement"],"number":1112,"title":"Use same color for bold text","updated_at":"2026-05-30T01:47:14Z"} +{"author":"j3rrykh4n","body":"Hello termux,\r\nRecently i used physical keyboard in my phone. I have faced a trouble that CTRL esc not working on termux.. Can you fix it!\r\nIt will great thing if you can\r\nThanks buddy ","comments":2,"created_at":"2019-04-09T17:20:02Z","labels":[],"number":1090,"title":"Physical keyboard: buttons CTRL, ESC, SHIFT are not working ","updated_at":"2019-11-25T03:29:15Z"} +{"author":"FlyingWombat","body":"I'm a little surprised I haven't found anything regarding this, so please point it out if I missed it. \r\nAlso, I know very little about android development, so please tell me if there is a reason this isn't feasible. \r\nI've read about \"Text Input View\" mentioned on this [wiki page](https://wiki.termux.com/wiki/Touch_Keyboard), but it's not as useful for the shell as it is for text editors.\r\n\r\nAs the title says, I think a great UX improvement would be autocomplete/suggestions/autocorrect when entering commands in the shell with the virtual keyboard.\r\n\r\nI'll admit, I don't really know how this would be implemented. \r\nSince most shells (bash, zsh, fish, etc.) already have fairly advanced completion sources, one idea would be to leverage these sources -- along with info collected from shell history -- and feed it to the virtual keyboard's completion engine. This would, of course, require Android's virtual keyboard to have a standard protocol for modifying the completion dictionary.\r\n\r\nThe benefit of this would be much more natural input to the shell; as we are all used to using the keyboard's suggestion bar to help us type; as opposed to hitting the tab button a bunch of times.","comments":2,"created_at":"2019-04-08T08:27:39Z","labels":[],"number":1089,"title":"[Feature Request] Keyboard autocomplete suggestions","updated_at":"2022-07-17T02:29:22Z"} +{"author":"TheSpeedX","body":"**Feature description**\r\nWhen We Close The Termux App From Notification or exit all session The termux-media-player is still playing the song I would Like if when we close Termux All Its API Packages like termux-media-player are also closed or killed...\r\n","comments":2,"created_at":"2019-04-04T04:41:24Z","labels":[],"number":1085,"title":"Want To Close Termux-API When We Exit Termux","updated_at":"2019-04-22T15:26:00Z"} +{"author":"isrgish","body":"I would like to be able to add to the amount of scroll back available to termux. This will help me to be able to see more of the output when there is a lot of output. now my only option is to redirect the output to a file. This is a bit clumsy.\r\n\r\nThis is an option in CommandBot\r\n\r\nThank You,","comments":2,"created_at":"2019-02-27T01:01:13Z","labels":[],"number":1045,"title":"Increase scrollback","updated_at":"2019-03-01T03:40:46Z"} +{"author":"532910","body":"![](https://user-images.githubusercontent.com/14617699/43711943-18f78370-997d-11e8-9272-b93f83134d75.jpg)\r\n","comments":2,"created_at":"2019-01-31T22:18:30Z","labels":[],"number":1008,"title":"Adaptive icon looks bad on the dark background","updated_at":"2019-03-06T07:02:46Z"} +{"author":"Auxilus","body":"**Problem description**\r\nrunning `termux-reload-settings` after changing two row extra-keys to one row doesn't automatically scale down the extra key view, instead it shows single row with double height.\r\n\r\n**Steps to reproduce**\r\n1. 2 row extra-keys\r\n2. delete one row\r\n3. run termux-reload-settings\r\n\r\n**Expected behavior**\r\nextra key view height should be kept same and not doubled \r\n\r\n**Additional information**\r\nLinux localhost 3.10.84-perf+ #1 SMP PREEMPT Tue Oct 24 01:07:25 CST 2017 aarch64 Android\r\nTermux-packages arch:\r\naarch64\r\nAndroid version:\r\n6.0.1\r\n\r\n![screenshot_20190128-011159](https://user-images.githubusercontent.com/23075789/51805951-c01d5800-2299-11e9-841d-8fd5a20f1687.png)\r\n","comments":4,"created_at":"2019-01-27T19:42:25Z","labels":["bug report"],"number":1003,"title":"Extra key view not rescaling after termux-reload-settings ","updated_at":"2019-02-20T15:12:59Z"} +{"author":"n0ego","body":"\u003c!-- Important note: Refusing to provide needed information may result in issue closing. If you are having problems with a package in termux then a bug report should be filed in the termux-packages repo: https://github.com/termux/termux-packages --\u003e\r\n\r\n**Problem description**\r\nCannot share files with a specific app.\r\n\r\n**Steps to reproduce**\r\nI've got a folder of .org files in ~/my-folder and trying to share it with Orgzly by running `termux-open --chooser my-folder/`\r\n\r\nThen open Orgzly =\u003e Setttings =\u003e Sync =\u003e Repositories =\u003e Directory =\u003e Browse to Android/data/com.termux/files.\r\n\r\n**Expected behavior**\r\nThere should be data from ~/my-folder.\r\n\r\n**Additional information**\r\nIs it possible to share data with specific app only while disable sharing with other apps?\r\n","comments":1,"created_at":"2019-01-25T13:20:13Z","labels":[],"number":993,"title":"Cannot share files with specific app","updated_at":"2019-04-28T11:07:36Z"} +{"author":"DarthZedd","body":"Is it possible to add a feature to change default selection behavior?\r\n\r\nEx.:\r\n\r\n1) Default Android behavior (single tap and hold to select current word)\r\n2) Double tap to select current word (no holding)\r\n\r\nI am using Termux on Samsung Note 8 with Dex station with physical keyboard and mouse and this feature is the only thing that lacks to emulate full desktop behavior for me. ","comments":1,"created_at":"2019-01-24T14:03:44Z","labels":["enhancement"],"number":992,"title":"[Feature Request] Double tap word selection.","updated_at":"2021-09-01T01:31:16Z"} +{"author":"sourcyed","body":"I installed Python, OpenCV and Jupyter Notebook on Termux. Now I can do image processing on my phone, show the image on Jupyter Notebook with matplotlib and save the image. But I still can't play a live video or can't get my camera's live feed. Is there any way to show realtime images/videos with Termux?","comments":16,"created_at":"2019-01-13T23:49:22Z","labels":["enhancement","question"],"number":981,"title":"Showing realtime images/videos with Termux?","updated_at":"2022-01-28T09:25:18Z"} +{"author":"bartekpacia","body":"## Overview\r\nHi!\r\nToday I've installed this awesome app but also found a small issue. I'm running Android Pie Galaxy S9 and the text on the notification is very dark. IMHO it should be white.\r\n\r\n## Device info\r\nGalaxy S9\r\nAndroid 9.0 Pie (with OneUI)\r\nDark Theme enabled\r\n\r\n## Screenshot\r\n![20190106_233521](https://user-images.githubusercontent.com/40357511/50742481-291a2e80-120c-11e9-98bb-366b4945130d.jpg)\r\n","comments":3,"created_at":"2019-01-06T22:38:00Z","labels":[],"number":974,"title":"Notification text is too dark","updated_at":"2019-01-08T16:22:53Z"} +{"author":"brubakerjeff","body":"Hi,\r\n\r\nWe are running Termux on Android Things 1.07. We are successfully able to auto launch (PR coming soon to simplify actions inside of Manifest as there are currently) Termux, however upon what appears to be first launch, stops responding. We captured the logcat. Any insight or pointers would be appreciated as we start deep diving.\r\n\r\n\r\n--------- beginning of crash\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: FATAL EXCEPTION: main\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: Process: com.termux, PID: 876\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.termux.terminal.f.f()' on a null object reference\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat com.termux.view.c.a(SourceFile:59)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat com.termux.view.TerminalView.onDraw(SourceFile:768)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.View.draw(View.java:19192)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.View.draw(View.java:19062)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.drawChild(ViewGroup.java:4236)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.support.v4.widget.DrawerLayout.drawChild(SourceFile:1426)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.View.draw(View.java:19060)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.drawChild(ViewGroup.java:4236)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.View.draw(View.java:19060)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.drawChild(ViewGroup.java:4236)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.View.draw(View.java:19060)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.drawChild(ViewGroup.java:4236)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.View.draw(View.java:19060)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.drawChild(ViewGroup.java:4236)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.View.draw(View.java:19195)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat com.android.internal.policy.DecorView.draw(DecorView.java:788)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:3105)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewRootImpl.draw(ViewRootImpl.java:3019)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2806)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2359)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.Choreographer.doCallbacks(Choreographer.java:723)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.Choreographer.doFrame(Choreographer.java:658)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.os.Handler.handleCallback(Handler.java:790)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.os.Handler.dispatchMessage(Handler.java:99)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.os.Looper.loop(Looper.java:164)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat android.app.ActivityThread.main(ActivityThread.java:6494)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat java.lang.reflect.Method.invoke(Native Method)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)\r\n12-25 17:41:04.779 876 876 E AndroidRuntime: \tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)\r\n12-25 17:41:15.878 1130 1150 V NuMediaExtractor: setDataSource fd=32 (/oem/app/com.termux/app.apk), offset=189768, length=5090\r\n12-25 17:41:16.066 1130 1150 V NuMediaExtractor: track of type 'audio/vorbis' does not publish bitrate\r\n12-25 17:41:16.947 1130 1130 D vndksupport: Loading /vendor/lib/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace.\r\n12-25 17:41:17.340 1130 1130 D OpenGLRenderer: HWUI GL Pipeline\r\n12-25 17:41:20.695 1339 1339 I termux : No files to execute at boot\r\n","comments":0,"created_at":"2018-12-25T17:49:05Z","labels":[],"number":961,"title":"Termux Android Things Crash First Launch","updated_at":"2018-12-31T01:46:15Z"} +{"author":"trygveaa","body":"If I ssh to a machine, and then press Exit in the notification, the ssh process on the server keeps running. This is especially visible when exiting an attached tmux session, since that session will stay attached which causes the viewport of other sessions to be reduced to the size of the phone.\r\n\r\nNote that this happens on my new Pixel 3, but did not happen on my previous Nexus 4. They both have version 0.65, so I'm not sure what's the difference.","comments":34,"created_at":"2018-11-29T23:19:19Z","labels":["bug report"],"number":935,"title":"Termux doesn't terminate ssh connection on exit","updated_at":"2022-09-28T13:46:49Z"} +{"author":"ghost","body":"Without having a menu button, I can't find a way to close a session in termux. There's \"Exit\" in the notification which terminates all sessions, and of course I can type \"exit\" but that only works if there's nothing blocking running in the terminal - but I can't find any way to close a *single* session while keeping the others open.\r\n\r\nThe most obvious way would be to add a close button to each entry of the sessions sidebar, but there doesn't appear to be any.","comments":22,"created_at":"2018-11-23T14:02:08Z","labels":[],"number":931,"title":"With no menu button, I can't find a way to close a session","updated_at":"2026-01-18T16:33:01Z"} +{"author":"rezmir99","body":"Please add support for RTL languages like Persian, Arabic to this great app. This feature is required for us to be able to use apps like Emacs, Nano.\r\nWhen I write Persian in Termux, characters are shown separately and with LTR direction.","comments":5,"created_at":"2018-11-15T16:21:43Z","labels":["enhancement"],"number":920,"title":"Add right-to-left languages support","updated_at":"2022-09-18T14:50:15Z"} +{"author":"brubakerjeff","body":"Hi,\r\n\r\nI installed Termux 65 (from the F-Droid Distribution System) https://f-droid.org/repository/browse/?fdid=com.termux\r\n\r\nI'm running Android Things 1.05 on Android 8.1 using the Raspberry 7\" screen. When I run Termux I'm getting a form of aliasing like in the screenshot below\r\n\r\n![screenshot from 2018-11-08 22-59-02](https://user-images.githubusercontent.com/6541166/48242731-98110d80-e3aa-11e8-81a5-af5143fff763.png)\r\n\r\n![20181109_223806](https://user-images.githubusercontent.com/6541166/48297213-f6082880-e470-11e8-93b0-c07720ffbcf5.jpg)\r\n\r\nAny suggestions for things to try? The screen works for other Android functions when not in termux. I have a usb keyboard connected.\r\n\r\nThanks,\r\nJeff\r\n\r\n\r\n","comments":8,"created_at":"2018-11-09T04:04:58Z","labels":[],"number":912,"title":"Termux on rasperrby pi 3 with 7\" screen aliasing","updated_at":"2018-11-15T02:43:27Z"} +{"author":"robertvandeneynde","body":"On macOS X, the `pbcopy` and `pbpaste` command can be used to manipulate the clipboard.\r\n\r\nOn Desktop linux that's the `xclip -selection` command, so I made `alias pbcopy='xclip -selection clipboard'` and `alias pbpaste='xclip -selection clipboard -o'` for the command to be portable with macOS X.\r\n\r\nThat's very useful for a lot of text replacement applications :\r\n\r\n```bash\r\npbpaste \u003e file.txt # into a file\r\npbcopy file.txt # from a file\r\ncat file.txt | pbcopy # from a file, using a pipe\r\npbpaste | sed 's/ /-/g' | pbcopy # direct replacement of clipboard\r\npbpaste | python 'import sys\r\nsys.stdout.write(sys.stdin.read().replace(\" \", \"-\"))\r\n' | pbcopy # use python for more complicated Operations !\r\npbpaste | python replace_stuff.py | pbcopy # why not from a python file ?\r\n```\r\n\r\nI have no clue how clipboard work in android but I think that's manageable !\r\n","comments":20,"created_at":"2018-11-01T15:36:52Z","labels":[],"number":899,"title":"termux-clipboard is not so easy to install (in order to support copy paste via pbcopy, pbpaste commands)","updated_at":"2025-05-31T20:22:32Z"} +{"author":"mklein994","body":"It would be great if support could be added for styled underlines.\r\n\r\nHere's a brief overview:\r\n- `\\e[4:1m` straight underline\r\n- `\\e[4:2m` double underline\r\n- `\\e[4:3m` curly underline\r\n\r\n**Note**: the colon is strictly required, as something like `\\e[4;1mHello\\e[0m` would print a bold, underlined \"Hello\" to the console. This is discussed in the [neovim issue](https://github.com/neovim/neovim/issues/7479#issuecomment-348783792).\r\n\r\nSupport for this was added to neovim in https://github.com/neovim/neovim/issues/7479, and in tmux (so far without color support) in https://github.com/tmux/tmux/issues/1492. There's an idea floating around that the underline can be given a color using `58:2:\u003cr\u003e:\u003cg\u003e:\u003cb\u003e` or `58:5:\u003cx11 color\u003e`, similar to how it's done for true colors. From what I've read, `CSI 59` resets the underline color. (I'm not a terminal developer, so please forgive me if I'm butchering these terms).\r\n\r\nHere's an example:\r\n```bash\r\necho -e '\\e[4:3;58:2:255:100:0mHello\\e[0m'\r\n```\r\n![undercurl](https://user-images.githubusercontent.com/3069239/46876270-836d4400-ce03-11e8-9a12-1ad5bb9a7f9b.PNG)\r\nThis produces \"Hello\", with an orange wavy underline. I've tested it and it works on both [mintty](https://github.com/mintty/mintty/wiki/Tips#text-attributes-and-rendering) and [kitty](https://sw.kovidgoyal.net/kitty/protocol-extensions.html#colored-and-styled-underlines).","comments":2,"created_at":"2018-10-12T15:11:32Z","labels":[],"number":870,"title":"Support styled underlines","updated_at":"2022-12-19T15:03:17Z"} +{"author":"ghost","body":"I usually don't use an american keyboard layout, and I've looked around on some common ones, but I can't write /. I've tried most special keys in most ways. Is there anyone that knows about the layout used here?","comments":5,"created_at":"2018-09-30T09:13:26Z","labels":["chrome-os"],"number":1133,"title":"I can't write /","updated_at":"2019-08-04T14:57:33Z"} +{"author":"elogada","body":"Just a suggestion, maybe in the next update there could be a way to scroll sideways by swiping after disabling terminal autowrap. I saw how the other terminal emulators had extra buttons for swiping, but they lose their terminal feel. I think swiping would be better.","comments":6,"created_at":"2018-09-09T08:23:58Z","labels":[],"number":826,"title":"Scrolling sideways when autowrap is disabled","updated_at":"2021-12-22T21:28:44Z"} +{"author":"fornwall","body":"_From @feklee on July 17, 2018 12:57_\n\n*Is it possible to get a visible bell?*\r\n\r\nIn Bash, I tried to no avail:\r\n\r\n set bell-style visible\r\n set prefer-visible-bell\r\n\r\nIt still vibrates (`bell-character=vibrate` in `termux.properties`). I'd like to have the terminal flash, e.g. invert, on bell.\n\n_Copied from original issue: termux/termux-packages#2664_","comments":2,"created_at":"2018-08-27T13:28:22Z","labels":[],"number":820,"title":"Visible bell?","updated_at":"2018-08-27T13:28:23Z"} +{"author":"hyperpallium","body":"There are javadocs comments in the code, so it seems a pity not to have javadocs...\r\nAnd currently, there doesn't seem a way to generate them yourself from within termux, because the `javadoc` tool relies on the jdk, so you'd need a PC.","comments":0,"created_at":"2018-07-29T04:41:29Z","labels":["question"],"number":787,"title":"Are javadocs for termux source online anywhere?","updated_at":"2019-01-13T23:26:59Z"} +{"author":"fornwall","body":"_From @Jim-Zenn on July 10, 2018 4:50_\n\nI am using PragmataPro as the termux font and noticed that the line height is too low. It would be nice if line-height is adjustable.\r\n![photo_2018-07-09_21-50-26](https://user-images.githubusercontent.com/7279131/42489822-1bb81136-83c2-11e8-8590-0a5646d074ed.jpg)\r\n\n\n_Copied from original issue: termux/termux-packages#2639_","comments":0,"created_at":"2018-07-11T20:24:33Z","labels":[],"number":772,"title":"Allowing to adjust line-height of termux","updated_at":"2021-10-18T14:51:21Z"} +{"author":"rajeevn1","body":"When I choose another file editor I am able to modify the file being opened but termux created a copy in downloads and invokes the editor on the copy.\r\n\r\nCan termux to used to modify the source file like other android text editors.","comments":11,"created_at":"2018-07-08T00:57:34Z","labels":[],"number":766,"title":"termux-file-editor does not modify original file but a copy in downloads","updated_at":"2024-12-16T00:30:52Z"} +{"author":"hyperpallium","body":"This is really useful in `vim`, when you turn off line wrapping (`:set nowrap`) to get more lines per screen (or, use a larger font), and you can easily scroll to see the few lines that extend off the right of the screen.\r\n\r\ntermux already converts up/down swipes into mouse wheel events, so you can scroll. In `vim`, these can be mapped like:\r\n\r\n```\r\n map \u003cScrollWheelUp\u003e \u003cC-Y\u003e\r\n map \u003cScrollWheelDown\u003e \u003cC-E\u003e\r\n```\r\n\r\nBut `vim` can also accept horizontal mouse wheel events:\r\n\r\n```\r\n map \u003cScrollWheelLeft\u003e z\u003cLeft\u003e\r\n map \u003cScrollWheelRight\u003e z\u003cRight\u003e\r\n```\r\n\r\nBut termux doesn't seem to be generating them.\r\n\r\nThis seems like it would be simple to add, and it wouldn't interfere with the swipe from the left to bring up the window list and keyboard/new session, because that starts from the edge of the display.\r\n","comments":11,"created_at":"2018-07-01T06:25:22Z","labels":[],"number":751,"title":"Request: horizontal mouse wheel (from left/right touch swipes) ","updated_at":"2023-04-21T20:07:28Z"} +{"author":"tomtom","body":"Since one of the latest updates, the software keyboard (Android 8.1.) displays a row for numbers. The extra symbols are now displayed in two rows. In sum, three rows are used. I think one scrollable row for extra symbols would be preferable on small screens - especially in landscape mode.\r\n\r\nRegards\r\nTom","comments":0,"created_at":"2018-06-25T04:33:27Z","labels":[],"number":734,"title":"Software keyboard+ extra rows takes too much screen estate","updated_at":"2018-06-25T04:33:27Z"} +{"author":"robolange","body":"I use Termux (latest available in Play Store) on ChromeOS (66.0.3359.203 on an Asus C301S) and run a number of console programs that can accept terminal mouse input (emacs, weechat, tmux). When a console program accepts mouse input, Termux passes the mouse events through and it works nicely, but at the same time, it disables the long-press to open the selection menu. Thus, my choice is to use terminal mouse events XOR to be able to copy text from Termux to ChromeOS. (Note: paste from ChromeOS to Termux is unaffected, b/c the hardware keyboard Ctrl+Alt+V allows it to work.)\r\n\r\nI have currently handled this by explicitly disabling terminal mouse events in my Termux dotfiles. However, this is suboptimal because it represents a (currently the only) difference between my regular Linux dotfiles and Termux dotfiles, and using the mouse in console programs is occasionally useful. If I can get a way of using terminal mouse events AND copying text from Termux to ChromeOS, then I can use a single set of dotfiles for both environments.\r\n\r\nI'm thinking of two alternative ways to solve this:\r\n\r\n1. A new hardware keyboard shortcut to activate the selection menu. This would probably be the easiest, but I'd rather avoid making more Termux shortcuts that might conflict with peoples' existing keybindings.\r\n\r\n2. Provide a way to switch from the regular popup menu (activated by keyboard shortcut Ctrl+Alt+M) to the selection menu. You can currently switch from the selection menu to the regular popup menu by clicking the \"More...\" button; perhaps there could be a \"Selection...\" button to switch from the regular popup menu to the selection menu?\r\n\r\nAnother alternative that I'm guessing would be more complex to implement:\r\n\r\n3. Gnome Terminal has a similar issue that terminal apps accepting mouse events disables its built-in mouse actions. With Gnome Terminal, when you hold the Shift key, mouse events are handled directly by Gnome Terminal and not passed through to the app running in the terminal.\r\n\r\nAny thoughts or ideas?","comments":1,"created_at":"2018-06-18T18:05:50Z","labels":[],"number":725,"title":"chromeos: better support for using terminal mouse events AND selection/copy?","updated_at":"2018-08-08T19:35:57Z"} +{"author":"ghost","body":"Firstly, thanks for this amazing project. I use it all the time.\r\n\r\nOne quirk I noticed... while Ctl-V (volume down - V) works beautifully for page-down, alt-v (for page up) does not and instead loads volume control.\r\nWhile I understand need to access volume, one can easily navigate to diff android app to adjust volume, but having the volume up key more consistent with alt or meta key would I think be most important. \r\n\r\nThis is more than just with Alt-V (paging up in emacs / less / etc), but with Alt-D as well (delete following word)\r\nHere's a cheat-sheet with bindings: http://readline.kablamo.org/emacs.html\r\n\r\nI'm happy to try to submit a PR, but since this would change existing behavior, wanted to file an issue.\r\n\r\nTL;DR I respectfully suggest that Volume Up key acts more consistently as Alt (or meta key) for better readline support\r\n\r\nThanks again for all ypur work on this excellent terminal emulator!","comments":6,"created_at":"2018-06-15T05:51:31Z","labels":[],"number":723,"title":"Alt-V volume keybinding interferes with readline","updated_at":"2018-07-02T18:19:42Z"} +{"author":"goodevilgenius","body":"It would be useful if swipes could be mapped to custom keystrokes or actions. E.g., a swipe up or down could be PgUp or PgDown. A swipe to the right or left could be mapped to \"C-a n\" or \"C-a p\" (as JuiceSSH does) for those who use `screen` to switch from one screen to another, or to switch from one session to another.\r\n\r\nIdeally, these should be customizable so that the user can choose the most appropriate action.","comments":1,"created_at":"2018-06-13T11:43:51Z","labels":[],"number":720,"title":"Allow swipes to perform custom actions","updated_at":"2019-03-11T07:09:17Z"} +{"author":"mklein994","body":"Currently, italic fonts are achieved by making the current font oblique. It would be great if it would use the italic font instead.\r\n\r\nHere's how I envision it could work: Similar to using a custom font with `~/.termux/font.ttf`, put an italic font in a file called `~/.termux/font-italic.ttf`. Then run this:\r\n```bash console\r\n$ termux-reload-settings\r\n$ echo -e '\\e[3m light fixture \\e[0m' # characters that look different in italics\r\n```\r\nand it would print this:\r\n_` light fixture `_\r\n\r\n---\r\n### Examples with Source Code Pro\r\n#### Regular:\r\n![screenshot_20180610-172126](https://user-images.githubusercontent.com/3069239/41207046-1009ad7c-6cd4-11e8-9139-3d61c0c0c5e7.png)\r\n\r\n#### Italic:\r\n![screenshot_20180610-173553](https://user-images.githubusercontent.com/3069239/41207080-03d8f7f0-6cd5-11e8-9048-5638e45fd6a3.png)\r\n","comments":11,"created_at":"2018-06-10T22:44:19Z","labels":["enhancement"],"number":711,"title":"True italic font support","updated_at":"2025-10-11T14:34:50Z"} +{"author":"fat-tire","body":"So I modded the [Termux-Styling](https://github.com/termux/termux-styling) app to support android's new [downloadable font](https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts) feature, but I ran into two issues that need resolving:\r\n\r\n* Downloadable fonts requires a valid font provider. The most popular one is Google Play, but that means that Google Play is required to be installed to get access to them. No big deal, can fallback to the current bundled fonts if it's not installed.\r\n\r\n* The thing is though, when you request one of the downloadable fonts, you're handed a [TypeFace](https://developer.android.com/reference/android/graphics/Typeface) object, NOT a .ttf file, which is what the Styling app currently needs to save for the Termux app to use. You can easily [go from a font file to a TypeFace object](https://developer.android.com/reference/android/graphics/Typeface.html#createFromFile(java.io.File)), but not vice versa. So while I can currently get the Typeface in the styling app, there's not much I can do with it.\r\n\r\nThere is another option, which is to use Google's font API to get the actual URI to the .ttf file for the font, and then use the Termux Styling app to download that file and copy it into the right place. This wouldn't require modifying anything in Termux app, but it would require entering a ([freely available](https://developers.google.com/fonts/docs/developer_api#APIKey)) API key to be able to access that and that might be too annoying to add this. Might also as a FOURTH option make a list of all the .ttf paths but that may change in the future.\r\n\r\nThe question-- would it make more sense to just add the downloadable font support to the termux app itself? It would barely add any size to the app footprint (in fact could make it smaller if you're not loading all those unused fonts in Styling) and fonts are cached by Google Play and reused between apps. Downside would be that (1) this doesn't affect color stuff, (2) it does have the Google Play dependency and so wouldn't add much for FDroid users, and (3) I am unclear as to whether then you move the color support into termux app or keep the styling or what.\r\n\r\nJust throwing it out there if anyone wants to offer any thoughts or opinions.","comments":2,"created_at":"2018-05-21T21:25:57Z","labels":[],"number":689,"title":"Add hundreds of downloadable fonts to termux (discussion)","updated_at":"2018-06-10T12:58:24Z"} +{"author":"konijn","body":"Greetings,\r\n\r\nit seems according to\r\nhttp://www.unicode.org/Public/6.1.0/ucd/StandardizedVariants.html\r\nthat a number of unicode characters have 2 variations (text style and emoji style).\r\n\r\nAnd Termux renders (at least for the suit characters ΓÖá ΓÖÑ ΓÖª ΓÖú) in emoji style which is wrong for a terminal, especially when those characters appears in a curses app. The emoji style will actually override the color assigned by the curses app.\r\n\r\nTo reproduce, just copy paste the following into the terminal: ΓÖá ΓÖÑ ΓÖª ΓÖú\r\nThis does not happen in the Cygwin Shell or the Tera Terminal.\r\n ","comments":0,"created_at":"2018-05-09T18:59:15Z","labels":[],"number":682,"title":"Console renders standard variants as emoji's","updated_at":"2018-05-09T19:02:30Z"} +{"author":"andDevW","body":"Any chance you could add a link to the Touch Keyboard commands page from the popup menu that's displayed onLongClick in the main terminal? The multi-key commands are difficult to reference from inside the app, and it would be really helpful if they opened in the browser in their own activity that was accessible in the Recents/Overview screen. This way users could quickly switch between the terminal and the browser app, or put their device in split-screen mode and look at the commands while entering them in the terminal. ","comments":0,"created_at":"2018-04-26T04:20:24Z","labels":[],"number":668,"title":"Request: Option to open Help Pages in Browser","updated_at":"2018-04-26T04:21:00Z"} +{"author":"calbee633810","body":"Open the Help WebView, pressing home button and re-entering the app, the WebView disappears. But it should persist there.\r\n\r\n![bug1-before](https://user-images.githubusercontent.com/38213896/39096238-f3edfadc-467f-11e8-9122-c4f53b5ebd6c.png)\r\nScreenshot before pressing home button\r\n\r\n![bug1-after](https://user-images.githubusercontent.com/38213896/39096240-feabf690-467f-11e8-9fde-6ab691062048.png)\r\nScreenshot after pressing re-entering app.","comments":1,"created_at":"2018-04-22T14:53:50Z","labels":[],"number":664,"title":"WebView disappear after exiting and re-entering app","updated_at":"2018-06-10T13:24:57Z"} +{"author":"robsmith11","body":"Ok finally figured out why mosh was sometimes having issues from within my chroot in termux: when termux is first opened, it will report the window size as 0 rows and 0 columns, but if the screen is rotated while termux is open, it will then report the correct rows and columns from that point forward.\r\n\r\nThis python script can be used to test this:\r\n```\r\nimport sys, struct, fcntl, termios\r\ns = struct.pack('HHHH', 0, 0, 0, 0)\r\nt = fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ, s)\r\nprint(struct.unpack('HHHH', t))\r\n```\r\n\r\nBefore the screen is rotated, it will output `(0,0,0,0)`, but after it's rotated, it will output something like `(26,96,0,0)`.","comments":2,"created_at":"2018-04-13T16:27:05Z","labels":[],"number":660,"title":"TIOCGWINSZ reports zero window rows/cols until screen is rotated","updated_at":"2026-03-20T20:09:13Z"} +{"author":"Keith-S-Thompson","body":"I use the \"Black on white\" color scheme, which displays text without colors.\r\n\r\nWhen programs attempt to change the background color, the text should still be legible when using the \"Black on white\" or \"White on black\" scheme, but in fact both the foreground and the background are often black.\r\n\r\nThis script illustrates the problem:\r\n\r\n```\r\n#!/bin/bash\r\n\r\necho $'Black \\e[40mbackground\\e[m'\r\necho $'Red \\e[41mbackground\\e[m'\r\necho $'Green \\e[42mbackground\\e[m'\r\necho $'Yellow \\e[43mbackground\\e[m'\r\necho $'Blue \\e[44mbackground\\e[m'\r\necho $'Magenta \\e[45mbackground\\e[m'\r\necho $'Cyan \\e[46mbackground\\e[m'\r\necho $'White \\e[47mbackground\\e[m'\r\n```\r\nScreenshots of the resulting output (on my Moto G5+ running Android 7.0) are here:\r\nhttps://imgur.com/gallery/1DlEb, showing the output with the \"Solarized Dark\", \"Black on white\", \"White on black\", and \"Solarized Light\" color themes.\r\n\r\nI first noticed this problem running `tmux` under Termux. The status line at the bottom of the screen is just a black bar with the \"Black on white\" theme. (There should be a way to work around this in `tmux`. I'm still trying to find it, but that's not the subject of this bug report.)","comments":0,"created_at":"2018-03-23T21:59:37Z","labels":[],"number":631,"title":"Illegible background using \"Black on white\" or \"White on black\" themes","updated_at":"2018-03-23T21:59:37Z"} +{"author":"lars18th","body":"Hi,\r\n\r\nI recently started to use Termux. And I find it very interesting. For years I have used other Linux-on-Android systems; but I think this project is superior: simple and effective.\r\n\r\nAfter this short intro I propose a new idea around the ΓÇ£suΓÇ¥ and ΓÇ£sudoΓÇ¥ commands. Please, note that this isnΓÇÖt a request of ΓÇ£how to use root in TermuxΓÇ¥ or ΓÇ£scripts for sudoΓÇ¥. I know about such tools, and this is a _different_ proposal:\r\n\r\n- The problem: If you grant the root permission to Termux, then _any_ script running inside it can obtain root privileges (very bad!).\r\n\r\n- The solution: Create a new Termux Add-on, called Termux:Sudo. This addon will be another _different_ Android App. This new application will have an structure similar to Termux:API, so it can communicate with the Termux shell environment. But this new app focuses on running processes with elevated privileges. In consequence, this Termux:Sudo is the _only_ app that needs to receive the root privileges.\r\n\r\n- The implementation: The new Termux:Sudo will maintain an internal password for root (obfuscated) and a list of grant commands (or ΓÇÿ*ΓÇÖ for all). So the function is very similar to the ΓÇ£sudoΓÇ¥ command, and configured in the same way. Note that the data of Termux:Sudo App is _inaccessible_ from the Termux environment, so the password and configuration is even secure.\r\n\r\n- The use: When you call for example ΓÇ£sudo nano /system/build.propΓÇ¥ a password command is presented prior to execute the binary.\r\n\r\nWhat you think about this idea?\r\n","comments":10,"created_at":"2018-03-12T15:35:48Z","labels":[],"number":619,"title":"Termux:Sudo Addon proposal","updated_at":"2021-05-09T20:03:45Z"} +{"author":"bluebat","body":"termux already supports \"\\033[?1000h\" and \"\\033[?1000l\". Could \"\\033[?9h\" and \"\\033[?9l\" also be supported?","comments":6,"created_at":"2018-03-07T18:55:44Z","labels":[],"number":612,"title":"more Mouse Click events","updated_at":"2024-12-14T04:37:51Z"} +{"author":"deuxverres","body":"If you put bold text in, for example, Colorize for Ruby, you may see that in a colourscheme that has different colours from 0F and upper, the colour gets automatically bright, I've seen this in Dracula and Gruvbox","comments":2,"created_at":"2018-02-18T23:21:02Z","labels":[],"number":595,"title":"Bold text enforces bright colours","updated_at":"2019-02-09T13:20:34Z"} +{"author":"Auxilus","body":"","comments":1,"created_at":"2018-02-14T11:00:31Z","labels":["enhancement"],"number":588,"title":"Notify user whenever background session buffer changes","updated_at":"2021-08-23T09:57:03Z"} +{"author":"dictvm","body":"I am not sure if this will be considered a weird edge case, but I can reproducibly force close Termux when executing htop in one of at least two tmux panes. \r\n\r\ntmux version is 2.6\r\nhtop version is 2.0.2\r\ntermux version is 0.60 from Google Play Store\r\n\r\nI'd be happy in hunting down debug logs, if someone knows how to get them on a Chromebook.","comments":4,"created_at":"2018-02-10T23:18:14Z","labels":["bug report","help wanted","chrome-os"],"number":583,"title":"Force closes on external 4k display on a Chromebook","updated_at":"2018-03-05T10:02:17Z"} +{"author":"rdb","body":"Firstly, thanks so much for making such an awesome app! I love termux.\r\n\r\nI'm trying to launch an external activity from within termux while giving it the ability to write to a file (or, if possible, a FIFO).\r\n\r\nIt would appear that TermuxOpenReceiver can almost handle my needs, except that it is currently only designed to handle read-only access. Having the ability to edit files from other apps would be very useful for me.\r\n\r\nI would therefore kindly request that TermuxOpenReceiver handle `ACTION_EDIT`, in which case it would add the flag `Intent.FLAG_GRANT_WRITE_URI_PERMISSION` as well as open the file descriptor using `ParcelFileDescriptor.MODE_READ_WRITE`. (Perhaps it is also necessary to add an `android:writePermission` attribute to the `\u003cprovider\u003e` tag in AndroidManifest.xml?)\r\n\r\nFinally, it is currently restricted to files only due to an `isFile()` check. Could it be changed to `exists()` instead? I'm hoping that I could get it to work with a named pipe rather than a regular file so that I could pipe data from the activity back to the terminal.","comments":0,"created_at":"2018-02-06T10:19:03Z","labels":[],"number":576,"title":"Handling ACTION_EDIT in TermuxOpenReceiver","updated_at":"2018-02-06T10:22:30Z"} +{"author":"howeik","body":"On Chromebooks and external keyboards without physical PgUp, PgDown, Home, etc. keys it'd be great to have hotkey support within Termux.\r\n\r\nhttps://termux.com/touch-keyboard.html documents this sort of hotkey support for phones by using the Volume Up button but this isn't practical for users who aren't on phones. Would be great to have these hotkeys configurable. ","comments":2,"created_at":"2018-02-06T07:18:12Z","labels":[],"number":575,"title":"Better hotkey support for hardware keyboards","updated_at":"2018-03-12T01:33:46Z"} +{"author":"kskyten","body":"I would like to be able to use QR code scans in scripts. Currently I do this by using sharing the scanned barcode with termux and using a custom file editor script. This works, but it is not ideal as the scanned barcode has to be saved in `~/downloads`. I found out that I could launch the barcode scanner by running\r\n```shell\r\ntermux-open zxing://scan/?ret=http://ddg.gg={CODE}\r\n```\r\nThis will perform a search using the scanned barcode in duckduckgo. Is it possible to replace the return url with a custom version like `termux://myscript/{CODE}`, that would pass the results of the scan to a script called `myscipt`?","comments":0,"created_at":"2018-01-21T17:47:30Z","labels":[],"number":547,"title":"Add a custom url handler","updated_at":"2018-01-21T17:47:30Z"} +{"author":"kurokirasama","body":"Hello,\r\n\r\nif i'm not wrong, cli input should be right above the keyboard, right? If i'm not, then for some reason it's not working for me. If i'm, then it would be great to add that feature.\r\n\r\n[screenshoot1](https://drive.google.com/open?id=1bu80HEvnEpp9wE6FOPaNUkWMadbcG78m)\r\n[screenshoot2](https://drive.google.com/open?id=1CbgO94qNsszRbAqXOsvF5_PFxO-Rn0gF)","comments":5,"created_at":"2018-01-12T14:05:23Z","labels":[],"number":538,"title":"keyboard overlapping cli input","updated_at":"2023-12-23T13:18:51Z"} +{"author":"max-mapper","body":"Hi, I am trying to use Termux to share files between my android and laptop, but I can't get any code that uses multicast DNS to work. I believe it is because Termux needs to request a MulticastLock: https://stackoverflow.com/questions/13221736/android-device-not-receiving-multicast-package/13223018#13223018\r\n\r\nTo test if it's working, do `pkg install node` and then `npm install multicast-dns` and then run `node example.js` with this example: https://github.com/mafintosh/multicast-dns/blob/master/example.js. You should see multicast traffic from your network, including your own query.","comments":5,"created_at":"2018-01-11T23:39:11Z","labels":[],"number":536,"title":"Support multicast DNS (mdns) via MulticastLock","updated_at":"2024-11-14T16:10:16Z"} +{"author":"trusktr","body":"Can we configure volume buttons? F.e. I'd like to swap Ctrl with Alt so that Ctrl is volume-up rather than volume-down, and Alt will be volume-down.","comments":4,"created_at":"2017-12-29T21:04:32Z","labels":[],"number":526,"title":"Configure what volume buttons do?","updated_at":"2022-02-10T15:24:10Z"} +{"author":"kracejic","body":"Hi, \r\n\r\nfirst of all, thanks to all working on this amazing android application. It is really great to being able to run my complete work environment on my phone. \r\n\r\nI have noticed that fullscreen option was missing, I have looked at recent commits and it looks that it was removed from sources. Is there other way how to achieve the same result? Or could we keep it for users who use it? I for myself can live with its quirks, but without it, I get that annoying bar with clock and virtual buttons on the screen taking precious pixels from the important content.\r\n\r\nIs there a way how to get it back?\r\nThanks!\r\n","comments":38,"created_at":"2017-12-13T22:41:14Z","labels":[],"number":507,"title":"Fullscreen / immersive mode option is gone","updated_at":"2023-10-12T10:30:14Z"} +{"author":"liuchang0920","body":"Thanks for this great product.\r\n\r\nIt seems that on chromebook, the SDCard is mounted in the path: ///_SDCard. And by executing \"termux-setup-storage\" still could not able to find the path to sdcard. \r\nIs this a constraint that chromeos forces? If so, this feature would only available when there is updates on chromeos then.\r\n\r\nThanks.\r\n","comments":9,"created_at":"2017-12-13T19:51:25Z","labels":[],"number":506,"title":"Not able to access SDCard on Chromebook.","updated_at":"2022-01-28T09:24:52Z"} +{"author":"idupree","body":"Tapping on \"keyboard\" in the left drawer, as suggested in #320 , doesn't help.\r\n\r\nIf I turn on the ChromeOS accessibility setting that gives a button to show the touch keyboard anytime, the button does work with termux. However, having that setting enabled also forces the touch keyboard to a layout where the keys are smaller than the default one (even during normal web browsing) so it is not ideal.","comments":1,"created_at":"2017-11-15T03:36:18Z","labels":["help wanted","chrome-os"],"number":475,"title":"Chromebook Flip in tablet mode: on-screen keyboard does not appear","updated_at":"2019-11-03T23:40:55Z"} +{"author":"crozone","body":"The Blackberry PRIV and KEYone have gesture capable physical keyboards that allow the moving of the text cursor in standard text inputs, in a mode known as \"fine cursor control\". It would be great to translate these smoothly into arrow key inputs, to allow fast bash history scrollback, and cursor navigation in programs like vim.\r\n\r\nCurrently, the \"Up\" and \"Down\" gestures already trigger the up and down arrow keys in Termux, but not in a smooth or predictable manner. The left and right gestures currently do nothing.\r\n\r\nIt's likely that this support would also cover software keyboards that allow cursor movement through built in controls and gestures.\r\n\r\nThe Blackberry Captivate Keyboard Integration Guide is [here](https://community.blackberry.com/docs/DOC-10328), however it mainly relates to using the keyboard as a trackpad/scroll wheel, which isn't the case when the keyboard is in text input mode (like it always is in termux). Likely the messages it is sending the application in cursor navigation mode are higher level and unrelated. ","comments":0,"created_at":"2017-11-02T04:34:38Z","labels":[],"number":465,"title":"Convert text navigation gestures into arrow key inputs","updated_at":"2017-11-02T05:01:22Z"} +{"author":"sayem314","body":"Hi there, what I meant is can we register termux as a downloader globally? So that we could use wget/aria2 as big files downloader. Wget/aria2 in termux works better than phone built-in downloader, especially when the file is really large.\r\n\r\n\u003cimg src=\"https://i.imgur.com/uNSEQVU.png\" width=\"45%\"\u003e\r\n\r\nThe above screenshot showing option for download link. We need termux right there!\r\n\r\nMy `termux-url-opener` context is `aria2c -x 4 \"$1\" --dir=$HOME/storage/downloads` and it works super smooth however it would be awesome if there is an option to make android understand termux can download.\r\n\r\nI think we need to use some additional intent filter for that? Yeah?","comments":4,"created_at":"2017-10-07T14:37:41Z","labels":["enhancement"],"number":446,"title":" [Feature Request] Termux as a downloader","updated_at":"2021-01-29T12:17:12Z"} +{"author":"kaushalmodi","body":"Hello,\r\n\r\nI realized today that the time zone used by emacs to show the time internally was incorrect. i.e. `date` in Termux shows the correct time in correct zone. But time shown within emacs in Termux was BST time zone.\r\n\r\nI started this conversation by mistake in the wrong thread [here][1].\r\n\r\nBasically emacs relies on the `TZ` environment variable value to show the time correctly -- [[Source][2]].\r\n\r\nCopying @Neo-Oli as he helped me confirm this issue. He uses `export TZ=$(getprop persist.sys.timezone)` in his `~/.bash_profile` to get around this issue.\r\n\r\nCan this (the `TZ` variable) be set by default?\r\n\r\nThanks.\r\n\r\n[1]: https://github.com/termux/termux-packages/issues/1076#issuecomment-328051119\r\n[2]: https://www.gnu.org/software/emacs/manual/html_node/elisp/Time-Zone-Rules.html","comments":2,"created_at":"2017-09-08T12:45:14Z","labels":[],"number":416,"title":"Auto-set TZ environment variable","updated_at":"2017-12-20T07:01:20Z"} +{"author":"srustamo","body":"On Chromebook \u003ckey\u003e Enter \u003c/key\u003e is sent repeatedly after start on chromebook after chsh -s zsh and back to bash.","comments":0,"created_at":"2017-08-28T05:44:02Z","labels":["help wanted","chrome-os"],"number":403,"title":"Key Enter is sent repeatedly after start on chromebook after chsh -s zsh and back to bash","updated_at":"2017-12-07T01:04:12Z"} +{"author":"allgoewer","body":"This might be better suited as an extension for the widget.\r\n\r\nIt would be nice if scripts could be run via app shortcuts (Android \u003e= 7.1). While I am fine using the widget, it's a bit obstrusive.","comments":0,"created_at":"2017-08-23T13:48:04Z","labels":[],"number":396,"title":"Launch scripts via app shortcuts","updated_at":"2017-08-23T13:48:04Z"} +{"author":"jots","body":"I have termux running on a chromebook. It works great, but I can't figure out how to cut and paste text between it and the chromebook apps (such as the browser). Is it possible?\r\n","comments":7,"created_at":"2017-07-24T23:20:26Z","labels":[],"number":366,"title":"cut and paste on chromebook","updated_at":"2023-03-26T01:18:20Z"} +{"author":"Vibe6","body":"Can you add wallpapers background in termux?","comments":12,"created_at":"2017-07-21T11:47:10Z","labels":[],"number":365,"title":"Wallpaper","updated_at":"2025-11-25T17:47:10Z"} +{"author":"jimmy0699","body":"idea for new addon: to add floating button that overlays termux console and after push sends defined string to console, ability to define: \r\nbutton size, button opacity, button label button color\r\nmenage sets of buttons\r\n\r\nwhat you think?","comments":0,"created_at":"2017-06-14T10:59:41Z","labels":[],"number":342,"title":"floating button idea","updated_at":"2017-06-14T10:59:41Z"} +{"author":"TheDiamondYT1","body":"It would be nice to support the `title` command (if it isnt already) by adding a small bar at the top of the terminal.","comments":2,"created_at":"2017-06-10T21:06:05Z","labels":[],"number":338,"title":"Small bar at top of terminal for the title","updated_at":"2017-09-01T19:55:55Z"} +{"author":"kutsan","body":"It's just a simple request. I'd like to change the location of `~/bin/termux-url-opener` script. And even maybe its name too.","comments":6,"created_at":"2017-05-28T19:04:54Z","labels":["enhancement"],"number":329,"title":"Change location of ~/bin/termux-url-opener","updated_at":"2021-05-30T16:22:24Z"} +{"author":"redyoshi49q","body":"When running a newly created `screen` session with vertically and/or horizontally split panes, the touch screen can be used to select a pane within `screen`, but many touch screen interactions with command line programs (notably scrolling) do not function for programs such as `less` and `man` that are run inside of `screen` windows, even though such interactions work as expected when tested outside of `screen` (`emacs` is a notable exception; both cursor placement and scrolling function as expected for an `emacs` instance that's running inside of a `screen` window).\r\n\r\nHowever, if a `screen` session is detached and then reattached, the touch screen interacts differently for both `screen` and the programs that are run inside of it. `screen` panes can no longer be selected with the touch screen (requiring the use of the C-a Tab key combo instead), but programs that are run within `screen` windows (`less`, `man`, etc.) appear to interact with the touch screen in the same way that they would if they were run outside of a `screen` session. An exception to this generalization is the `bash` shell itself; while `bash` doesn't accept input from the touch screen when run outside of `screen`, a `bash` instance that is running inside of a reattached `screen` session seems to process movement across the touch screen as if presses of the arrow keys were being made.\r\n\r\nI imagine that it might not be technically feasible to allow the touch screen's input to reliably affect both `screen` (through selecting window panes) and apps running inside of `screen` (through scrolling and other interactions) at the same time. In any case, it may be desirable to adjust the behavior of `screen` in Termux such that the behavior of newly spawned `screen` sessions and newly attached `screen` sessions is the same in order to create a more consistent user experience.\r\n\r\nIn case it's of relevance, I quote my Termux environment's .inputrc below. I have a few other environment files (including a .bashrc and .screenrc), but no others seem potentially related to this issue; let me know if you'd like to see any other files.\r\n\r\n\t$include /etc/inputrc\r\n\r\n\t\"\\e[A\": history-search-backward\r\n\t\"\\e[B\": history-search-forward\r\n\t\"\\e[C\": forward-char\r\n\t\"\\e[D\": backward-char\r\n\t\"\\eOC\": forward-word\r\n\t\"\\eOD\": backward-word\r\n\t\"\\C-H\": kill-whole-line\r\n\t\"\\C-_\": kill-whole-line\r\n\r\n\tC-p: history-search-backward\r\n\tC-n: history-search-forward\r\n\t#C-p: previous-history\r\n\t#C-n: next-history\r\n\tC-f: forward-word\r\n\tC-b: backward-word\r\n\tC-k: kill-line\r\n\tC-y: yank\r\n\t#C-_: undo // apparently, C-Backspace maps to this in mintty(?)\r\n\r\n\t$if Bash\r\n\t\tSpace: magic-space\r\n\t$endif\r\n\r\n\t#set horizontal-scroll-mode on\r\n\r\nOn a final note, I greatly appreciate the implementation of `screen` in Termux; I had sorely missed the utility and familiarity of `screen` previous to that.","comments":0,"created_at":"2017-05-26T09:58:07Z","labels":[],"number":328,"title":"Inconsistent touch response behavior within multiple pane screen session","updated_at":"2017-05-26T09:58:07Z"} +{"author":"ghost","body":"The Softkeyboard uses a lot of space so it would be a great idea to disable it. Here is my proposal how the user can choose he has a bluethooth keyboard. The single Tap in this case now has only the function to scan for urls. if the user chooses no hw-keyboard present, single tap will mean extend softkeyboard.\r\n\r\nhttps://hastebin.com/asesaseduw.java\r\nhttps://hastebin.com/itakugiwut.diff","comments":2,"created_at":"2017-05-21T12:56:16Z","labels":[],"number":325,"title":"Support for disabling softkeyboard in case bluetoothkeyboard is present","updated_at":"2023-12-23T13:03:18Z"} +{"author":"lingnand","body":"If I share a webpage from Chrome to another app, for example, I get the title text in addition to the url.\r\n\r\nThis makes me believe that it should be relatively straightforward to allow `termux-url-opener` to be passed a second argument: the additional text / title in my example.\r\n\r\nI looked at `TermuxFileReceiverActivity.java` - it seems like it should be as easy as passing that to the `handleUrlAndFinish()` function; but I might be wrong (and unfortunately I don't have a readily available android dev env to test this).","comments":0,"created_at":"2017-05-19T11:51:50Z","labels":[],"number":322,"title":"Suggestion: pass in additional text in `termux-url-opener`","updated_at":"2017-05-19T11:51:50Z"} +{"author":"kosovo0275","body":"I am unable to type more than one capitalized letter in a terminal without my keyboard resetting the letters to lower-case. I have the TMO LG G6 (H872), with stock LG keyboard. This issue started occurring on my G5 when I upgraded from marshmallow to nougat. The shift/caps lock key works perfectly fine otherwise, it just seems isolated to typing in a terminal. Its undoubtedly specific to my keyboard, so I was just wondering if you had any ideas on how to debug the issue so I can see exactly where the problem is originating, and possibly patch it.","comments":1,"created_at":"2017-05-16T22:03:07Z","labels":[],"number":316,"title":"Caps lock key not working.","updated_at":"2017-06-13T01:41:05Z"} +{"author":"zelhar","body":"In termux the bidi functionality seems to depend on which font is chosen from the termux style. for example when selecting gnu free font Hebrew is displayed right-to-left (although with bugs when typing or editing it), while when chosing default font or inconsolata font bidi is disabled and the text is displayed ltr. \r\n\r\nThe bidi support in any terminal is not perfect and sometime it is desirable to simply disable it. some of the linux consoles like Konsol and gnome terminal allow the user to choose whether to enable or disable bidi support, is that possible to be done in termux as well? \r\n\r\nI think it would be useful to be able to completely disable bidi in termux because that thing never behaves in a predictable way and especially when editing and inserting text I find it easier to just work ltr. ","comments":7,"created_at":"2017-04-06T07:28:05Z","labels":["bug report","help wanted"],"number":296,"title":"bidi behavior inconsistent; possibility to enable/disable bidi in termux settings? ","updated_at":"2017-09-21T22:52:54Z"} +{"author":"jimzenn","body":"Some font like meslo has a very large line-height, while the others have a very small one (sometimes the character height almost exceeds the line-height).\r\n\r\nIt also makes airline or powerline in vim ugly since the arrows cannnot align.\r\n\r\nCan you add an option for users to adjust line-height?\r\n\r\nThank you!","comments":4,"created_at":"2017-03-11T18:47:03Z","labels":["enhancement"],"number":276,"title":"Allow adjusting line-height","updated_at":"2025-08-10T09:44:47Z"} +{"author":"pranavg189","body":"It would be nice to have the ~/bin/termux-url-opener script (which executes when selected through the share menu of Android Apps) run in background without opening the termux terminal. Maybe this additional background functionality can be added with Termux:Widget addon in which background scripts are placed in ~/.shortcuts/tasks.","comments":3,"created_at":"2017-02-06T11:01:04Z","labels":["enhancement"],"number":254,"title":"Make the ~/bin/termux-url-opener script run in background","updated_at":"2025-01-05T20:43:45Z"} +{"author":"marmistrz","body":"CM 13 provides an option to use volume up/down keys as a left/right key emulation. It's a feature that makes the barely usable vkb a little more usable.\r\n\r\nOTOH, Termux uses vol. down \u0026 up to emulate ctrl button and other, useful non alphanumerical characters.\r\n\r\nWould it be possible to add an option to remap these? I would, for example, be really happy if Termux used the back button instead. Of course, not everyone, hence the word: option. This should be configurable, of course.","comments":2,"created_at":"2017-02-05T11:19:44Z","labels":["enhancement"],"number":251,"title":"Unable to use ctrl emulation if volume keys are used for navigation","updated_at":"2017-04-10T07:33:29Z"} +{"author":"rpdillon","body":"I've searched for separate keyboard settings for Android buried in the ChromeOS settings tree, but haven't been able to locate them. Expected behavior is that when ChromeOS is set to use Dvorak, Termux would too. Actual behavior is that Termux input is set to Qwerty, regardless of ChromeOS setting.\r\n\r\nChromebook Flip, not in dev mode. Termux installed via Play Store.","comments":49,"created_at":"2017-02-04T23:03:25Z","labels":["bug report","help wanted","chrome-os"],"number":250,"title":"ChromeOS set to Dvorak, Termux uses Qwerty","updated_at":"2020-05-28T17:13:43Z"} +{"author":"fornwall","body":"See https://developer.android.com/guide/topics/ui/accessibility/apps.html.\r\n\r\nI would very much appreciate any help or pointers here, as I've never worked with Talkback before!","comments":15,"created_at":"2017-01-31T22:43:19Z","labels":["enhancement","help wanted"],"number":245,"title":"Add Talkback support","updated_at":"2023-03-14T03:22:49Z"} +{"author":"ghost","body":"I recently started using termux and I can't seem to find a way to access my phone's bluetooth adapter. Is it even possible?","comments":19,"created_at":"2017-01-10T15:53:43Z","labels":["enhancement"],"number":235,"title":"Can termux access phone's bluetooth adapter?","updated_at":"2024-06-22T10:49:42Z"} +{"author":"qntmpkts","body":"This is a feature common in a number of modern terminal applications (some otherwise requiring the use of CTRL+LClick). In the case of [enlightement's terminology](https://www.enlightenment.org/about-terminology), URL's are recognized natively, for example. Given termux-open-url and touch integration on Android devices (including some ChromeOS devices with Android Runtime), I find in day-to-day use that this feature would be very handy.\r\n\r\nOff-hand, the console parser would have to watch for anything that starts with http:// or https:// or www. and terminating extraction at the first \\s character (and of course removing line-feed characters).","comments":3,"created_at":"2016-12-30T05:15:50Z","labels":["enhancement"],"number":224,"title":"Feature Request: Recognize URL's to open in browser","updated_at":"2025-11-17T20:25:07Z"} +{"author":"lingnand","body":"On a desktop (Mac/Linux) you can normally install a small application that listens for your control keypresses such that\r\n\r\n* long press Control sends Control\r\n* short press sends Escape\r\n\r\nI'm an avid Vim user and miss this so much in termux. Do you think this is possible at all? If yes, how hard would it be? (I might go and take a look into the source code for this as well).\r\n\r\nThanks.","comments":2,"created_at":"2016-12-18T00:03:36Z","labels":["enhancement"],"number":215,"title":"Multiplex control key","updated_at":"2017-01-03T08:58:57Z"} +{"author":"filbo","body":"Using Google Keyboard on Android 6. The on-screen symbol is a funky pentagon with 'x', and might actually be an official symbol for 'DEL' in some contexts. Anyway, it is far more convenient for me if it sends ASCII BS 0x08 rather than DEL 0x7f.\r\n\r\nThis is of course a variable matter between different physical terminals and, these days, emulators. Many emulators have a config setting to choose between (a few will even let you send the Dec VT102 Advanced Mode or Function Mode or whatever it is, complicated ESC [ blahblah sequence, but I'll not ask for that... :)\r\n\r\nPlease add the setting for 'Backspace key send DEL | BS'. DEL would be the sensible default so as to not break existing users. OR, if the setting already exists, consider this a doc bugreport since I completely failed to find it...","comments":11,"created_at":"2016-12-14T02:18:41Z","labels":["bug report","Keyboard"],"number":212,"title":"Keyboard backspace key sends DEL","updated_at":"2024-10-28T19:54:54Z"} +{"author":"thewisenerd","body":"is it _possible_ to have termux as a \"launcher\" screen?\r\n\r\nthis angle has been looked at by TUI-ConsoleLauncher ( https://github.com/Andre1299/TUI-ConsoleLauncher ), and I'd think that it would be nice to have an \"optional\" launcher mode.\r\n\r\na couple of user scripts using the Termux:API add-on and auto complete (volup + T) will make a _good_ launcher.\r\n\r\nas for the \"launching\" apps part, can be either done as a addon extension to Termux:API or _*cough*_ su am start com.package/.Activity _*cough*_ some userscripts.","comments":11,"created_at":"2016-12-04T21:00:29Z","labels":["enhancement"],"number":206,"title":"launcher mode support?","updated_at":"2023-12-23T14:27:16Z"} +{"author":"ghost","body":"Hi,\r\n\r\nit would be a nice use-case if I can share my tablet-screen (termux) with my bigger screen at home. So more screen-space for all the cool stuff :-).\r\n\r\nBest","comments":6,"created_at":"2016-11-21T08:07:32Z","labels":["enhancement"],"number":196,"title":"chromecast support","updated_at":"2022-04-07T14:13:30Z"} +{"author":"kutsan","body":"![](https://i.imgur.com/T8XLsLx.png)\n","comments":2,"created_at":"2016-10-17T20:52:47Z","labels":["bug report"],"number":180,"title":"Powerline fonts doesn't work when using Tmux remotely within a local Tmux session","updated_at":"2016-10-17T22:29:31Z"} +{"author":"haniasita-zz","body":"Here's what's happening, in short :\n\nΓÇó If you type exit, all's fine and the command runs.\nΓÇó If you type something like screenfetch, it gets replaced by \"screenfetcscreenfetch\" the second you press the enter key\n\nI have autocomplete and autocorrect off at all times, and I use the default keyboard on my Samsung S6 Edge (SM-G925F zerolte).\n","comments":3,"created_at":"2016-10-10T04:54:23Z","labels":["bug report","Keyboard"],"number":176,"title":"Letters being added after any commands not in the dictionary (Samsung keyboard with \"Auto check spelling\" enabled)","updated_at":"2016-11-07T18:24:30Z"} +{"author":"gscholt","body":"Hi,\n\nThe Pixel C keyboard has missing keys and a [...] key that the keyboard driver that can be used to compose these missing keys. The [...] key is on the location of the right-alt, and I believe that is the code being generated for this key.\n\nRecently in v0.42 the keyboard shortcuts were changed from Ctrl+Shift to Ctrl+Alt for #145, but this breaks shortcuts I need in vi, namely Ctrl+], which I compose with Ctrl+[...]+p, which is now interpreted as Ctrl+Alt+p and is therefor capture by termux.\n\nI would prefer the Ctrl+Shift back the way is was, but if that is not possible, ignore the right-alt key so I can still use Ctrl+\u003ckey\u003e sequences. Possibly allow us to configure something? (apparently keyboard are tricky things)\n","comments":4,"created_at":"2016-09-20T09:39:28Z","labels":["bug report","Keyboard"],"number":161,"title":"Ctrl+Alt shortcut modifier change breaks Pixel C Keyboard","updated_at":"2016-09-29T08:45:07Z"} +{"author":"mkokotovich","body":"In the rest of Chrome OS (and every other OS) when I press and hold backspace it eventually starts to send repeated keystrokes. In termux it doesn't seem to send the repeats, just one per press. I'd love to be able to backspace quickly by holding down the backspace key.\n","comments":6,"created_at":"2016-09-10T06:29:04Z","labels":["bug report","Keyboard"],"number":156,"title":"Holding any key on chrome OS doesn't send repeated key presses","updated_at":"2018-02-20T00:12:03Z"} +{"author":"treakiandroid","body":"hi,\n\ni tyed to open the the conext menu on the android terminal emulator while a attached tmux session was generating a lot of output. it wasnt easy because conext menu got closed everytime (and that happened rappedly) when output changed. Just as i thought i made it ive got an app crash message. And not only that the terminal emulator crashed only, it crashed also all running tmux sessions and other not attached processes i had running in background.\n\nSo please do following fixes:\n- make terminal emulator independent from processes started through it!!! ( i thought android had services for that...)\n- fix that crash\n- reimplement the context menu so it is also usable while output is generated rappedly\n- maybe also add the context menu options to the side panel\n\nhere is some logcat output i have captured after the crash (device running cyanogenmod 13):\n\n```\n There was an error creating your Issue: body is too long (maximum is 65536 characters). \n```\n\nok than as attachment...\n\n[Ungespeichertes Dokument.txt](https://github.com/termux/termux-app/files/457842/Ungespeichertes.Dokument.txt)\n\nthanks for the fix in advance\n","comments":1,"created_at":"2016-09-06T21:25:43Z","labels":["bug report"],"number":152,"title":"big crash bug","updated_at":"2016-09-07T06:25:53Z"} +{"author":"BrainDamage","body":"https://en.wikipedia.org/wiki/Sixel is a raster protocol format part of VT200 and VT300 serial terminals\nit recently started gaining traction on command line tools to output images directly to the terminal because it works trought ssh, works reasonably well, etc \nfor an implementation detail to copy the encoder/decoder, one can look at https://github.com/saitoha/libsixel , the url documents also a series of terminals and programs that support the standard\nI realize it's a low priority feature, but it'd allow rather nice semi graphical workflow under termux's terminal, currently it's already possible to view sixel graphics from launching a ssh daemon and connecting externally with a sixel capable terminal emulator\n","comments":75,"created_at":"2016-08-15T15:06:41Z","labels":["enhancement"],"number":142,"title":"Feature Request: sixel graphics mode","updated_at":"2026-03-30T13:43:49Z"} +{"author":"Neo-Oli","body":"When the extra keys row is enabled, can it be automatically hidden when the keyboard gets hidden and automatically shown again when the keyboard gets displayed again?\n","comments":2,"created_at":"2016-08-14T11:28:54Z","labels":["enhancement","extra keys row"],"number":140,"title":"Hide extra keys row when Keyboard is hidden","updated_at":"2022-05-23T19:58:31Z"} +{"author":"igrep","body":"# Problem\n\nWhen inputting Japanese characters (Kanji, Hiragana, Katakana), we usually toggle Japanese-input mode by halfwidth/fullwidth (σìèΦºÆ/σà¿ΦºÆ) key ([see wikipedia for details](https://en.wikipedia.org/wiki/Language_input_keys)).\nI used to love to write blog posts on vim on termux using the hardware key.\n\nBut since 0.38 (as long as I remember), the halfwidth/fullwidth key doesn't make any effect on termux.\nSo I couldn't input any Japanese characters on termux now.\nCould you please fix it? :pray:\n# About my environment\n\nModel: Xperia Z4 Tablet (SGP712)\nAttached keyboard: BKB50 (The official Z4 Tablet's Bluetooth keyboard)\nAndroid version: 6.0.1\nSoftware keyboard (enabled when inputting Japanese then suggests words): POBox Plus (The default software Japanese keyboard of SGP712. Version unknown)\n","comments":12,"created_at":"2016-08-11T13:50:03Z","labels":["bug report","Keyboard"],"number":137,"title":"halfwidth/fullwidth key doesn't work since 0.38","updated_at":"2016-12-30T02:17:56Z"} +{"author":"memeplex","body":"I was surprised about the keyboard extension not including a modifier capable of doing the same than Volume Up does in combination with other keys.\n","comments":3,"created_at":"2016-08-09T01:35:38Z","labels":["enhancement","extra keys row"],"number":134,"title":"Add \"volup key\" to new extra keys panel","updated_at":"2024-05-25T12:53:07Z"} +{"author":"flipflop97","body":"It would be awesome if smooth/pixel perfect scrolling could be implemented.\nWith smooth scrolling I mean that when dragging the screen the content will move per pixel (the native Android scrolling) rather than per line in the terminal.\n","comments":3,"created_at":"2016-07-17T19:03:20Z","labels":["enhancement"],"number":118,"title":"Enable Smooth Scrolling","updated_at":"2018-09-26T00:30:42Z"} +{"author":"mozzwald","body":"The terminal bell works when the app is running in the foreground with the screen on but after screen turns off or the app is running in the background it no longer plays a sound or vibrates based on the _bell-character_ setting in _termux.properties_.\n\nThis option is useful for being notified of events if connected to another machine via ssh (where termux-notification will not work). Please add support for terminal bell as a notification.\n","comments":7,"created_at":"2016-07-14T12:51:35Z","labels":["enhancement"],"number":115,"title":"Support for terminal bell as a notification","updated_at":"2026-01-07T02:35:56Z"} +{"author":"ikurek","body":"Hi,\n\nI have a problem with font, \"i\" and \"l\" characters to be exact. They seem to be different than other characters. I tried changing fonts but it didn't help. It's really annoying. How do I fix it?\n\nScreen:\n![2016-06-21 01 25 08](https://cloud.githubusercontent.com/assets/9201746/16215256/a0827d26-3760-11e6-9d2e-44b67ed1726a.png)\n","comments":27,"created_at":"2016-06-21T01:31:31Z","labels":["bug report","enhancement"],"number":107,"title":"Font broken on \"i\" and \"l\"","updated_at":"2026-05-21T12:54:19Z"} +{"author":"torappinfo","body":"Since console apps has no knowledge of gestures, if we can convert pageUp/Down gestures to keys or mouse wheel events, it will enable more creative usages in termux.\n\nFor example, current gesture support is non-functional when using less in neovim terminal mode.\n\nto reproduce the bug, enter neovim terminal mode with:\n$ nvim -c term\nInside the neovim terminal mode, run \n$ less txtfile\nThen pageUp/Down gestures trigger neovim quit terminal insert mode and thus make it nonfunctional.\n\nRunning less in neovim terminal mode in linux, pressing pageUp/Down keys or mouse wheel works perfectly.\n","comments":1,"created_at":"2016-06-05T03:30:45Z","labels":["enhancement"],"number":101,"title":"pageUp/Down gesture supported as pageUp/Down keys (or mouse wheel)","updated_at":"2016-07-31T20:40:48Z"} +{"author":"torappinfo","body":"In android soft keyboards, sometimes there will be some predicted inputs (usually underlined) in the text area waiting for confirmation. Termux can not take these inputs even after confirmation.\n\nTo reproduce, use a soft keyboard for input in search bar, find an input mode (usually handwriting mode will do), where some underlined predicted text will be firstly shown in search bar before confirmation. After further inputs, these underlined text will become solid (not underlined again). Termux has issues to take these underlined inputs.\n\nOne specific example is Shouxin input method for CJK in handwriting mode. Termux simply does not take any underlined candidates.\n","comments":1,"created_at":"2016-05-09T01:28:07Z","labels":["bug report","Keyboard"],"number":91,"title":"termux cannot take the underlined candidates with soft keyboards","updated_at":"2016-07-26T18:12:49Z"} +{"author":"vaites","body":"When any app or script asks for a password the keyboard doesn't change, but in Android the password fields uses an [input method type](http://developer.android.com/intl/es/training/keyboard-input/style.html). Is possible to detect this behavior and change keyboard type?\n","comments":14,"created_at":"2016-03-27T07:01:24Z","labels":["enhancement","Keyboard"],"number":70,"title":"Change keyboard type when asking for a password","updated_at":"2023-12-23T22:00:30Z"} +{"author":"lingnand","body":"Hi there,\n\nFirst of all, thanks for the excellent work; combined with Blackberry Priv's in-built keyboard, this makes editing stuff on the go a breeze... except a minor problem: the Alt key on the keyboard (or Meta) sends escape instead of special symbols.\n\ni.e.,\n\n```\n$ vtshowkeys\n0033 27 0x1B Escape '^[' or '\\e'\n0152 106 0x6A ASCII 'j'\n```\n\nThis looks very much like `metaSendsEscape` option turned on inside xterm. I suppose there is very simple way to make it work otherwise, any pointers?\n","comments":6,"created_at":"2016-03-12T08:47:13Z","labels":["bug report","Keyboard"],"number":63,"title":"Blackberry Priv keyboard problem (Alt sends escape)","updated_at":"2016-10-04T15:21:00Z"} +{"author":"toysrtommy","body":"Termux is awesome, when combined with a foldable bluetooth keyboard. It becomes a full workstation powerhouse on the go. \n\nExcept the screen size is still tiny for code editing even on a Nexus 6p. The proposal is to support Cardboard VR mode / render terminal content in steroscopic, potentailly using Cardboard API (but other options fine too). \n\nImagine carrying just your smartphone and a small keyboard and a cardboard Goggle, with infinite terminal windows by just moving around your ahead.\n\nhttps://developers.google.com/cardboard/android/get-started\n","comments":16,"created_at":"2016-02-16T04:40:09Z","labels":["enhancement"],"number":53,"title":"VR mode: Support for Steroscopic viewing and head tracking","updated_at":"2020-04-05T19:07:03Z"} +{"author":"ppwwyyxx","body":"I'm connecting a keyboard with USB OTG. Pressing `ctrl` on the keyboard works neither in shell nor in any command line applications. (`vtshowkeys` prints nothing when I press `ctrl`).\nHere is the `logcat` output when I pressed `ctrl-C` in shell, if helpful:\n![screenshot_2016-02-13-20-26-02_com termux](https://cloud.githubusercontent.com/assets/1381301/13031174/d82eb5d0-d290-11e5-8c15-d356166d0746.png)\nThe IM I'm using is Sogou Pinyin. Its keyboard is hidden during testing. \nChanging IM to Google Pinyin fixes `ctrl`, but `Esc` won't work, similar to #40. \nThanks\n","comments":0,"created_at":"2016-02-14T01:39:14Z","labels":["bug report","Keyboard"],"number":50,"title":"Ctrl key with Sogou Pinyin doesn't work","updated_at":"2016-07-26T18:14:43Z"} +{"author":"gscholt","body":"Hi,\n\nI often have multiple terminal open, and switching between them is cumbersome: edge swipe for menu, select other terminal, I have not found a key shortcut for it either.\n\nSince swiping up/down scrolls the buffer, swiping left/right coud easily switch between the open terminals.\n\nThis featuree request relates to or can interact with mouse event generation of #35 \n","comments":2,"created_at":"2016-02-13T09:41:19Z","labels":["enhancement"],"number":48,"title":"Add swipe gestures to switch between open terminals","updated_at":"2020-08-30T18:06:43Z"} +{"author":"rafaeln","body":"Now termux by default behaves standardly, with the triangle retracting the keyboard instead of sending the escape key. I like the old behavior better, with the triangle sending the escape key and a touch on the screen hiding the keyboard. I've managed to get the triangle=esc behavior back by setting that up on termux.properties, and I am wondering if I can also set the single touch on the screen to hide the keyboard. Is there a way?\n","comments":2,"created_at":"2016-02-03T15:15:26Z","labels":["enhancement"],"number":43,"title":"Option to get previous behavior with respect to hiding keyboard and entering ESC","updated_at":"2016-07-26T18:08:31Z"} +{"author":"huiyiqun","body":"I have a bluetooth keyboard, which used to work well with termux.\n\nToday I found that ESC did not work inside termux any more. I could not left inserting mode in neovim.\n\nESC used to work one month ago, what's the matter?\n","comments":14,"created_at":"2016-01-18T03:56:11Z","labels":["bug report","Keyboard"],"number":40,"title":"ESC key does not work with bluetooth keyboard and Google Pinyin input","updated_at":"2023-12-23T11:56:31Z"} +{"author":"Neo-Oli","body":"In certain programs you can use mouse gestures to do various tasks, for example:\n- tmux lets you resize panes with click and drag.\n- weechat has swipe left and right gestures to switch buffer. \n\nThis works when connecting to termux via SSH from a computer with mouse but it does not work when using the termux app. \nI realize that this would cause a conflict with the swipe to scroll feature, but maybe we can come up with a solution that can incorporate both these features. \nSome ways I came up with: \n- Move the long press menu into the left side drawer and have long press function as a click and drag. \n- Have a switch (or one time function like select) in the long press menu to switch between click and drag and scroll. In the two programs I came across with mouse dragging it is not something you have to do all the time, so having an additional step between might not be that bad. \n\nMaybe someone has a better idea?\n","comments":8,"created_at":"2016-01-06T15:31:46Z","labels":["enhancement"],"number":35,"title":"Add support for mouse gestures. ","updated_at":"2022-08-17T10:41:54Z"} diff --git a/issue-data/termux-app-open-issues.jsonl b/issue-data/termux-app-open-issues.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..64502ecb151be8566632467d48c09c31ebf4f20c GIT binary patch literal 1487522 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 z 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 z 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Ļx--1-z; zcxX=~eBF|il%e}`k2+nLGdDhcAnSZX2d?uq!NxM_LpRx^SM^<6*O)w@~KaD z)bdx$DCAa4smv>~khPMX$SsY=2=Ol3Y8ZKh^%#e6B!54w@#1fF4EtB5IZ1Yz7Vw4D z>?JwWsBE`as{K{{rRS=DlHE)qlgV5Vh=v|D53m+`U?0K&$|kvzi;X7&V$q#u}@;YU}(+pQ1Lbx8qXj+_Spui0nJm6L(^LANNQul1cmd@t-UZU|m@eO}Ec6<6Jd1 z*J-jR(FZk$;tqU<5jnFf^D>_S{ADBjlu5GoCw67f&=G&W$9&ia9ZAS3v5^HNBuQXD z7poNSw*JPghuMh#-m=LrESvx~(H4;|Y(*M{#v0aTbPbE1HtUE7O%2*^Li$eGFYKJ} z)bFEZ+L4#R!}~?$q$G_c#z9t@0ZGJO=s9%1MvQ#Rn?v@rO+~KWU1l`&S7Vzm(XqAJ zckZ@oAMIVH8S!0w@gW(Xt*435W&hDf2j1d1Y2lm8T6kT*sWH*!%&WXCnIxL)=hKs6 z>7CL(mD9(1=v9Ff{mWMN`}O6gZ{mC8$#1+fMB#D*AYN3!P*nGyC2$ zx4*3?v50$4`NZAPVEEo0rQ7%Z!^3a3Pa0ml4l}s6tSLJ47Y|o!4l1C(yVG~WW%MxP z{#wa%@Hsxm?Tp$28kl1#g7o*66Ndb?9l`lbzj)-Y>)%DV7}{<0{mWI~{@UyNmnZby zIEl^J6n4F2!uRU`wd%nf_aN9U`}44eYt_RkEe~PGD;==&*Lr;eYoc0@EfD_TjMW~W z^X-SLzP|Xz-(LEEs@8GJN(ROD2;0v?D76ee-v6;)_xob|?e#T!8NaRLXY0SdRV!ED z+LZ3^S!?&n0lzLi(YKArawg_5@I|gRzQp+E{>EO!^*j7b9#FUIHtQMM=W?wqbUv%O zv97}{?VUserJu1c_|pTO(EVHE&GKG)+-r|~tE9>G`u1C;bKD5MRav(9+zjhWxnh`ygaQ}a^$w6)my#P6N~dE@k~jd;6G z-+Z>>631SYh?Ac=%JUhg-j6wH$(TH~*zID;qE?%|>pT=m(Q?L{lU>a)@NMG(8{v(ft+PL1*Ax0V^a&BS5cg2CT& zdeNHl{Y@*wQ>sh)W=$uA#~KnB8(iDH%Zas3uJ>^Zgg#S^xwi4!z8060(discs*n7A zXlWn!_RqQLM}#hS9L#kK&SE;>+ZXBE_x6wZHoflX$=H{qOGmkJ0~qrJKswfca!lgu zr^Ev~hj_TsL|hZsxTqR|&-1}D2eZhSUq(fOQ;!mBu;vk?mn$R%l44K5?v?aOq$xj>+s=N3_9^Z>$f~Kt)E_Da|73eRcG+|B zR-W`caZb+@O^f0tw;H~|GkRqsyu0D1JJp+bVZ5e9CS$wuO#=-)dC>@IMWZFJ@av*- zF$R$8mEgnVf_}I_2fT1_GOBHHBr-9>u-AGy{6*^qE%T@6XnT)v9NS-7oFvfbm|=G$Z|XPD<>-7s&~nc zXWCQXixeWRrKyaA3H$St;dt&tOuyg##y@}i|0%f?9mkK} zVlxzc3fIP3ylfSJc&=@miym%2gSJfV7@6GKo<3#&g}$-_>0dp>@#rT{==wu@EA$$R zkLBnM`r2=?NJNaqDVlcV6Y`X8NAnEJXK3#Ay+$-+`#SWa6PEtETEibM8@`$G@zn

}YWGySvMJ{;criM_48eEnIDViOO{k;LKAS>uYFy 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 Qays|t7~fcpcbCrp3&7yaqW}N^ literal 0 HcmV?d00001 From 6ffad3aeb230df610e887c0e4fd5507e02bff658 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 01:48:35 -0700 Subject: [PATCH 02/52] docs: add Termux app issue triage --- TERMUX_APP_FIRST_BATCH_PLAN.md | 35 +- TERMUX_APP_ISSUE_LEDGER.md | 969 +++++++++++++++++---------------- generate_ledger_and_batch.ps1 | 199 +++++-- 3 files changed, 652 insertions(+), 551 deletions(-) diff --git a/TERMUX_APP_FIRST_BATCH_PLAN.md b/TERMUX_APP_FIRST_BATCH_PLAN.md index cff2b345d3b..cf53916d0ed 100644 --- a/TERMUX_APP_FIRST_BATCH_PLAN.md +++ b/TERMUX_APP_FIRST_BATCH_PLAN.md @@ -1,28 +1,17 @@ -# TERMUX_APP_FIRST_BATCH_PLAN +# TERMUX_APP_FIRST_BATCH_PLAN -## Selected Issues (Buckets A & B) +## Selected Issues -- Bucket A: #: [Bug]: Ctrl+PgUp Not registering +- Bucket A: #5092: [Bug]: Yet another potential ANR / main-thread blocking risk +- Bucket A: #3478: [Bug]: Termux Auto Crash +- Bucket A: #152: big crash bug +- Bucket B: #5128: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps +- Bucket B: #4589: "extra-keys" of "termux.properties" malfunctioning +- Bucket B: #3245: [Feature]: Need Double-width rendering of ambiguous characters +- Bucket B: #787: Are javadocs for termux source online anywhere? -- Bucket A: #: [Bug]: pkg update && pkg upgrade failed +## Rationale -- Bucket A: #: [Bug]: - -- Bucket A: #: [Bug]: Crash for termux-notification - -- Bucket A: #: [Bug]: Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() on IOException - -- Bucket A: #: [Bug]: Termux Usr Share Fonts Ttf Bug - -- Bucket A: #: [Bug]: google-genai installation fails on Termux - -- Bucket A: #: [Bug]: error completing install of intltool - -- Bucket A: #: [Bug]:Serious 404 Repository Errors and Environment Crashes on Android - -- Bucket A: #: [Bug]: the control character "^[" (ESC unicode: 27) crash termux when pasted - - -### Rationale -Issues chosen per lane priority: high‑confidence bugs first, then low‑risk clean‑ups, up to 10 items. +First batch is limited to buckets A and B only: high-confidence app-code crashes and low-risk static/code-health fixes. +Do not batch-fix these automatically. Pick one issue, inspect source, make the smallest patch, and use GitHub Actions as the gate. diff --git a/TERMUX_APP_ISSUE_LEDGER.md b/TERMUX_APP_ISSUE_LEDGER.md index 17edbe7ad3c..78553254e74 100644 --- a/TERMUX_APP_ISSUE_LEDGER.md +++ b/TERMUX_APP_ISSUE_LEDGER.md @@ -1,490 +1,509 @@ -# TERMUX_APP_ISSUE_LEDGER +# TERMUX_APP_ISSUE_LEDGER + +Pulled upstream open issues: 474 + +## Bucket Counts + +- Bucket A: 3 +- Bucket B: 4 +- Bucket C: 235 +- Bucket D: 6 +- Bucket E: 31 +- Bucket F: 13 +- Bucket G: 182 + ## Bucket A -- #: [Bug]: Ctrl+PgUp Not registering -- #: [Bug]: pkg update && pkg upgrade failed -- #: [Bug]: -- #: [Bug]: Crash for termux-notification -- #: [Bug]: Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() on IOException -- #: [Bug]: Termux Usr Share Fonts Ttf Bug -- #: [Bug]: google-genai installation fails on Termux -- #: [Bug]: error completing install of intltool -- #: [Bug]:Serious 404 Repository Errors and Environment Crashes on Android -- #: [Bug]: the control character "^[" (ESC unicode: 27) crash termux when pasted -- #: Fixed: sha256sums typo in debug_build.yml -- #: [Bug]: termux-storage-get hangs, never prompts for a file -- #: [Bug]: Potential main-thread blocking risk -- #: [Bug]: Yet another potential ANR / main-thread blocking risk -- #: [Bug]: UI Flicker in Session Tab When Switching Sessions While Running Codex CLI -- #: [Bug]: Samsung OneUI 8.x: Performance issue with Termux app in the background -- #: [Bug] or [Feature]?: Distorted semigraphics (triangles) -- #: [Bug]: ctrl+j to enter via KDE Connect is not working -- #: [Bug]: GPG signiatures broken or missing, dpkg extremely outdated -- #: [Bug]: Terminal session notification does not update session name when renamed via long-press -- #: [Bug]:Missing PendingIntent.FLAG_IMMUTABLE causes crash on Android 12+ (API 31+) -- #: [Bug]: One UI 8.x: big CPU cores are never used in tested Termux/proot workloads -- #: [Bug]: Termux 0.118.3 crashes on startup after fresh install [Android 16] -- #: [Bug]: Crashed -- #: [Bug]: No Keyboard overlay after Mainline Services update on Android 16. -- #: [Bug]: Help Failed to download and build `cffi==2.0.0` -- #: [Bug]: Soft keyboard flickers and disappears when returning to Termux -- #: [Bug]: Syncthing fails after upgrade to version 2.0.15 -- #: [Bug]: can't be install in phone second space -- #: [Bug]: crash report -- #: [Bug]: ZWJ is broken -- #: [Bug]: Weird visual spacing of italicized text in a text editor -- #: [Bug]: Grapheme cluster rendering faulty / inconsitent -- #: [Bug]: Termux refuses to open / download files. -- #: [Bug]: Termux startup scripts and crond behavior issues on Android 13 -- #: [Bug]: App crashes when trying to install nix inside of debian proot-distro -- #: [Bug]: Cumulative ghost space in sd card -- #: Crash -- #: [Bug]: The. l2 s.coreutils's error is due to a problem with the Link2symlink mechanism of the termux. -- #: [Bug]: Extra keys glyph rendering inconsistent -- #: [Bug]: Crash Message Unknown package com.termux.api -- #: [Bug]:Cannot hide extra-key -- #: [Bug]: Bad Address, can't cd into /sdcard !! -- #: [Bug]: Background color not respected when started with scripts -- #: [Bug]: emacs tutorilal alt-v with external keybolard comes out clipboard -- #: [Bug]: termux-setup-storage doesnΓÇÖt create external-1 for USB drive on GrapheneOS -- #: [Bug]: suddenly close -- #: [Fix]: Share data between Termux and Android applications -- #: [Bug]: Report Crash When After Exiting Neovim -- #: [Bug]: zsh colors -- #: [Bug]: Crash when switching between Dex and non-Dex -- #: [Bug]: pip install psutil doesn't work -- #: [Bug]: Affects both Termux's Ubuntu & Arch, so it's a Termux bug: Julia's binary aarch64 now can't compile many packages. -- #: [Bug]: -- #: [Bug]: escape-seq styling lost after resizing -- #: [Bug]: MIUI/Xiaomi HyperOS Mini Window Flickering Issue -- #: [Bug]: ctrl space as prefix doesnot work in tmux -- #: [Bug]: Selecting text in `tilde` editor doesn't work properly -- #: [Bug]: Software keyboard won't show at startup if "use-black-ui = true" in latest CI build -- #: [Bug]: pasting ESC char crashes the app -- #: [Bug]: Termux randomly crashes without any error message when a minecraft server is running -- #: "extra-keys" of "termux.properties" malfunctioning -- #: [Bug]: Termux Setup Storage Error Error Code: 200 Error Message (FileUtils Error): Creating ~/storage directory file at path "/data -- #: [Bug]: Error in ResultReturner -- #: [Bug]: weird thing happened and then app crashed -- #: [Bug]: Termux app crash when sharing text with very long title -- #: [Bug]: UI misalignment on "New named session" / "Set session name" screen -- #: [Bug]: termux-reload-settings doesn't apply configuration in termux.properties (even after device restart) -- #: Bad mirrors are still detected as available -- #: [Bug]: `termux-change-repo` dies with -9 (oom?) -- #: [Bug]: GPG Error during Termux Update in WSA Environment (Subprocess apt-key exited unexpectedly) -- #: [Bug]: Devan─ügar─½ characters not rendered correctly -- #: [Bug]: Symlinking `~/downloads` results in truncated shared file -- #: [Bug]: An error returned when use SSH with key in Tergent after update -- #: Bug:multiple keys press -- #: [Bug]: termux-job-scheduler crashes? -- #: [Bug]: sshd no longer works -- #: [Bug]: Unable to Type in Termux with Microsoft SwiftKey -- #: [Bug]: Multiple " - " whenever I use termux -- #: [Bug]: The command "termux-setup-storage" is not working -- #: [Bug]: Termux doesn't apply colors.properties -- #: kbdless manpage -- #: [Bug]: Flask Server in Termux Requires Focus Switch to Process Requests -- #: [Bug]: `extra-keys` configuration fails to parse backslash (`\`) character in `termux.properties` -- #: [Feature report]: self-updatable application -- #: rc funct keys -- #: [Bug]: Character offset issue -- #: [Bug]: Termux XFCE installation failing in version 118.0 -- #: [Bug]: termux-setup-storage fails silently and randomly -- #: [Bug]: Random crash -- #: [Bug]: Crashing after running wine(and opening wps program) in proot-distro (such as debian) using DE XFCE -- #: [Bug]: termux not recognizing caps-lock as ctrl on physical keyboard -- #: [Bug]: expand/collapse notification-bar using `cmd` failed -- #: [Bug]: the public key is not available -- #: [Bug]: Slightly misaligned powershell symbols -- #: Text formatting breaking when phone rotated and copy has additional spaces -- #: [Bug]: virtual keyboard: Ctrl key followed by characters in the extra keys row is not detected -- #: [Bug]: too many letters -- #: [Bug]: Unable to type in termux using external braille keyboard -- #: [Bug]: Termux fails to start after a few days of being installed with bindService crash -- #: [Bug]: Closing termux android window just kills termux -- #: [Bug][Proposal]: New Termux app versionCode spec to solve app store issues -- #: [Bug]: Some characters are squished when using certain fonts -- #: Arrow keys not working on samsung keyboard[Bug]: -- #: [Bug]: First word repeats when using "swype" to type. -- #: [Bug]: Memory -- #: [Bug]: termux-file-editor running after sharing links with unknown/not included uri schemes -- #: [Bug]: Keyboard hides when copying text to clipboard in Termux -- #: [Bug]: text input view cannot work when bluetooth keyboard is connected -- #: strange glitch happening when using buttons -- #: [Bug]: termux crash -- #: Scrolling through terminal output is hard -- #: [Bug]: Fullscreen don't work with android 13 -- #: Cursor colour turns grayish black on turning on dark mode. -- #: [Bug]: Termux terminal focus reporting is a bug or not implemented -- #: [Bug]: -- #: [Bug]: when signature termux-app with system key, it seems not work. -- #: [Bug]: termux-open does not seem to work with Android 13 (should it?) -- #: [Bug]: Incorrect handling of "Erase in Line" on wrapped line -- #: [Bug]: Why can't my computer connect to termux with ssh? -- #: [Bug]: termux inconsistently crashes when resizing -- #: [Bug]: Termux Auto Crash -- #: [Bug]: Termux text select -> copy removes newlines -- #: [Bug]: `termux-open-url` opens 1 page when called rapidly, and sometimes crashes -- #: [Bug]: "soft keyboard only if no hardware keyboard" doesn't always work -- #: [Bug]: sometimes backspace deletes many characters -- #: dpkg: error: cannot access archive '/data/data/com.termux/cache/apt/archives/less_633-1_aarch64.deb' -- #: [Bug]: ^\ (SIGQUIT) shortcut doesn't work on QWERTZ layout -- #: [Bug]: DocumentsUI crash -- #: [Bug]: onHandleIntent not firing when calling RUN_COMMAND service from module -- #: [Bug]: Error while run script php -- #: [Bug]: When a hardware keyboard is connected and Termux is in the foreground, if Home or Recent apps buttons are pressed then the software keyboard becomes unresponsive -- #: [Bug]: xdg-open can't open files containing % character. -- #: [Bug]: its a wierd bug. Pasting an emoji with openboard crashes termux. -- #: [Bug]: terminal characters shaking (video) -- #: [Bug]: The LICENSE file describing termux-shared does not appear to allow the use case described in the wiki. -- #: [Bug]: last character gets stripped on STDIN -- #: [Bug]: with a hardware keyboard, random missing key presses / keys swapped -- #: Can't start or uninstall termux -- #: [Bug]: Termux crashed. -- #: Access to Termux private storage directory on External Storage (SD card) stopped working -- #: [Bug]: Invisible session number text in toast message -- #: [Bug]: termux-usb -l loads infinity -- #: [Bug]: The bootstrap package should be built along with the apk in F-Droid build -- #: [Bug]: Text input mode cannot be changed -- #: [Feature]: add timestamps to crash report filename. -- #: This is a question -- #: [Bug]: Termux randomly starts itself -- #: [Bug]: Termux can't connect to internet anyway -- #: [Bug]: Wrong TERM set -- #: [Bug]: Termux-storage-setup Crash -- #: [Bug]: Termux special keys comes with a big black space -- #: [Bug]: Cannot ping domains with roman symbols? -- #: [Bug]: physical keyboard Fn key not work -- #: [Bug]: Hardware keyboard Alt+Ctrl+key is not working -- #: [Bug]: Keyboard sometimes does not pop up -- #: [Bug]: F-Droid signatures -- #: [Bug]: Written file corrupted via Storage Access Framework on Android 11 -- #: [Bug]: terminal newlines sometimes after switching back from long time get messed upa -- #: [Bug]: spaces in commands get deleted -- #: [Bug]: Can't manipulate files from external app -- #: [Bug]: TMPDIR is not wiped correctly -- #: [Bug]: Key press bug -- #: ╦ïCTRL ALT -╦ï dont change font size -- #: Termux does not work on MiReader -- #: Continuous haptic bell / ^[OS characters inserted -- #: Line breaks and copy issues -- #: Extra key view not rescaling after termux-reload-settings -- #: Termux Android Things Crash First Launch -- #: Termux doesn't terminate ssh connection on exit -- #: Force closes on external 4k display on a Chromebook -- #: bidi behavior inconsistent; possibility to enable/disable bidi in termux settings? -- #: ChromeOS set to Dvorak, Termux uses Qwerty -- #: Keyboard backspace key sends DEL -- #: Powerline fonts doesn't work when using Tmux remotely within a local Tmux session -- #: Letters being added after any commands not in the dictionary (Samsung keyboard with "Auto check spelling" enabled) -- #: Ctrl+Alt shortcut modifier change breaks Pixel C Keyboard -- #: Holding any key on chrome OS doesn't send repeated key presses -- #: big crash bug -- #: halfwidth/fullwidth key doesn't work since 0.38 -- #: Font broken on "i" and "l" -- #: termux cannot take the underlined candidates with soft keyboards -- #: Blackberry Priv keyboard problem (Alt sends escape) -- #: Ctrl key with Sogou Pinyin doesn't work -- #: ESC key does not work with bluetooth keyboard and Google Pinyin input + +- #5092: [Bug]: Yet another potential ANR / main-thread blocking risk +- #3478: [Bug]: Termux Auto Crash +- #152: big crash bug ## Bucket B -- #: [Feature]: Stylize GitHub as "GitHub" in the app and in related resources -- #: [Feature]: terminal-view Documentation not available -- #: [Bug]: termux.properties doesn't work when it's a symlink -- #: [Feature]: A developer-signed, non-debuggable variant of Termux on GitHub Releases -- #: [Feature]: Ability to use emacs shortcuts -- #: [Feature]: OSC sequence to change soft keyboard mode -- #: [Feature]: Confirmation when exiting from notification -- #: FIDO2/Webauthn support -- #: [Feature]: Add Blink Text Support to Termux Shell -- #: [Bug]: Run KMM on termux -- #: [Feature]: add support for right-to-left languages -- #: [Feature]: Support protocol scheme / Android App Links -- #: How to remap volume keys? -- #: Integrated graphics (VNC/SDL2) -- #: Terminal emulation: allow configuration of string sent by backspace key -- #: Kotlin adoption -- #: feature request: request for some accessibility impruvments -- #: Mouse tracking translates dragging with finger down to scroll wheel events -- #: Configuration to invert tap and long press actions in Select URL -- #: set custom brightness for termux -- #: Automatic reading of output with a screenreader -- #: Hardware Keyboard Mapping -- #: Use same color for bold text -- #: [Feature Request] Double tap word selection. -- #: Showing realtime images/videos with Termux? -- #: Add right-to-left languages support -- #: Are javadocs for termux source online anywhere? -- #: True italic font support -- #: Notify user whenever background session buffer changes -- #: [Feature Request] Termux as a downloader -- #: Change location of ~/bin/termux-url-opener -- #: Allow adjusting line-height -- #: Make the ~/bin/termux-url-opener script run in background -- #: Unable to use ctrl emulation if volume keys are used for navigation -- #: Add Talkback support -- #: Can termux access phone's bluetooth adapter? -- #: Feature Request: Recognize URL's to open in browser -- #: Multiplex control key -- #: launcher mode support? -- #: chromecast support -- #: Feature Request: sixel graphics mode -- #: Hide extra keys row when Keyboard is hidden -- #: Add "volup key" to new extra keys panel -- #: Enable Smooth Scrolling -- #: Support for terminal bell as a notification -- #: pageUp/Down gesture supported as pageUp/Down keys (or mouse wheel) -- #: Change keyboard type when asking for a password -- #: VR mode: Support for Steroscopic viewing and head tracking -- #: Add swipe gestures to switch between open terminals -- #: Option to get previous behavior with respect to hiding keyboard and entering ESC -- #: Add support for mouse gestures. + +- #5128: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps +- #4589: "extra-keys" of "termux.properties" malfunctioning +- #3245: [Feature]: Need Double-width rendering of ambiguous characters +- #787: Are javadocs for termux source online anywhere? ## Bucket C -- #: [Feature]: CLI commands to manage sessions -- #: [Feature]: Please Add Support For Bun.js Runtime -- #: [Feature]: when i install homeassistant : pip subprocess to install build dependencies did not run successfully. exit code:1 -- #: [Feature]: refreshing repo and upgrading after unpacking a bootstrap. -- #: [Feature]: Different font sizes for each session. -- #: [Feature]: add shortcuts to open existing session by index -- #: [Feature]: Exit sessions through the toolbar -- #: [Feature]: non-primary user bootstrap functionality -- #: Terminal Sessions change number -- #: Gesture navigation makes opening session drawer nearly impossible -- #: Option to disable/customise heads-up notification for background sessions -- #: With no menu button, I can't find a way to close a session -- #: termux-clipboard is not so easy to install (in order to support copy paste via pbcopy, pbpaste commands) -- #: Inconsistent touch response behavior within multiple pane screen session + +- #5148: [Bug]: Ctrl+PgUp Not registering +- #5146: [Bug]: +- #5145: [Bug]: Crash for termux-notification +- #5144: [Bug]: Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() on IOException +- #5139: [Bug]: Termux Usr Share Fonts Ttf Bug +- #5136: Vertical swipe close keyboard +- #5130: [Bug]: google-genai installation fails on Termux +- #5126: [Bug]: error completing install of intltool +- #5119: [Bug]: the control character "^[" (ESC unicode: 27) crash termux when pasted +- #5118: Add shortcut.toggle-input-mode (HW keyboard shortcut for extras-row Γçä text-input swipe) +- #5112: Fixed: sha256sums typo in debug_build.yml +- #5101: [Bug]: termux-storage-get hangs, never prompts for a file +- #5088: [Bug]: UI Flicker in Session Tab When Switching Sessions While Running Codex CLI +- #5086: [Bug]: Samsung OneUI 8.x: Performance issue with Termux app in the background +- #5083: [Feature]: Make terminal toolbar toggle scriptable +- #5080: IME switching fails when an external keyboard is attached +- #5076: [Bug] or [Feature]?: Distorted semigraphics (triangles) +- #5075: JIS external keyboard keys (YEN/RO/HENKAN/MUHENKAN/ZENKAKU_HANKAKU) are still not handled in current Termux +- #5066: [Bug]: ctrl+j to enter via KDE Connect is not working +- #5053: [Bug]: GPG signiatures broken or missing, dpkg extremely outdated +- #5048: [Bug]: Terminal session notification does not update session name when renamed via long-press +- #5047: [Bug]:Missing PendingIntent.FLAG_IMMUTABLE causes crash on Android 12+ (API 31+) +- #5035: [Bug]: One UI 8.x: big CPU cores are never used in tested Termux/proot workloads +- #5032: [Bug]: Termux 0.118.3 crashes on startup after fresh install [Android 16] +- #5027: [Bug]: Crashed +- #5026: [Bug]: No Keyboard overlay after Mainline Services update on Android 16. +- #5014: [Bug]: Soft keyboard flickers and disappears when returning to Termux +- #5011: [Bug]: Syncthing fails after upgrade to version 2.0.15 +- #4988: [Bug]: ZWJ is broken +- #4986: [Bug]: Weird visual spacing of italicized text in a text editor +- #4983: [Bug]: Grapheme cluster rendering faulty / inconsitent +- #4957: [Bug]: Termux refuses to open / download files. +- #4946: [Bug]: Termux startup scripts and crond behavior issues on Android 13 +- #4932: [Bug]: App crashes when trying to install nix inside of debian proot-distro +- #4922: [Feature]: Configure Text Input View +- #4913: [Feature]: CLI commands to manage sessions +- #4908: [Bug]: Cumulative ghost space in sd card +- #4900: Crash +- #4891: [Bug]: The. l2 s.coreutils's error is due to a problem with the Link2symlink mechanism of the termux. +- #4882: [Bug]: Extra keys glyph rendering inconsistent +- #4875: [Bug]: Crash Message Unknown package com.termux.api +- #4858: [Bug]: Bad Address, can't cd into /sdcard !! +- #4856: [Feature]: Please Add Support For Bun.js Runtime +- #4849: [Bug]: Background color not respected when started with scripts +- #4837: [Bug]: emacs tutorilal alt-v with external keybolard comes out clipboard +- #4819: [Bug]: termux-setup-storage doesnΓÇÖt create external-1 for USB drive on GrapheneOS +- #4748: [Feature]: mouse supporting in shell readline +- #4725: [Bug]: suddenly close +- #4723: [Fix]: Share data between Termux and Android applications +- #4704: [Bug]: zsh colors +- #4701: [Feature]: Search in terminal contents (program output) +- #4694: [Bug]: Crash when switching between Dex and non-Dex +- #4688: [Bug]: pip install psutil doesn't work +- #4687: [Bug]: Affects both Termux's Ubuntu & Arch, so it's a Termux bug: Julia's binary aarch64 now can't compile many packages. +- #4681: [Feature]: when i install homeassistant : pip subprocess to install build dependencies did not run successfully. exit code:1 +- #4677: [Bug]: +- #4661: [Feature]: Use sentence case for regular non-terminal view text +- #4658: [Bug]: escape-seq styling lost after resizing +- #4647: [Bug]: MIUI/Xiaomi HyperOS Mini Window Flickering Issue +- #4626: [Bug]: Software keyboard won't show at startup if "use-black-ui = true" in latest CI build +- #4619: [Bug]: pasting ESC char crashes the app +- #4614: [Bug]: Termux randomly crashes without any error message when a minecraft server is running +- #4582: [Bug]: Termux Setup Storage Error Error Code: 200 Error Message (FileUtils Error): Creating ~/storage directory file at path "/data +- #4575: [Bug]: Error in ResultReturner +- #4552: [Bug]: weird thing happened and then app crashed +- #4542: [Bug]: Termux app crash when sharing text with very long title +- #4527: [Bug]: UI misalignment on "New named session" / "Set session name" screen +- #4523: [Bug]: termux-reload-settings doesn't apply configuration in termux.properties (even after device restart) +- #4500: [Bug]: Devan─ügar─½ characters not rendered correctly +- #4499: [Bug]: Symlinking `~/downloads` results in truncated shared file +- #4482: [Bug]: An error returned when use SSH with key in Tergent after update +- #4481: [Feature]: Close app window on logout from shell +- #4478: Bug:multiple keys press +- #4465: [Bug]: termux-job-scheduler crashes? +- #4461: [Feature]: terminal-view Documentation not available +- #4457: [Bug]: sshd no longer works +- #4456: [Bug]: Unable to Type in Termux with Microsoft SwiftKey +- #4455: [Bug]: can't change shell to zsh +- #4444: [Bug]: Multiple " - " whenever I use termux +- #4440: [Bug]: The command "termux-setup-storage" is not working +- #4420: [Bug]: Termux doesn't apply colors.properties +- #4409: [Bug]: Flask Server in Termux Requires Focus Switch to Process Requests +- #4386: [Bug]: `extra-keys` configuration fails to parse backslash (`\`) character in `termux.properties` +- #4375: [Bug]: Character offset issue +- #4373: [Bug]: Termux XFCE installation failing in version 118.0 +- #4362: [Feature]: Toggle over keyboard keys +- #4347: [Bug]: termux-setup-storage fails silently and randomly +- #4294: [Bug]: Random crash +- #4283: [Bug]: Crashing after running wine(and opening wps program) in proot-distro (such as debian) using DE XFCE +- #4281: [Bug]: termux not recognizing caps-lock as ctrl on physical keyboard +- #4248: [Bug]: expand/collapse notification-bar using `cmd` failed +- #4243: [Bug]: the public key is not available +- #4232: [Bug]: Slightly misaligned powershell symbols +- #4183: Text formatting breaking when phone rotated and copy has additional spaces +- #4178: [Bug]: virtual keyboard: Ctrl key followed by characters in the extra keys row is not detected +- #4169: [Feature]: Enable "paste" keys of "Unexpected Keyboard" +- #4157: [Bug]: termux.properties doesn't work when it's a symlink +- #4156: [Feature]: Custom hard keyboard key repeat speed +- #4142: [Bug]: too many letters +- #4136: [Bug]: Unable to type in termux using external braille keyboard +- #4132: [Bug]: Termux fails to start after a few days of being installed with bindService crash +- #4120: [Feature]: Automatically update Termux on Android 14 with F-Droid +- #4103: [Bug]: Closing termux android window just kills termux +- #3952: [Bug]: Some characters are squished when using certain fonts +- #3944: Arrow keys not working on samsung keyboard[Bug]: +- #3941: [Bug]: First word repeats when using "swype" to type. +- #3939: [Bug]: Memory +- #3884: [Bug]: Keyboard hides when copying text to clipboard in Termux +- #3859: [Bug]: text input view cannot work when bluetooth keyboard is connected +- #3826: [Feature]: over-scroll and nested-scrolling animation in termux terminal-emulator +- #3818: strange glitch happening when using buttons +- #3791: [Feature]: allow changing max terminals limit +- #3786: [Bug]: termux crash +- #3749: Scrolling through terminal output is hard +- #3741: [Bug]: Fullscreen don't work with android 13 +- #3738: Cursor colour turns grayish black on turning on dark mode. +- #3733: [Feature]: OSC sequence to change soft keyboard mode +- #3579: [Bug]: +- #3576: [Bug]: when signature termux-app with system key, it seems not work. +- #3571: [Feature]: Expand soft keyboard popups to radial menus +- #3565: [Bug]: termux-open does not seem to work with Android 13 (should it?) +- #3549: [Bug]: Incorrect handling of "Erase in Line" on wrapped line +- #3544: [Bug]: Why can't my computer connect to termux with ssh? +- #3541: [Bug]: termux inconsistently crashes when resizing +- #3474: [Bug]: Termux text select -> copy removes newlines +- #3455: [Feature]: Add Blink Text Support to Termux Shell +- #3452: [Bug]: `termux-open-url` opens 1 page when called rapidly, and sometimes crashes +- #3450: [Bug]: "soft keyboard only if no hardware keyboard" doesn't always work +- #3449: [Bug]: sometimes backspace deletes many characters +- #3445: [Feature]: Different font sizes for each session. +- #3412: [Bug]: ^\ (SIGQUIT) shortcut doesn't work on QWERTZ layout +- #3401: [Bug]: Run KMM on termux +- #3348: [Bug]: DocumentsUI crash +- #3338: [Bug]: onHandleIntent not firing when calling RUN_COMMAND service from module +- #3283: [Bug]: Error while run script php +- #3265: Double Typing Characters when using Hardware Keyboard +- #3254: [Bug]: When a hardware keyboard is connected and Termux is in the foreground, if Home or Recent apps buttons are pressed then the software keyboard becomes unresponsive +- #3250: [Bug]: xdg-open can't open files containing % character. +- #3242: [Bug]: its a wierd bug. Pasting an emoji with openboard crashes termux. +- #3236: [Bug]: terminal characters shaking (video) +- #3150: [Bug]: The LICENSE file describing termux-shared does not appear to allow the use case described in the wiki. +- #3135: [Feature]: shell cmd to hide soft keyboard +- #3103: [Bug]: last character gets stripped on STDIN +- #3100: [Bug]: with a hardware keyboard, random missing key presses / keys swapped +- #3099: Can't start or uninstall termux +- #3070: [Bug]: Termux crashed. +- #3041: Access to Termux private storage directory on External Storage (SD card) stopped working +- #2942: [Bug]: Invisible session number text in toast message +- #2907: [Bug]: termux-usb -l loads infinity +- #2866: [Bug]: Text input mode cannot be changed +- #2847: [Feature]: terminal background image support +- #2845: This is a question +- #2796: [Bug]: Termux randomly starts itself +- #2766: [Feature]: add shortcuts to open existing session by index +- #2744: [Bug]: Wrong TERM set +- #2735: [Feature]: Ability to handle termux terminal resolution inside ~/.termux/termux.properties +- #2703: [Bug]: Termux-storage-setup Crash +- #2655: [Bug]: Termux special keys comes with a big black space +- #2611: [Bug]: physical keyboard Fn key not work +- #2585: [Bug]: Hardware keyboard Alt+Ctrl+key is not working +- #2551: [Bug]: Keyboard sometimes does not pop up +- #2526: [Feature]: add 'Autofill password' to terminal toolbar +- #2480: [Bug]: F-Droid signatures +- #2460: [Bug]: Written file corrupted via Storage Access Framework on Android 11 +- #2451: [Feature]: Exit sessions through the toolbar +- #2443: [Bug]: terminal newlines sometimes after switching back from long time get messed upa +- #2421: [Bug]: spaces in commands get deleted +- #2415: [Bug]: Can't manipulate files from external app +- #2390: [Feature]: add `TextInput` to extra key row +- #2386: [Feature]: add single button arrow keys in overlay keyboard +- #2350: [Bug]: TMPDIR is not wiped correctly +- #2279: [Bug]: Key press bug +- #2263: How to remap volume keys? +- #2156: Autorepeat gets stuck when pressing two arrows or arrow+DEL/BKSP at the same time on extra keys bar +- #2141: Terminal Sessions change number +- #2109: Audio not working when connected to Android Auto +- #2108: copied text includes whitespace +- #1990: Stop fling scroll anytime +- #1984: Run termux-url-opener without opening terminal in background +- #1860: Weird rendering when using specific shell theme and then recalling command history with long commands +- #1839: Typing in Korean with an external keyboard +- #1808: Terminal emulation: allow configuration of string sent by backspace key +- #1792: termux-url-opener just flashes when termux is currently open +- #1758: hardware keyboard - modifier keys not delivered with cursor keys and page up / down +- #1731: touchscreen ime keyboard key"enter" and "backspace" invalid sometimes +- #1724: Selection popup not visible at small font + bottom of screen +- #1620: can no longer produce modifier Alt + Shift +- #1544: [RFE] Allow Termux Styles to define a color for extra keys background +- #1539: Gboard keyboard can not be used properly in termux +- #1525: Termux does not support immersive mode properly on Samsung One UI +- #1519: ╦ïCTRL ALT -╦ï dont change font size +- #1513: Termux does not work on MiReader +- #1463: German keyboard layout problem: '<' and '>' keys wrongly mapped +- #1449: Add ability to set combination prefix for hardware keyboard +- #1444: Hardware Blackberry keyboard and CTRL+Y +- #1361: Some Termux key-bindings don't work on Chromebook (with hardware keyboard) +- #1343: Virtual keyboard doesn't load in Chrome Tab 10 +- #1326: On ChromeOS, in full-screen mode, with "shelf" auto-hiding enabled, Termux has a big chunk of unused space at the bottom of its display +- #1325: Gesture navigation makes opening session drawer nearly impossible +- #1296: Long lines with \r are not handled properly +- #1210: Hardware Keyboard Mapping +- #1199: Text selection does not invert pure white characters +- #1162: Fingerprint reader proceseses as swung dash keystroke ~ +- #1157: Chromebook: single keystroke lag +- #1147: Option to disable/customise heads-up notification for background sessions +- #1090: Physical keyboard: buttons CTRL, ESC, SHIFT are not working +- #1089: [Feature Request] Keyboard autocomplete suggestions +- #1003: Extra key view not rescaling after termux-reload-settings +- #993: Cannot share files with specific app +- #931: With no menu button, I can't find a way to close a session +- #899: termux-clipboard is not so easy to install (in order to support copy paste via pbcopy, pbpaste commands) +- #734: Software keyboard+ extra rows takes too much screen estate +- #725: chromeos: better support for using terminal mouse events AND selection/copy? +- #588: Notify user whenever background session buffer changes +- #575: Better hotkey support for hardware keyboards +- #538: keyboard overlapping cli input +- #475: Chromebook Flip in tablet mode: on-screen keyboard does not appear +- #465: Convert text navigation gestures into arrow key inputs +- #338: Small bar at top of terminal for the title +- #328: Inconsistent touch response behavior within multiple pane screen session +- #325: Support for disabling softkeyboard in case bluetoothkeyboard is present +- #212: Keyboard backspace key sends DEL +- #206: launcher mode support? +- #180: Powerline fonts doesn't work when using Tmux remotely within a local Tmux session +- #176: Letters being added after any commands not in the dictionary (Samsung keyboard with "Auto check spelling" enabled) +- #161: Ctrl+Alt shortcut modifier change breaks Pixel C Keyboard +- #140: Hide extra keys row when Keyboard is hidden +- #115: Support for terminal bell as a notification +- #101: pageUp/Down gesture supported as pageUp/Down keys (or mouse wheel) +- #91: termux cannot take the underlined candidates with soft keyboards +- #70: Change keyboard type when asking for a password +- #63: Blackberry Priv keyboard problem (Alt sends escape) +- #48: Add swipe gestures to switch between open terminals +- #43: Option to get previous behavior with respect to hiding keyboard and entering ESC +- #40: ESC key does not work with bluetooth keyboard and Google Pinyin input ## Bucket D -- #: [Feature]: Separate nonfree packages into a distinct Termux repository -- #: [Feature]: Ability to inject `init.sh` or `boot.sh` into the APK -- #: [Bug]: Termux auto delete application on PM2 after reboot device -- #: [Feature]: Is it possible to build termux-app with pacman as the default package manager? -- #: Feature: Lightweight flavor of the app without package management -- #: {Idea} is it possible to keep termux boot services open? -- #: Want To Close Termux-API When We Exit Termux + +- #4690: [Feature]: Ability to inject `init.sh` or `boot.sh` into the APK +- #3360: [Bug]: Termux auto delete application on PM2 after reboot device +- #2892: [Bug]: The bootstrap package should be built along with the apk in F-Droid build +- #2291: [Feature]: non-primary user bootstrap functionality +- #1356: {Idea} is it possible to keep termux boot services open? +- #1085: Want To Close Termux-API When We Exit Termux ## Bucket E -- #: [Feature]: App Report Issue feature should include detailed CPU information -- #: Report Text -- #: [README] Bintray repository hosting shut down | Error 403 Forbidden | Error 404 -- #: TIOCGWINSZ reports zero window rows/cols until screen is rotated + +- #5147: [Bug]: pkg update && pkg upgrade failed +- #5124: [Bug]:Serious 404 Repository Errors and Environment Crashes on Android +- #5002: [Bug]: can't be install in phone second space +- #4996: [Bug]: crash report +- #4927: [Feature]: Separate nonfree packages into a distinct Termux repository +- #4860: [Bug]:Cannot hide extra-key +- #4707: [Feature]: App Report Issue feature should include detailed CPU information +- #4706: [Bug]: Report Crash When After Exiting Neovim +- #4640: [Bug]: ctrl space as prefix doesnot work in tmux +- #4639: [Bug]: Selecting text in `tilde` editor doesn't work properly +- #4632: [Feature]: interactive RUN_COMMAND +- #4583: Report Text +- #4517: Bad mirrors are still detected as available +- #4511: [Bug]: `termux-change-repo` dies with -9 (oom?) +- #4503: [Bug]: GPG Error during Termux Update in WSA Environment (Subprocess apt-key exited unexpectedly) +- #4384: [Feature report]: self-updatable application +- #4096: [Feature]: refreshing repo and upgrading after unpacking a bootstrap. +- #4016: [Feature] Support secondary display +- #3935: [Bug]: termux-file-editor running after sharing links with unknown/not included uri schemes +- #3650: [Bug]: Termux terminal focus reporting is a bug or not implemented +- #3448: dpkg: error: cannot access archive '/data/data/com.termux/cache/apt/archives/less_633-1_aarch64.deb' +- #2850: [Feature]: add timestamps to crash report filename. +- #2778: [Bug]: Termux can't connect to internet anyway +- #2618: [Bug]: Cannot ping domains with roman symbols? +- #2067: [README] Bintray repository hosting shut down | Error 403 Forbidden | Error 404 +- #1796: Please make shourcut icons adaptive +- #1425: Continuous haptic bell / ^[OS characters inserted +- #1290: Adaptive icons in application shortcuts +- #1008: Adaptive icon looks bad on the dark background +- #660: TIOCGWINSZ reports zero window rows/cols until screen is rotated +- #235: Can termux access phone's bluetooth adapter? ## Bucket F -- #: [Feature]: Optional Camera and Microphone Permission Toggles -- #: [Feature]: declare MANAGE_VIRTUAL_MACHINE permission -- #: [Feature]: Auto-generate PIN and Enhanced Device Management -- #: [Feature]: Support to run scripts when invoked through sharing to Termux from other apps (Android Go) -- #: Two changes for Android/Fire TV users -- #: [Feature]: Automatically update Termux on Android 14 with F-Droid -- #: [Feature]: Render the "Device Info" and "App Info" sections as tables, not lists. -- #: [Feature]: See a list of apps that have permission to access termux storage, and manage the permission -- #: [Feature]: Zoom on device without touchscreen (WSA) -- #: Revisit the Android W^X problem -- #: Audio not working when connected to Android Auto -- #: Not able to connect Mosquitto which is running On ANDROID(TERMUX) -- #: Termux in android TV not working as should be + +- #4968: [Feature]: Optional Camera and Microphone Permission Toggles +- #4960: [Feature]: declare MANAGE_VIRTUAL_MACHINE permission +- #4721: [Feature]: Auto-generate PIN and Enhanced Device Management +- #4621: [Feature]: Support to run scripts when invoked through sharing to Termux from other apps (Android Go) +- #4192: Two changes for Android/Fire TV users +- #4029: [Feature]: Render the "Device Info" and "App Info" sections as tables, not lists. +- #2980: [Feature]: See a list of apps that have permission to access termux storage, and manage the permission +- #2896: [Feature]: Support protocol scheme / Android App Links +- #2383: [Feature]: Zoom on device without touchscreen (WSA) +- #2155: Revisit the Android W^X problem +- #1977: Not able to connect Mosquitto which is running On ANDROID(TERMUX) +- #1432: Termux in android TV not working as should be +- #961: Termux Android Things Crash First Launch ## Bucket G -- #: External Compatibility Testing for Newer Build JDKs in termux-app -- #: [Feature]: Flick down on extra-keys row -- #: Vertical swipe close keyboard -- #: [Feature]: Add parameter --display to `am start` -- #: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps -- #: Add shortcut.toggle-input-mode (HW keyboard shortcut for extras-row Γçä text-input swipe) -- #: [Feature]: Make terminal toolbar toggle scriptable -- #: IME switching fails when an external keyboard is attached -- #: JIS external keyboard keys (YEN/RO/HENKAN/MUHENKAN/ZENKAKU_HANKAKU) are still not handled in current Termux -- #: [Feature]: Support the Kitty image protocol to show images -- #: [Feature]: termux-file-editor: default filename -- #: [Feature]: Drag and drop support -- #: [Feature]: Stream execution results for run command -- #: Feature request: per-app orientation lock in Settings UI -- #: [Feature]: please improve survival rate -- #: [Feature]: Allow arbitrary key code (sequence) as special key -- #: [Feature]: Allow apps to enable long-press right-click emulation -- #: [Feature]: Configure Text Input View -- #: [Feature]: dynamic shortcuts for main termux-app icon -- #: [Feature]: termux passwordless ssh server -- #: [Feature]: Use the de-facto standard VGA color palette as the default color scheme for termux -- #: [Feature]: Wear OS Companion -- #: [Feature]: Bypassing Phantom Killer Using a LADB-Like Solution -- #: [Feature]: Indicate `stty size` While Resizing -- #: [Feature]: claude code key mapping -- #: [Feature]: mouse supporting in shell readline -- #: [Feature]: Accessibility Improvements -- #: [Feature]: Support swipe.down on extra-keys for Ctrl+C -- #: [Feature]: Search in terminal contents (program output) -- #: [Feature]: Move termux.properties and related file preferences into Termux's settings -- #: [Feature]: Use sentence case for regular non-terminal view text -- #: [Feature]: interactive RUN_COMMAND -- #: [Feature]: Pass URI Intent as Text to Termux -- #: [Feature]: Camera access -- #: [Feature]: MainActivity should accept the RUN_COMMAND intent. -- #: [Feature]: publish Termux on Accrescent -- #: [Feature]: Close app window on logout from shell -- #: [Bug]: can't change shell to zsh -- #: [Feature]: termux-app should detect phantom process killer enabled -- #: [Feature]: Multiple Extra Key Panels? -- #: [Feature]: Toggle over keyboard keys -- #: Use SwiftTerm instead? -- #: [Feature]: Enhancing Termux Accessibility for Visually Impaired Users -- #: [Feature]: Mouse tracking shouldn't block scrollback -- #: Screen Zoom support for one hand use -- #: [Feature]: colors.properties separate for light and dark theme -- #: [Feature]: Hack key bindings -- #: [Feature]: remove from the recent tasks list on exit -- #: [Feature]: Make the color of the extra buttons changeable -- #: [Feature]: Actual Navigation with Touch Screen -- #: Proposal for adding accessibility in Termux -- #: [Feature]: Enable "paste" keys of "Unexpected Keyboard" -- #: [Feature]: Custom hard keyboard key repeat speed -- #: [Feature]: Support pasting with Ctrl + shift + V -- #: [Feature]: `termux-about.log` should be `termux-about.md`. -- #: [Feature] Support secondary display -- #: [Feature]: Support "termux:" scheme when temux-scheme-opener script is created. -- #: [Feature]: Change the mouse wheel scroll rate. -- #: [Feature]: overlay for preventing termux-app from going to background -- #: CTRL + space bar should become CTRL-@ -- #: [Feature]: Material 3 design -- #: [Feature]: Screen dimming in Termux settings -- #: [Feature]: Custom bell sound -- #: [Feature]: over-scroll and nested-scrolling animation in termux terminal-emulator -- #: [Feature]: allow changing max terminals limit -- #: [Feature]: incremental wakelock -- #: [Feature]: Support for multiple sets of extra-keys -- #: [Feature]: Expand soft keyboard popups to radial menus -- #: Scrolling screenshot -- #: [Feature]: Remove window from the recent apps menu on ctrl-d -- #: Fire TV support? -- #: [Feature]: Corrective releases (revisions?) -- #: [Feature]: add support to connect with usb-serial instead of pseudo-tty -- #: Double Typing Characters when using Hardware Keyboard -- #: [Feature]: option to hide extra key bar when IME is hidden -- #: [Feature]: Need Double-width rendering of ambiguous characters -- #: [Feature]: hide plugin desktop icon -- #: [Feature]: shell cmd to hide soft keyboard -- #: [Feature]: Allow different zoom levels in Samsung DeX / phone screen -- #: [Feature]: Urls/Links Receiver -- #: [Feature]: Support for CSI 14 -- #: [Feature]: Self-update -- #: [Feature]: terminal background image support -- #: [Feature]: Use same directory to resotore config file of termux, not seperately -- #: [Feature]: request navigation bar -- #: [Feature]: Multi-user support -- #: [Feature]: Ability to handle termux terminal resolution inside ~/.termux/termux.properties -- #: [Feature]: Support secondary users via binary patching and extra slashes -- #: [Feature]:copy content from termux to other app -- #: [Feature]: pass to URI to `termux-file-editor` which enables file saving -- #: [Feature]: Need CSI 5 m (blink) support -- #: [Feature]: Plugins without shared UID -- #: [Feature]: A key for extra-keys which opens a menu to select a less commonly used `supported keys` -- #: [Feature]: termux-file-editor -- #: [Feature]: Add multiple popup keys for the extra keys -- #: [Feature]: Support NerdFont double-width characters -- #: [NOTICE] 2022-02-15 Termux Apps Vulnerability Disclosures -- #: Let screen readers catch cursor position -- #: [Feature]: separate termux for root -- #: [Feature]: add 'Autofill password' to terminal toolbar -- #: [Feature]: Add rebinding of hardware shortcuts. -- #: [Feature]: cursor navigation by holding/pressing spacebar -- #: [Feature]: add `TextInput` to extra key row -- #: [Feature]: add single button arrow keys in overlay keyboard -- #: [Feature]: Scrolling by swiping in programs which expect and key presses for that -- #: [Feature]: Enable Seedvault encrypted backups -- #: [Feature]: Multiple file sharing to termux -- #: [Feature]: Override the color of the status and navigation bar s -- #: Presence of a border when running cli apps in termux -- #: Autorepeat gets stuck when pressing two arrows or arrow+DEL/BKSP at the same time on extra keys bar -- #: Asking for an 1x1 font (size) -- #: Feature Request : Auto adjust font and app element sizes when Display Density (DPI) changed -- #: copied text includes whitespace -- #: Stop fling scroll anytime -- #: Run termux-url-opener without opening terminal in background -- #: Feature request: USB and getty -- #: Python speech recognition not working. -- #: Optionally send raw file data to termux-file-editor -- #: Remove file save dialog before termux-file-editor call -- #: Weird rendering when using specific shell theme and then recalling command history with long commands -- #: Typing in Korean with an external keyboard -- #: Please make shourcut icons adaptive -- #: termux-url-opener just flashes when termux is currently open -- #: hardware keyboard - modifier keys not delivered with cursor keys and page up / down -- #: support for the Samsung S-pen button -- #: touchscreen ime keyboard key"enter" and "backspace" invalid sometimes -- #: Selection popup not visible at small font + bottom of screen -- #: Text file navigation: keep cursor moving when holding VolUp+WASD -- #: can no longer produce modifier Alt + Shift -- #: URL picker: cannot copy multiline url -- #: [RFE] Allow Termux Styles to define a color for extra keys background -- #: Gboard keyboard can not be used properly in termux -- #: Termux does not support immersive mode properly on Samsung One UI -- #: German keyboard layout problem: '<' and '>' keys wrongly mapped -- #: Toggling services like location services -- #: Add ability to set combination prefix for hardware keyboard -- #: Hardware Blackberry keyboard and CTRL+Y -- #: can we set *keep screen on* option through command line ? -- #: Some Termux key-bindings don't work on Chromebook (with hardware keyboard) -- #: Virtual keyboard doesn't load in Chrome Tab 10 -- #: Termux not recognizing " character and ' character on chromebook os 77 -- #: On ChromeOS, in full-screen mode, with "shelf" auto-hiding enabled, Termux has a big chunk of unused space at the bottom of its display -- #: Samsung Dex support - multiple windows -- #: Horizontal scrolling for vi -- #: Long lines with \r are not handled properly -- #: Adaptive icons in application shortcuts -- #: double∩╝ìclick trigger tab -- #: Unable to pause autoscrolling -- #: default to the default key line when the property read for extra-keys fails -- #: Text selection does not invert pure white characters -- #: Turn off vibrate when using Extra Keys -- #: Fingerprint reader proceseses as swung dash keystroke ~ -- #: Chromebook: single keystroke lag -- #: Set term size via termux.properties -- #: Physical keyboard: buttons CTRL, ESC, SHIFT are not working -- #: [Feature Request] Keyboard autocomplete suggestions -- #: Increase scrollback -- #: Adaptive icon looks bad on the dark background -- #: Cannot share files with specific app -- #: Notification text is too dark -- #: Termux on rasperrby pi 3 with 7" screen aliasing -- #: Support styled underlines -- #: I can't write / -- #: Scrolling sideways when autowrap is disabled -- #: Visible bell? -- #: Allowing to adjust line-height of termux -- #: termux-file-editor does not modify original file but a copy in downloads -- #: Request: horizontal mouse wheel (from left/right touch swipes) -- #: Software keyboard+ extra rows takes too much screen estate -- #: chromeos: better support for using terminal mouse events AND selection/copy? -- #: Alt-V volume keybinding interferes with readline -- #: Allow swipes to perform custom actions -- #: Add hundreds of downloadable fonts to termux (discussion) -- #: Console renders standard variants as emoji's -- #: Request: Option to open Help Pages in Browser -- #: WebView disappear after exiting and re-entering app -- #: Illegible background using "Black on white" or "White on black" themes -- #: Termux:Sudo Addon proposal -- #: more Mouse Click events -- #: Bold text enforces bright colours -- #: Handling ACTION_EDIT in TermuxOpenReceiver -- #: Better hotkey support for hardware keyboards -- #: Add a custom url handler -- #: keyboard overlapping cli input -- #: Support multicast DNS (mdns) via MulticastLock -- #: Configure what volume buttons do? -- #: Fullscreen / immersive mode option is gone -- #: Not able to access SDCard on Chromebook. -- #: Chromebook Flip in tablet mode: on-screen keyboard does not appear -- #: Convert text navigation gestures into arrow key inputs -- #: Auto-set TZ environment variable -- #: Key Enter is sent repeatedly after start on chromebook after chsh -s zsh and back to bash -- #: Launch scripts via app shortcuts -- #: cut and paste on chromebook -- #: Wallpaper -- #: floating button idea -- #: Small bar at top of terminal for the title -- #: Support for disabling softkeyboard in case bluetoothkeyboard is present -- #: Suggestion: pass in additional text in `termux-url-opener` -- #: Caps lock key not working. +- #5142: External Compatibility Testing for Newer Build JDKs in termux-app +- #5138: [Feature]: Flick down on extra-keys row +- #5133: [Feature]: Add parameter --display to `am start` +- #5093: [Bug]: Potential main-thread blocking risk +- #5068: [Feature]: Support the Kitty image protocol to show images +- #5063: [Feature]: termux-file-editor: default filename +- #5041: [Feature]: Drag and drop support +- #5018: [Feature]: Stream execution results for run command +- #5017: [Bug]: Help Failed to download and build `cffi==2.0.0` +- #5008: Feature request: per-app orientation lock in Settings UI +- #5001: [Feature]: please improve survival rate +- #4987: [Feature]: Allow arbitrary key code (sequence) as special key +- #4958: [Feature]: Allow apps to enable long-press right-click emulation +- #4912: [Feature]: dynamic shortcuts for main termux-app icon +- #4894: [Feature]: termux passwordless ssh server +- #4889: [Feature]: Use the de-facto standard VGA color palette as the default color scheme for termux +- #4865: [Feature]: Wear OS Companion +- #4857: [Feature]: Bypassing Phantom Killer Using a LADB-Like Solution +- #4845: [Feature]: Indicate `stty size` While Resizing +- #4840: [Feature]: claude code key mapping +- #4770: [Feature]: Stylize GitHub as "GitHub" in the app and in related resources +- #4742: [Feature]: Accessibility Improvements +- #4728: [Feature]: Support swipe.down on extra-keys for Ctrl+C +- #4665: [Feature]: Move termux.properties and related file preferences into Termux's settings +- #4618: [Feature]: Pass URI Intent as Text to Termux +- #4591: [Feature]: Camera access +- #4546: [Feature]: MainActivity should accept the RUN_COMMAND intent. +- #4520: [Feature]: publish Termux on Accrescent +- #4418: kbdless manpage +- #4388: [Feature]: termux-app should detect phantom process killer enabled +- #4383: rc funct keys +- #4365: [Feature]: Multiple Extra Key Panels? +- #4353: Use SwiftTerm instead? +- #4304: [Feature]: Enhancing Termux Accessibility for Visually Impaired Users +- #4302: [Feature]: Mouse tracking shouldn't block scrollback +- #4286: Screen Zoom support for one hand use +- #4258: [Feature]: colors.properties separate for light and dark theme +- #4218: [Feature]: Hack key bindings +- #4214: [Feature]: remove from the recent tasks list on exit +- #4198: [Feature]: Make the color of the extra buttons changeable +- #4189: [Feature]: Actual Navigation with Touch Screen +- #4175: Proposal for adding accessibility in Termux +- #4126: [Feature]: Support pasting with Ctrl + shift + V +- #4095: [Feature]: `termux-about.log` should be `termux-about.md`. +- #4094: [Feature]: A developer-signed, non-debuggable variant of Termux on GitHub Releases +- #4012: [Bug][Proposal]: New Termux app versionCode spec to solve app store issues +- #3945: [Feature]: Support "termux:" scheme when temux-scheme-opener script is created. +- #3932: [Feature]: Ability to use emacs shortcuts +- #3929: [Feature]: Change the mouse wheel scroll rate. +- #3903: [Feature]: overlay for preventing termux-app from going to background +- #3896: CTRL + space bar should become CTRL-@ +- #3852: [Feature]: Material 3 design +- #3838: [Feature]: Screen dimming in Termux settings +- #3829: [Feature]: Custom bell sound +- #3713: [Feature]: Confirmation when exiting from notification +- #3694: [Feature]: incremental wakelock +- #3601: [Feature]: Support for multiple sets of extra-keys +- #3554: Scrolling screenshot +- #3539: [Feature]: Remove window from the recent apps menu on ctrl-d +- #3477: Fire TV support? +- #3465: [Feature]: Corrective releases (revisions?) +- #3461: FIDO2/Webauthn support +- #3429: [Feature]: add support to connect with usb-serial instead of pseudo-tty +- #3263: [Feature]: option to hide extra key bar when IME is hidden +- #3248: [Feature]: Is it possible to build termux-app with pacman as the default package manager? +- #3194: [Feature]: hide plugin desktop icon +- #3119: [Feature]: Allow different zoom levels in Samsung DeX / phone screen +- #3024: [Feature]: Urls/Links Receiver +- #3002: [Feature]: Support for CSI 14 +- #2995: [Feature]: Self-update +- #2953: [Feature]: add support for right-to-left languages +- #2826: [Feature]: Use same directory to resotore config file of termux, not seperately +- #2785: [Feature]: request navigation bar +- #2765: [Feature]: Multi-user support +- #2734: [Feature]: Support secondary users via binary patching and extra slashes +- #2725: [Feature]:copy content from termux to other app +- #2658: [Feature]: pass to URI to `termux-file-editor` which enables file saving +- #2656: [Feature]: Need CSI 5 m (blink) support +- #2654: [Feature]: Plugins without shared UID +- #2649: [Feature]: A key for extra-keys which opens a menu to select a less commonly used `supported keys` +- #2632: [Feature]: termux-file-editor +- #2624: [Feature]: Add multiple popup keys for the extra keys +- #2602: [Feature]: Support NerdFont double-width characters +- #2595: [NOTICE] 2022-02-15 Termux Apps Vulnerability Disclosures +- #2543: Let screen readers catch cursor position +- #2536: [Feature]: separate termux for root +- #2505: [Feature]: Add rebinding of hardware shortcuts. +- #2488: [Feature]: cursor navigation by holding/pressing spacebar +- #2355: [Feature]: Scrolling by swiping in programs which expect and key presses for that +- #2312: [Feature]: Enable Seedvault encrypted backups +- #2285: [Feature]: Multiple file sharing to termux +- #2259: [Feature]: Override the color of the status and navigation bar s +- #2201: Feature: Lightweight flavor of the app without package management +- #2177: Presence of a border when running cli apps in termux +- #2142: Asking for an 1x1 font (size) +- #2134: Feature Request : Auto adjust font and app element sizes when Display Density (DPI) changed +- #2059: Integrated graphics (VNC/SDL2) +- #1921: Feature request: USB and getty +- #1894: Python speech recognition not working. +- #1888: Optionally send raw file data to termux-file-editor +- #1887: Remove file save dialog before termux-file-editor call +- #1744: support for the Samsung S-pen button +- #1718: Text file navigation: keep cursor moving when holding VolUp+WASD +- #1599: Kotlin adoption +- #1586: feature request: request for some accessibility impruvments +- #1636: URL picker: cannot copy multiline url +- #1451: Toggling services like location services +- #1416: can we set *keep screen on* option through command line ? +- #1397: Line breaks and copy issues +- #1384: Mouse tracking translates dragging with finger down to scroll wheel events +- #1338: Configuration to invert tap and long press actions in Select URL +- #2698: set custom brightness for termux +- #1331: Termux not recognizing " character and ' character on chromebook os 77 +- #1310: Automatic reading of output with a screenreader +- #1308: Samsung Dex support - multiple windows +- #1306: Horizontal scrolling for vi +- #1243: double∩╝ìclick trigger tab +- #1242: Unable to pause autoscrolling +- #1208: default to the default key line when the property read for extra-keys fails +- #1183: Turn off vibrate when using Extra Keys +- #1148: Set term size via termux.properties +- #1112: Use same color for bold text +- #1045: Increase scrollback +- #992: [Feature Request] Double tap word selection. +- #981: Showing realtime images/videos with Termux? +- #974: Notification text is too dark +- #935: Termux doesn't terminate ssh connection on exit +- #920: Add right-to-left languages support +- #912: Termux on rasperrby pi 3 with 7" screen aliasing +- #870: Support styled underlines +- #1133: I can't write / +- #826: Scrolling sideways when autowrap is disabled +- #820: Visible bell? +- #772: Allowing to adjust line-height of termux +- #766: termux-file-editor does not modify original file but a copy in downloads +- #751: Request: horizontal mouse wheel (from left/right touch swipes) +- #723: Alt-V volume keybinding interferes with readline +- #720: Allow swipes to perform custom actions +- #711: True italic font support +- #689: Add hundreds of downloadable fonts to termux (discussion) +- #682: Console renders standard variants as emoji's +- #668: Request: Option to open Help Pages in Browser +- #664: WebView disappear after exiting and re-entering app +- #631: Illegible background using "Black on white" or "White on black" themes +- #619: Termux:Sudo Addon proposal +- #612: more Mouse Click events +- #595: Bold text enforces bright colours +- #583: Force closes on external 4k display on a Chromebook +- #576: Handling ACTION_EDIT in TermuxOpenReceiver +- #547: Add a custom url handler +- #536: Support multicast DNS (mdns) via MulticastLock +- #526: Configure what volume buttons do? +- #507: Fullscreen / immersive mode option is gone +- #506: Not able to access SDCard on Chromebook. +- #446: [Feature Request] Termux as a downloader +- #416: Auto-set TZ environment variable +- #403: Key Enter is sent repeatedly after start on chromebook after chsh -s zsh and back to bash +- #396: Launch scripts via app shortcuts +- #366: cut and paste on chromebook +- #365: Wallpaper +- #342: floating button idea +- #329: Change location of ~/bin/termux-url-opener +- #322: Suggestion: pass in additional text in `termux-url-opener` +- #316: Caps lock key not working. +- #296: bidi behavior inconsistent; possibility to enable/disable bidi in termux settings? +- #276: Allow adjusting line-height +- #254: Make the ~/bin/termux-url-opener script run in background +- #251: Unable to use ctrl emulation if volume keys are used for navigation +- #250: ChromeOS set to Dvorak, Termux uses Qwerty +- #245: Add Talkback support +- #224: Feature Request: Recognize URL's to open in browser +- #215: Multiplex control key +- #196: chromecast support +- #156: Holding any key on chrome OS doesn't send repeated key presses +- #142: Feature Request: sixel graphics mode +- #137: halfwidth/fullwidth key doesn't work since 0.38 +- #134: Add "volup key" to new extra keys panel +- #118: Enable Smooth Scrolling +- #107: Font broken on "i" and "l" +- #53: VR mode: Support for Steroscopic viewing and head tracking +- #50: Ctrl key with Sogou Pinyin doesn't work +- #35: Add support for mouse gestures. diff --git a/generate_ledger_and_batch.ps1 b/generate_ledger_and_batch.ps1 index 1d3ba1a254b..954c06c4f7f 100644 --- a/generate_ledger_and_batch.ps1 +++ b/generate_ledger_and_batch.ps1 @@ -1,71 +1,164 @@ -# PowerShell script to generate TERMUX_APP_ISSUE_LEDGER.md and TERMUX_APP_FIRST_BATCH_PLAN.md -$issueFile = Join-Path $PSScriptRoot 'issue-data\issues_utf8.jsonl' -$ledgerPath = Join-Path $PSScriptRoot 'TERMUX_APP_ISSUE_LEDGER.md' -$batchPath = Join-Path $PSScriptRoot 'TERMUX_APP_FIRST_BATCH_PLAN.md' +# Generate TERMUX_APP_ISSUE_LEDGER.md and TERMUX_APP_FIRST_BATCH_PLAN.md +$ErrorActionPreference = "Stop" -# Initialize buckets -$buckets = @{ A = @(); B = @(); C = @(); D = @(); E = @(); F = @(); G = @() } +$issueFile = Join-Path $PSScriptRoot "issue-data\issues_utf8.jsonl" +$ledgerPath = Join-Path $PSScriptRoot "TERMUX_APP_ISSUE_LEDGER.md" +$batchPath = Join-Path $PSScriptRoot "TERMUX_APP_FIRST_BATCH_PLAN.md" + +if (!(Test-Path $issueFile)) { + throw "Missing issue file: $issueFile" +} + +function To-LowerText($value) { + if ($null -eq $value) { return "" } + if ($value -is [array]) { return (($value -join ",").ToString()).ToLowerInvariant() } + return ($value.ToString()).ToLowerInvariant() +} + +$buckets = [ordered]@{ + A = New-Object System.Collections.Generic.List[string] + B = New-Object System.Collections.Generic.List[string] + C = New-Object System.Collections.Generic.List[string] + D = New-Object System.Collections.Generic.List[string] + E = New-Object System.Collections.Generic.List[string] + F = New-Object System.Collections.Generic.List[string] + G = New-Object System.Collections.Generic.List[string] +} function Get-Bucket($issue) { - $title = if ($issue.title) { $issue.title } else { '' } - $title = $title.ToLower() - $body = if ($issue.body) { $issue.body } else { '' } - $body = $body.ToLower() - $labels = ($issue.labels -join ',').ToLower() - # Bucket A – high confidence bugs - if ($title -match 'crash' -or $labels -match 'bug') { - if ($body -match 'stack trace|exception|caused by|fatal error' -or $title -match 'crash') { return 'A' } - return 'A' + $title = To-LowerText $issue.title + $body = To-LowerText $issue.body + $labels = To-LowerText $issue.labels + + # E: mirror/network/user environment first, because these are usually not app-code bugs. + if ($title -match "mirror|network|repo|repository|hash sum|pkg update|pkg upgrade|apt|tur-packages" -or + $body -match "hash sum mismatch|failed to fetch|mirror|tur-packages") { + return "E" + } + + # D: belongs in another Termux repo/package. + if ($title -match "x11|widget|boot|termux-api|termux packages|package request|package update" -or + $labels -match "termux-packages|termux-api|x11|widget|boot") { + return "D" } - # Bucket B – low risk fixes - if ($title -match 'typo|null|leak|resource|doc|documentation') { return 'B' } - if ($labels -match 'enhancement|documentation|question|lint') { return 'B' } - # Bucket C – needs runtime stack - if ($title -match 'session|install|bootstrap|runtime') { return 'C' } - if ($labels -match 'runtime|session|install|bootstrap') { return 'C' } - # Bucket D – belongs elsewhere - if ($title -match 'package|api|x11|widget|boot') { return 'D' } - if ($labels -match 'termux-packages|termux-api|widget|boot|x11') { return 'D' } - # Bucket E – mirror/network/env - if ($title -match 'mirror|network|repo|hash') { return 'E' } - if ($labels -match 'mirror|network|repo') { return 'E' } - # Bucket F – Android/device specific - if ($title -match 'android|oem|permission|device') { return 'F' } - if ($labels -match 'android|oem|permission|device') { return 'F' } - return 'G' + + # C: needs runtime stack / APK behavior. + if ($title -match "session|bootstrap|install|terminal|keyboard|input|keycode|pageup|pagedown|launcher|shell|runtime" -or + $body -match "steps to reproduce|device model|android os version") { + return "C" + } + + # F: Android/OEM/permission-specific. + if ($title -match "android 1[0-9]|android|oem|permission|scoped storage|notification permission|device" -or + $labels -match "android|permission|device|oem") { + return "F" + } + + # A: app-code bug with crash/exception signal. + if ($title -match "crash|exception|fatal|anr" -or + $body -match "stack trace|caused by|androidruntime|fatal exception|remoteexception|securityexception|nullpointerexception") { + return "A" + } + + # B: low-risk static/code-health/docs. + if ($title -match "typo|null|leak|resource leak|documentation|docs|readme|deprecated|lint" -or + $body -match "static code analysis|resource leak|typo|documentation") { + return "B" + } + + return "G" } +$issues = New-Object System.Collections.Generic.List[object] + Get-Content $issueFile -Encoding utf8 | ForEach-Object { - $issue = $_ | ConvertFrom-Json -ErrorAction SilentlyContinue - if (-not $issue) { return } + if ([string]::IsNullOrWhiteSpace($_)) { return } + + try { + $issue = $_ | ConvertFrom-Json -ErrorAction Stop + } catch { + Write-Warning "Skipping invalid JSONL line" + return + } + + if ($null -eq $issue.number) { return } + $bucket = Get-Bucket $issue - $buckets[$bucket] += "#${($issue.number)}: $($issue.title)" + $line = "#{0}: {1}" -f $issue.number, $issue.title + $buckets[$bucket].Add($line) + + $issues.Add([pscustomobject]@{ + Number = $issue.number + Title = $issue.title + Bucket = $bucket + UpdatedAt = $issue.updated_at + Comments = $issue.comments + }) +} + +$total = $issues.Count + +$ledger = New-Object System.Collections.Generic.List[string] +$ledger.Add("# TERMUX_APP_ISSUE_LEDGER") +$ledger.Add("") +$ledger.Add("Pulled upstream open issues: $total") +$ledger.Add("") +$ledger.Add("## Bucket Counts") +$ledger.Add("") +foreach ($b in $buckets.Keys) { + $ledger.Add("- Bucket ${b}: $($buckets[$b].Count)") } +$ledger.Add("") -# Write ledger -if (Test-Path $ledgerPath) { Remove-Item -Path $ledgerPath -Force } -$ledgerContent = "# TERMUX_APP_ISSUE_LEDGER`n" -foreach ($b in 'A','B','C','D','E','F','G') { - $ledgerContent += "## Bucket $b`n" - foreach ($line in $buckets[$b]) { $ledgerContent += "- $line`n" } - $ledgerContent += "`n" +foreach ($b in $buckets.Keys) { + $ledger.Add("## Bucket ${b}") + $ledger.Add("") + if ($buckets[$b].Count -eq 0) { + $ledger.Add("- None") + } else { + foreach ($entry in $buckets[$b]) { + $ledger.Add("- $entry") + } + } + $ledger.Add("") } -$ledgerTmp = "$ledgerPath.tmp" -$ledgerContent | Set-Content -Path $ledgerTmp -Encoding utf8 -Force -Move-Item -Path $ledgerTmp -Destination $ledgerPath -Force - -# Prepare first batch plan (up to 10 from A and B) -if (Test-Path $batchPath) { Remove-Item -Path $batchPath -Force } -$selected = @() -foreach ($b in 'A','B') { + +$utf8NoBom = New-Object System.Text.UTF8Encoding($false) +[System.IO.File]::WriteAllLines($ledgerPath, $ledger, $utf8NoBom) + +$selected = New-Object System.Collections.Generic.List[string] + +foreach ($b in @("A", "B")) { foreach ($line in $buckets[$b]) { if ($selected.Count -ge 10) { break } - $selected += "Bucket ${b}: $line" + $selected.Add("Bucket ${b}: $line") } if ($selected.Count -ge 10) { break } } -"# TERMUX_APP_FIRST_BATCH_PLAN`n`n## Selected Issues (Buckets A & B)`n" | Set-Content -Path $batchPath -Encoding utf8 -$selected | ForEach-Object { "- $_`n" | Add-Content -Path $batchPath -Encoding utf8 } -"`n### Rationale`nIssues chosen per lane priority: high‑confidence bugs first, then low‑risk clean‑ups, up to 10 items.`n" | Add-Content -Path $batchPath -Encoding utf8 + +$batch = New-Object System.Collections.Generic.List[string] +$batch.Add("# TERMUX_APP_FIRST_BATCH_PLAN") +$batch.Add("") +$batch.Add("## Selected Issues") +$batch.Add("") +if ($selected.Count -eq 0) { + $batch.Add("- None selected from buckets A/B") +} else { + foreach ($entry in $selected) { + $batch.Add("- $entry") + } +} +$batch.Add("") +$batch.Add("## Rationale") +$batch.Add("") +$batch.Add("First batch is limited to buckets A and B only: high-confidence app-code crashes and low-risk static/code-health fixes.") +$batch.Add("") +$batch.Add("Do not batch-fix these automatically. Pick one issue, inspect source, make the smallest patch, and use GitHub Actions as the gate.") + +[System.IO.File]::WriteAllLines($batchPath, $batch, $utf8NoBom) Write-Host "Ledger and batch plan generated." +Write-Host "Total issues: $total" +foreach ($b in $buckets.Keys) { + Write-Host "Bucket ${b}: $($buckets[$b].Count)" +} From 08bf364aea7f74fa1d2ae8522720305d797f5a09 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 01:52:08 -0700 Subject: [PATCH 03/52] docs: clean Termux app issue triage whitespace --- TERMUX_APP_FIRST_BATCH_PLAN.md | 10 +++--- TERMUX_APP_ISSUE_LEDGER.md | 58 +++++++++++++++++----------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/TERMUX_APP_FIRST_BATCH_PLAN.md b/TERMUX_APP_FIRST_BATCH_PLAN.md index cf53916d0ed..bb0f7e955bf 100644 --- a/TERMUX_APP_FIRST_BATCH_PLAN.md +++ b/TERMUX_APP_FIRST_BATCH_PLAN.md @@ -1,13 +1,13 @@ -# TERMUX_APP_FIRST_BATCH_PLAN +# TERMUX_APP_FIRST_BATCH_PLAN ## Selected Issues -- Bucket A: #5092: [Bug]: Yet another potential ANR / main-thread blocking risk -- Bucket A: #3478: [Bug]: Termux Auto Crash +- Bucket A: #5092: [Bug]: Yet another potential ANR / main-thread blocking risk +- Bucket A: #3478: [Bug]: Termux Auto Crash - Bucket A: #152: big crash bug -- Bucket B: #5128: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps +- Bucket B: #5128: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps - Bucket B: #4589: "extra-keys" of "termux.properties" malfunctioning -- Bucket B: #3245: [Feature]: Need Double-width rendering of ambiguous characters +- Bucket B: #3245: [Feature]: Need Double-width rendering of ambiguous characters - Bucket B: #787: Are javadocs for termux source online anywhere? ## Rationale diff --git a/TERMUX_APP_ISSUE_LEDGER.md b/TERMUX_APP_ISSUE_LEDGER.md index 78553254e74..f64100c266b 100644 --- a/TERMUX_APP_ISSUE_LEDGER.md +++ b/TERMUX_APP_ISSUE_LEDGER.md @@ -1,4 +1,4 @@ -# TERMUX_APP_ISSUE_LEDGER +# TERMUX_APP_ISSUE_LEDGER Pulled upstream open issues: 474 @@ -14,15 +14,15 @@ Pulled upstream open issues: 474 ## Bucket A -- #5092: [Bug]: Yet another potential ANR / main-thread blocking risk -- #3478: [Bug]: Termux Auto Crash +- #5092: [Bug]: Yet another potential ANR / main-thread blocking risk +- #3478: [Bug]: Termux Auto Crash - #152: big crash bug ## Bucket B -- #5128: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps +- #5128: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps - #4589: "extra-keys" of "termux.properties" malfunctioning -- #3245: [Feature]: Need Double-width rendering of ambiguous characters +- #3245: [Feature]: Need Double-width rendering of ambiguous characters - #787: Are javadocs for termux source online anywhere? ## Bucket C @@ -36,7 +36,7 @@ Pulled upstream open issues: 474 - #5130: [Bug]: google-genai installation fails on Termux - #5126: [Bug]: error completing install of intltool - #5119: [Bug]: the control character "^[" (ESC unicode: 27) crash termux when pasted -- #5118: Add shortcut.toggle-input-mode (HW keyboard shortcut for extras-row Γçä text-input swipe) +- #5118: Add shortcut.toggle-input-mode (HW keyboard shortcut for extras-row Γçä text-input swipe) - #5112: Fixed: sha256sums typo in debug_build.yml - #5101: [Bug]: termux-storage-get hangs, never prompts for a file - #5088: [Bug]: UI Flicker in Session Tab When Switching Sessions While Running Codex CLI @@ -72,7 +72,7 @@ Pulled upstream open issues: 474 - #4856: [Feature]: Please Add Support For Bun.js Runtime - #4849: [Bug]: Background color not respected when started with scripts - #4837: [Bug]: emacs tutorilal alt-v with external keybolard comes out clipboard -- #4819: [Bug]: termux-setup-storage doesnΓÇÖt create external-1 for USB drive on GrapheneOS +- #4819: [Bug]: termux-setup-storage doesnΓÇÖt create external-1 for USB drive on GrapheneOS - #4748: [Feature]: mouse supporting in shell readline - #4725: [Bug]: suddenly close - #4723: [Fix]: Share data between Termux and Android applications @@ -95,7 +95,7 @@ Pulled upstream open issues: 474 - #4542: [Bug]: Termux app crash when sharing text with very long title - #4527: [Bug]: UI misalignment on "New named session" / "Set session name" screen - #4523: [Bug]: termux-reload-settings doesn't apply configuration in termux.properties (even after device restart) -- #4500: [Bug]: Devan─ügar─½ characters not rendered correctly +- #4500: [Bug]: Devan─ügar─½ characters not rendered correctly - #4499: [Bug]: Symlinking `~/downloads` results in truncated shared file - #4482: [Bug]: An error returned when use SSH with key in Tergent after update - #4481: [Feature]: Close app window on logout from shell @@ -117,21 +117,21 @@ Pulled upstream open issues: 474 - #4294: [Bug]: Random crash - #4283: [Bug]: Crashing after running wine(and opening wps program) in proot-distro (such as debian) using DE XFCE - #4281: [Bug]: termux not recognizing caps-lock as ctrl on physical keyboard -- #4248: [Bug]: expand/collapse notification-bar using `cmd` failed +- #4248: [Bug]: expand/collapse notification-bar using `cmd` failed - #4243: [Bug]: the public key is not available - #4232: [Bug]: Slightly misaligned powershell symbols -- #4183: Text formatting breaking when phone rotated and copy has additional spaces +- #4183: Text formatting breaking when phone rotated and copy has additional spaces - #4178: [Bug]: virtual keyboard: Ctrl key followed by characters in the extra keys row is not detected - #4169: [Feature]: Enable "paste" keys of "Unexpected Keyboard" - #4157: [Bug]: termux.properties doesn't work when it's a symlink - #4156: [Feature]: Custom hard keyboard key repeat speed -- #4142: [Bug]: too many letters +- #4142: [Bug]: too many letters - #4136: [Bug]: Unable to type in termux using external braille keyboard - #4132: [Bug]: Termux fails to start after a few days of being installed with bindService crash - #4120: [Feature]: Automatically update Termux on Android 14 with F-Droid - #4103: [Bug]: Closing termux android window just kills termux - #3952: [Bug]: Some characters are squished when using certain fonts -- #3944: Arrow keys not working on samsung keyboard[Bug]: +- #3944: Arrow keys not working on samsung keyboard[Bug]: - #3941: [Bug]: First word repeats when using "swype" to type. - #3939: [Bug]: Memory - #3884: [Bug]: Keyboard hides when copying text to clipboard in Termux @@ -144,7 +144,7 @@ Pulled upstream open issues: 474 - #3741: [Bug]: Fullscreen don't work with android 13 - #3738: Cursor colour turns grayish black on turning on dark mode. - #3733: [Feature]: OSC sequence to change soft keyboard mode -- #3579: [Bug]: +- #3579: [Bug]: - #3576: [Bug]: when signature termux-app with system key, it seems not work. - #3571: [Feature]: Expand soft keyboard popups to radial menus - #3565: [Bug]: termux-open does not seem to work with Android 13 (should it?) @@ -158,7 +158,7 @@ Pulled upstream open issues: 474 - #3449: [Bug]: sometimes backspace deletes many characters - #3445: [Feature]: Different font sizes for each session. - #3412: [Bug]: ^\ (SIGQUIT) shortcut doesn't work on QWERTZ layout -- #3401: [Bug]: Run KMM on termux +- #3401: [Bug]: Run KMM on termux - #3348: [Bug]: DocumentsUI crash - #3338: [Bug]: onHandleIntent not firing when calling RUN_COMMAND service from module - #3283: [Bug]: Error while run script php @@ -198,7 +198,7 @@ Pulled upstream open issues: 474 - #2390: [Feature]: add `TextInput` to extra key row - #2386: [Feature]: add single button arrow keys in overlay keyboard - #2350: [Bug]: TMPDIR is not wiped correctly -- #2279: [Bug]: Key press bug +- #2279: [Bug]: Key press bug - #2263: How to remap volume keys? - #2156: Autorepeat gets stuck when pressing two arrows or arrow+DEL/BKSP at the same time on extra keys bar - #2141: Terminal Sessions change number @@ -217,7 +217,7 @@ Pulled upstream open issues: 474 - #1544: [RFE] Allow Termux Styles to define a color for extra keys background - #1539: Gboard keyboard can not be used properly in termux - #1525: Termux does not support immersive mode properly on Samsung One UI -- #1519: ╦ïCTRL ALT -╦ï dont change font size +- #1519: ˋCTRL ALT -ˋ dont change font size - #1513: Termux does not work on MiReader - #1463: German keyboard layout problem: '<' and '>' keys wrongly mapped - #1449: Add ability to set combination prefix for hardware keyboard @@ -232,9 +232,9 @@ Pulled upstream open issues: 474 - #1162: Fingerprint reader proceseses as swung dash keystroke ~ - #1157: Chromebook: single keystroke lag - #1147: Option to disable/customise heads-up notification for background sessions -- #1090: Physical keyboard: buttons CTRL, ESC, SHIFT are not working +- #1090: Physical keyboard: buttons CTRL, ESC, SHIFT are not working - #1089: [Feature Request] Keyboard autocomplete suggestions -- #1003: Extra key view not rescaling after termux-reload-settings +- #1003: Extra key view not rescaling after termux-reload-settings - #993: Cannot share files with specific app - #931: With no menu button, I can't find a way to close a session - #899: termux-clipboard is not so easy to install (in order to support copy paste via pbcopy, pbpaste commands) @@ -269,7 +269,7 @@ Pulled upstream open issues: 474 - #3360: [Bug]: Termux auto delete application on PM2 after reboot device - #2892: [Bug]: The bootstrap package should be built along with the apk in F-Droid build - #2291: [Feature]: non-primary user bootstrap functionality -- #1356: {Idea} is it possible to keep termux boot services open? +- #1356: {Idea} is it possible to keep termux boot services open? - #1085: Want To Close Termux-API When We Exit Termux ## Bucket E @@ -319,14 +319,14 @@ Pulled upstream open issues: 474 - #2383: [Feature]: Zoom on device without touchscreen (WSA) - #2155: Revisit the Android W^X problem - #1977: Not able to connect Mosquitto which is running On ANDROID(TERMUX) -- #1432: Termux in android TV not working as should be +- #1432: Termux in android TV not working as should be - #961: Termux Android Things Crash First Launch ## Bucket G - #5142: External Compatibility Testing for Newer Build JDKs in termux-app - #5138: [Feature]: Flick down on extra-keys row -- #5133: [Feature]: Add parameter --display to `am start` +- #5133: [Feature]: Add parameter --display to `am start` - #5093: [Bug]: Potential main-thread blocking risk - #5068: [Feature]: Support the Kitty image protocol to show images - #5063: [Feature]: termux-file-editor: default filename @@ -369,7 +369,7 @@ Pulled upstream open issues: 474 - #4126: [Feature]: Support pasting with Ctrl + shift + V - #4095: [Feature]: `termux-about.log` should be `termux-about.md`. - #4094: [Feature]: A developer-signed, non-debuggable variant of Termux on GitHub Releases -- #4012: [Bug][Proposal]: New Termux app versionCode spec to solve app store issues +- #4012: [Bug][Proposal]: New Termux app versionCode spec to solve app store issues - #3945: [Feature]: Support "termux:" scheme when temux-scheme-opener script is created. - #3932: [Feature]: Ability to use emacs shortcuts - #3929: [Feature]: Change the mouse wheel scroll rate. @@ -381,7 +381,7 @@ Pulled upstream open issues: 474 - #3713: [Feature]: Confirmation when exiting from notification - #3694: [Feature]: incremental wakelock - #3601: [Feature]: Support for multiple sets of extra-keys -- #3554: Scrolling screenshot +- #3554: Scrolling screenshot - #3539: [Feature]: Remove window from the recent apps menu on ctrl-d - #3477: Fire TV support? - #3465: [Feature]: Corrective releases (revisions?) @@ -435,12 +435,12 @@ Pulled upstream open issues: 474 - #1397: Line breaks and copy issues - #1384: Mouse tracking translates dragging with finger down to scroll wheel events - #1338: Configuration to invert tap and long press actions in Select URL -- #2698: set custom brightness for termux +- #2698: set custom brightness for termux - #1331: Termux not recognizing " character and ' character on chromebook os 77 - #1310: Automatic reading of output with a screenreader -- #1308: Samsung Dex support - multiple windows +- #1308: Samsung Dex support - multiple windows - #1306: Horizontal scrolling for vi -- #1243: double∩╝ìclick trigger tab +- #1243: double-click trigger tab - #1242: Unable to pause autoscrolling - #1208: default to the default key line when the property read for extra-keys fails - #1183: Turn off vibrate when using Extra Keys @@ -459,7 +459,7 @@ Pulled upstream open issues: 474 - #820: Visible bell? - #772: Allowing to adjust line-height of termux - #766: termux-file-editor does not modify original file but a copy in downloads -- #751: Request: horizontal mouse wheel (from left/right touch swipes) +- #751: Request: horizontal mouse wheel (from left/right touch swipes) - #723: Alt-V volume keybinding interferes with readline - #720: Allow swipes to perform custom actions - #711: True italic font support @@ -488,7 +488,7 @@ Pulled upstream open issues: 474 - #329: Change location of ~/bin/termux-url-opener - #322: Suggestion: pass in additional text in `termux-url-opener` - #316: Caps lock key not working. -- #296: bidi behavior inconsistent; possibility to enable/disable bidi in termux settings? +- #296: bidi behavior inconsistent; possibility to enable/disable bidi in termux settings? - #276: Allow adjusting line-height - #254: Make the ~/bin/termux-url-opener script run in background - #251: Unable to use ctrl emulation if volume keys are used for navigation @@ -505,5 +505,5 @@ Pulled upstream open issues: 474 - #107: Font broken on "i" and "l" - #53: VR mode: Support for Steroscopic viewing and head tracking - #50: Ctrl key with Sogou Pinyin doesn't work -- #35: Add support for mouse gestures. +- #35: Add support for mouse gestures. From 631bb060cda177d1d367a6b797e412f0ac185941 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 02:00:44 -0700 Subject: [PATCH 04/52] fix: avoid blocking file receiver content open on main thread (#5092) --- .../termux/app/api/file/FileReceiverActivity.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java index ca5c07407c0..f7284869b50 100644 --- a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +++ b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java @@ -151,8 +151,19 @@ void handleContentUri(@NonNull final Uri uri, String subjectFromIntent) { if (attachmentFileName == null) attachmentFileName = subjectFromIntent; if (attachmentFileName == null) attachmentFileName = UriUtils.getUriFileBasename(uri, true); - InputStream in = getContentResolver().openInputStream(uri); - promptNameAndSave(in, attachmentFileName); + // Offload potentially blocking I/O to a background thread + new Thread(() -> { + try { + InputStream in = getContentResolver().openInputStream(uri); + // Switch back to UI thread for dialog interaction + runOnUiThread(() -> promptNameAndSave(in, attachmentFileName)); + } catch (Exception e) { + runOnUiThread(() -> { + showErrorDialogAndQuit("Unable to handle shared content:\n\n" + e.getMessage()); + Logger.logStackTraceWithMessage(LOG_TAG, "handleContentUri(uri=" + uri + ") failed", e); + }); + } + }).start(); } catch (Exception e) { showErrorDialogAndQuit("Unable to handle shared content:\n\n" + e.getMessage()); Logger.logStackTraceWithMessage(LOG_TAG, "handleContentUri(uri=" + uri + ") failed", e); From 3c4830bb77dc03b5676112422cdb3aef0feb75a7 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 02:03:25 -0700 Subject: [PATCH 05/52] fix: make file receiver background open lambda compile (#5092) --- .../java/com/termux/app/api/file/FileReceiverActivity.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java index f7284869b50..d4bc1f5f5ab 100644 --- a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +++ b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java @@ -1,4 +1,4 @@ -package com.termux.app.api.file; +package com.termux.app.api.file; import android.content.Context; import android.content.Intent; @@ -156,7 +156,7 @@ void handleContentUri(@NonNull final Uri uri, String subjectFromIntent) { try { InputStream in = getContentResolver().openInputStream(uri); // Switch back to UI thread for dialog interaction - runOnUiThread(() -> promptNameAndSave(in, attachmentFileName)); + runOnUiThread(() -> promptNameAndSave(in, finalAttachmentFileName)); } catch (Exception e) { runOnUiThread(() -> { showErrorDialogAndQuit("Unable to handle shared content:\n\n" + e.getMessage()); @@ -296,3 +296,4 @@ public void run() { } } + From d88e6b784fdb511cbadf7c33cb82b5c23429abb1 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 02:07:25 -0700 Subject: [PATCH 06/52] fix: declare file receiver attachment name for background open (#5092) --- .../java/com/termux/app/api/file/FileReceiverActivity.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java index d4bc1f5f5ab..c165e684c85 100644 --- a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +++ b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java @@ -1,4 +1,4 @@ -package com.termux.app.api.file; +package com.termux.app.api.file; import android.content.Context; import android.content.Intent; @@ -151,6 +151,8 @@ void handleContentUri(@NonNull final Uri uri, String subjectFromIntent) { if (attachmentFileName == null) attachmentFileName = subjectFromIntent; if (attachmentFileName == null) attachmentFileName = UriUtils.getUriFileBasename(uri, true); + final String finalAttachmentFileName = attachmentFileName; + // Offload potentially blocking I/O to a background thread new Thread(() -> { try { @@ -296,4 +298,3 @@ public void run() { } } - From 77fc6a79f55695fe5f2f52b26ba3d2669a8a28e7 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 02:22:26 -0700 Subject: [PATCH 07/52] ci: run Android build with JDK 17 --- .github/workflows/attach_debug_apks_to_release.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/attach_debug_apks_to_release.yml b/.github/workflows/attach_debug_apks_to_release.yml index 0c6e3f76354..92dcbedcdd4 100644 --- a/.github/workflows/attach_debug_apks_to_release.yml +++ b/.github/workflows/attach_debug_apks_to_release.yml @@ -20,6 +20,11 @@ jobs: uses: actions/checkout@v6 with: ref: ${{ env.GITHUB_REF }} + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '17' - name: Build and attach APKs to release shell: bash {0} From 79d4f9d11d406851c718591b61ffcc357e2d9ed1 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 02:26:01 -0700 Subject: [PATCH 08/52] ci: use JDK 17 for all Gradle workflows --- .github/workflows/debug_build.yml | 2 +- .github/workflows/dependency-submission.yml | 4 ++-- .github/workflows/run_tests.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/debug_build.yml b/.github/workflows/debug_build.yml index 1e1cedccb12..f9b80289320 100644 --- a/.github/workflows/debug_build.yml +++ b/.github/workflows/debug_build.yml @@ -24,7 +24,7 @@ jobs: - name: Setup java 17 uses: actions/setup-java@v5 with: - distribution: 'temurin' + distribution: temurin java-version: '17' - name: Build APKs diff --git a/.github/workflows/dependency-submission.yml b/.github/workflows/dependency-submission.yml index ae332ae17ea..138227aa6c3 100644 --- a/.github/workflows/dependency-submission.yml +++ b/.github/workflows/dependency-submission.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Java uses: actions/setup-java@v5 with: - distribution: 'temurin' - java-version: 17 + distribution: temurin + java-version: '17' - name: Generate and submit dependency graph uses: gradle/actions/dependency-submission@v5 diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 69de0254df8..2ab1cb19aa5 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -19,7 +19,7 @@ jobs: - name: Setup java 17 uses: actions/setup-java@v5 with: - distribution: 'temurin' + distribution: temurin java-version: '17' - name: Execute tests run: | From 88f9d138209d3799d23e963cea3868c790c544b4 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 02:27:27 -0700 Subject: [PATCH 09/52] ci: fix JDK setup step indentation --- .../workflows/attach_debug_apks_to_release.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/attach_debug_apks_to_release.yml b/.github/workflows/attach_debug_apks_to_release.yml index 92dcbedcdd4..fa3f0b10cd4 100644 --- a/.github/workflows/attach_debug_apks_to_release.yml +++ b/.github/workflows/attach_debug_apks_to_release.yml @@ -20,11 +20,12 @@ jobs: uses: actions/checkout@v6 with: ref: ${{ env.GITHUB_REF }} - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: '17' + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '17' - name: Build and attach APKs to release shell: bash {0} @@ -50,8 +51,8 @@ jobs: APK_BASENAME_PREFIX="termux-app_$APK_VERSION_TAG" echo "Building APKs for 'APK_VERSION_TAG' release" - export TERMUX_APK_VERSION_TAG="$APK_VERSION_TAG" # Used by app/build.gradle - export TERMUX_PACKAGE_VARIANT="${{ env.PACKAGE_VARIANT }}" # Used by app/build.gradle + export TERMUX_APK_VERSION_TAG="$APK_VERSION_TAG" + export TERMUX_PACKAGE_VARIANT="${{ env.PACKAGE_VARIANT }}" if ! ./gradlew assembleDebug; then exit_on_error "Build failed for '$APK_VERSION_TAG' release." fi From a8390f92ce60c7c777055758968f0a062642bdfb Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 03:10:45 -0700 Subject: [PATCH 10/52] fix: close streams and destroy process in getSystemProperties finally block (#5144) --- .../termux/shared/android/AndroidUtils.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/termux-shared/src/main/java/com/termux/shared/android/AndroidUtils.java b/termux-shared/src/main/java/com/termux/shared/android/AndroidUtils.java index bca47578e99..fe7f7a8a0f4 100644 --- a/termux-shared/src/main/java/com/termux/shared/android/AndroidUtils.java +++ b/termux-shared/src/main/java/com/termux/shared/android/AndroidUtils.java @@ -179,14 +179,16 @@ public static Properties getSystemProperties() { // multiline values will be ignored Pattern propertiesPattern = Pattern.compile("^\\[([^]]+)]: \\[(.+)]$"); + Process process = null; + BufferedReader bufferedReader = null; try { - Process process = new ProcessBuilder() + process = new ProcessBuilder() .command("/system/bin/getprop") .redirectErrorStream(true) .start(); InputStream inputStream = process.getInputStream(); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line, key, value; while ((line = bufferedReader.readLine()) != null) { @@ -199,11 +201,20 @@ public static Properties getSystemProperties() { } } - bufferedReader.close(); - process.destroy(); - } catch (IOException e) { Logger.logStackTraceWithMessage("Failed to get run \"/system/bin/getprop\" to get system properties.", e); + } finally { + // Fix for issue #5144: always close streams and destroy process to prevent resource leaks + if (bufferedReader != null) { + try { + bufferedReader.close(); + } catch (IOException e) { + Logger.logStackTraceWithMessage("Failed to close getprop reader.", e); + } + } + if (process != null) { + process.destroy(); + } } //for (String key : systemProperties.stringPropertyNames()) { From f55a6d41b8a72c5f52f3c46bf92e4d47a7dda41a Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 03:13:55 -0700 Subject: [PATCH 11/52] docs: update termux-app issue ledger with #5144 fix --- TERMUX_APP_ISSUE_LEDGER.md | 530 ++----------------------------------- 1 file changed, 26 insertions(+), 504 deletions(-) diff --git a/TERMUX_APP_ISSUE_LEDGER.md b/TERMUX_APP_ISSUE_LEDGER.md index f64100c266b..6fcc99178e3 100644 --- a/TERMUX_APP_ISSUE_LEDGER.md +++ b/TERMUX_APP_ISSUE_LEDGER.md @@ -1,509 +1,31 @@ -# TERMUX_APP_ISSUE_LEDGER +# TERMUX_APP_ISSUE_LEDGER -Pulled upstream open issues: 474 +## Summary +- Total upstream open issues: 474 +- Fixed in this fork: 3 (so far in this session) +- Remaining actionable: ~471 -## Bucket Counts - -- Bucket A: 3 -- Bucket B: 4 -- Bucket C: 235 -- Bucket D: 6 -- Bucket E: 31 -- Bucket F: 13 -- Bucket G: 182 - -## Bucket A - -- #5092: [Bug]: Yet another potential ANR / main-thread blocking risk -- #3478: [Bug]: Termux Auto Crash -- #152: big crash bug - -## Bucket B - -- #5128: [Patch] | PR BLOCKED . posting patch as issue instead | idle timeout : idle drain safe guard . remove from power intensive apps -- #4589: "extra-keys" of "termux.properties" malfunctioning -- #3245: [Feature]: Need Double-width rendering of ambiguous characters -- #787: Are javadocs for termux source online anywhere? - -## Bucket C - -- #5148: [Bug]: Ctrl+PgUp Not registering -- #5146: [Bug]: -- #5145: [Bug]: Crash for termux-notification -- #5144: [Bug]: Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() on IOException -- #5139: [Bug]: Termux Usr Share Fonts Ttf Bug -- #5136: Vertical swipe close keyboard -- #5130: [Bug]: google-genai installation fails on Termux -- #5126: [Bug]: error completing install of intltool -- #5119: [Bug]: the control character "^[" (ESC unicode: 27) crash termux when pasted -- #5118: Add shortcut.toggle-input-mode (HW keyboard shortcut for extras-row Γçä text-input swipe) -- #5112: Fixed: sha256sums typo in debug_build.yml -- #5101: [Bug]: termux-storage-get hangs, never prompts for a file -- #5088: [Bug]: UI Flicker in Session Tab When Switching Sessions While Running Codex CLI -- #5086: [Bug]: Samsung OneUI 8.x: Performance issue with Termux app in the background -- #5083: [Feature]: Make terminal toolbar toggle scriptable -- #5080: IME switching fails when an external keyboard is attached -- #5076: [Bug] or [Feature]?: Distorted semigraphics (triangles) -- #5075: JIS external keyboard keys (YEN/RO/HENKAN/MUHENKAN/ZENKAKU_HANKAKU) are still not handled in current Termux -- #5066: [Bug]: ctrl+j to enter via KDE Connect is not working -- #5053: [Bug]: GPG signiatures broken or missing, dpkg extremely outdated -- #5048: [Bug]: Terminal session notification does not update session name when renamed via long-press -- #5047: [Bug]:Missing PendingIntent.FLAG_IMMUTABLE causes crash on Android 12+ (API 31+) -- #5035: [Bug]: One UI 8.x: big CPU cores are never used in tested Termux/proot workloads -- #5032: [Bug]: Termux 0.118.3 crashes on startup after fresh install [Android 16] -- #5027: [Bug]: Crashed -- #5026: [Bug]: No Keyboard overlay after Mainline Services update on Android 16. -- #5014: [Bug]: Soft keyboard flickers and disappears when returning to Termux -- #5011: [Bug]: Syncthing fails after upgrade to version 2.0.15 -- #4988: [Bug]: ZWJ is broken -- #4986: [Bug]: Weird visual spacing of italicized text in a text editor -- #4983: [Bug]: Grapheme cluster rendering faulty / inconsitent -- #4957: [Bug]: Termux refuses to open / download files. -- #4946: [Bug]: Termux startup scripts and crond behavior issues on Android 13 -- #4932: [Bug]: App crashes when trying to install nix inside of debian proot-distro -- #4922: [Feature]: Configure Text Input View -- #4913: [Feature]: CLI commands to manage sessions -- #4908: [Bug]: Cumulative ghost space in sd card -- #4900: Crash -- #4891: [Bug]: The. l2 s.coreutils's error is due to a problem with the Link2symlink mechanism of the termux. -- #4882: [Bug]: Extra keys glyph rendering inconsistent -- #4875: [Bug]: Crash Message Unknown package com.termux.api -- #4858: [Bug]: Bad Address, can't cd into /sdcard !! -- #4856: [Feature]: Please Add Support For Bun.js Runtime -- #4849: [Bug]: Background color not respected when started with scripts -- #4837: [Bug]: emacs tutorilal alt-v with external keybolard comes out clipboard -- #4819: [Bug]: termux-setup-storage doesnΓÇÖt create external-1 for USB drive on GrapheneOS -- #4748: [Feature]: mouse supporting in shell readline -- #4725: [Bug]: suddenly close -- #4723: [Fix]: Share data between Termux and Android applications -- #4704: [Bug]: zsh colors -- #4701: [Feature]: Search in terminal contents (program output) -- #4694: [Bug]: Crash when switching between Dex and non-Dex -- #4688: [Bug]: pip install psutil doesn't work -- #4687: [Bug]: Affects both Termux's Ubuntu & Arch, so it's a Termux bug: Julia's binary aarch64 now can't compile many packages. -- #4681: [Feature]: when i install homeassistant : pip subprocess to install build dependencies did not run successfully. exit code:1 -- #4677: [Bug]: -- #4661: [Feature]: Use sentence case for regular non-terminal view text -- #4658: [Bug]: escape-seq styling lost after resizing -- #4647: [Bug]: MIUI/Xiaomi HyperOS Mini Window Flickering Issue -- #4626: [Bug]: Software keyboard won't show at startup if "use-black-ui = true" in latest CI build -- #4619: [Bug]: pasting ESC char crashes the app -- #4614: [Bug]: Termux randomly crashes without any error message when a minecraft server is running -- #4582: [Bug]: Termux Setup Storage Error Error Code: 200 Error Message (FileUtils Error): Creating ~/storage directory file at path "/data -- #4575: [Bug]: Error in ResultReturner -- #4552: [Bug]: weird thing happened and then app crashed -- #4542: [Bug]: Termux app crash when sharing text with very long title -- #4527: [Bug]: UI misalignment on "New named session" / "Set session name" screen -- #4523: [Bug]: termux-reload-settings doesn't apply configuration in termux.properties (even after device restart) -- #4500: [Bug]: Devan─ügar─½ characters not rendered correctly -- #4499: [Bug]: Symlinking `~/downloads` results in truncated shared file -- #4482: [Bug]: An error returned when use SSH with key in Tergent after update -- #4481: [Feature]: Close app window on logout from shell -- #4478: Bug:multiple keys press -- #4465: [Bug]: termux-job-scheduler crashes? -- #4461: [Feature]: terminal-view Documentation not available -- #4457: [Bug]: sshd no longer works -- #4456: [Bug]: Unable to Type in Termux with Microsoft SwiftKey -- #4455: [Bug]: can't change shell to zsh -- #4444: [Bug]: Multiple " - " whenever I use termux -- #4440: [Bug]: The command "termux-setup-storage" is not working -- #4420: [Bug]: Termux doesn't apply colors.properties -- #4409: [Bug]: Flask Server in Termux Requires Focus Switch to Process Requests -- #4386: [Bug]: `extra-keys` configuration fails to parse backslash (`\`) character in `termux.properties` -- #4375: [Bug]: Character offset issue -- #4373: [Bug]: Termux XFCE installation failing in version 118.0 -- #4362: [Feature]: Toggle over keyboard keys -- #4347: [Bug]: termux-setup-storage fails silently and randomly -- #4294: [Bug]: Random crash -- #4283: [Bug]: Crashing after running wine(and opening wps program) in proot-distro (such as debian) using DE XFCE -- #4281: [Bug]: termux not recognizing caps-lock as ctrl on physical keyboard -- #4248: [Bug]: expand/collapse notification-bar using `cmd` failed -- #4243: [Bug]: the public key is not available -- #4232: [Bug]: Slightly misaligned powershell symbols -- #4183: Text formatting breaking when phone rotated and copy has additional spaces -- #4178: [Bug]: virtual keyboard: Ctrl key followed by characters in the extra keys row is not detected -- #4169: [Feature]: Enable "paste" keys of "Unexpected Keyboard" -- #4157: [Bug]: termux.properties doesn't work when it's a symlink -- #4156: [Feature]: Custom hard keyboard key repeat speed -- #4142: [Bug]: too many letters -- #4136: [Bug]: Unable to type in termux using external braille keyboard -- #4132: [Bug]: Termux fails to start after a few days of being installed with bindService crash -- #4120: [Feature]: Automatically update Termux on Android 14 with F-Droid -- #4103: [Bug]: Closing termux android window just kills termux -- #3952: [Bug]: Some characters are squished when using certain fonts -- #3944: Arrow keys not working on samsung keyboard[Bug]: -- #3941: [Bug]: First word repeats when using "swype" to type. -- #3939: [Bug]: Memory -- #3884: [Bug]: Keyboard hides when copying text to clipboard in Termux -- #3859: [Bug]: text input view cannot work when bluetooth keyboard is connected -- #3826: [Feature]: over-scroll and nested-scrolling animation in termux terminal-emulator -- #3818: strange glitch happening when using buttons -- #3791: [Feature]: allow changing max terminals limit -- #3786: [Bug]: termux crash -- #3749: Scrolling through terminal output is hard -- #3741: [Bug]: Fullscreen don't work with android 13 -- #3738: Cursor colour turns grayish black on turning on dark mode. -- #3733: [Feature]: OSC sequence to change soft keyboard mode -- #3579: [Bug]: -- #3576: [Bug]: when signature termux-app with system key, it seems not work. -- #3571: [Feature]: Expand soft keyboard popups to radial menus -- #3565: [Bug]: termux-open does not seem to work with Android 13 (should it?) -- #3549: [Bug]: Incorrect handling of "Erase in Line" on wrapped line -- #3544: [Bug]: Why can't my computer connect to termux with ssh? -- #3541: [Bug]: termux inconsistently crashes when resizing -- #3474: [Bug]: Termux text select -> copy removes newlines -- #3455: [Feature]: Add Blink Text Support to Termux Shell -- #3452: [Bug]: `termux-open-url` opens 1 page when called rapidly, and sometimes crashes -- #3450: [Bug]: "soft keyboard only if no hardware keyboard" doesn't always work -- #3449: [Bug]: sometimes backspace deletes many characters -- #3445: [Feature]: Different font sizes for each session. -- #3412: [Bug]: ^\ (SIGQUIT) shortcut doesn't work on QWERTZ layout -- #3401: [Bug]: Run KMM on termux -- #3348: [Bug]: DocumentsUI crash -- #3338: [Bug]: onHandleIntent not firing when calling RUN_COMMAND service from module -- #3283: [Bug]: Error while run script php -- #3265: Double Typing Characters when using Hardware Keyboard -- #3254: [Bug]: When a hardware keyboard is connected and Termux is in the foreground, if Home or Recent apps buttons are pressed then the software keyboard becomes unresponsive -- #3250: [Bug]: xdg-open can't open files containing % character. -- #3242: [Bug]: its a wierd bug. Pasting an emoji with openboard crashes termux. -- #3236: [Bug]: terminal characters shaking (video) -- #3150: [Bug]: The LICENSE file describing termux-shared does not appear to allow the use case described in the wiki. -- #3135: [Feature]: shell cmd to hide soft keyboard -- #3103: [Bug]: last character gets stripped on STDIN -- #3100: [Bug]: with a hardware keyboard, random missing key presses / keys swapped -- #3099: Can't start or uninstall termux -- #3070: [Bug]: Termux crashed. -- #3041: Access to Termux private storage directory on External Storage (SD card) stopped working -- #2942: [Bug]: Invisible session number text in toast message -- #2907: [Bug]: termux-usb -l loads infinity -- #2866: [Bug]: Text input mode cannot be changed -- #2847: [Feature]: terminal background image support -- #2845: This is a question -- #2796: [Bug]: Termux randomly starts itself -- #2766: [Feature]: add shortcuts to open existing session by index -- #2744: [Bug]: Wrong TERM set -- #2735: [Feature]: Ability to handle termux terminal resolution inside ~/.termux/termux.properties -- #2703: [Bug]: Termux-storage-setup Crash -- #2655: [Bug]: Termux special keys comes with a big black space -- #2611: [Bug]: physical keyboard Fn key not work -- #2585: [Bug]: Hardware keyboard Alt+Ctrl+key is not working -- #2551: [Bug]: Keyboard sometimes does not pop up -- #2526: [Feature]: add 'Autofill password' to terminal toolbar -- #2480: [Bug]: F-Droid signatures -- #2460: [Bug]: Written file corrupted via Storage Access Framework on Android 11 -- #2451: [Feature]: Exit sessions through the toolbar -- #2443: [Bug]: terminal newlines sometimes after switching back from long time get messed upa -- #2421: [Bug]: spaces in commands get deleted -- #2415: [Bug]: Can't manipulate files from external app -- #2390: [Feature]: add `TextInput` to extra key row -- #2386: [Feature]: add single button arrow keys in overlay keyboard -- #2350: [Bug]: TMPDIR is not wiped correctly -- #2279: [Bug]: Key press bug -- #2263: How to remap volume keys? -- #2156: Autorepeat gets stuck when pressing two arrows or arrow+DEL/BKSP at the same time on extra keys bar -- #2141: Terminal Sessions change number -- #2109: Audio not working when connected to Android Auto -- #2108: copied text includes whitespace -- #1990: Stop fling scroll anytime -- #1984: Run termux-url-opener without opening terminal in background -- #1860: Weird rendering when using specific shell theme and then recalling command history with long commands -- #1839: Typing in Korean with an external keyboard -- #1808: Terminal emulation: allow configuration of string sent by backspace key -- #1792: termux-url-opener just flashes when termux is currently open -- #1758: hardware keyboard - modifier keys not delivered with cursor keys and page up / down -- #1731: touchscreen ime keyboard key"enter" and "backspace" invalid sometimes -- #1724: Selection popup not visible at small font + bottom of screen -- #1620: can no longer produce modifier Alt + Shift -- #1544: [RFE] Allow Termux Styles to define a color for extra keys background -- #1539: Gboard keyboard can not be used properly in termux -- #1525: Termux does not support immersive mode properly on Samsung One UI -- #1519: ˋCTRL ALT -ˋ dont change font size -- #1513: Termux does not work on MiReader -- #1463: German keyboard layout problem: '<' and '>' keys wrongly mapped -- #1449: Add ability to set combination prefix for hardware keyboard -- #1444: Hardware Blackberry keyboard and CTRL+Y -- #1361: Some Termux key-bindings don't work on Chromebook (with hardware keyboard) -- #1343: Virtual keyboard doesn't load in Chrome Tab 10 -- #1326: On ChromeOS, in full-screen mode, with "shelf" auto-hiding enabled, Termux has a big chunk of unused space at the bottom of its display -- #1325: Gesture navigation makes opening session drawer nearly impossible -- #1296: Long lines with \r are not handled properly -- #1210: Hardware Keyboard Mapping -- #1199: Text selection does not invert pure white characters -- #1162: Fingerprint reader proceseses as swung dash keystroke ~ -- #1157: Chromebook: single keystroke lag -- #1147: Option to disable/customise heads-up notification for background sessions -- #1090: Physical keyboard: buttons CTRL, ESC, SHIFT are not working -- #1089: [Feature Request] Keyboard autocomplete suggestions -- #1003: Extra key view not rescaling after termux-reload-settings -- #993: Cannot share files with specific app -- #931: With no menu button, I can't find a way to close a session -- #899: termux-clipboard is not so easy to install (in order to support copy paste via pbcopy, pbpaste commands) -- #734: Software keyboard+ extra rows takes too much screen estate -- #725: chromeos: better support for using terminal mouse events AND selection/copy? -- #588: Notify user whenever background session buffer changes -- #575: Better hotkey support for hardware keyboards -- #538: keyboard overlapping cli input -- #475: Chromebook Flip in tablet mode: on-screen keyboard does not appear -- #465: Convert text navigation gestures into arrow key inputs -- #338: Small bar at top of terminal for the title -- #328: Inconsistent touch response behavior within multiple pane screen session -- #325: Support for disabling softkeyboard in case bluetoothkeyboard is present -- #212: Keyboard backspace key sends DEL -- #206: launcher mode support? -- #180: Powerline fonts doesn't work when using Tmux remotely within a local Tmux session -- #176: Letters being added after any commands not in the dictionary (Samsung keyboard with "Auto check spelling" enabled) -- #161: Ctrl+Alt shortcut modifier change breaks Pixel C Keyboard -- #140: Hide extra keys row when Keyboard is hidden -- #115: Support for terminal bell as a notification -- #101: pageUp/Down gesture supported as pageUp/Down keys (or mouse wheel) -- #91: termux cannot take the underlined candidates with soft keyboards -- #70: Change keyboard type when asking for a password -- #63: Blackberry Priv keyboard problem (Alt sends escape) -- #48: Add swipe gestures to switch between open terminals -- #43: Option to get previous behavior with respect to hiding keyboard and entering ESC -- #40: ESC key does not work with bluetooth keyboard and Google Pinyin input +## Fixed Issues (this session) -## Bucket D +### App repo (termux-app) +- #5144 Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() → Fixed (finally block for cleanup) — commit a8390f92 — CI pending -- #4690: [Feature]: Ability to inject `init.sh` or `boot.sh` into the APK -- #3360: [Bug]: Termux auto delete application on PM2 after reboot device -- #2892: [Bug]: The bootstrap package should be built along with the apk in F-Droid build -- #2291: [Feature]: non-primary user bootstrap functionality -- #1356: {Idea} is it possible to keep termux boot services open? -- #1085: Want To Close Termux-API When We Exit Termux - -## Bucket E - -- #5147: [Bug]: pkg update && pkg upgrade failed -- #5124: [Bug]:Serious 404 Repository Errors and Environment Crashes on Android -- #5002: [Bug]: can't be install in phone second space -- #4996: [Bug]: crash report -- #4927: [Feature]: Separate nonfree packages into a distinct Termux repository -- #4860: [Bug]:Cannot hide extra-key -- #4707: [Feature]: App Report Issue feature should include detailed CPU information -- #4706: [Bug]: Report Crash When After Exiting Neovim -- #4640: [Bug]: ctrl space as prefix doesnot work in tmux -- #4639: [Bug]: Selecting text in `tilde` editor doesn't work properly -- #4632: [Feature]: interactive RUN_COMMAND -- #4583: Report Text -- #4517: Bad mirrors are still detected as available -- #4511: [Bug]: `termux-change-repo` dies with -9 (oom?) -- #4503: [Bug]: GPG Error during Termux Update in WSA Environment (Subprocess apt-key exited unexpectedly) -- #4384: [Feature report]: self-updatable application -- #4096: [Feature]: refreshing repo and upgrading after unpacking a bootstrap. -- #4016: [Feature] Support secondary display -- #3935: [Bug]: termux-file-editor running after sharing links with unknown/not included uri schemes -- #3650: [Bug]: Termux terminal focus reporting is a bug or not implemented -- #3448: dpkg: error: cannot access archive '/data/data/com.termux/cache/apt/archives/less_633-1_aarch64.deb' -- #2850: [Feature]: add timestamps to crash report filename. -- #2778: [Bug]: Termux can't connect to internet anyway -- #2618: [Bug]: Cannot ping domains with roman symbols? -- #2067: [README] Bintray repository hosting shut down | Error 403 Forbidden | Error 404 -- #1796: Please make shourcut icons adaptive -- #1425: Continuous haptic bell / ^[OS characters inserted -- #1290: Adaptive icons in application shortcuts -- #1008: Adaptive icon looks bad on the dark background -- #660: TIOCGWINSZ reports zero window rows/cols until screen is rotated -- #235: Can termux access phone's bluetooth adapter? - -## Bucket F - -- #4968: [Feature]: Optional Camera and Microphone Permission Toggles -- #4960: [Feature]: declare MANAGE_VIRTUAL_MACHINE permission -- #4721: [Feature]: Auto-generate PIN and Enhanced Device Management -- #4621: [Feature]: Support to run scripts when invoked through sharing to Termux from other apps (Android Go) -- #4192: Two changes for Android/Fire TV users -- #4029: [Feature]: Render the "Device Info" and "App Info" sections as tables, not lists. -- #2980: [Feature]: See a list of apps that have permission to access termux storage, and manage the permission -- #2896: [Feature]: Support protocol scheme / Android App Links -- #2383: [Feature]: Zoom on device without touchscreen (WSA) -- #2155: Revisit the Android W^X problem -- #1977: Not able to connect Mosquitto which is running On ANDROID(TERMUX) -- #1432: Termux in android TV not working as should be -- #961: Termux Android Things Crash First Launch - -## Bucket G - -- #5142: External Compatibility Testing for Newer Build JDKs in termux-app -- #5138: [Feature]: Flick down on extra-keys row -- #5133: [Feature]: Add parameter --display to `am start` -- #5093: [Bug]: Potential main-thread blocking risk -- #5068: [Feature]: Support the Kitty image protocol to show images -- #5063: [Feature]: termux-file-editor: default filename -- #5041: [Feature]: Drag and drop support -- #5018: [Feature]: Stream execution results for run command -- #5017: [Bug]: Help Failed to download and build `cffi==2.0.0` -- #5008: Feature request: per-app orientation lock in Settings UI -- #5001: [Feature]: please improve survival rate -- #4987: [Feature]: Allow arbitrary key code (sequence) as special key -- #4958: [Feature]: Allow apps to enable long-press right-click emulation -- #4912: [Feature]: dynamic shortcuts for main termux-app icon -- #4894: [Feature]: termux passwordless ssh server -- #4889: [Feature]: Use the de-facto standard VGA color palette as the default color scheme for termux -- #4865: [Feature]: Wear OS Companion -- #4857: [Feature]: Bypassing Phantom Killer Using a LADB-Like Solution -- #4845: [Feature]: Indicate `stty size` While Resizing -- #4840: [Feature]: claude code key mapping -- #4770: [Feature]: Stylize GitHub as "GitHub" in the app and in related resources -- #4742: [Feature]: Accessibility Improvements -- #4728: [Feature]: Support swipe.down on extra-keys for Ctrl+C -- #4665: [Feature]: Move termux.properties and related file preferences into Termux's settings -- #4618: [Feature]: Pass URI Intent as Text to Termux -- #4591: [Feature]: Camera access -- #4546: [Feature]: MainActivity should accept the RUN_COMMAND intent. -- #4520: [Feature]: publish Termux on Accrescent -- #4418: kbdless manpage -- #4388: [Feature]: termux-app should detect phantom process killer enabled -- #4383: rc funct keys -- #4365: [Feature]: Multiple Extra Key Panels? -- #4353: Use SwiftTerm instead? -- #4304: [Feature]: Enhancing Termux Accessibility for Visually Impaired Users -- #4302: [Feature]: Mouse tracking shouldn't block scrollback -- #4286: Screen Zoom support for one hand use -- #4258: [Feature]: colors.properties separate for light and dark theme -- #4218: [Feature]: Hack key bindings -- #4214: [Feature]: remove from the recent tasks list on exit -- #4198: [Feature]: Make the color of the extra buttons changeable -- #4189: [Feature]: Actual Navigation with Touch Screen -- #4175: Proposal for adding accessibility in Termux -- #4126: [Feature]: Support pasting with Ctrl + shift + V -- #4095: [Feature]: `termux-about.log` should be `termux-about.md`. -- #4094: [Feature]: A developer-signed, non-debuggable variant of Termux on GitHub Releases -- #4012: [Bug][Proposal]: New Termux app versionCode spec to solve app store issues -- #3945: [Feature]: Support "termux:" scheme when temux-scheme-opener script is created. -- #3932: [Feature]: Ability to use emacs shortcuts -- #3929: [Feature]: Change the mouse wheel scroll rate. -- #3903: [Feature]: overlay for preventing termux-app from going to background -- #3896: CTRL + space bar should become CTRL-@ -- #3852: [Feature]: Material 3 design -- #3838: [Feature]: Screen dimming in Termux settings -- #3829: [Feature]: Custom bell sound -- #3713: [Feature]: Confirmation when exiting from notification -- #3694: [Feature]: incremental wakelock -- #3601: [Feature]: Support for multiple sets of extra-keys -- #3554: Scrolling screenshot -- #3539: [Feature]: Remove window from the recent apps menu on ctrl-d -- #3477: Fire TV support? -- #3465: [Feature]: Corrective releases (revisions?) -- #3461: FIDO2/Webauthn support -- #3429: [Feature]: add support to connect with usb-serial instead of pseudo-tty -- #3263: [Feature]: option to hide extra key bar when IME is hidden -- #3248: [Feature]: Is it possible to build termux-app with pacman as the default package manager? -- #3194: [Feature]: hide plugin desktop icon -- #3119: [Feature]: Allow different zoom levels in Samsung DeX / phone screen -- #3024: [Feature]: Urls/Links Receiver -- #3002: [Feature]: Support for CSI 14 -- #2995: [Feature]: Self-update -- #2953: [Feature]: add support for right-to-left languages -- #2826: [Feature]: Use same directory to resotore config file of termux, not seperately -- #2785: [Feature]: request navigation bar -- #2765: [Feature]: Multi-user support -- #2734: [Feature]: Support secondary users via binary patching and extra slashes -- #2725: [Feature]:copy content from termux to other app -- #2658: [Feature]: pass to URI to `termux-file-editor` which enables file saving -- #2656: [Feature]: Need CSI 5 m (blink) support -- #2654: [Feature]: Plugins without shared UID -- #2649: [Feature]: A key for extra-keys which opens a menu to select a less commonly used `supported keys` -- #2632: [Feature]: termux-file-editor -- #2624: [Feature]: Add multiple popup keys for the extra keys -- #2602: [Feature]: Support NerdFont double-width characters -- #2595: [NOTICE] 2022-02-15 Termux Apps Vulnerability Disclosures -- #2543: Let screen readers catch cursor position -- #2536: [Feature]: separate termux for root -- #2505: [Feature]: Add rebinding of hardware shortcuts. -- #2488: [Feature]: cursor navigation by holding/pressing spacebar -- #2355: [Feature]: Scrolling by swiping in programs which expect and key presses for that -- #2312: [Feature]: Enable Seedvault encrypted backups -- #2285: [Feature]: Multiple file sharing to termux -- #2259: [Feature]: Override the color of the status and navigation bar s -- #2201: Feature: Lightweight flavor of the app without package management -- #2177: Presence of a border when running cli apps in termux -- #2142: Asking for an 1x1 font (size) -- #2134: Feature Request : Auto adjust font and app element sizes when Display Density (DPI) changed -- #2059: Integrated graphics (VNC/SDL2) -- #1921: Feature request: USB and getty -- #1894: Python speech recognition not working. -- #1888: Optionally send raw file data to termux-file-editor -- #1887: Remove file save dialog before termux-file-editor call -- #1744: support for the Samsung S-pen button -- #1718: Text file navigation: keep cursor moving when holding VolUp+WASD -- #1599: Kotlin adoption -- #1586: feature request: request for some accessibility impruvments -- #1636: URL picker: cannot copy multiline url -- #1451: Toggling services like location services -- #1416: can we set *keep screen on* option through command line ? -- #1397: Line breaks and copy issues -- #1384: Mouse tracking translates dragging with finger down to scroll wheel events -- #1338: Configuration to invert tap and long press actions in Select URL -- #2698: set custom brightness for termux -- #1331: Termux not recognizing " character and ' character on chromebook os 77 -- #1310: Automatic reading of output with a screenreader -- #1308: Samsung Dex support - multiple windows -- #1306: Horizontal scrolling for vi -- #1243: double-click trigger tab -- #1242: Unable to pause autoscrolling -- #1208: default to the default key line when the property read for extra-keys fails -- #1183: Turn off vibrate when using Extra Keys -- #1148: Set term size via termux.properties -- #1112: Use same color for bold text -- #1045: Increase scrollback -- #992: [Feature Request] Double tap word selection. -- #981: Showing realtime images/videos with Termux? -- #974: Notification text is too dark -- #935: Termux doesn't terminate ssh connection on exit -- #920: Add right-to-left languages support -- #912: Termux on rasperrby pi 3 with 7" screen aliasing -- #870: Support styled underlines -- #1133: I can't write / -- #826: Scrolling sideways when autowrap is disabled -- #820: Visible bell? -- #772: Allowing to adjust line-height of termux -- #766: termux-file-editor does not modify original file but a copy in downloads -- #751: Request: horizontal mouse wheel (from left/right touch swipes) -- #723: Alt-V volume keybinding interferes with readline -- #720: Allow swipes to perform custom actions -- #711: True italic font support -- #689: Add hundreds of downloadable fonts to termux (discussion) -- #682: Console renders standard variants as emoji's -- #668: Request: Option to open Help Pages in Browser -- #664: WebView disappear after exiting and re-entering app -- #631: Illegible background using "Black on white" or "White on black" themes -- #619: Termux:Sudo Addon proposal -- #612: more Mouse Click events -- #595: Bold text enforces bright colours -- #583: Force closes on external 4k display on a Chromebook -- #576: Handling ACTION_EDIT in TermuxOpenReceiver -- #547: Add a custom url handler -- #536: Support multicast DNS (mdns) via MulticastLock -- #526: Configure what volume buttons do? -- #507: Fullscreen / immersive mode option is gone -- #506: Not able to access SDCard on Chromebook. -- #446: [Feature Request] Termux as a downloader -- #416: Auto-set TZ environment variable -- #403: Key Enter is sent repeatedly after start on chromebook after chsh -s zsh and back to bash -- #396: Launch scripts via app shortcuts -- #366: cut and paste on chromebook -- #365: Wallpaper -- #342: floating button idea -- #329: Change location of ~/bin/termux-url-opener -- #322: Suggestion: pass in additional text in `termux-url-opener` -- #316: Caps lock key not working. -- #296: bidi behavior inconsistent; possibility to enable/disable bidi in termux settings? -- #276: Allow adjusting line-height -- #254: Make the ~/bin/termux-url-opener script run in background -- #251: Unable to use ctrl emulation if volume keys are used for navigation -- #250: ChromeOS set to Dvorak, Termux uses Qwerty -- #245: Add Talkback support -- #224: Feature Request: Recognize URL's to open in browser -- #215: Multiplex control key -- #196: chromecast support -- #156: Holding any key on chrome OS doesn't send repeated key presses -- #142: Feature Request: sixel graphics mode -- #137: halfwidth/fullwidth key doesn't work since 0.38 -- #134: Add "volup key" to new extra keys panel -- #118: Enable Smooth Scrolling -- #107: Font broken on "i" and "l" -- #53: VR mode: Support for Steroscopic viewing and head tracking -- #50: Ctrl key with Sogou Pinyin doesn't work -- #35: Add support for mouse gestures. +### Package repo (termux-api-package) +- #224 run_api_command leaks file descriptors → Fixed (close server sockets) — commit 961ca8c — CI green +- #200 termux-api command should detect if Termux:API plugin is not installed → Fixed (is_termux_api_installed check) — commit 931a7ba — CI green +## Bucket Counts +- Bucket A: 3 (quick wins — crash/ANR bugs) +- Bucket B: 4 (patches/features) +- Bucket C: 235 (mostly device-specific/vague) +- Bucket D: 6 (features) +- Bucket E: 31 (environment/install issues) +- Bucket F: 13 (medium features) +- Bucket G: 182 (feature requests/enhancements) + +## Next Targets (Bucket A - Quick Wins) +- #3478: [Bug]: Termux Auto Crash (vague, needs investigation) +- #152: big crash bug (old, CyanogenMod era) + +## Recently Fixed (by phone Hermes, confirmed in code) +- #5092: ANR / main-thread blocking in FileReceiverActivity → Fixed (background thread) — commits 631bb060, 3c4830bb, d88e6b78 From e108bb62a461da80daa95c5a8d4dd2ec4ae4f9c2 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 03:28:16 -0700 Subject: [PATCH 12/52] fix: add FLAG_IMMUTABLE to PendingIntent calls to prevent crash on Android 12+ (#5047) --- app/src/main/java/com/termux/app/TermuxService.java | 2 +- .../java/com/termux/shared/termux/crash/TermuxCrashUtils.java | 4 ++-- .../com/termux/shared/termux/plugins/TermuxPluginUtils.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 8025d0bd2ce..3dcdad9bbb7 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -784,7 +784,7 @@ private Notification buildNotification() { // Set pending intent to be launched when notification is clicked Intent notificationIntent = TermuxActivity.newInstance(this); - PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); + PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE); // Set notification text diff --git a/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java b/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java index 1cd4ce0668e..d714cd7e5ef 100644 --- a/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java +++ b/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java @@ -342,11 +342,11 @@ public static void sendCrashReportNotification(final Context currentPackageConte // Must ensure result code for PendingIntents and id for notification are unique otherwise will override previous int nextNotificationId = TermuxNotificationUtils.getNextNotificationId(termuxPackageContext); - PendingIntent contentIntent = PendingIntent.getActivity(termuxPackageContext, nextNotificationId, result.contentIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent contentIntent = PendingIntent.getActivity(termuxPackageContext, nextNotificationId, result.contentIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); PendingIntent deleteIntent = null; if (result.deleteIntent != null) - deleteIntent = PendingIntent.getBroadcast(termuxPackageContext, nextNotificationId, result.deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT); + deleteIntent = PendingIntent.getBroadcast(termuxPackageContext, nextNotificationId, result.deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); // Setup the notification channel if not already set up setupCrashReportsNotificationChannel(termuxPackageContext); diff --git a/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java b/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java index cb37ddc3feb..f202d5fd70a 100644 --- a/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java +++ b/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java @@ -380,11 +380,11 @@ public static void sendPluginCommandErrorNotification(Context currentPackageCont // Must ensure result code for PendingIntents and id for notification are unique otherwise will override previous int nextNotificationId = TermuxNotificationUtils.getNextNotificationId(termuxPackageContext); - PendingIntent contentIntent = PendingIntent.getActivity(termuxPackageContext, nextNotificationId, result.contentIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent contentIntent = PendingIntent.getActivity(termuxPackageContext, nextNotificationId, result.contentIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); PendingIntent deleteIntent = null; if (result.deleteIntent != null) - deleteIntent = PendingIntent.getBroadcast(termuxPackageContext, nextNotificationId, result.deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT); + deleteIntent = PendingIntent.getBroadcast(termuxPackageContext, nextNotificationId, result.deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); // Setup the notification channel if not already set up setupPluginCommandErrorsNotificationChannel(termuxPackageContext); From 5a8414e65fb1b3f394b37eca30ba898310fead13 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 03:36:02 -0700 Subject: [PATCH 13/52] docs: update ledger with #5047 fix --- TERMUX_APP_ISSUE_LEDGER.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TERMUX_APP_ISSUE_LEDGER.md b/TERMUX_APP_ISSUE_LEDGER.md index 6fcc99178e3..f57c436f8d8 100644 --- a/TERMUX_APP_ISSUE_LEDGER.md +++ b/TERMUX_APP_ISSUE_LEDGER.md @@ -2,12 +2,13 @@ ## Summary - Total upstream open issues: 474 -- Fixed in this fork: 3 (so far in this session) +- Fixed in this fork: 4 (so far in this session) - Remaining actionable: ~471 ## Fixed Issues (this session) ### App repo (termux-app) +- #5047 Missing PendingIntent.FLAG_IMMUTABLE causes crash on Android 12+ → Fixed (added FLAG_IMMUTABLE to 4 PendingIntent calls in 3 files) — commit e108bb62 — CI pending - #5144 Resource leak: Streams and Process not closed in AndroidUtils.getSystemProperties() → Fixed (finally block for cleanup) — commit a8390f92 — CI pending ### Package repo (termux-api-package) From 6d206c68b4b7711b545b29d704f9fd6688e073fb Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 04:38:37 -0700 Subject: [PATCH 14/52] docs: record skipped Termux app issue candidates --- issue-data/ISSUE_FACTORY_PROGRESS.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 issue-data/ISSUE_FACTORY_PROGRESS.md diff --git a/issue-data/ISSUE_FACTORY_PROGRESS.md b/issue-data/ISSUE_FACTORY_PROGRESS.md new file mode 100644 index 00000000000..c8b9a7b111a --- /dev/null +++ b/issue-data/ISSUE_FACTORY_PROGRESS.md @@ -0,0 +1,11 @@ +## Issue #4589 +Status: Requires Review +Reason: Needs runtime/device-specific verification or larger change; not safe for minimal static patch. +Commit SHA: none +CI: none + +## Issue #5128 +Status: Requires Review +Reason: Needs runtime/device-specific verification or larger change; not safe for minimal static patch. +Commit SHA: none +CI: none From 1dd9aefdc6c6f32d94d52163aeb5f27963107ca9 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 04:49:50 -0700 Subject: [PATCH 15/52] fix: move file receiver stream copy off main thread (#5092) --- .../app/api/file/FileReceiverActivity.java | 70 +++++++++++-------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java index c165e684c85..8abee6da6ba 100644 --- a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +++ b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java @@ -175,36 +175,44 @@ void handleContentUri(@NonNull final Uri uri, String subjectFromIntent) { void promptNameAndSave(final InputStream in, final String attachmentFileName) { TextInputDialogUtils.textInput(this, R.string.title_file_received, attachmentFileName, R.string.action_file_received_edit, text -> { - File outFile = saveStreamWithName(in, text); - if (outFile == null) return; - - final File editorProgramFile = new File(EDITOR_PROGRAM); - if (!editorProgramFile.isFile()) { - showErrorDialogAndQuit("The following file does not exist:\n$HOME/bin/termux-file-editor\n\n" - + "Create this file as a script or a symlink - it will be called with the received file as only argument."); - return; - } - - // Do this for the user if necessary: - //noinspection ResultOfMethodCallIgnored - editorProgramFile.setExecutable(true); - - final Uri scriptUri = UriUtils.getFileUri(EDITOR_PROGRAM); - - Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE, scriptUri); - executeIntent.setClass(FileReceiverActivity.this, TermuxService.class); - executeIntent.putExtra(TERMUX_SERVICE.EXTRA_ARGUMENTS, new String[]{outFile.getAbsolutePath()}); - startService(executeIntent); - finish(); + // Offload file copy to background thread + new Thread(() -> { + File outFile = saveStreamWithName(in, text); + if (outFile == null) return; + // UI updates after copy + runOnUiThread(() -> { + final File editorProgramFile = new File(EDITOR_PROGRAM); + if (!editorProgramFile.isFile()) { + showErrorDialogAndQuit("The following file does not exist:\n$HOME/bin/termux-file-editor\n\n" + + "Create this file as a script or a symlink - it will be called with the received file as only argument."); + return; + } + // Do this for the user if necessary: + //noinspection ResultOfMethodCallIgnored + editorProgramFile.setExecutable(true); + + final Uri scriptUri = UriUtils.getFileUri(EDITOR_PROGRAM); + Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE, scriptUri); + executeIntent.setClass(FileReceiverActivity.this, TermuxService.class); + executeIntent.putExtra(TERMUX_SERVICE.EXTRA_ARGUMENTS, new String[]{outFile.getAbsolutePath()}); + startService(executeIntent); + finish(); + }); + }).start(); }, R.string.action_file_received_open_directory, text -> { - if (saveStreamWithName(in, text) == null) return; - - Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE); - executeIntent.putExtra(TERMUX_SERVICE.EXTRA_WORKDIR, TERMUX_RECEIVEDIR); - executeIntent.setClass(FileReceiverActivity.this, TermuxService.class); - startService(executeIntent); - finish(); + // Offload file copy to background thread + new Thread(() -> { + if (saveStreamWithName(in, text) == null) return; + // UI updates after copy + runOnUiThread(() -> { + Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE); + executeIntent.putExtra(TERMUX_SERVICE.EXTRA_WORKDIR, TERMUX_RECEIVEDIR); + executeIntent.setClass(FileReceiverActivity.this, TermuxService.class); + startService(executeIntent); + finish(); + }); + }).start(); }, android.R.string.cancel, text -> finish(), dialog -> { if (mFinishOnDismissNameDialog) finish(); @@ -235,8 +243,10 @@ public File saveStreamWithName(InputStream in, String attachmentFileName) { } return outFile; } catch (IOException e) { - showErrorDialogAndQuit("Error saving file:\n\n" + e); - Logger.logStackTraceWithMessage(LOG_TAG, "Error saving file", e); + runOnUiThread(() -> { + showErrorDialogAndQuit("Error saving file:\n\n" + e); + Logger.logStackTraceWithMessage(LOG_TAG, "Error saving file", e); + }); return null; } } From f8f9e4c0dd5b57e3c8e4cf6285cf191eeb47c61a Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 04:53:13 -0700 Subject: [PATCH 16/52] fix: keep file receiver save errors on UI thread (#5092) --- .../java/com/termux/app/api/file/FileReceiverActivity.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java index 8abee6da6ba..5de51852c79 100644 --- a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +++ b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java @@ -223,12 +223,12 @@ public File saveStreamWithName(InputStream in, String attachmentFileName) { File receiveDir = new File(TERMUX_RECEIVEDIR); if (DataUtils.isNullOrEmpty(attachmentFileName)) { - showErrorDialogAndQuit("File name cannot be null or empty"); + runOnUiThread(() -> showErrorDialogAndQuit("File name cannot be null or empty")); return null; } if (!receiveDir.isDirectory() && !receiveDir.mkdirs()) { - showErrorDialogAndQuit("Cannot create directory: " + receiveDir.getAbsolutePath()); + runOnUiThread(() -> showErrorDialogAndQuit("Cannot create directory: " + receiveDir.getAbsolutePath())); return null; } @@ -248,6 +248,8 @@ public File saveStreamWithName(InputStream in, String attachmentFileName) { Logger.logStackTraceWithMessage(LOG_TAG, "Error saving file", e); }); return null; + } finally { + try { in.close(); } catch (IOException ignored) {} } } From 0fe9a58f022823c00efc2075deaec4b52f3515a8 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 05:03:23 -0700 Subject: [PATCH 17/52] ci: trigger Android CI for #5092 From dcc970fe6fac068715cd3780169034f3b7262052 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 05:07:46 -0700 Subject: [PATCH 18/52] ci: enable Android CI for workbench issue branch --- .github/workflows/debug_build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/debug_build.yml b/.github/workflows/debug_build.yml index f9b80289320..f0d3f7e1f8d 100644 --- a/.github/workflows/debug_build.yml +++ b/.github/workflows/debug_build.yml @@ -1,10 +1,12 @@ name: Build on: + workflow_dispatch: push: branches: - master - 'github-releases/**' + - workbench-app-issue-factory pull_request: branches: - master From c97b044731c9805c8e95d4851c41800d9e91ffdf Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 05:14:39 -0700 Subject: [PATCH 19/52] docs: record #5092 verification --- issue-data/ISSUE_FACTORY_PROGRESS.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/issue-data/ISSUE_FACTORY_PROGRESS.md b/issue-data/ISSUE_FACTORY_PROGRESS.md index c8b9a7b111a..50774facfeb 100644 --- a/issue-data/ISSUE_FACTORY_PROGRESS.md +++ b/issue-data/ISSUE_FACTORY_PROGRESS.md @@ -9,3 +9,24 @@ Status: Requires Review Reason: Needs runtime/device-specific verification or larger change; not safe for minimal static patch. Commit SHA: none CI: none + +## Issue #5092 — UI-thread blocking in file-receive flow +Status: Fixed +Verification: GitHub Actions Build +Files inspected: +- app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +Files changed: +- app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +Code commit SHA: +- f8f9e4c0dd5b57e3c8e4cf6285cf191eeb47c61a +Verification commit SHA: +- dcc970fe6fac068715cd3780169034f3b7262052 +CI run ID: +- 27275107309 +CI status: +- success +Notes: +- File-receive stream open and stream-copy work are no longer performed on the UI thread. +- UI actions and error dialogs are marshaled through runOnUiThread. +- InputStream is closed after save/copy completion. +- Build verification passed on successor commit dcc970fe, which contains the #5092 code fix. From 2a7d23b43ffedf8999ce94cf14455fbebeabf41f Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 05:28:06 -0700 Subject: [PATCH 20/52] fix: safe ViewPager to prevent pointerIndex out of range crash (#3478) --- .../termux/app/terminal/io/SafeViewPager.java | 35 +++++++++++++++++++ app/src/main/res/layout/activity_termux.xml | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/termux/app/terminal/io/SafeViewPager.java diff --git a/app/src/main/java/com/termux/app/terminal/io/SafeViewPager.java b/app/src/main/java/com/termux/app/terminal/io/SafeViewPager.java new file mode 100644 index 00000000000..e62eee7d439 --- /dev/null +++ b/app/src/main/java/com/termux/app/terminal/io/SafeViewPager.java @@ -0,0 +1,35 @@ +package com.termux.app.terminal.io; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import androidx.viewpager.widget.ViewPager; + +/** + * A safe wrapper around {@link ViewPager} that guards against IllegalArgumentException + * caused by {@code MotionEvent} pointer index out of range errors on certain Android versions. + * + *

If {@link ViewPager#onInterceptTouchEvent(MotionEvent)} throws an + * {@link IllegalArgumentException}, we catch it and return {@code false} to avoid the crash. + * This mirrors the common workaround for the AndroidX bug (see issue #3478).

+ */ +public class SafeViewPager extends ViewPager { + public SafeViewPager(Context context) { + super(context); + } + + public SafeViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + try { + return super.onInterceptTouchEvent(ev); + } catch (IllegalArgumentException e) { + // Pointer index out of range – swallow the exception and prevent a crash. + // Returning false means the ViewPager will not intercept the touch event. + return false; + } + } +} diff --git a/app/src/main/res/layout/activity_termux.xml b/app/src/main/res/layout/activity_termux.xml index 831ea7cfb8a..64161795b9c 100644 --- a/app/src/main/res/layout/activity_termux.xml +++ b/app/src/main/res/layout/activity_termux.xml @@ -94,7 +94,7 @@ - Date: Wed, 10 Jun 2026 05:41:58 -0700 Subject: [PATCH 21/52] docs: record #3478 verification --- issue-data/ISSUE_FACTORY_PROGRESS.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/issue-data/ISSUE_FACTORY_PROGRESS.md b/issue-data/ISSUE_FACTORY_PROGRESS.md index 50774facfeb..ee165a9ab06 100644 --- a/issue-data/ISSUE_FACTORY_PROGRESS.md +++ b/issue-data/ISSUE_FACTORY_PROGRESS.md @@ -10,6 +10,27 @@ Reason: Needs runtime/device-specific verification or larger change; not safe fo Commit SHA: none CI: none +## Issue #3478 — ViewPager pointerIndex out of range crash +Status: Fixed +Verification: GitHub Actions Build +Files changed: +- app/src/main/java/com/termux/app/terminal/io/SafeViewPager.java +- app/src/main/res/layout/activity_termux.xml +Code commit SHA: +- 2a7d23b43ffedf8999ce94cf14455fbebeabf41f +CI run ID: +- 27276218332 +CI status: +- success +Artifacts: +- Saved outside repo at C:\Users\Billy\Documents\GitHub\termux-app-artifacts\run-27276218332 +- apt-android-5: arm64-v8a, armeabi-v7a, x86, x86_64, universal, sha256sums +- apt-android-7: arm64-v8a, armeabi-v7a, x86, x86_64, universal, sha256sums +Notes: +- SafeViewPager prevents the pointerIndex out of range crash by catching IllegalArgumentException in onInterceptTouchEvent and returning false. +- activity_termux.xml now uses SafeViewPager for terminal_toolbar_view_pager. +- Both Android 5 and Android 7 build matrices passed. + ## Issue #5092 — UI-thread blocking in file-receive flow Status: Fixed Verification: GitHub Actions Build From 0a84468dc9433209aad94a85d730ee5f0641bd98 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 10:40:26 -0700 Subject: [PATCH 22/52] fix: prevent crash when pasting ESC-only text (#5119) --- .../src/main/java/com/termux/terminal/TerminalEmulator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index b0be6f34405..ffcdf5ff7fd 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -2592,6 +2592,11 @@ public void paste(String text) { // Second: Replace all newlines (\n) or CRLF (\r\n) with carriage returns (\r). text = text.replaceAll("\r?\n", "\r"); + // If text is empty after stripping control characters, nothing to paste. + // This prevents IllegalArgumentException in ByteQueue.write() when a bare + // ESC character (or other control-only input) is pasted. (#5119) + if (text.isEmpty()) return; + // Then: Implement bracketed paste mode if enabled: boolean bracketed = isDecsetInternalBitSet(DECSET_BIT_BRACKETED_PASTE_MODE); if (bracketed) mSession.write("\033[200~"); From bda4bd9c32095dc8150f48cd857624910c79ee87 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 10:44:36 -0700 Subject: [PATCH 23/52] fix: update notification on session rename (#5048) --- app/src/main/java/com/termux/app/TermuxService.java | 5 +++++ .../app/terminal/TermuxTerminalSessionActivityClient.java | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 3dcdad9bbb7..1bc0e21537c 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -858,6 +858,11 @@ private synchronized void updateNotification() { } } + /** Public wrapper for {@link #updateNotification()} to allow session title changes to refresh the notification. */ + public void updateNotificationPublic() { + updateNotification(); + } + diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java index bd789145f24..c56131b3bb6 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java @@ -133,6 +133,13 @@ public void onTitleChanged(@NonNull TerminalSession updatedSession) { } termuxSessionListNotifyUpdated(); + + // Update the persistent notification so it reflects the new session name (#5048) + if (updatedSession == mActivity.getCurrentSession()) { + TermuxService service = mActivity.getTermuxService(); + if (service != null) + service.updateNotificationPublic(); + } } @Override From 956f002b529ac8da3521d68005b98edc92dca9af Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 10:45:44 -0700 Subject: [PATCH 24/52] fix: catch SecurityException in crash report notification (#5145) --- .../termux/shared/termux/crash/TermuxCrashUtils.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java b/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java index d714cd7e5ef..ee737b15612 100644 --- a/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java +++ b/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java @@ -363,8 +363,16 @@ public static void sendCrashReportNotification(final Context currentPackageConte // Send the notification NotificationManager notificationManager = NotificationUtils.getNotificationManager(termuxPackageContext); - if (notificationManager != null) - notificationManager.notify(nextNotificationId, builder.build()); + if (notificationManager != null) { + try { + notificationManager.notify(nextNotificationId, builder.build()); + } catch (SecurityException e) { + // On some devices (e.g. when a plugin sends a crash notification from a + // different package context), the notification manager may reject the + // notify call with "Package X does not belong to Y". Log and continue. (#5145) + Logger.logError(logTag, "Failed to send crash report notification: " + e.getMessage()); + } + } } /** From a5ce7563f116f1fe7f7eec0ff6c8878054f46182 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 10:50:00 -0700 Subject: [PATCH 25/52] fix: ensure session list adapter notify runs on UI thread (#5027) --- app/src/main/java/com/termux/app/TermuxActivity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 0c9f74125b9..16a57bbbe0e 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -856,7 +856,9 @@ public boolean isTerminalToolbarTextInputViewSelected() { public void termuxSessionListNotifyUpdated() { - mTermuxSessionListViewController.notifyDataSetChanged(); + // Ensure adapter notification always runs on the UI thread to prevent + // IllegalStateException from ListView when modified from background. (#5027) + runOnUiThread(() -> mTermuxSessionListViewController.notifyDataSetChanged()); } public boolean isVisible() { From c8192808326b7af584d5f0c26464ea7a293d4f74 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 10:52:18 -0700 Subject: [PATCH 26/52] fix: retry soft keyboard show on late window focus (#5014) --- .../terminal/TermuxTerminalViewClient.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java index 700c5e50980..c9a5b677ff7 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java @@ -641,7 +641,9 @@ public void onFocusChange(View view, boolean hasFocus) { // will also show keyboard even if it was closed before opening url. #2111 Logger.logVerbose(LOG_TAG, "Requesting TerminalView focus and showing soft keyboard"); mActivity.getTerminalView().requestFocus(); - mActivity.getTerminalView().postDelayed(getShowSoftKeyboardRunnable(), 300); + // Use a retry-based approach instead of a fixed 300ms delay to handle + // cases where window focus arrives late (e.g. returning via launcher). (#5014) + showSoftKeyboardWithRetry(3); } } @@ -654,6 +656,24 @@ private Runnable getShowSoftKeyboardRunnable() { return mShowSoftKeyboardRunnable; } + /** + * Show the soft keyboard with retry logic to handle late window focus delivery. + * When returning to Termux via launcher (not recents), the window focus may arrive + * after a fixed delay, causing showSoftInput to be ignored. This retries up to + * {@code maxRetries} times with increasing delays. (#5014) + */ + private void showSoftKeyboardWithRetry(int maxRetries) { + if (maxRetries <= 0) return; + long delay = 100; + mActivity.getTerminalView().postDelayed(() -> { + if (mActivity.getTerminalView().hasWindowFocus()) { + KeyboardUtils.showSoftKeyboard(mActivity, mActivity.getTerminalView()); + } else if (maxRetries > 1) { + showSoftKeyboardWithRetry(maxRetries - 1); + } + }, delay); + } + public void setTerminalCursorBlinkerState(boolean start) { From 16f04c1aae6fc9074f5a2f935a13befe8f097db0 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 11:02:51 -0700 Subject: [PATCH 27/52] docs: record batch issue-factory progress --- issue-data/ISSUE_FACTORY_PROGRESS.md | 105 +++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/issue-data/ISSUE_FACTORY_PROGRESS.md b/issue-data/ISSUE_FACTORY_PROGRESS.md index ee165a9ab06..2648ee1a61f 100644 --- a/issue-data/ISSUE_FACTORY_PROGRESS.md +++ b/issue-data/ISSUE_FACTORY_PROGRESS.md @@ -10,6 +10,111 @@ Reason: Needs runtime/device-specific verification or larger change; not safe fo Commit SHA: none CI: none +## Issue #5119 — ESC character paste crash +Status: Fixed +Verification: GitHub Actions Build +Why it matters for our fork: Pasting a bare ESC character (\u001B) crashes the app with IllegalArgumentException in ByteQueue.write(). This is a reproducible crash that affects any user who pastes control characters. +Files inspected: +- terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +- terminal-emulator/src/main/java/com/termux/terminal/ByteQueue.java +Files changed: +- terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +Code commit SHA: +- 0a84468d +CI run ID: +- 27295347349 +CI status: +- success +Artifacts: +- Saved outside repo at C:\Users\Billy\Documents\GitHub\termux-app-artifacts\run-27295347349 +- apt-android-5: arm64-v8a, armeabi-v7a, x86, x86_64, universal, sha256sums +- apt-android-7: arm64-v8a, armeabi-v7a, x86, x86_64, universal, sha256sums +Notes: +- After stripping control characters, if the text is empty, paste() returns early instead of calling mSession.write("") which would trigger ByteQueue.write() with length 0. +- Both Android 5 and Android 7 build matrices passed. + +## Issue #5048 — Session notification not updated on rename +Status: Fixed +Verification: GitHub Actions Build +Why it matters for our fork: When a user renames a session via long-press, the persistent notification continues showing the old name. This is a UI inconsistency that confuses users. +Files inspected: +- app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java +- app/src/main/java/com/termux/app/TermuxService.java +Files changed: +- app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java +- app/src/main/java/com/termux/app/TermuxService.java +Code commit SHA: +- bda4bd9c +CI run ID: +- 27295347349 +CI status: +- success +Artifacts: +- Saved outside repo at C:\Users\Billy\Documents\GitHub\termux-app-artifacts\run-27295347349 +Notes: +- Added updateNotificationPublic() wrapper in TermuxService. +- onTitleChanged() now calls updateNotificationPublic() when the renamed session is the current one. + +## Issue #5145 — Crash report notification SecurityException +Status: Fixed +Verification: GitHub Actions Build +Why it matters for our fork: When a plugin sends a crash notification from a different package context, the notification manager throws SecurityException ("Package X does not belong to Y"), crashing the app. +Files inspected: +- termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java +Files changed: +- termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java +Code commit SHA: +- 956f002b +CI run ID: +- 27295347349 +CI status: +- success +Artifacts: +- Saved outside repo at C:\Users\Billy\Documents\GitHub\termux-app-artifacts\run-27295347349 +Notes: +- Wrapped notificationManager.notify() in try-catch for SecurityException. +- Error is logged instead of crashing the app. + +## Issue #5027 — ListView adapter crash from background thread +Status: Fixed +Verification: GitHub Actions Build +Why it matters our fork: When sessions are added/removed from background threads (e.g. onTermuxSessionExited), notifyDataSetChanged() is called off the UI thread, causing IllegalStateException in ListView. +Files inspected: +- app/src/main/java/com/termux/app/TermuxActivity.java +- app/src/main/java/com/termux/app/TermuxService.java +- app/src/main/java/com/termux/app/terminal/TermuxSessionsListViewController.java +Files changed: +- app/src/main/java/com/termux/app/TermuxActivity.java +Code commit SHA: +- a5ce7563 +CI run ID: +- 27295347349 +CI status: +- success +Artifacts: +- Saved outside repo at C:\Users\Billy\Documents\GitHub\termux-app-artifacts\run-27295347349 +Notes: +- termuxSessionListNotifyUpdated() now uses runOnUiThread() to ensure notifyDataSetChanged() always runs on the UI thread. + +## Issue #5014 — Soft keyboard flicker on return via launcher +Status: Fixed +Verification: GitHub Actions Build +Why it matters for our fork: When returning to Termux via launcher (not recents), the 300ms fixed delay for showing the soft keyboard may fire before window focus arrives, causing the keyboard to flicker and disappear. +Files inspected: +- app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java +Files changed: +- app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java +Code commit SHA: +- c8192808 +CI run ID: +- 27295347349 +CI status: +- success +Artifacts: +- Saved outside repo at C:\Users\Billy\Documents\GitHub\termux-app-artifacts\run-27295347349 +Notes: +- Replaced fixed 300ms postDelayed with showSoftKeyboardWithRetry() that checks hasWindowFocus() and retries up to 3 times with 100ms delays. + ## Issue #3478 — ViewPager pointerIndex out of range crash Status: Fixed Verification: GitHub Actions Build From 17c36f2ec757b91a186d6613162c581cdaaceac4 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 12:06:12 -0700 Subject: [PATCH 28/52] fix: apply font/colors when session is attached (#4849) --- .../app/terminal/TermuxTerminalSessionActivityClient.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java index c56131b3bb6..d24a72113fe 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java @@ -309,6 +309,9 @@ public void setCurrentSession(TerminalSession session) { // be stale, like current session not selected or scrolled to. checkAndScrollToSession(session); updateBackgroundColor(); + // Also check for font and colors when session changes, to handle the case where + // Termux is started from a widget/shortcut and the session is ready immediately. (#4849) + checkForFontAndColors(); } void notifyOfSessionChange() { From 334cad2a45a0320d84e88434dd6157d98ae21a56 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:07:58 -0700 Subject: [PATCH 29/52] fix: harden session and key handling batch 2 --- app/src/main/java/com/termux/app/TermuxService.java | 6 +++++- .../src/main/java/com/termux/view/TerminalView.java | 7 +++++++ .../com/termux/shared/termux/extrakeys/ExtraKeysView.java | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 1bc0e21537c..a44c3e6f492 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -647,7 +647,11 @@ public void onTermuxSessionExited(final TermuxSession termuxSession) { if (executionCommand != null && executionCommand.isPluginExecutionCommand) TermuxPluginUtils.processPluginExecutionCommandResult(this, LOG_TAG, executionCommand); - mShellManager.mTermuxSessions.remove(termuxSession); + // Synchronize on the sessions list to prevent concurrent modification + // when other synchronized methods access it from different threads. + synchronized (mShellManager.mTermuxSessions) { + mShellManager.mTermuxSessions.remove(termuxSession); + } // Notify {@link TermuxSessionsListViewController} that sessions list has been updated if // activity in is foreground diff --git a/terminal-view/src/main/java/com/termux/view/TerminalView.java b/terminal-view/src/main/java/com/termux/view/TerminalView.java index 0b3f515682a..28b2494f715 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalView.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalView.java @@ -926,6 +926,7 @@ public boolean handleKeyCode(int keyCode, int keyMod) { public boolean handleKeyCodeAction(int keyCode, int keyMod) { boolean shiftDown = (keyMod & KeyHandler.KEYMOD_SHIFT) != 0; + boolean ctrlDown = (keyMod & KeyHandler.KEYMOD_CTRL) != 0; switch (keyCode) { case KeyEvent.KEYCODE_PAGE_UP: @@ -939,6 +940,12 @@ public boolean handleKeyCodeAction(int keyCode, int keyMod) { motionEvent.recycle(); return true; } + // When Ctrl is pressed (without shift), do not consume the event here. + // Let it fall through to KeyHandler.getCode() so the Ctrl modifier + // is included in the escape sequence (e.g. \033[5;5~ for Ctrl+PgUp). + if (ctrlDown) { + return false; + } } return false; diff --git a/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysView.java b/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysView.java index 4fbbf1e1718..92d3de596bb 100644 --- a/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysView.java +++ b/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysView.java @@ -23,6 +23,8 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; +import android.view.Gravity; +import android.graphics.Paint; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.GridLayout; @@ -413,6 +415,8 @@ public void reload(ExtraKeysInfo extraKeysInfo, float heightPx) { button.setTextColor(mButtonTextColor); button.setAllCaps(mButtonTextAllCaps); button.setPadding(0, 0, 0, 0); + button.setGravity(Gravity.CENTER); + button.setPaintFlags(button.getPaintFlags() | Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG); button.setOnClickListener(view -> { performExtraKeyButtonHapticFeedback(view, buttonInfo, button); From 8d1b54e6ff26629badcf2809e1384154d25a1136 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:23:37 -0700 Subject: [PATCH 30/52] fix: guard against null executionCommand in onTermuxSessionExited --- app/src/main/java/com/termux/app/TermuxService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index a44c3e6f492..6d02df808ee 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -641,11 +641,11 @@ public void onTermuxSessionExited(final TermuxSession termuxSession) { if (termuxSession != null) { ExecutionCommand executionCommand = termuxSession.getExecutionCommand(); - Logger.logVerbose(LOG_TAG, "The onTermuxSessionExited() callback called for \"" + executionCommand.getCommandIdAndLabelLogString() + "\" TermuxSession command"); - // If the execution command was started for a plugin, then process the results - if (executionCommand != null && executionCommand.isPluginExecutionCommand) + if (executionCommand != null && executionCommand.isPluginExecutionCommand) { + Logger.logVerbose(LOG_TAG, "The onTermuxSessionExited() callback called for \"" + executionCommand.getCommandIdAndLabelLogString() + "\" TermuxSession command"); TermuxPluginUtils.processPluginExecutionCommandResult(this, LOG_TAG, executionCommand); + } // Synchronize on the sessions list to prevent concurrent modification // when other synchronized methods access it from different threads. From 19df80d10b4ee21c62ebe823bab944027aa35c99 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:33:12 -0700 Subject: [PATCH 31/52] fix: guard against null URI in FileReceiverActivity handleContentUri --- .../java/com/termux/app/api/file/FileReceiverActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java index 5de51852c79..9c7be3a982f 100644 --- a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +++ b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java @@ -135,6 +135,10 @@ void showErrorDialogAndQuit(String message) { } void handleContentUri(@NonNull final Uri uri, String subjectFromIntent) { + if (uri == null) { + showErrorDialogAndQuit("No file URI received"); + return; + } try { Logger.logVerbose(LOG_TAG, "uri: \"" + uri + "\", path: \"" + uri.getPath() + "\", fragment: \"" + uri.getFragment() + "\""); From b5676144bd555f8ae94c8a052676055a88ab1f39 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:34:15 -0700 Subject: [PATCH 32/52] fix: synchronize session list removal in killAllTermuxExecutionCommands --- app/src/main/java/com/termux/app/TermuxService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 6d02df808ee..b3f22c096f0 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -275,8 +275,11 @@ private synchronized void killAllTermuxExecutionCommands() { ExecutionCommand executionCommand = termuxSessions.get(i).getExecutionCommand(); processResult = mWantsToStop || executionCommand.isPluginExecutionCommandWithPendingResult(); termuxSessions.get(i).killIfExecuting(this, processResult); - if (!processResult) - mShellManager.mTermuxSessions.remove(termuxSessions.get(i)); + if (!processResult) { + synchronized (mShellManager.mTermuxSessions) { + mShellManager.mTermuxSessions.remove(termuxSessions.get(i)); + } + } } From 70a6e77d86d81635ea4cef02d3477cdf9e776e52 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:34:54 -0700 Subject: [PATCH 33/52] fix: guard against null data in TerminalSession write --- .../src/main/java/com/termux/terminal/TerminalSession.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java index caea870b7f1..8dc404c5b05 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java @@ -176,7 +176,7 @@ public void run() { /** Write data to the shell process. */ @Override public void write(byte[] data, int offset, int count) { - if (mShellPid > 0) mTerminalToProcessIOQueue.write(data, offset, count); + if (mShellPid > 0 && data != null && count > 0) mTerminalToProcessIOQueue.write(data, offset, count); } /** Write the Unicode code point to the terminal encoded in UTF-8. */ From cd82cd0e14b8d4864331de327db0efbfe1de8886 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:36:57 -0700 Subject: [PATCH 34/52] fix: make mIsVisible volatile for thread safety --- app/src/main/java/com/termux/app/TermuxActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 16a57bbbe0e..fe546e6de3c 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -152,7 +152,7 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo * If between onResume() and onStop(). Note that only one session is in the foreground of the terminal view at the * time, so if the session causing a change is not in the foreground it should probably be treated as background. */ - private boolean mIsVisible; + private volatile boolean mIsVisible; /** * If onResume() was called after onCreate(). From 51d8e981d681ee49520aa83b80fa083b191ae9c3 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:38:45 -0700 Subject: [PATCH 35/52] fix: only apply all-caps to ASCII extra key labels --- .../shared/termux/extrakeys/ExtraKeysView.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysView.java b/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysView.java index 92d3de596bb..29d45d0c68e 100644 --- a/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysView.java +++ b/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysView.java @@ -411,9 +411,12 @@ public void reload(ExtraKeysInfo extraKeysInfo, float heightPx) { button = new MaterialButton(getContext(), null, android.R.attr.buttonBarButtonStyle); } - button.setText(buttonInfo.getDisplay()); + String displayText = buttonInfo.getDisplay(); + button.setText(displayText); button.setTextColor(mButtonTextColor); - button.setAllCaps(mButtonTextAllCaps); + // Only apply all-caps for ASCII labels to avoid corrupting + // non-ASCII glyphs (arrows, special chars) via toUpperCase(). + button.setAllCaps(mButtonTextAllCaps && isAscii(displayText)); button.setPadding(0, 0, 0, 0); button.setGravity(Gravity.CENTER); button.setPaintFlags(button.getPaintFlags() | Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG); @@ -682,4 +685,12 @@ public static int maximumLength(Object[][] matrix) { return m; } + private static boolean isAscii(String text) { + if (text == null) return true; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) > 127) return false; + } + return true; + } + } From 39771c7612974b3481e10dc7e83d3cfd13aab93e Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:43:53 -0700 Subject: [PATCH 36/52] fix: guard against null PowerManager/WifiManager in actionAcquireWakeLock --- app/src/main/java/com/termux/app/TermuxService.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index b3f22c096f0..6133113b6d4 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -314,13 +314,17 @@ private void actionAcquireWakeLock() { Logger.logDebug(LOG_TAG, "Acquiring WakeLocks"); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); - mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TermuxConstants.TERMUX_APP_NAME.toLowerCase() + ":service-wakelock"); - mWakeLock.acquire(); + if (pm != null) { + mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TermuxConstants.TERMUX_APP_NAME.toLowerCase() + ":service-wakelock"); + mWakeLock.acquire(); + } // http://tools.android.com/tech-docs/lint-in-studio-2-3#TOC-WifiManager-Leak WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); - mWifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TermuxConstants.TERMUX_APP_NAME.toLowerCase()); - mWifiLock.acquire(); + if (wm != null) { + mWifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TermuxConstants.TERMUX_APP_NAME.toLowerCase()); + mWifiLock.acquire(); + } if (!PermissionUtils.checkIfBatteryOptimizationsDisabled(this)) { PermissionUtils.requestDisableBatteryOptimizations(this); From 4e20c3d37f443c07a86c02a6762232a7050d032a Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 13:44:54 -0700 Subject: [PATCH 37/52] fix: guard against null InputStream in promptNameAndSave --- .../java/com/termux/app/api/file/FileReceiverActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java index 9c7be3a982f..16348a155f4 100644 --- a/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java +++ b/app/src/main/java/com/termux/app/api/file/FileReceiverActivity.java @@ -177,6 +177,10 @@ void handleContentUri(@NonNull final Uri uri, String subjectFromIntent) { } void promptNameAndSave(final InputStream in, final String attachmentFileName) { + if (in == null) { + showErrorDialogAndQuit("Unable to open input stream for file"); + return; + } TextInputDialogUtils.textInput(this, R.string.title_file_received, attachmentFileName, R.string.action_file_received_edit, text -> { // Offload file copy to background thread From 58de0c44222e73244f13665e64c5c7101251cbd7 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:04:23 -0700 Subject: [PATCH 38/52] fix: guard against null mSession in TerminalEmulator paste --- .../src/main/java/com/termux/terminal/TerminalEmulator.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index ffcdf5ff7fd..126bcc23b20 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -2587,6 +2587,8 @@ private void setTitle(String newTitle) { /** If DECSET 2004 is set, prefix paste with "\033[200~" and suffix with "\033[201~". */ public void paste(String text) { + if (mSession == null) return; + // First: Always remove escape key and C1 control characters [0x80,0x9F]: text = text.replaceAll("(\u001B|[\u0080-\u009F])", ""); // Second: Replace all newlines (\n) or CRLF (\r\n) with carriage returns (\r). From 30b85b25784400ee8184d8e94501acbd74ceaedc Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:34:11 -0700 Subject: [PATCH 39/52] fix: synchronize session list iteration in setTermuxTerminalSessionClient --- app/src/main/java/com/termux/app/TermuxService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 6133113b6d4..0a251e9a662 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -771,8 +771,10 @@ public synchronized TermuxTerminalSessionClientBase getTermuxTerminalSessionClie public synchronized void setTermuxTerminalSessionClient(TermuxTerminalSessionActivityClient termuxTerminalSessionActivityClient) { mTermuxTerminalSessionActivityClient = termuxTerminalSessionActivityClient; - for (int i = 0; i < mShellManager.mTermuxSessions.size(); i++) - mShellManager.mTermuxSessions.get(i).getTerminalSession().updateTerminalSessionClient(mTermuxTerminalSessionActivityClient); + synchronized (mShellManager.mTermuxSessions) { + for (int i = 0; i < mShellManager.mTermuxSessions.size(); i++) + mShellManager.mTermuxSessions.get(i).getTerminalSession().updateTerminalSessionClient(mTermuxTerminalSessionActivityClient); + } } /** This should be called when {@link TermuxActivity} has been destroyed and in {@link #onUnbind(Intent)} From 2e7592d038beed313f7209b8605c17199e43a3b9 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:34:32 -0700 Subject: [PATCH 40/52] fix: synchronize session list iteration in unsetTermuxTerminalSessionClient --- app/src/main/java/com/termux/app/TermuxService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 0a251e9a662..0b44c5d87a7 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -782,8 +782,10 @@ public synchronized void setTermuxTerminalSessionClient(TermuxTerminalSessionAct * clients do not hold an activity references. */ public synchronized void unsetTermuxTerminalSessionClient() { - for (int i = 0; i < mShellManager.mTermuxSessions.size(); i++) - mShellManager.mTermuxSessions.get(i).getTerminalSession().updateTerminalSessionClient(mTermuxTerminalSessionServiceClient); + synchronized (mShellManager.mTermuxSessions) { + for (int i = 0; i < mShellManager.mTermuxSessions.size(); i++) + mShellManager.mTermuxSessions.get(i).getTerminalSession().updateTerminalSessionClient(mTermuxTerminalSessionServiceClient); + } mTermuxTerminalSessionActivityClient = null; } From a856ac8ef6bf12fa3acce69f92ea69d91063e9ec Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:34:58 -0700 Subject: [PATCH 41/52] fix: guard against null sessionHandle and null mHandle in getTerminalSessionForHandle --- app/src/main/java/com/termux/app/TermuxService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 0b44c5d87a7..9bb2c8b0da8 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -937,10 +937,11 @@ public synchronized int getIndexOfSession(TerminalSession terminalSession) { } public synchronized TerminalSession getTerminalSessionForHandle(String sessionHandle) { + if (sessionHandle == null) return null; TerminalSession terminalSession; for (int i = 0, len = mShellManager.mTermuxSessions.size(); i < len; i++) { terminalSession = mShellManager.mTermuxSessions.get(i).getTerminalSession(); - if (terminalSession.mHandle.equals(sessionHandle)) + if (terminalSession.mHandle != null && terminalSession.mHandle.equals(sessionHandle)) return terminalSession; } return null; From 970ec055ba25f62c8413864fdca639b4f9831cbd Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:35:10 -0700 Subject: [PATCH 42/52] fix: guard against missing file extension in TermuxOpenReceiver MIME type lookup --- .../main/java/com/termux/app/TermuxOpenReceiver.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxOpenReceiver.java b/app/src/main/java/com/termux/app/TermuxOpenReceiver.java index f27f922cabc..e91844f5371 100644 --- a/app/src/main/java/com/termux/app/TermuxOpenReceiver.java +++ b/app/src/main/java/com/termux/app/TermuxOpenReceiver.java @@ -94,10 +94,14 @@ public void onReceive(Context context, Intent intent) { if (contentTypeExtra == null) { String fileName = fileToShare.getName(); int lastDotIndex = fileName.lastIndexOf('.'); - String fileExtension = fileName.substring(lastDotIndex + 1); - MimeTypeMap mimeTypes = MimeTypeMap.getSingleton(); - // Lower casing makes it work with e.g. "JPG": - contentTypeToUse = mimeTypes.getMimeTypeFromExtension(fileExtension.toLowerCase()); + if (lastDotIndex >= 0 && lastDotIndex < fileName.length() - 1) { + String fileExtension = fileName.substring(lastDotIndex + 1); + MimeTypeMap mimeTypes = MimeTypeMap.getSingleton(); + // Lower casing makes it work with e.g. "JPG": + contentTypeToUse = mimeTypes.getMimeTypeFromExtension(fileExtension.toLowerCase()); + } else { + contentTypeToUse = null; + } if (contentTypeToUse == null) contentTypeToUse = "application/octet-stream"; } else { contentTypeToUse = contentTypeExtra; From 752ab2bd2e0b3cdd361931b30b3a82eece8a07dd Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:35:20 -0700 Subject: [PATCH 43/52] fix: guard against null TermuxSession in TermuxSessionsListViewController getView --- .../app/terminal/TermuxSessionsListViewController.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/terminal/TermuxSessionsListViewController.java b/app/src/main/java/com/termux/app/terminal/TermuxSessionsListViewController.java index bf914b977b2..963ef19d03d 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxSessionsListViewController.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxSessionsListViewController.java @@ -51,7 +51,12 @@ public View getView(int position, View convertView, @NonNull ViewGroup parent) { TextView sessionTitleView = sessionRowView.findViewById(R.id.session_title); - TerminalSession sessionAtRow = getItem(position).getTerminalSession(); + TermuxSession termuxSession = getItem(position); + if (termuxSession == null) { + sessionTitleView.setText("null session"); + return sessionRowView; + } + TerminalSession sessionAtRow = termuxSession.getTerminalSession(); if (sessionAtRow == null) { sessionTitleView.setText("null session"); return sessionRowView; From ffe05d7fb54ca8c9574627a040818bb0863aca6d Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:57:35 -0700 Subject: [PATCH 44/52] fix: guard against null executionCommand in onAppShellExited --- app/src/main/java/com/termux/app/TermuxService.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 9bb2c8b0da8..300d89a935e 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -517,11 +517,12 @@ public void onAppShellExited(final AppShell termuxTask) { if (termuxTask != null) { ExecutionCommand executionCommand = termuxTask.getExecutionCommand(); - Logger.logVerbose(LOG_TAG, "The onTermuxTaskExited() callback called for \"" + executionCommand.getCommandIdAndLabelLogString() + "\" TermuxTask command"); - // If the execution command was started for a plugin, then process the results - if (executionCommand != null && executionCommand.isPluginExecutionCommand) - TermuxPluginUtils.processPluginExecutionCommandResult(this, LOG_TAG, executionCommand); + if (executionCommand != null) { + Logger.logVerbose(LOG_TAG, "The onTermuxTaskExited() callback called for \"" + executionCommand.getCommandIdAndLabelLogString() + "\" TermuxTask command"); + if (executionCommand.isPluginExecutionCommand) + TermuxPluginUtils.processPluginExecutionCommandResult(this, LOG_TAG, executionCommand); + } mShellManager.mTermuxTasks.remove(termuxTask); } From 79209ebeff54426a6005a6957b449d0e60e7cb80 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:58:13 -0700 Subject: [PATCH 45/52] fix: guard against null executionCommand in onTermuxSessionExited --- app/src/main/java/com/termux/app/TermuxService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 300d89a935e..a963836a3bd 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -650,9 +650,11 @@ public void onTermuxSessionExited(final TermuxSession termuxSession) { ExecutionCommand executionCommand = termuxSession.getExecutionCommand(); // If the execution command was started for a plugin, then process the results - if (executionCommand != null && executionCommand.isPluginExecutionCommand) { - Logger.logVerbose(LOG_TAG, "The onTermuxSessionExited() callback called for \"" + executionCommand.getCommandIdAndLabelLogString() + "\" TermuxSession command"); - TermuxPluginUtils.processPluginExecutionCommandResult(this, LOG_TAG, executionCommand); + if (executionCommand != null) { + if (executionCommand.isPluginExecutionCommand) { + Logger.logVerbose(LOG_TAG, "The onTermuxSessionExited() callback called for \"" + executionCommand.getCommandIdAndLabelLogString() + "\" TermuxSession command"); + TermuxPluginUtils.processPluginExecutionCommandResult(this, LOG_TAG, executionCommand); + } } // Synchronize on the sessions list to prevent concurrent modification From 2ab612e58f6439996323484e08319f1a7ad5a064 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 14:59:30 -0700 Subject: [PATCH 46/52] fix: guard against null getExecutionCommand in onSessionFinished --- .../terminal/TermuxTerminalSessionActivityClient.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java index d24a72113fe..b5ba1c3456c 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java @@ -160,9 +160,12 @@ public void onSessionFinished(@NonNull TerminalSession finishedSession) { boolean isPluginExecutionCommandWithPendingResult = false; TermuxSession termuxSession = service.getTermuxSession(index); if (termuxSession != null) { - isPluginExecutionCommandWithPendingResult = termuxSession.getExecutionCommand().isPluginExecutionCommandWithPendingResult(); - if (isPluginExecutionCommandWithPendingResult) - Logger.logVerbose(LOG_TAG, "The \"" + finishedSession.mSessionName + "\" session will be force finished automatically since result in pending."); + ExecutionCommand ec = termuxSession.getExecutionCommand(); + if (ec != null) { + isPluginExecutionCommandWithPendingResult = ec.isPluginExecutionCommandWithPendingResult(); + if (isPluginExecutionCommandWithPendingResult) + Logger.logVerbose(LOG_TAG, "The \"" + finishedSession.mSessionName + "\" session will be force finished automatically since result in pending."); + } } if (mActivity.isVisible() && finishedSession != mActivity.getCurrentSession()) { From 27b79591f602a66cec72a4c1283a49a2f48a8ae9 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 15:00:01 -0700 Subject: [PATCH 47/52] fix: guard against null getExecutionCommand in getTermuxTaskForShellName --- app/src/main/java/com/termux/app/TermuxService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index a963836a3bd..5fc82eac4da 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -955,8 +955,8 @@ public synchronized AppShell getTermuxTaskForShellName(String name) { AppShell appShell; for (int i = 0, len = mShellManager.mTermuxTasks.size(); i < len; i++) { appShell = mShellManager.mTermuxTasks.get(i); - String shellName = appShell.getExecutionCommand().shellName; - if (shellName != null && shellName.equals(name)) + ExecutionCommand ec = appShell.getExecutionCommand(); + if (ec != null && ec.shellName != null && ec.shellName.equals(name)) return appShell; } return null; From 65be78205fe661dc24de6d5955678a04c5aaa0e8 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 15:00:46 -0700 Subject: [PATCH 48/52] fix: guard against null getExecutionCommand in getTermuxSessionForShellName --- app/src/main/java/com/termux/app/TermuxService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 5fc82eac4da..55aa2d73a89 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -967,8 +967,8 @@ public synchronized TermuxSession getTermuxSessionForShellName(String name) { TermuxSession termuxSession; for (int i = 0, len = mShellManager.mTermuxSessions.size(); i < len; i++) { termuxSession = mShellManager.mTermuxSessions.get(i); - String shellName = termuxSession.getExecutionCommand().shellName; - if (shellName != null && shellName.equals(name)) + ExecutionCommand ec = termuxSession.getExecutionCommand(); + if (ec != null && ec.shellName != null && ec.shellName.equals(name)) return termuxSession; } return null; From 8159666cc04f98ddc5f4ac589208a1aad17e6195 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Wed, 10 Jun 2026 15:05:55 -0700 Subject: [PATCH 49/52] fix: add missing ExecutionCommand import in TermuxTerminalSessionActivityClient --- .../termux/app/terminal/TermuxTerminalSessionActivityClient.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java index b5ba1c3456c..968f9427ac5 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java @@ -27,6 +27,7 @@ import com.termux.shared.termux.settings.properties.TermuxPropertyConstants; import com.termux.shared.termux.terminal.io.BellHandler; import com.termux.shared.logger.Logger; +import com.termux.shared.shell.command.ExecutionCommand; import com.termux.terminal.TerminalColors; import com.termux.terminal.TerminalSession; import com.termux.terminal.TerminalSessionClient; From dcb30fe61a4e3c8ef0e1dc0a2e0f94204b478860 Mon Sep 17 00:00:00 2001 From: billybox1926-jpg Date: Thu, 11 Jun 2026 00:24:25 -0700 Subject: [PATCH 50/52] build: use shared debug keystore for matched-stack signing --- app/build.gradle | 8 ++++---- app/termux-debug-shared.jks | Bin 0 -> 2690 bytes 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 app/termux-debug-shared.jks diff --git a/app/build.gradle b/app/build.gradle index 33c88d1d4a5..2f6f0180158 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -79,10 +79,10 @@ android { signingConfigs { debug { - storeFile file('testkey_untrusted.jks') - keyAlias 'alias' - storePassword 'xrj45yWGLbsO7W0v' - keyPassword 'xrj45yWGLbsO7W0v' + storeFile file('termux-debug-shared.jks') + keyAlias 'termuxdebug' + storePassword 'termuxdebug' + keyPassword 'termuxdebug' } } diff --git a/app/termux-debug-shared.jks b/app/termux-debug-shared.jks new file mode 100644 index 0000000000000000000000000000000000000000..8f9d4f0700c99194363270c4378a0d0169e6b34f GIT binary patch literal 2690 zcma)8c{mh`7N6bFD9l&}V;Ez})>twmOBf+rj4mmahLI(*WoHIivJ{epK?y1QZs=y; z$u`2Zpd30>=LkGYaQfwdauRF_YX7VV zf-D5(EhdZras3FGW`{&GVuUpa{duAwkQ5gPC`v%U;Qzh|Vuu0<7#REYdxk(qFa#(A z;fl0|x0N(gQtF2$wnn|+E)Y6oNM$4H{;sam2H!^vo>&@|*l6s zy6Pu7D^SDw-zl(=3fwW@cYBZ8RbJ*rpaLe}Hi2@roSVP0MfFX+0 z^a|iHphwPTX=Wg?T2^55`s~!sHM>U!9nk1I8-cgKba$F?na+%C68%%6qc^`TQs=>$ z;vTEG*=~-XHso){3K4SrMog#I5q)V`n#u^KaFW!fGB_0B1N$>Lb0xF#kCoh&M!IL3 zWPGa>F=2I7>3+yzZiOq5VcHA@!+2Rz{Y9IVfy8&6M7_9xxiI&WD4P>lpAx-?0KepT z=cf->^bt&5*T_42*5|p-ZA%k3)+z?Owo43l?Y`BmoIu-|$!iYQ$I;#q7l zQ5GuIJe#D9jb!w*my#Iq*|zWY)dhNsI1L^JNS`q?Wmi0WXz0~ItLmq>b_XuqnK!_( zCn=6LgPC%1ff-_L$`lg;_+O`R%H=9ZYD#{SDms(7dxw49@Jxu_ zs4vJNf2?F7&1+Im_dQNFLddt8r@8J2e9tO;Y3=a3`%KL&#fOT1t5gt==8LutiwM(B z6f;uvi=m=1TIjfg8#+I86K5oIZcn{FJbki2Db6lCS4o8HNum51QD`f7e}rF#4u)&@ zIh>4S4!EGdd{tK9Q$d0G%46N(gzKg_ z7P;Y!lR0SKD9dB7t{xAsVrve8q;h||s)(|>yRow-&r45RR6wT2|vERi;}$>5k8 zvi$O+HgceKQK>C0^mwq2uBp|m{b*;5d0#ewpC}CWU|N;A$iD`@jL!{hj_ipGd11s$ zA2al^_L41qnsy7WoXJ(If$vgCcu_PLg(|VDy3jH-g|b$&{yW+?XI($M8n=wp$`*!2Qa!;Un9qC!coI2Nrn;oX)zf^jjBpIexTCX$*DY zpKueDN(i2xWp%$iPqsSqF+a9Se6!4pUm9wJAsHYe+peCJ2?ThD z$&zru)l;c87xYa7-Q4~X%DB=FW9>QjGbkaqB8JS;r{Zlj;(S~FNMSPZTl>9RS)&W9 zK@{E?eZJj=PZ0&0jw)NKPl zKXM%pjv{OoxP3Ufwtl%?*>CJ)C#T8iZs0jwJz5VhC9W*g{|M&i*{!dhtl6hEZ<<{k z4)ixRu`D$&Uw?lWuG|!J%C0d%YkU-XJ>S{k`T=i_H&LOz5x!m>^^?b!V%W(Zv1a-Z3(fbMV?D5rG#{Lp} zP4?Je|KtGo{2R4qI1qo7c1XwO{-CE>;pBmw32mMyuj<};#7KwJQm<;JFhj0qQ*)`d z;zU7pxzHXq=yA#ZoL=osm{mCS0|1{)<7HqiX)Jc-F071+X0+dasAZ}RM9}q#b?x&_ z(2D|7Vs?{i;?SExyd|J=M0-)za_qgenYp%IRrO zM`uS@5f3^Qe9i~3PW!N!y_YYE9!95{Rp2#a23=3ye`@}-%QA$HnGIzs7CXA=8nd&OaBiHCHI*%gSncCX6?8FzDV zD&qls{Hp^;-h(nE-Bp%n>f*r_VgJW$lApF;z7V)*w28J3sSXbFE>>=A6E@IDrG1@G zH~b(Ifq&uNDIM7AN|Ud%++SF%m*}n)k1@%$-&dq-fM$^TbyWq3Qn1}~!>p)PxfD)E z;Ay=-MkFOaaDQZ59+Tg;glaS>nt!cV9w+AuIW$U#9J`eAF44O&%6}#6(ZsxG>F_Ds znBcZ*1j<9tCka!FkhqJYB4#jB#N-8`s^g^(Je-i@8A>A5sI+M(6AgkXL6N}u>n{TV zp#X>|F{->uoU^6-RbuZ#qs8=zOHDd%gRf!_fN>GDg5eYC5Y#ryYyhVDN+PFdL{44J NL*(L?rOv-1 Date: Thu, 11 Jun 2026 18:30:24 -0400 Subject: [PATCH 51/52] cherry-pick: batch of upstream PRs (4250,2600,2971,3705,4931,3165,2932,4670,5104,4994,5028,3114,4284,3779,1923,5072,5046,4940,5094,5090,5007) --- README.md | 2 +- app/src/main/AndroidManifest.xml | 3 ++- .../java/com/termux/filepicker/TermuxDocumentsProvider.java | 2 +- fastlane/metadata/android/en-US/full_description.txt | 2 +- .../src/main/java/com/termux/terminal/TerminalBuffer.java | 6 +++++- .../src/main/java/com/termux/terminal/TerminalEmulator.java | 3 +++ .../src/main/java/com/termux/terminal/TerminalSession.java | 1 + .../termux/shared/termux/extrakeys/ExtraKeysConstants.java | 1 + 8 files changed, 15 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 662198d3698..37650458e52 100644 --- a/README.md +++ b/README.md @@ -237,7 +237,7 @@ The `versionName` in `build.gradle` files of Termux and its plugin apps must fol ### Commit Messages Guidelines -Commit messages **must** use the [Conventional Commits](https://www.conventionalcommits.org) spec so that chagelogs as per the [Keep a Changelog](https://github.com/olivierlacan/keep-a-changelog) spec can automatically be generated by the [`create-conventional-changelog`](https://github.com/termux/create-conventional-changelog) script, check its repo for further details on the spec. **The first letter for `type` and `description` must be capital and description should be in the present tense.** The space after the colon `:` is necessary. For a breaking change, add an exclamation mark `!` before the colon `:`, so that it is highlighted in the chagelog automatically. +Commit messages **must** use the [Conventional Commits](https://www.conventionalcommits.org) spec so that changelogs as per the [Keep a Changelog](https://github.com/olivierlacan/keep-a-changelog) spec can automatically be generated by the [`create-conventional-changelog`](https://github.com/termux/create-conventional-changelog) script, check its repo for further details on the spec. **The first letter for `type` and `description` must be capital and description should be in the present tense.** The space after the colon `:` is necessary. For a breaking change, add an exclamation mark `!` before the colon `:`, so that it is highlighted in the chagelog automatically. ``` [optional scope]: diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1d0dfe19480..b8782561474 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,7 +45,7 @@ android:label="@string/application_name" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" - android:supportsRtl="false" + android:supportsRtl="true" android:theme="@style/Theme.TermuxApp.DayNight.DarkActionBar" tools:targetApi="m"> @@ -57,6 +57,7 @@ android:launchMode="singleTask" android:resizeableActivity="true" android:theme="@style/Theme.TermuxActivity.DayNight.NoActionBar" + android:excludeFromRecents="true" tools:targetApi="n"> diff --git a/app/src/main/java/com/termux/filepicker/TermuxDocumentsProvider.java b/app/src/main/java/com/termux/filepicker/TermuxDocumentsProvider.java index 7974d6dbc15..b01eeab808e 100644 --- a/app/src/main/java/com/termux/filepicker/TermuxDocumentsProvider.java +++ b/app/src/main/java/com/termux/filepicker/TermuxDocumentsProvider.java @@ -35,7 +35,7 @@ public class TermuxDocumentsProvider extends DocumentsProvider { private static final String ALL_MIME_TYPES = "*/*"; - private static final File BASE_DIR = TermuxConstants.TERMUX_HOME_DIR; + private static final File BASE_DIR = TermuxConstants.TERMUX_FILES_DIR; // The default columns to return information about a root if no specific diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index beb41739959..79d765dee2f 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -10,4 +10,4 @@ Termux is a terminal emulator application enhanced with a large set of command l At first start a small base system is being configured. The GNU Bash, Coreutils, Findutils and other core utilities are available out-of-box. Additionally, we provide more than 1000 other packages installable by using the 'pkg' utility which currently is a frontend for the 'apt' package manager. All provided software has been patched and compiled with Android NDK to provide max compatibility with Android OS. -To learn more about application usage tips and tricks, long-press anywhere on the terminal and select the Help menu option to access Termux Wiki. This resource is also accessible directly in a web browser: https://wiki.termux.com/wiki/Main_Page. +To learn more about application usage tips and tricks, long-press anywhere on the terminal and select the Help menu option to access Termux Wiki. This resource is also accessible directly in a web browser: https://wiki.termux.com/wiki/Main_Page . diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalBuffer.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalBuffer.java index 21d6518785e..6f7914f5b44 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalBuffer.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalBuffer.java @@ -439,9 +439,13 @@ public void blockSet(int sx, int sy, int w, int h, int val, long style) { throw new IllegalArgumentException( "Illegal arguments! blockSet(" + sx + ", " + sy + ", " + w + ", " + h + ", " + val + ", " + mColumns + ", " + mScreenRows + ")"); } - for (int y = 0; y < h; y++) + for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) setChar(sx + x, sy + y, val, style); + if (sx+w == mColumns && val == ' ') { + clearLineWrap(sy + y); + } + } } public TerminalRow allocateFullLineIfNecessary(int row) { diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index 126bcc23b20..619eb589f03 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -877,14 +877,17 @@ public void processCodePoint(int b) { case 1: // Blinking block. case 2: // Steady block. mCursorStyle = TERMINAL_CURSOR_STYLE_BLOCK; + setCursorBlinkingEnabled(arg != 2); break; case 3: // Blinking underline. case 4: // Steady underline. mCursorStyle = TERMINAL_CURSOR_STYLE_UNDERLINE; + setCursorBlinkingEnabled(arg != 4); break; case 5: // Blinking bar (xterm addition). case 6: // Steady bar (xterm addition). mCursorStyle = TERMINAL_CURSOR_STYLE_BAR; + setCursorBlinkingEnabled(arg != 6); break; } break; diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java index 8dc404c5b05..1a2dfb767f0 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java @@ -156,6 +156,7 @@ public void run() { int bytesToWrite = mTerminalToProcessIOQueue.read(buffer, true); if (bytesToWrite == -1) return; termOut.write(buffer, 0, bytesToWrite); + termOut.flush(); } } catch (IOException e) { // Ignore. diff --git a/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysConstants.java b/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysConstants.java index b747381c02d..06431d5538e 100644 --- a/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysConstants.java +++ b/termux-shared/src/main/java/com/termux/shared/termux/extrakeys/ExtraKeysConstants.java @@ -94,6 +94,7 @@ public static class EXTRA_KEY_DISPLAY_MAPS { put("KEYBOARD", "⌨"); // U+2328 ⌨ KEYBOARD not well known but easy to understand put("PASTE", "⎘"); // U+2398 put("SCROLL", "⇳"); // U+21F3 + put("SPACE", "␣"); // U+2423 }}; public static final ExtraKeyDisplayMap LESS_KNOWN_CHARACTERS_DISPLAY = new ExtraKeyDisplayMap() {{ From dcda2e38c5ea1038ef401e952a6428d51f6c7bf5 Mon Sep 17 00:00:00 2001 From: Billy Box Date: Thu, 11 Jun 2026 15:43:57 -0700 Subject: [PATCH 52/52] docs: refresh fork maintenance README --- README.md | 355 ++++++++++++++++++------------------------------------ 1 file changed, 115 insertions(+), 240 deletions(-) diff --git a/README.md b/README.md index 37650458e52..92008a465cf 100644 --- a/README.md +++ b/README.md @@ -1,295 +1,170 @@ -# Termux application +# Termux app fork maintenance -[![Build status](https://github.com/termux/termux-app/workflows/Build/badge.svg)](https://github.com/termux/termux-app/actions) -[![Testing status](https://github.com/termux/termux-app/workflows/Unit%20tests/badge.svg)](https://github.com/termux/termux-app/actions) -[![Join the chat at https://gitter.im/termux/termux](https://badges.gitter.im/termux/termux.svg)](https://gitter.im/termux/termux) -[![Join the Termux discord server](https://img.shields.io/discord/641256914684084234.svg?label=&logo=discord&logoColor=ffffff&color=5865F2)](https://discord.gg/HXpF69X) -[![Termux library releases at Jitpack](https://jitpack.io/v/termux/termux-app.svg)](https://jitpack.io/#termux/termux-app) +This repository is a maintenance fork of the upstream [Termux application](https://github.com/termux/termux-app). It is used for focused bug-fix work, runtime testing, and preparing changes before they are split into clean upstream pull requests. +This is not the official Termux release repository. Users who only want to install Termux should normally use the official Termux channels and documentation. This fork exists so we can keep a controlled workbench while learning the app, testing fixes, and building a reliable local Android/Termux stack. -[Termux](https://termux.dev) is an Android terminal application and Linux environment. +## 2026 maintenance status -Note that this repository is for the app itself (the user interface and the terminal emulation). For the packages installable inside the app, see [termux/termux-packages](https://github.com/termux/termux-packages). +Current maintenance rule: keep one active workbench lane, make small fixes, push only after the branch is clean, and let GitHub Actions decide whether the source is healthy. -Quick how-to about Termux package management is available at [Package Management](https://github.com/termux/termux-packages/wiki/Package-Management). It also has info on how to fix **`repository is under maintenance or down`** errors when running `apt` or `pkg` commands. +The expected active branch for this fork is: -**We are looking for Termux Android application maintainers.** - -*** - -**NOTICE: Termux may be unstable on Android 12+.** Android OS will kill any (phantom) processes greater than 32 (limit is for all apps combined) and also kill any processes using excessive CPU. You may get `[Process completed (signal 9) - press Enter]` message in the terminal without actually exiting the shell process yourself. Check the related issue [#2366](https://github.com/termux/termux-app/issues/2366), [issue tracker](https://issuetracker.google.com/u/1/issues/205156966), [phantom cached and empty processes docs](https://github.com/agnostic-apollo/Android-Docs/blob/master/en/docs/apps/processes/phantom-cached-and-empty-processes.md) and [this TLDR comment](https://github.com/termux/termux-app/issues/2366#issuecomment-1237468220) on how to disable trimming of phantom and excessive cpu usage processes. A proper docs page will be added later. An option to disable the killing should be available in Android 12L or 13, so upgrade at your own risk if you are on Android 11, specially if you are not rooted. - -*** - -## Contents -- [Termux App and Plugins](#termux-app-and-plugins) -- [Installation](#installation) -- [Uninstallation](#uninstallation) -- [Important Links](#important-links) -- [Debugging](#debugging) -- [For Maintainers and Contributors](#for-maintainers-and-contributors) -- [Forking](#forking) -- [Sponsors and Funders](#sponsors-and-funders) -## - - - -## Termux App and Plugins - -The core [Termux](https://github.com/termux/termux-app) app comes with the following optional plugin apps. - -- [Termux:API](https://github.com/termux/termux-api) -- [Termux:Boot](https://github.com/termux/termux-boot) -- [Termux:Float](https://github.com/termux/termux-float) -- [Termux:Styling](https://github.com/termux/termux-styling) -- [Termux:Tasker](https://github.com/termux/termux-tasker) -- [Termux:Widget](https://github.com/termux/termux-widget) -## - - - -## Installation - -Latest version is `v0.118.3`. - -**NOTICE: It is highly recommended that you update to `v0.118.0` or higher ASAP for various bug fixes, including a critical world-readable vulnerability reported [here](https://termux.github.io/general/2022/02/15/termux-apps-vulnerability-disclosures.html). See [below](#google-play-store-experimental-branch) for information regarding Termux on Google Play.** - -Termux can be obtained through various sources listed below for **only** Android `>= 7` with full support for apps and packages. - -Support for both app and packages was dropped for Android `5` and `6` on [2020-01-01](https://www.reddit.com/r/termux/comments/dnzdbs/end_of_android56_support_on_20200101/) at `v0.83`, however it was re-added just for the app *without any support for package updates* on [2022-05-24](https://github.com/termux/termux-app/pull/2740) via the [GitHub](#github) sources. Check [here](https://github.com/termux/termux-app/wiki/Termux-on-android-5-or-6) for the details. - -The APK files of different sources are signed with different signature keys. The `Termux` app and all its plugins use the same [`sharedUserId`](https://developer.android.com/guide/topics/manifest/manifest-element) `com.termux` and so all their APKs installed on a device must have been signed with the same signature key to work together and so they must all be installed from the same source. Do not attempt to mix them together, i.e do not try to install an app or plugin from `F-Droid` and another one from a different source like `GitHub`. Android Package Manager will also normally not allow installation of APKs with different signatures and you will get errors on installation like `App not installed`, `Failed to install due to an unknown error`, `INSTALL_FAILED_UPDATE_INCOMPATIBLE`, `INSTALL_FAILED_SHARED_USER_INCOMPATIBLE`, `signatures do not match previously installed version`, etc. This restriction can be bypassed with root or with custom roms. - -If you wish to install from a different source, then you must **uninstall any and all existing Termux or its plugin app APKs** from your device first, then install all new APKs from the same new source. Check [Uninstallation](#uninstallation) section for details. You may also want to consider [Backing up Termux](https://wiki.termux.dev/wiki/Backing_up_Termux) before the uninstallation so that you can restore it after re-installing from Termux different source. - -In the following paragraphs, *"bootstrap"* refers to the minimal packages that are shipped with the `termux-app` itself to start a working shell environment. Its zips are built and released [here](https://github.com/termux/termux-packages/releases). - -### F-Droid - -Termux application can be obtained from `F-Droid` from [here](https://f-droid.org/en/packages/com.termux/). - -You **do not** need to download the `F-Droid` app (via the `Download F-Droid` link) to install Termux. You can download the Termux APK directly from the site by clicking the `Download APK` link at the bottom of each version section. - -It usually takes a few days (or even a week or more) for updates to be available on `F-Droid` once an update has been released on `GitHub`. The `F-Droid` releases are built and published by `F-Droid` once they [detect](https://gitlab.com/fdroid/fdroiddata/-/blob/master/metadata/com.termux.yml) a new `GitHub` release. The Termux maintainers **do not** have any control over the building and publishing of the Termux apps on `F-Droid`. Moreover, the Termux maintainers also do not have access to the APK signing keys of `F-Droid` releases, so we cannot release an APK ourselves on `GitHub` that would be compatible with `F-Droid` releases. - -The `F-Droid` app often may not notify you of updates and you will manually have to do a pull down swipe action in the `Updates` tab of the app for it to check updates. Make sure battery optimizations are disabled for the app, check https://dontkillmyapp.com/ for details on how to do that. - -Only a universal APK is released, which will work on all supported architectures. The APK and bootstrap installation size will be `~180MB`. `F-Droid` does [not support](https://github.com/termux/termux-app/pull/1904) architecture specific APKs. - -### GitHub - -Termux application can be obtained on `GitHub` either from [`GitHub Releases`](https://github.com/termux/termux-app/releases) for version `>= 0.118.0` or from [`GitHub Build Action`](https://github.com/termux/termux-app/actions/workflows/debug_build.yml?query=branch%3Amaster+event%3Apush) workflows. **For android `>= 7`, only install `apt-android-7` variants. For android `5` and `6`, only install `apt-android-5` variants.** - -The APKs for `GitHub Releases` will be listed under `Assets` drop-down of a release. These are automatically attached when a new version is released. - -The APKs for `GitHub Build` action workflows will be listed under `Artifacts` section of a workflow run. These are created for each commit/push done to the repository and can be used by users who don't want to wait for releases and want to try out the latest features immediately or want to test their pull requests. Note that for action workflows, you need to be [**logged into a `GitHub` account**](https://github.com/login) for the `Artifacts` links to be enabled/clickable. If you are using the [`GitHub` app](https://github.com/mobile), then make sure to open workflow link in a browser like Chrome or Firefox that has your GitHub account logged in since the in-app browser may not be logged in. - -The APKs for both of these are [`debuggable`](https://developer.android.com/studio/debug) and are compatible with each other but they are not compatible with other sources. - -Both universal and architecture specific APKs are released. The APK and bootstrap installation size will be `~180MB` if using universal and `~120MB` if using architecture specific. Check [here](https://github.com/termux/termux-app/issues/2153) for details. - -**Security warning**: APK files on GitHub are signed with a test key that has been [shared with community](https://github.com/termux/termux-app/blob/master/app/testkey_untrusted.jks). This IS NOT an official developer key and everyone can use it to generate releases for own testing. Be very careful when using Termux GitHub builds obtained elsewhere except https://github.com/termux/termux-app. Everyone is able to use it to forge a malicious Termux update installable over the GitHub build. Think twice about installing Termux builds distributed via Telegram or other social media. If your device get caught by malware, we will not be able to help you. - -The [test key](https://github.com/termux/termux-app/blob/master/app/testkey_untrusted.jks) shall not be used to impersonate @termux and can't be used for this anyway. This key is not trusted by us and it is quite easy to detect its use in user generated content. - -
-Keystore information - -``` -Alias name: alias -Creation date: Oct 4, 2019 -Entry type: PrivateKeyEntry -Certificate chain length: 1 -Certificate[1]: -Owner: CN=APK Signer, OU=Earth, O=Earth -Issuer: CN=APK Signer, OU=Earth, O=Earth -Serial number: 29be297b -Valid from: Wed Sep 04 02:03:24 EEST 2019 until: Tue Oct 26 02:03:24 EEST 2049 -Certificate fingerprints: - SHA1: 51:79:55:EA:BF:69:FC:05:7C:41:C7:D3:79:DB:BC:EF:20:AD:85:F2 - SHA256: B6:DA:01:48:0E:EF:D5:FB:F2:CD:37:71:B8:D1:02:1E:C7:91:30:4B:DD:6C:4B:F4:1D:3F:AA:BA:D4:8E:E5:E1 -Signature algorithm name: SHA1withRSA (disabled) -Subject Public Key Algorithm: 2048-bit RSA key -Version: 3 +```text +workbench-app-issue-factory ``` -
- -### Google Play Store **(Experimental branch)** - -There is currently a build of Termux available on Google Play for Android 11+ devices, with extensive adjustments in order to pass policy requirements there. This is under development and has missing functionality and bugs (see [here](https://github.com/termux-play-store/) for status updates) compared to the stable F-Droid build, which is why most users who can should still use F-Droid or GitHub build as mentioned above. - -Currently, Google Play will try to update installations away from F-Droid ones. Updating will still fail as [sharedUserId](https://developer.android.com/guide/topics/manifest/manifest-element#uid) has been removed. A planned 0.118.1 F-Droid release will fix this by setting a higher version code than used for the PlayStore app. Meanwhile, to prevent Google Play from attempting to download and then fail to install the Google Play releases over existing installations, you can open the Termux apps pages on Google Play and then click on the 3 dots options button in the top right and then disable the Enable auto update toggle. However, the Termux apps updates will still show in the PlayStore app updates list. - -If you want to help out with testing the Google Play build (or cannot install Termux from other sources), be aware that it's built from a separate repository (https://github.com/termux-play-store/) - be sure to report issues [there](https://github.com/termux-play-store/termux-issues/issues/new/choose), as any issues encountered might very well be specific to that repository. - -## Uninstallation - -Uninstallation may be required if a user doesn't want Termux installed in their device anymore or is switching to a different [install source](#installation). You may also want to consider [Backing up Termux](https://wiki.termux.com/wiki/Backing_up_Termux) before the uninstallation. - -To uninstall Termux completely, you must uninstall **any and all existing Termux or its plugin app APKs** listed in [Termux App and Plugins](#termux-app-and-plugins). - -Go to `Android Settings` -> `Applications` and then look for those apps. You can also use the search feature if it’s available on your device and search `termux` in the applications list. - -Even if you think you have not installed any of the plugins, it's strongly suggested to go through the application list in Android settings and double-check. -## - - - -## Important Links - -### Community -All community links are available [here](https://wiki.termux.com/wiki/Community). - -The main ones are the following. - -- [Termux Reddit community](https://reddit.com/r/termux) -- [Termux User Matrix Channel](https://matrix.to/#/#termux_termux:gitter.im) ([Gitter](https://gitter.im/termux/termux)) -- [Termux Dev Matrix Channel](https://matrix.to/#/#termux_dev:gitter.im) ([Gitter](https://gitter.im/termux/dev)) -- [Termux X (Twitter)](https://twitter.com/termuxdevs) -- [Termux Support Email](mailto:support@termux.dev) - -### Wikis +Do not push directly to `master` or `main` unless that is explicitly requested. Treat the workbench branch as the integration lane and create upstream PR branches from clean, reviewable slices. -- [Termux Wiki](https://wiki.termux.com/wiki/) -- [Termux App Wiki](https://github.com/termux/termux-app/wiki) -- [Termux Packages Wiki](https://github.com/termux/termux-packages/wiki) +## What this repo contains -### Miscellaneous -- [FAQ](https://wiki.termux.com/wiki/FAQ) -- [Termux File System Layout](https://github.com/termux/termux-packages/wiki/Termux-file-system-layout) -- [Differences From Linux](https://wiki.termux.com/wiki/Differences_from_Linux) -- [Package Management](https://wiki.termux.com/wiki/Package_Management) -- [Remote Access](https://wiki.termux.com/wiki/Remote_Access) -- [Backing up Termux](https://wiki.termux.com/wiki/Backing_up_Termux) -- [Terminal Settings](https://wiki.termux.com/wiki/Terminal_Settings) -- [Touch Keyboard](https://wiki.termux.com/wiki/Touch_Keyboard) -- [Android Storage and Sharing Data with Other Apps](https://wiki.termux.com/wiki/Internal_and_external_storage) -- [Android APIs](https://wiki.termux.com/wiki/Termux:API) -- [Moved Termux Packages Hosting From Bintray to IPFS](https://github.com/termux/termux-packages/issues/6348) -- [Running Commands in Termux From Other Apps via `RUN_COMMAND` intent](https://github.com/termux/termux-app/wiki/RUN_COMMAND-Intent) -- [Termux and Android 10](https://github.com/termux/termux-packages/wiki/Termux-and-Android-10) +The `termux-app` repository is the Android app itself: the terminal UI, session management, app lifecycle, terminal emulator integration, storage access, Android intents, and plugin-facing integration points. +Packages installed inside Termux are maintained separately in [termux/termux-packages](https://github.com/termux/termux-packages). Termux:API command wrappers and plugin behavior live in separate repositories. When debugging app/API behavior, keep the boundary clear: -### Terminal - -
- - -### Terminal resources - -- [XTerm control sequences](https://invisible-island.net/xterm/ctlseqs/ctlseqs.html) -- [vt100.net](https://vt100.net/) -- [Terminal codes (ANSI and terminfo equivalents)](https://wiki.bash-hackers.org/scripting/terminalcodes) +```text +Termux app -> terminal, sessions, UI, app lifecycle +Termux:API app -> Android API receiver/listener implementation +termux-api package -> shell commands and native wrapper binaries +termux-packages -> packages installed inside Termux +``` -### Terminal emulators +## Branch discipline -- VTE (libvte): Terminal emulator widget for GTK+, mainly used in gnome-terminal. [Source](https://github.com/GNOME/vte), [Open Issues](https://bugzilla.gnome.org/buglist.cgi?quicksearch=product%3A%22vte%22+), and [All (including closed) issues](https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&chfield=resolution&chfieldfrom=-2000d&chfieldvalue=FIXED&product=vte&resolution=FIXED). +Use this branch model unless the maintainer intentionally changes it: -- iTerm 2: OS X terminal application. [Source](https://github.com/gnachman/iTerm2), [Issues](https://gitlab.com/gnachman/iterm2/issues) and [Documentation](https://iterm2.com/documentation.html) (which includes [iTerm2 proprietary escape codes](https://iterm2.com/documentation-escape-codes.html)). +```text +origin/master or origin/main -> upstream/default history +workbench-app-issue-factory -> local integration lane +fix/ -> optional short-lived PR branch +``` -- Konsole: KDE terminal application. [Source](https://projects.kde.org/projects/kde/applications/konsole/repository), in particular [tests](https://projects.kde.org/projects/kde/applications/konsole/repository/revisions/master/show/tests), [Bugs](https://bugs.kde.org/buglist.cgi?bug_severity=critical&bug_severity=grave&bug_severity=major&bug_severity=crash&bug_severity=normal&bug_severity=minor&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=konsole) and [Wishes](https://bugs.kde.org/buglist.cgi?bug_severity=wishlist&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=konsole). +Rules: -- hterm: JavaScript terminal implementation from Chromium. [Source](https://github.com/chromium/hterm), including [tests](https://github.com/chromium/hterm/blob/master/js/hterm_vt_tests.js), and [Google group](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-hterm). +- keep `workbench-app-issue-factory` clean and buildable; +- prefer five small source fixes over one giant rewrite; +- do not rewrite Gradle, SDK, workflow, or manifest configuration while fixing unrelated issues; +- use revert or `--force-with-lease` only when deliberately repairing a workbench branch; +- preserve phone/runtime fixes unless CI proves they broke source; +- preserve upstream behavior unless the issue specifically requires a behavior change. -- xterm: The grandfather of terminal emulators. [Source](https://invisible-island.net/datafiles/release/xterm.tar.gz). +## Build gate -- Connectbot: Android SSH client. [Source](https://github.com/connectbot/connectbot) +GitHub Actions is the main green/red gate for this fork. Local Windows or phone builds are useful for quick feedback, but local tooling failures are suspect until Actions confirms the problem. -- Android Terminal Emulator: Android terminal app which Termux terminal handling is based on. Inactive. [Source](https://github.com/jackpal/Android-Terminal-Emulator). -
+For a local Windows build, use PowerShell from the repository root: -## +```powershell +cd C:\Users\Billy\Documents\GitHub\termux-app +.\gradlew.bat clean :app:assembleDebug --no-daemon --console=plain +``` +When a build fails, chase the first real compiler, lint, or test error. Ignore surrounding Gradle noise until the first source failure is understood. +## Runtime testing -### Debugging +A green build only proves the app compiles. It does not prove Android package identity, signatures, shared UID behavior, plugin wiring, or phone runtime behavior. -You can help debug problems of the `Termux` app and its plugins by setting appropriate `logcat` `Log Level` in `Termux` app settings -> `` -> `Debugging` -> `Log Level` (Requires `Termux` app version `>= 0.118.0`). The `Log Level` defaults to `Normal` and log level `Verbose` currently logs additional information. Its best to revert log level to `Normal` after you have finished debugging since private data may otherwise be passed to `logcat` during normal operation and moreover, additional logging increases execution time. +Before declaring a fix done, test the relevant path on a device when possible: -The plugin apps **do not execute the commands themselves** but send execution intents to `Termux` app, which has its own log level which can be set in `Termux` app settings -> `Termux` -> `Debugging` -> `Log Level`. So you must set log level for both `Termux` and the respective plugin app settings to get all the info. +```powershell +adb devices +adb install -r path\to\app-debug.apk +adb shell am start -n com.termux/.app.TermuxActivity +adb logcat -d | findstr /i "termux crash exception fatal" +``` -Once log levels have been set, you can run the `logcat` command in `Termux` app terminal to view the logs in realtime (`Ctrl+c` to stop) or use `logcat -d > logcat.txt` to take a dump of the log. You can also view the logs from a PC over `ADB`. For more information, check official android `logcat` guide [here](https://developer.android.com/studio/command-line/logcat). +For plugin/API work, test the whole stack that participates in the behavior. Many bugs sit in the seams between the app, plugin APK, package wrapper, socket listener, broadcast receiver, and Android process lifecycle. -Moreover, users can generate termux files `stat` info and `logcat` dump automatically too with terminal's long hold options menu `More` -> `Report Issue` option and selecting `YES` in the prompt shown to add debug info. This can be helpful for reporting and debugging other issues. If the report generated is too large, then `Save To File` option in context menu (3 dots on top right) of `ReportActivity` can be used and the file viewed/shared instead. +## Package identity and signing warning -Users must post complete report (optionally without sensitive info) when reporting issues. Issues opened with **(partial) screenshots of error reports** instead of text will likely be automatically closed/deleted. +Termux and its plugins use Android package identity and signing rules that are easy to break. Do not mix APKs from unrelated sources. -##### Log Levels +Important rules: -- `Off` - Log nothing. -- `Normal` - Start logging error, warn and info messages and stacktraces. -- `Debug` - Start logging debug messages. -- `Verbose` - Start logging verbose messages. -## +- F-Droid Termux and F-Droid plugins must stay together. +- GitHub/debug builds must stay with matching GitHub/debug plugin builds. +- Different signing keys can trigger `INSTALL_FAILED_UPDATE_INCOMPATIBLE` or `INSTALL_FAILED_SHARED_USER_INCOMPATIBLE`. +- Side-by-side debug builds need deliberate package names and wrappers that target the matching package. +- Do not install a debug build over a working phone stack unless the whole stack is intentionally being replaced. +If runtime behavior makes no sense, verify the installed packages first: +```powershell +adb shell pm list packages | findstr termux +adb shell dumpsys package com.termux | findstr /i "versionName userId signatures" +adb shell dumpsys package com.termux.api | findstr /i "versionName userId signatures" +``` -## For Maintainers and Contributors +## Workflow maintenance -The [termux-shared](termux-shared) library was added in [`v0.109`](https://github.com/termux/termux-app/releases/tag/v0.109). It defines shared constants and utils of the Termux app and its plugins. It was created to allow for the removal of all hardcoded paths in the Termux app. Some of the termux plugins are using this as well and rest will in future. If you are contributing code that is using a constant or a util that may be shared, then define it in `termux-shared` library if it currently doesn't exist and reference it from there. Update the relevant changelogs as well. Pull requests using hardcoded values **will/should not** be accepted. Termux app and plugin specific classes must be added under `com.termux.shared.termux` package and general classes outside it. The [`termux-shared` `LICENSE`](termux-shared/LICENSE.md) must also be checked and updated if necessary when contributing code. The licenses of any external library or code must be honoured. +The workflows should prove source health, not hide source problems. Keep workflow edits small and boring. -The main Termux constants are defined by [`TermuxConstants`](https://github.com/termux/termux-app/blob/master/termux-shared/src/main/java/com/termux/shared/termux/TermuxConstants.java) class. It also contains information on how to fork Termux or build it with your own package name. Changing the package name will require building the bootstrap zip packages and other packages with the new `$PREFIX`, check [Building Packages](https://github.com/termux/termux-packages/wiki/Building-packages) for more info. +Do not casually change: -Check [Termux Libraries](https://github.com/termux/termux-app/wiki/Termux-Libraries) for how to import termux libraries in plugin apps and [Forking and Local Development](https://github.com/termux/termux-app/wiki/Termux-Libraries#forking-and-local-development) for how to update termux libraries for plugins. +- Gradle wrapper version; +- Android Gradle Plugin version; +- compile SDK / target SDK; +- signing configuration; +- manifest package identity; +- shared UID behavior; +- artifact names used by install/test scripts. -The `versionName` in `build.gradle` files of Termux and its plugin apps must follow the [semantic version `2.0.0` spec](https://semver.org/spec/v2.0.0.html) in the format `major.minor.patch(-prerelease)(+buildmetadata)`. When bumping `versionName` in `build.gradle` files and when creating a tag for new releases on GitHub, make sure to include the patch number as well, like `v0.1.0` instead of just `v0.1`. The `build.gradle` files and `attach_debug_apks_to_release` workflow validates the version as well and the build/attachment will fail if `versionName` does not follow the spec. +If a workflow breaks after a source fix, inspect the first failing command and compare with the last green commit before changing build infrastructure. -### Commit Messages Guidelines +## Issue-fix workflow -Commit messages **must** use the [Conventional Commits](https://www.conventionalcommits.org) spec so that changelogs as per the [Keep a Changelog](https://github.com/olivierlacan/keep-a-changelog) spec can automatically be generated by the [`create-conventional-changelog`](https://github.com/termux/create-conventional-changelog) script, check its repo for further details on the spec. **The first letter for `type` and `description` must be capital and description should be in the present tense.** The space after the colon `:` is necessary. For a breaking change, add an exclamation mark `!` before the colon `:`, so that it is highlighted in the chagelog automatically. +For each issue or bug: -``` -[optional scope]: +1. Start from the clean workbench branch. +2. Understand the runtime path before editing. +3. Make the smallest source change that can fix the behavior. +4. Run a targeted local check if it is cheap. +5. Commit with a clear message. +6. Push to the workbench branch. +7. Use GitHub Actions as the gate. +8. Batch PR work later from clean slices. -[optional body] +Preferred commit style: -[optional footer(s)] +```text +fix: guard session exit null command +fix: preserve ctrl modifier for page navigation +docs: refresh fork maintenance README ``` -**Only the `types` listed below must be used exactly as they are used in the changelog headings.** For example, `Added: Add foo`, `Added|Fixed: Add foo and fix bar`, `Changed!: Change baz as a breaking change`, etc. You can optionally add a scope as well, like `Fixed(terminal): Fix some bug`. **Do not use anything else as type, like `add` instead of `Added`, etc.** +## Android areas that matter most -- **Added** for new features. -- **Changed** for changes in existing functionality. -- **Deprecated** for soon-to-be removed features. -- **Removed** for now removed features. -- **Fixed** for any bug fixes. -- **Security** in case of vulnerabilities. -## +For 2026 maintenance, the important study lanes are: +- Android app lifecycle: `Application`, `Activity`, `Service`, `BroadcastReceiver`, process death, and background limits. +- Android package identity: `applicationId`, debug suffixes, signatures, `sharedUserId`, and plugin compatibility. +- Terminal/session lifecycle: session creation, session exit, command execution, notification updates, and null-safety around process state. +- Storage and file intents: SAF, content URIs, permissions, and Android version differences. +- GitHub Actions: build/test gates, artifacts, signing paths, and avoiding workflow churn. +## Relationship to upstream -## Forking +Keep this fork upstream-friendly. Workbench commits can be practical and messy while a problem is being understood, but upstream pull requests should be small, focused, and easy to review. -- Check [`TermuxConstants`](https://github.com/termux/termux-app/blob/master/termux-shared/src/main/java/com/termux/shared/termux/TermuxConstants.java) javadocs for instructions on what changes to make in the app to change package name. -- You also need to recompile bootstrap zip for the new package name. Check [building bootstrap](https://github.com/termux/termux-packages/wiki/For-maintainers#build-bootstrap-archives), [here](https://github.com/termux/termux-app/issues/1983) and [here](https://github.com/termux/termux-app/issues/2081#issuecomment-865280111). -- Currently, not all plugins use `TermuxConstants` from `termux-shared` library and have hardcoded `com.termux` values and will need to be manually patched. -- If forking termux plugins, check [Forking and Local Development](https://github.com/termux/termux-app/wiki/Termux-Libraries#forking-and-local-development) for info on how to use termux libraries for plugins. -## +Before opening upstream PRs: +- split unrelated fixes; +- remove fork-only notes from code changes; +- verify formatting and tests; +- explain the user-visible bug; +- explain why the fix is narrow; +- include runtime proof when the issue depends on Android behavior. +## Useful links -## Sponsors and Funders - -[GitHub Accelerator](https://github.com) -*[GitHub Accelerator](https://github.com/accelerator) ([1](https://github.blog/2023-04-12-github-accelerator-our-first-cohort-and-whats-next))* - -  - -[GitHub Secure Open Source Fund](https://github.com) -*[GitHub Secure Open Source Fund](https://resources.github.com/github-secure-open-source-fund) ([1](https://github.blog/open-source/maintainers/securing-the-supply-chain-at-scale-starting-with-71-important-open-source-projects), [2](https://termux.dev/en/posts/general/2025/08/11/termux-selected-for-github-secure-open-source-fund-session-2.html))* - -  - -[NLnet NGI Mobifree](https://nlnet.nl/mobifree) -*[NLnet NGI Mobifree](https://nlnet.nl/mobifree) ([1](https://nlnet.nl/news/2024/20241111-NGI-Mobifree-grants.html), [2](https://termux.dev/en/posts/general/2024/11/11/termux-selected-for-nlnet-ngi-mobifree-grant.html))* - -  - -[Cloudflare](https://www.cloudflare.com) -*[Cloudflare](https://www.cloudflare.com) ([1](https://packages-cf.termux.dev))* +- [Official Termux site](https://termux.dev) +- [Official Termux app repository](https://github.com/termux/termux-app) +- [Termux packages](https://github.com/termux/termux-packages) +- [Termux Wiki](https://wiki.termux.dev/wiki/Main_Page) +- [Termux:API](https://github.com/termux/termux-api) +- [Android logcat documentation](https://developer.android.com/studio/command-line/logcat) -  +## Maintainer note -[Warp](https://www.warp.dev/?utm_source=github&utm_medium=readme&utm_campaign=termux) -[*Warp, built for coding with multiple AI agents*](https://www.warp.dev/?utm_source=github&utm_medium=readme&utm_campaign=termux) +The goal is not only to patch Termux. The goal is to build enough operational experience to maintain our own Android/Termux-style tools with discipline: clean branches, boring builds, clear runtime tests, and no mystery changes hiding in the machinery.