# This script a huge improvement on my original script that appeared here
# about 3 years ago: Open a file in your editor of choice.
# This script is a way to either
# • open in Emacs the files selected in Finder
# or
# • open a scratchpad in Emacs when you need to jot down information.
# The script can be adapted to work with any text editor.
# It tests whether Finder was front when the script was launched *and*
# whether it had selected files.
# If either is negative, it opens a scratchpad with a name that's set here.
# Otherwise is opens the files selected in Finder.
# Personal settings:
# Obviously, your Emacs.app file is located in a different place:
set myEmacsAppPath to "/Users/******/Documents/Repositories/emacs/nextstep/"
# This is the name of the empty default Emacs buffer you want to open:
set myScratchBufferName to "turlututu"
# This part is unlikely to change, it assumes that you use the emacsclient
# that corresponds to the selected Emacs.app. And that you run Emacs as a server.
set myEmacsclient to myEmacsAppPath & "Emacs.app/Contents/MacOS/bin/emacsclient"
set myEmacsApp to myEmacsAppPath & "Emacs.app"
# saved by: https://forum.latenightsw.com/t/how-an-applescript-applet-can-get-the-frontmost-application-other-than-itself/2482/7
# This makes sure that this script is not mistaken for the frontmost application.
# The delay works at 0.2 on my machine, 0.1 is not enough.
tell application "System Events"
tell (first application process whose frontmost is true)
set frontmost to false
set visible of it to false
delay 0.2
end tell
set previously_active_app to item 1 of (get name of processes whose frontmost is true and visible is true)
end tell
# Now that we know whether Finder was previously front or not, we can put Emacs to the front.
try
tell application "System Events" to tell process "Emacs" to set frontmost to true
on error
tell application myEmacsApp
activate
delay 1
end tell
end try
# The script's main logic is here.
if previously_active_app is "Finder" then
# If Finder is the active application when the script is launched, either there is
# or there is no selection.
try
# This is the weird part. There are cases when there is no selection but the assignment
# is not considered an error, hence I test whether item 1 of the selection exists.
tell application "Finder" to set fileSelection to its selection
item 1 of fileSelection exists
on error
# If item 1 of selection does not exist, there is no selection and the error branches out here.
# A scratchpad is opened in Emacs.
set myCommand to myEmacsclient & " -n -e \"(switch-to-buffer \\\"" & myScratchBufferName & "\\\")\""
do shell script myCommand
return
end try
# Now that we have checked for that non-selection error, we can work on the selection.
repeat with selectedFile in fileSelection
set selectedFile to (POSIX path of (selectedFile as alias))
set myCommand to myEmacsclient & " -n -e \"(find-file " & "\\\"" & selectedFile & "\\\"" & ")\""
do shell script myCommand
end repeat
return
else
# And if Finder was not frontmost when the script was launched, then we just intended to
# open a scratchpad in Emacs.
set myCommand to myEmacsclient & " -n -e \"(switch-to-buffer \\\"" & myScratchBufferName & "\\\")\""
do shell script myCommand
return
end if
# Et voilà.
# Now, save the script in the format that corresponds to the way you usually launch scripts.
# I prefer the "myAppScript.app" way so that I can launch my script by calling it from Spotlight.
# I call this one ">Emacs.app".
How to support this blog?
To support this blog, you can hire me as an OmegaT consultant/trainer, or you can send translation and project management jobs my way.
Search the site:
Subscribe to:
Posts (Atom)
Popular, if not outdated, posts...
-
6/12/2024 update My version of macOS is too old to be able to use brew reliably since the package manager deprecated support for Monterey (m...
-
I may have missed something but I have yet to find an easy way to copy a set of files to an arbitrary place on my disk. I think Windows peop...
-
Until today, I only used the following shortcuts on the command line: ctrl+a → go to beginning of line ctrl+e → go to end of line ctrl+k...
-
In my " Okapi tools for Mono " post, last November, I discussed the possibility to use Okapi on OSX without installing Parallels/...
-
A message from Okapi's Yves Savourel: Just a note to let you know that I'll be giving a little introduction on using the Okapi Tools...
.docx
.NET
.pptx
.sdf
.xlsx
AASync
accented letters
Accessibility
Accessibility Inspector
Alan Kay
alignment
Apple
AppleScript
ApplescriptObjC
AppleTrans
applications
Aquamacs
Arabic
archive
Automator
backup
bash
BBEdit
Better Call Saul
bug
Butler
C
Calculator
Calendar
Chinese
Cocoa
Command line
CSV
CSVConverter
database
defaults
Devon
Dictionary
DITA
DocBook
Dock
Doxygen
EDICT
Emacs
emacs lisp
ergonomics
Excel
external disk
file formats
file system
File2XLIFF4j
Finder
Fink
Font
français
Free software
FSF
Fun
Get A Mac
git
GNU
GPL
Guido Van Rossum
Heartsome
Homebrew
HTML
IceCat
Illustrator
InDesign
input system
ITS
iWork
Japanese
Java
Java Properties Viewer
Java Web Start
json
keybindings
keyboard
Keynote
killall
launchd
LISA
lisp
locale4j
localisation
MacPorts
Mail
markdown
MARTIF to TBX Converter
Maxprograms
Mono
MS Office
NeoOffice
Numbers
OASIS
Ocelot
ODF
Okapi
OLPC
OLT
OmegaT
OnMyCommand
oo2po
OOXML
Open Solaris
OpenDocument
OpenOffice.org
OpenWordFast
org-mode
OSX
Pages
PDF
PDFPen
PlainCalc
PO
Preview
programming
python
QA
Quick Look
QuickSilver
QuickTime Player
Rainbow
RAM
reggy
regular expressions
review
rsync
RTFCleaner
Safari
Santa Claus
scanner
Script Debugger
Script Editor
scripting
scripting additions
sdf2txt
security
Services
shell
shortcuts
Skim
sleep
Smultron
Snow Leopard
Spaces
Spanish
spellchecking
Spotlight
SRX
standards
StarOffice
Stingray
Study
SubEthaEdit
Swordfish
System Events
System Preferences
TBX
TBXMaker
Terminal
text editing
TextEdit
TextMate
TextWrangler
The Tool Kit
Time Capsule
Time Machine
tmutil
TMX
TMX Editor
TMXValidator
transifex
Translate Toolkit
translation
Transmug
troubleshooting
TS
TTX
TXML
UI Browser
UI scripting
Unix
VBA
vi
Virtaal
VirtualBox
VLC
W3C
WebKit
WHATWG
Windows
Wine
Word
WordFast
wordpress
writing
Xcode
XLIFF
xml
XO
xslt
YAML
ZFS
Zip