[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: send selection or current line to Terminal/iTerm
From: |
John Mastro |
Subject: |
Re: send selection or current line to Terminal/iTerm |
Date: |
Fri, 13 Jun 2014 19:30:35 -0700 |
Hi klebsiella,
I have another version for you to try. It behaved as expected in a few
simple tests on my machine.
Let me know how it goes.
Best,
John
;;; Begin iterm.el
;; To match SublimeText's key binding:
;; (global-set-key (kbd "<C-return>") 'iterm-send-text)
(require 'pcase)
(require 'thingatpt)
(defun iterm-escape-string (str)
(let* ((str (replace-regexp-in-string "\\\\" "\\\\" str nil t))
(str (replace-regexp-in-string "\"" "\\\"" str nil t)))
str))
(defun iterm-last-char-p (str char)
(let ((length (length str)))
(and (> length 0)
(string= (substring str (- length 1)) (string char)))))
(defun iterm-chop-newline (str)
(let ((length (length str)))
(if (iterm-last-char-p str ?\n)
(substring str 0 (- length 1))
str)))
(defun iterm-maybe-add-newline (str)
(if (iterm-last-char-p str ? )
(concat str "\n")
str))
(defun iterm-handle-newline (str)
(iterm-maybe-add-newline (iterm-chop-newline str)))
(defun iterm-send-string (str)
"Send STR to a running iTerm instance."
(let ((str (iterm-escape-string (iterm-handle-newline str))))
(shell-command
(concat "osascript -e 'tell app \"iTerm\"' "
"-e 'set mysession to current session of current terminal' "
(format "-e 'tell mysession to write text \"%s\"' " str)
"-e 'end tell'"))))
(defun iterm-text-bounds ()
(pcase-let ((`(,beg . ,end) (if (use-region-p)
(cons (region-beginning) (region-end))
(bounds-of-thing-at-point 'symbol))))
(list beg end)))
(defun iterm-send-text (beg end)
"Send buffer text in region from BEG to END to iTerm.
If called interactively without an active region, send the symbol
at point instead."
(interactive (iterm-text-bounds))
(let ((str (iterm-escape-string (buffer-substring-no-properties beg
end))))
(iterm-send-string str)))
(provide 'iterm)
- Re: send selection or current line to Terminal/iTerm, (continued)
- Message not available
- Re: send selection or current line to Terminal/iTerm, Emanuel Berg, 2014/06/12
- Re: send selection or current line to Terminal/iTerm, Jai Dayal, 2014/06/12
- Re: send selection or current line to Terminal/iTerm, klebsiella, 2014/06/12
- Re: send selection or current line to Terminal/iTerm, Jai Dayal, 2014/06/12
- Message not available
- Re: send selection or current line to Terminal/iTerm, John Mastro, 2014/06/12
- Re: send selection or current line to Terminal/iTerm, klebsiella, 2014/06/13
- Re: send selection or current line to Terminal/iTerm, John Mastro, 2014/06/13
- Re: send selection or current line to Terminal/iTerm,
John Mastro <=
- Re: send selection or current line to Terminal/iTerm, klebsiella, 2014/06/14
- Re: send selection or current line to Terminal/iTerm, Robert Thorpe, 2014/06/14
- Re: send selection or current line to Terminal/iTerm, klebsiella, 2014/06/14
- Re: send selection or current line to Terminal/iTerm, Robert Thorpe, 2014/06/14
- Message not available
- Re: send selection or current line to Terminal/iTerm, Rusi, 2014/06/17
- Re: send selection or current line to Terminal/iTerm, klebsiella, 2014/06/17
- Re: send selection or current line to Terminal/iTerm, klebsiella, 2014/06/17
- Re: send selection or current line to Terminal/iTerm, John Mastro, 2014/06/17
- Re: send selection or current line to Terminal/iTerm, Robert Thorpe, 2014/06/17
- Re: send selection or current line to Terminal/iTerm, klebsiella, 2014/06/18