Lining up tags and progress bars
I am trying to figure out if there is a way to line up all the tags and progress bars for each of my headings. Currently there is a mismatch as shown below which seems to be dependent on the length of the title, but is there way to line all the tags and progress bars? I am using olivetti mode and modus-themes.
https://preview.redd.it/t6l9ldem22xc1.png?width=2862&format=png&auto=webp&s=00c1d7bac14ac32999b5395f0bd38af8e56668c3
https://redd.it/1cejp15
@r_emacs
How to remove the padding from an org-mode table?
Hi. I want to know if there's some way of remove or prevent the whitespaces before and after each column separator in a table in org-mode. For example, I wish this table:
| name | age | country |
|------+-----+---------|
| john | 21 | usa |
would be like this:
|name|age|country|
|----+---+-------|
|john|21 |usa |
Thanks, in advance.
https://redd.it/1cejuf9
@r_emacs
Hierarchical treesitter based imenu-list with java
After I previously enabled treesitter imenu support and rewrote the simple imenu configuration variables, I decided I wanted to tinker a bit more and produce more hierarchical results.
The two images are before on the left vs afterwards on the right.
Note the constructors, methods, inner classes are placed as items under the class. I also discovered the builtin rules misclassified enums nodetype and fixed that as well. Finally, although I normally adjust the faces to all black/gray I've left it at the default to highlight something odd about the treesitter node creation code. Based on some unknown code path about half the time the node names come with the original properties including faces and the rest of the time they are plain text.
Some sample in progress code.
;; Generate a marker for the given node
;; This can only be done while in the buffer
(defun my/make-marker (buffer point)
(with-current-buffer buffer
(copy-marker point)))
;; Treesitter node name function for most node types
(defun my/get-def-name (node)
(treesit-node-text
(treesit-node-child-by-field-name node "name")))
;; Treesitter node name function for class fields
(defun my/get-field-name (node)
(treesit-node-text
(treesit-node-child-by-field-name (treesit-node-child-by-field-name node "declarator") "name")))
;; Simple wrapper to make an imenu leaf from a treesitter node
(defun my/imenu-leaf (node buffer name-func)
(cons (funcall name-func node)
(my/make-marker buffer (treesit-node-start node))))
;; Walk the parent node class of an interface, class or enum and
;; construct a list of all fields, constructors and methods.
;; Recursion occurs when there is an inner class.
(defun my/walk-object-declaration (classnode buffer)
(let ((constructors ())
(fields ())
(methods ())
(inner-classes ())
(result ()))
(dolist (node (treesit-node-children classnode))
(progn
(cond ((equal (treesit-node-type node) "constructor_declaration")
(push (my/imenu-leaf node buffer 'my/get-def-name) constructors))
((equal (treesit-node-type node) "method_declaration")
(push (my/imenu-leaf node buffer 'my/get-def-name) methods))
((equal (treesit-node-type node) "class_declaration")
(let* ((body (treesit-node-child-by-field-name node "body"))
(classname (my/get-def-name node))
(subleafs (my/walk-object-declaration body buffer)))
(push (cons classname subleafs) inner-classes)))
((equal (treesit-node-type node) "field_declaration")
(push (my/imenu-leaf node buffer 'my/get-field-name) fields)))))
(when inner-classes (push (cons "Inner Classes" (reverse inner-classes)) result))
(when methods (push (cons "Methods" (reverse methods)) result))
(when fields (push (cons "Fields" (reverse fields)) result))
(when constructors (push (cons "Constructors" (reverse constructors)) result))
;; final value
result))
;; Main routine that walks top level of the grammar tree and constructs imenu nodes
;; to turn on - setq imenu-create-index-function 'my/generate-imenu
(defun my/generate-imenu (&optional buffer)
(with-current-buffer (if buffer (get-buffer buffer) (current-buffer))
(let ((classes '())
(interfaces '())
(enums '())
(result '()))
(dolist (node (treesit-node-children (treesit-buffer-root-node)))
(let ((type (treesit-node-type node)))
(when (or (equal type "class_declaration")
(equal type "interface_declaration")
(equal type "enum_declaration"))
Idiomatic way to build a list in Emacs Lisp
Simple example:
> Given a list of integers, build a list that only contains numbers whose value n is less than 4
Ignoring "high level" declarative functions such as seq-filter, what's the best way to build a list step by step? AFAIK, each call to append takes O(n) where n is the numbers of elements in the list. Also keeping a reference of the last cons of the list in order to nconc it might be frowned upon, as it is a destructive operation.
https://redd.it/1ce9yu0
@r_emacs
help me debug: in comint-watch-for-password-prompt (run-at-time 0 ...) exits early
Hi all!
I've had this bug for some time now, this is what I've got:
symptom: in the shell, when asked for password, prompt shows in minibuffer, then quits a second or two later (while I'm typing said password) leading to only the later half of my password being typed in clear text.
`comint-watch-for-password-prompt` runs `comint-send-invisible` in a `(run-at-time 0 nil ...)`.
If I replace run-at-time by the lambda content it is supposed to run, no more bug.
If I replace 0 by 1 or 0.1, no more bug either. For values under 0.01 bug is back.
If I add "lol" at the end of comint-watch-for-password-prompt, so that run-at-time's cancelable timer is not returned to the caller, the bug still happens, so... it's not quitting because somebody is canceling the timer.
So, what do I with this?
for reference, here is the function I'm talking about:
(defun comint-watch-for-password-prompt (string)
"Prompt in the minibuffer for password and send without echoing.
Looks for a match to `comint-password-prompt-regexp' in order
to detect the need to (prompt and) send a password. Ignores any
carriage returns (\\r) in STRING.
This function could be in the list `comint-output-filter-functions'."
(when (let ((case-fold-search t))
(string-match comint-password-prompt-regexp
(string-replace "\r" "" string)))
;; Use `run-at-time' in order not to pause execution of the
;; process filter with a minibuffer
(run-at-time
0.1 nil
(lambda (current-buf)
(with-current-buffer current-buf
(let ((comint--prompt-recursion-depth
(1+ comint--prompt-recursion-depth)))
(if (> comint--prompt-recursion-depth 10)
(message "Password prompt recursion too deep")
(when (get-buffer-process (current-buffer))
(comint-send-invisible
(string-trim string "[ \n\r\t\v\f\b\a]+" "\n+")))))))
(current-buffer))))
https://redd.it/1cdy48k
@r_emacs
Switching to elpaca: "org loaded before Elpaca activation"
I have a literate org-mode config, and I'm switching from straight to elpaca. I've got most things working now, but I get an error on startup: org loaded before Elpaca activation
. How do I get rid of that error? I notice that using --debug-init
doesn't cause a breakpoint there, so maybe it's not significant, but I'd like it to be clean.
I'm setting up elpaca in my init.el
following the standard recipe, then adding use-package
support like this, and loading org
(I like to use the latest) before using org-babel-load-file to load my emacs-config.org
, so any ideas how I can get rid of that error?
;;; init.el, after the standard elpaca bootstrap...
(elpaca elpaca-use-package
;; Enable use-package :ensure support for Elpaca.
(elpaca-use-package-mode))
;; Without this, have to add ":ensure t" to most recipes to get them to install,
;; otherwise elpaca just tries to load it.
(setq use-package-always-ensure t)
;;; Use latest org-mode. Do this early, to use when loading config
(use-package org
:mode (("\\.org$" . org-mode))
:commands (org-mode org-babel-load-file)
:config
(require 'org-mouse)
:ensure nil)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Load main emacs-config.org
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(org-babel-load-file (concat user-emacs-directory "emacs-config.org"))
https://redd.it/1cdhwmc
@r_emacs
Double Your Productivity With Emacs ORG-MODE
https://youtube.com/watch?v=aiBt8CieE7U&si=J-iiHdacHedFoI3S
https://redd.it/1cdp5h2
@r_emacs
Emacs mode for enforcing orthodox keybindings
Hello i am quite new to the Emacs and I'm wondering if there is any mode that helps me using Emacs keybindings more effectively, for example:
when i try to move next on the buffer with arrow keys a mode that informs and corrects me with notifications like you can use C-n for that.
If there is any mode like this it will be very beneficial for me.
Thanks in advance
https://redd.it/1cdj2rd
@r_emacs
EmacsConf 2023: Emacs turbo-charges my writing - Jeremy Friesen
https://youtube.com/watch?v=HxlEK6W7RyA&si=hVyJNPNd5JM7Ax0b
https://redd.it/1cdf4ot
@r_emacs
lsp-java is looking for lsp-docker?
Trying to install lsp-java . I have enabled MELPA as mentioned on MELPA site.
However, package-install lsp-java says lsp-docker (1.0.0) is unavailable!
I have done package refresh but lsp-docker nowhere to be seen! Anyone running into same issue?
This is on a CentOS system
https://redd.it/1cd8xaw
@r_emacs
Help with changing cursor color according to the enabled theme
TLDR: I'm trying to change the color of the cursor according to the enabled theme, but the color of the cursor don't change when I start Emacs.
Just to give a little of context I'm a web dev an currently working with a lot of css code. Emacs has a css-mode that change the background of the face of color codes meaning a { background-color: #fff } will have the #fff with a white background (just like the rainbow-mode package does).
The thins is that my cursor often get lost in certain color and I don't like that so I decided to write a little of elisp to fix this (realice that a white or black cursor does the job). Also forgot to mention that I switch a lot between dark and light themes so I figure that I need to change the cursor color according to that. Doing my research came across to this [https://www.gnu.org/software/emacs/manual/html\_node/modus-themes/A-theme\_002dagnostic-hook-for-theme-loading.html](https://www.gnu.org/software/emacs/manual/html_node/modus-themes/A-theme_002dagnostic-hook-for-theme-loading.html) and this helped me to do the part of calling the function to change the color when I change of theme.
Everything work fine until I restart Emacs or open Emacs for the first time (like when I turn on my computer on my job) because the color of the cursor don't change when Emacs start so I'm a little lost here and I'm not sure if I missing something.
Also I'm checking the \*messages\* buffers and appears that the function load correctly so....
Here is the code I'm using:
(defvar after-enable-theme-hook nil
"Hook to run after enabling a theme.")
(defun run-after-enable-theme-hook (&rest _args)
"Run `after-enable-theme-hook'."
(message "executin hook after-enable-theme-hook")
(run-hooks 'after-enable-theme-hook)
(let* ((color-mode (frame-parameter nil 'background-mode))
(cursor-color (if (eq color-mode 'dark)
"red"
nil)))
(set-face-attribute 'cursor nil :background cursor-color)))
(advice-add 'enable-theme :after #'run-after-enable-theme-hook)
(load-theme 'gruvbox-dark-hard)
​
https://redd.it/1cd6ngy
@r_emacs
org-ql-search custom sort
First of all - org-ql is a game changer for me. Absolutely amazing! The combination with super-agenda is perfect. At work I use orgmode and org-roam to manage teams, projects, meetings, and information.
One thing I can't seem to figure out is how to use custom sorting in org-ql-search. According to the documentation (https://github.com/alphapapa/org-ql) you can use a *"a user-defined comparator function that accepts two items as arguments and returns nil or non-nil".*
Assuming meetings are saved using the following structure:
** payment updates :meeting:
:PROPERTIES:
:ID: A10CB210-2877-427E-AB8B-AE85E58ECBBB
:DATE: [2024-04-24 Wed]
:ATTENDEES: [[id:6B3BC68C-B75E-4ABE-B4B9-93E8CAF6AD40][Katrin]] [[id:2F6436D1-12C9-45DA-BFA3-FAE70A24597A][Peter]]
:CATEGORY: lead_team
:END:
I can pull all meetings with a specific person using org-ql-search and super-agenda (using a custom predicate I created called "person") with this:
(org-ql-search (current-buffer)
'(and (person "Katrin")
(tags "meeting"))
:title "Meetings with Katrin"
:super-groups '((:auto-property "CATEGORY"
:order 1)))
I would like to sort these meetings by the custom property :DATE:. I found this solution [here](https://emacs.stackexchange.com/questions/26351/custom-sorting-for-agenda) that should provide the sorting:
(defun cmp-date-property (prop)
"Compare two \org-mode' agenda entries, `A' and `B', by some date property.`
If a is before b, return -1. If a is after b, return 1. If they
are equal return nil."
(lexical-let ((prop prop))
#'(lambda (a b)
(let* ((a-pos (get-text-property 0 'org-marker a))
(b-pos (get-text-property 0 'org-marker b))
(a-date (or (org-entry-get a-pos prop)
(format "<%s>" (org-read-date t nil "now"))))
(b-date (or (org-entry-get b-pos prop)
(format "<%s>" (org-read-date t nil "now"))))
(cmp (compare-strings a-date nil nil b-date nil nil))
)
(if (eq cmp t) nil (signum cmp))
))))
This should work for orgmode agendas using the org-agenda-cmp-user-defined setting:
`org-agenda-cmp-user-defined (cmp-date-property ("DATE"))`
But I can't plug this into org-ql-search directly like this:
(org-ql-search (current-buffer)
'(and (person "Emily")
(tags "meeting"))
:title "Meetings with Emily"
:super-groups '((:auto-property "CATEGORY"
:order 1))
:sort '(cmp-date-property "DATE"))
because :sort expects "*a comparison function of two arguments*".
Has anyone plugged in a custom sorting function into org-ql-search that depends on a property value? I can't find any examples online that would help me figure out the next steps.
Any pointers would be greatly appreciated!
https://redd.it/1ccrw5f
@r_emacs
Tags finding (jumps to the definition of functions and variables given
a name).
Compiler error grep/pattern matching parsing for many language compilers
(jumps to source file lines where error or grep expression matches occur).
Debugger interface (Permits debugging of C, C++ and Objective-C from
within the editor; also cross-debugging of assembler is possible).
** Document editing and formatting
Text, outlines, TeX, LaTex, Texinfo, Interleaf TPS, Nroff, Troff, and
Scribe support.
** Context Saving
Each buffer maintains its own state.
A history of major edit locations within each buffer is kept so you
can quickly return to any one.
As buffers overlay one another in windows, it is simple to return to
any desired buffer set. Entire buffer-window configurations
may be saved and recalled with a single key.
Quitting a special edit mode typically brings you back to where you
were before you started.
Editing history is saved between sessions; each day you start where you
left off. Usually, from day to day you tend to be working on the
same set of files so each time you start the editor, the files you
were editing last time you quit from the editor will be
automatically reloaded.
** Calendar
Schedule your own appointments.
Look up any date.
** Rolodex (Wrolo)
Unlimited, free-form entries.
Fast lookup.
** E-Mail Reader/Composer (RMAIL or VM)
Very interactive.
Reads, files, forwards, replies to, locates, summarizes, and sorts
groupings of mail.
Two mail readers for users with different backgrounds and tastes to
choose among.
** Lisp Interpreter (Emacs Lisp)
Helps people learn the language.
Contains an interactively steppable debugger.
** News Reader/Composer (GNUS)
Powerful USENET net news (bulletin board) reader, like the mail readers.
** Menu interface (Smart Menus)
An easy to use menu system for using a number of Emacs tools.
** Directory Editing (Dired)
Navigate through directory hierarchies, view files, rename, copy,
safely delete, and change permissions on files.
** OS Command Shell Interface (Shell)
File name completion (essentially selection of files from a list).
Interactive history recall.
Editable transcript pads of your command interactions even from terminals.
Telnet, cross-system remote login mode.
** Man Page Browsing (Superman and Man-apropos)
Quick UNIX manual page interface which simplifies browsing.
** Info: Linked Information Browser (Info)
Easy to use, point and click support available.
Very fast to find information within an organized body of work.
Manuals on a number of tools are available in this format.
** Hypertext Management System (Hyperbole)
Easy to construct targeted, interactive information access systems
Point and click hypertext buttons in e-mail, network news, and
any files
Menu based interface
** Learning / Reference Aids
Online self-paced tutorial.
Online complete reference manual.
Printed manual and key binding summaries.
See Paging Division library for printed help guides.
** Customizability
Source code is available for local customization.
'Watch what I do' type macros are used for simple user customizations.
Lisp is used for complex customization requirements.
* Platform Issues
=================
** HP Apollo
Native DM (Display Manager) and X window implementation; mouse and
DM key support.
DM keys operate as expected so people can immediately be productive.
Many Emacs control key bindings can be made available in the
DM environment making them
Clock in on two todos
In my daily work I often work for clients that need me to track and report my time based on what exactly I did in a project. Like Meetings, coding feature x, writing documentation, ...
On the other hand my employer has a project which is just assigned to the project I do for the customer. So it is basically a hierarchy with two levels:
* TODO employer project
** TODO customer Meetings
** TODO customer Coding
** TODO customer Documenting
So at the end of the day I need to tell the customer the more granular times and the employer the overall times.
What I want to have is a feature where I clock in on the customer todos but can also see a daily aggregation on the employer todo. How could I do that in org mode?
It would be also awesome if I could have the customer todos in a different file and just "backlink" them to the employer todo which is in its own separate file
https://redd.it/1ceijy2
@r_emacs
(let* ((body (treesit-node-child-by-field-name node "body"))
(subleafs (when body (my/walk-object-declaration body buffer)))
(objectname (my/get-def-name node))
(object-start (treesit-node-start node)))
(push (cons "declaration" (my/make-marker buffer object-start)) subleafs)
(cond ((equal type "class_declaration")
(push (cons objectname subleafs) classes))
((equal type "enum_declaration")
(push (cons objectname subleafs) enums))
((equal type "interface_declaration")
(push (cons objectname subleafs) interfaces)))))))
(when enums (push (cons "Enums" (reverse enums)) result))
(when classes (push (cons "Classes" (reverse classes)) result))
(when interfaces (push (cons "Interfaces" (reverse interfaces)) result))
result)))
https://preview.redd.it/0xd2y46hz1xc1.png?width=1530&format=png&auto=webp&s=4de9789e716381897abd85d6f4affa1ab2c57f02
https://preview.redd.it/lil2l1shz1xc1.png?width=1520&format=png&auto=webp&s=05b7ada92cdc9af87ecc7b69720156ed9ed5580b
https://redd.it/1cej9fr
@r_emacs
q: modern accessibility in emacs
Hi all, I'm hoping you might be able to help me out with this. My sister was diagnosed with a progressive auto-immune disease not to long ago. To simplify things, she has started to develop arthritis-like symptoms that will get progressively worse, and she will lose her vision over time.
She's not very technical, but I know there are a lot of interesting ergonomics modes like xah-fly-keys, or even just spacemacs style bindings with a leader key. I'd love some recommendations for relatively easy to learn ergonomics systems that might be less intimidating to newer users. Right now I'm leaning towards spacemacs because that seems the easiest way for someone who would probably be pretty put off by editing an init.el right out of the gate.
I also thought that over time she could augment this with speech to text as well as text to speech. I know that there are a number of emacs tools like emacsspeak, but I remember seeing a video on youtube where someone had some hooks into a google text to speech library, and was using ai to send audio clips to chat gpt.If that rings a bell for anyone, please let me know what they were using. I haven't been able to find it, but I'd love any other recommendations or thoughts there as well.
Anyway, thanks in advance!
https://redd.it/1cebfs6
@r_emacs
How to disable the "0 refs|2 refs" in lsp ccls with c++?
https://redd.it/1ceaauo
@r_emacs
Using flycheck across multiple org-mode code blocks?
Is there a way to somehow apply flycheck across various org-mode code blocks given that you are only using one language for all of them? I want flycheck to essentially treat the contents of the code blocks as one file.
https://redd.it/1ce3t26
@r_emacs
Eglot + Java: go to definition only works with my own classes
So I'm trying eglot and I've just enabled it manually while I'm still trying and figuring things out with `M-x eglot` in my Main.java file. Things seem to work and it is really doing a good job so far! My only issue is, if I try to "go to definition" of one of the builtin classes or the ones that are provided from maven, it doesn't go there as expected. For instance, `import picocli.CommandLine.Command` if the cursor is on Command and I try to go to definition, it just doesn't go there and the minibuffer highlights the Command part for a second. The same thing for the java builtin methods. such as System.out.println. Is there a way to make them work?
https://redd.it/1ce0ho9
@r_emacs
Is there a simple way to use org-ql to search other directories?
I keep my org-directory
separate from the location of my Org-roam notes files. I'd like to quickly search my Org-roam files for nodes with various TODO
states.
How can I do this in an efficient way via org-ql
(I can use rgrep
to achieve something similar)?
Using org-ql-search
interactively allows me to choose "all" files/directories, which is too broad. There doesn't seem to be universal argument support, so I can't pass the directory via "C-u".
I've also tried the org-roam-ql
package, but for whatever reason, this doesn't seem able to return the correct results -- maybe all the nodes have to be proper Org-roam nodes, with a corresponding org-id
?
https://redd.it/1cdgqhz
@r_emacs
Do not upgrade tree-sitter, or else Emacs crashes
tldr: Don't upgrade your tree-sitter library, otherwise Emacs will crash when loading it. If you've already upgraded tree-sitter, either a) roll back to v0.22.2, or b) rebuild Emacs. If you use a package manager, uninstalling and reinstalling Emacs should rebuild Emacs.
The latest version of tree-sitter library is binary-incompatible with the previous version, but the ABI version remains unchanged. That means package managers will simply replace the old libtree-sitter.so file with the new one. Then when Emacs runs, this binary-incompatible libtree-sitter.so is loaded and crashes Emacs.
What should've happened is for tree-sitter to bump the ABI version; then package managers would install the new libtree-sitter.so file alongside the old libtree-sitter.so, rather than replacing it. And Emacs will still load the old libtree-sitter.so.
Rebuilding Emacs will resolve this issue since Emacs and tree-sitter remain compatible on the source level. Rebuild the Emacs binary and it'll be compatible with the new tree-sitter binary.
Source: https://github.com/tree-sitter/tree-sitter/issues/3296
(I'll note that please don't reply in the GitHub issue unless you have constructive things to add.)
https://redd.it/1cdq488
@r_emacs
Fuzzy search in Emacs manuals (C-h i) ?
I wondered what you guy use to search through Info (C-h i) manual pages, if you use them at all?
It would be cool to have a ripgrep or FTS -like search for Emacs manuals, because I often don't know where to find what I'm searching for in advance, or maybe want to look up a variable/function name described ...
https://redd.it/1cdi61j
@r_emacs
How to make emacs open certain files using xdg-open
by default?
I'm currently trying to rely more on emacs for file browsing and stumbled upon the openwith package. It allows the user to specify which programs to use for opening which file types, and the choice is respected by find-file
and dired-find-file
. This is super useful as there are some file types which I never want to open in emacs.
The following config is more or less taken from github and tells emacs to open "doc"
, "xls"
, ... with "libreoffice"
:
(use-package openwith
:config
(setq openwith-associations
(list
(list (openwith-make-extension-regexp
'("doc" "xls" "ppt" "odt" "ods" "odg" "odp"))
"libreoffice"
'(file))
))
:init
(openwith-mode 1))
Unfortunately, it requires me to explicitly specify which program to use for which file and does not seem to work when I replace "libreoffice"
with "xdg-open"
. Does anybody know why or whether there are any alternative packages that do something similar but work with xdg-open?
https://redd.it/1cdhum7
@r_emacs
Tree-sitter modes killing my emacs session
Hello,
I setup treesitter months ago and everything was working fine. However, earlier today I opened a file using the `js-ts-mode` and my entire emacs session was killed. I have been able to track this down to whenever I use a treesitter based major mode, not just `js-ts-mode`. I don't know if this was caused by me updating my packages or something else (I am using Void Linux btw). Any idea how to resolve this issue?
https://redd.it/1cdb3r3
@r_emacs
Not an elfeed bug
... more an annoyance really, and not elfeed's fault at all but ...
lemmy RSS feeds (such as "https://lemmy.ml/feeds/c/emacs.xml") often (but not always) have mis-guided "Link:" elements which target an external link, an image file or other material instead of the lemmy post itself. Consequently, hitting 'b' elfeed-search-browse-url may send one on a surprising if not always useful journey.
eg
Title: Keymacs, a program to generate Emacs keybindings | Plain DrOps
Author: https://feddit.de/u/DrOps
Date: Tue, 23 Apr 2024 23:35:25 AEST
Feed: Lemmy - emacs
Tags: emacs, lemmy
Link: https://plaindrops.de/blog/2024/keymacs/
submitted by DrOps to emacs
8 points | 2 comments
https://plaindrops.de/blog/2024/keymacs/
In this case, the link to lemmy itself is in the "2 comments" => https://lemmy.ml/post/14798221
Has anyone a fix for this? It's more likely needed at lemmy itself but given the infinite adaptability of emacs perhaps there's a way.
https://redd.it/1cd4b90
@r_emacs
eMacs on iPhone SE?
How can I access and edit eMacs org files from my computer on my iPhone?
My laptop is a MacBook Air using Sonoma 14.4.1.
My iPhone is an iPhone SE.
https://redd.it/1cd06oj
@r_emacs
very compatible.
Works with BSD UNIX.
** SUN
OpenWindows/X window support.
** Other UNIX
GNU Emacs runs on virtually all UNIX platforms under X and via
character terminals.
** OS/2
A full port of GNU Emacs is available for OS/2, although we do
not have it in-house.
** MS DOS
A recently released port allows GNU Emacs to run on 386 and 486,
DOS-based PCs with a number of limitations.
** Terminals
Emacs takes advantage of any UNIX supported display terminal
with little change in interface or functionality
limitation. Dial-in from home via modem and work much like
you can with a direct connection.
https://redd.it/1ccsdn2
@r_emacs
powerful facilities; can
interface to version release control systems
+ Debugger Interface - speeds program debugging and analysis
+ File Manager - directory browsing and management
+ File Filter - can apply complex filtering directives in a
batch mode
+ Forms Entry - entry and management of forms-based data
+ Hypertext Management System - supports rapid information linkage and
access, e.g. jump to other files or program
identifiers at the touch of a key
+ Info Manual Browser - efficiently browses online manuals
+ Lisp Interpreter - for learning and producing production
quality code
+ Menus - a number of tools can be accessed from an
effective menu interface whether or not a
mouse is available; supports different user
skill levels and provides a common interface
on terminals and window systems
+ Network News/Bulletin Boards - reader and article submitter;
this may be the only portable UNIX-based
newsreader pre-configured for use in the
Paging Division
+ Object-oriented Code Browser - supports the five major OO languages:
C++, Objective-C, CLOS (Lisp), Smalltalk,
and Eiffel; a graphical Motif-based browser
is also available.
+ Outliner - for both text and program source code
+ Remote Control of Emacs - other programs can send edit or other requests
to an Emacs process, whether they run on the
same machine or on another network.
+ Remote File Editing - files on remote hosts accessible via a network
connection can be edited as though they were
local (except you specify your user account
on the remote machine); this permits
editing from your machine to files located
on Suns, Apollos, HPs, NeXTs and other
TCP/IP-based machines
+ Rolodex - flexible, fast lookup of record-based
information
+ Scientific calculator - very advanced, can solve problems without
programming
+ Full-text Retrieval - User interface to Wide Area Information
Server (WAIS) client-server full text and
other media retrieval system
+ Watch What I Do Automation - stores command sequences for later playback
+ VI Emulation - to ease transition to Emacs for VI users;
other editor emulations can be written
* Detailed Emacs Traits
=======================
** Standard, sensible user interface
Think of all the programs and associated user interfaces you have had
to learn over the years to do each task. Now look at what you can do
by mastering a single integrated environment with one consistent
user interface.
** Powerful, flexible text editor
Interactive filling and justification.
Outlining.
Unlimited number of edit buffers.
Unlimited line lengths.
Displays EXACTLY what is in files, including all control and binary codes.
Multi-windowed, even from text terminals.
Extended UNIX regular expression capabilities.
Mode and buffer specific key bindings; full user control over what
each key does.
Edit on remote machines via ftp. The editor works on the
files pretty much as though they are local.
Editor lock to prevent unauthorized usage (useful from terminals).
** Programming language editor
Syntax-specific support for Lisp, C, C++, Pascal, Fortran, assembler,
Eiffel, Sather, Modula-2, Simula, etc.
Incremental search (finds matches as you type the search expression).