-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcursorless.el
51 lines (44 loc) · 1.53 KB
/
cursorless.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
;;; cursorless.el --- Voice based structural editing with Cursorless -*- lexical-binding: t; -*-
;;
;; Version: 0.0.1
;; Package-Requires: ((emacs "28.1") (command-server "0.0.1"))
;; Keywords: cursorless, voice
;; Homepage: https://github.com/cursorless-everywhere/emacs-cursorless
;;
;; This file is not part of GNU Emacs.
;;
;;; Code:
(require 'seq)
(require 'svg)
(require 'filenotify)
(defconst cursorless-directory "~/.cursorless/")
(defun cursorless-line-and-column (pos)
(list
;; I thought cursorless wanted 1-indexed line #s, but 0-indexed seems to make
;; it work properly?
'line (1- (line-number-at-pos pos nil))
;; (current-column) would be wrong here: we want # of characters since start
;; of line, not the logical position. (eg. tab counts as 1 char.)
'column (save-excursion
(goto-char pos)
(- pos (line-beginning-position)))))
(defun cursorless-goto-line-column (line column)
(goto-char (point-min))
(forward-line line)
;; TODO: check we haven't gone over the end of the line
(forward-char column))
(defun line-and-column-to-offset (line column)
(save-mark-and-excursion
(save-restriction
(widen)
(cursorless-goto-line-column line column)
(point))))
;; Load everything.
(let ((load-path (cons (file-name-directory (or load-file-name (buffer-file-name)))
load-path)))
(require 'cursorless-log)
(require 'cursorless-command-client)
(require 'cursorless-state)
(require 'cursorless-hats))
(provide 'cursorless)
;;; cursorless.el ends here