, !
, , . , .
, ,
emacs-purpose.
. , layout. extension ide emacs . , IDE .
, .
IDE :
-
- , .
- .
- IDE.
1.
!
window-purpose-x.el purpose-x-code1window-layout.
layout ~/.emacs.d/layouts/ layout .
(purpose-load-window-layout-file "~/.emacs.d/layouts/full-ide.window-layout")
,
Pull request layout ( ).
, window-purpose-x.el. , purpose, layout, :
pull request
, ( ):
elisp (nil
(0 0 152 35)
(t
(0 0 29 35)
(:purpose dired :purpose-dedicated t :width 0.16 :height 0.5 :edges
(0.0 0.0 0.19333333333333333 0.5))
(:purpose buffers :purpose-dedicated t :width 0.16 :height 0.4722222222222222 :edges
(0.0 0.5 0.19333333333333333 0.9722222222222222)))
(t
(29 0 125 35)
(:purpose edit :purpose-dedicated t :width 0.6 :height 0.85 :edges
(0.19333333333333333 0.0 0.8266666666666667 0.85))
(:purpose misc :purpose-dedicated t :width 0.6 :height 0.1 :edges
(0.19333333333333333 0.8722222222222222 0.8266666666666667 0.9722222222222222))
)
(t
(125 0 152 35)
(:purpose ilist :purpose-dedicated t :width 0.15333333333333332 :height 0.6 :edges
(0.82666666666666667 0.0 0.9722222222222222 0.6))
(:purpose todo :purpose-dedicated t :width 0.15333333333333332 :height 0.372222222 :edges
(0.8266666666666667 0.6 0.9722222222222222 0.9722222222222222))
)
)
~/.emacs.d/layouts/full-ide.window-layout init.el
(defun load-purpose-mode ()
(interactive)
(purpose-load-window-layout-file "~/.emacs.d/layouts/full-ide.window-layout")
(purpose-x-code1-setup)
)
(global-set-key (kbd "M-L") 'load-purpose-mode)
Alt+Shift+L . , : . , , .
load-purpose-mode .
2. ,
IDE purpos.
misc purpose |
todo purpose |
edit purpose |
inferior-python-mode |
org-mode |
css-mode |
python-inferior-mode |
|
yaml-mode |
gdb-inferior-io-mode |
|
conf-unix-mode |
fundamental-mode |
|
*magit* |
compilation-mode |
|
|
shell-mode |
|
|
eshell-mode |
|
|
term-mode |
|
|
( ):
(add-to-list 'purpose-user-mode-purposes
'(YOUR_MODE . PURPOSE))
magit ( emacs-purpose):
(defvar purpose-x-magit-single-conf
(purpose-conf "magit-single"
:regexp-purposes '(("^\\*magit" . misc)))
"Configuration that gives each magit major mode the same purpose.")
(purpose-x-magit-single-on)
init.el:
(purpose-compile-user-configuration)
.
3.
? , ? .
:
elisp ;; helper purpose. . (ie, purpose )
(defun get-only-one-buffer-with-purpose (purpose)
"Get buffers wih purpose"
(buffer-name (nth 0 (purpose-buffers-with-purpose purpose)))
)
;; dired buffer, , , dired . . ? purpose. ,
(define-key purpose-mode-map (kbd "C-c C-f")
(lambda () (interactive) (purpose-switch-buffer-with-some-purpose 'dired))
)
;; . . . .
(define-key purpose-mode-map (kbd "C-c C-l")
(lambda () (interactive) (purpose-switch-buffer (get-only-one-buffer-with-purpose 'buffers)))
)
;; . dired
(define-key purpose-mode-map (kbd "C-c C-c")
(lambda () (interactive) (purpose-switch-buffer-with-some-purpose 'edit))
)
;; (, ) . . . .
(define-key purpose-mode-map (kbd "C-c C-d")
(lambda () (interactive) (purpose-switch-buffer (get-only-one-buffer-with-purpose 'ilist)))
)
;; todo . . .
(define-key purpose-mode-map (kbd "C-c C-t")
(lambda () (interactive) (purpose-switch-buffer (get-only-one-buffer-with-purpose 'todo)))
)
4. IDE
todo , - .
purpose todo. org-mode,
todo .
window-purpose layout
load-purpose-mode ( ) (todo-mode-get-buffer-create) elisp
elisp (defconst todo-mode-buffer-name "*CodeTodo*"
"Name of the buffer that is used to display todo entries.")
;; todo , , read only mode @todo. @todo .
(defun on-org-mode-todo-file-built (process event)
(find-file (concat (getenv "PWD") "/todo.org"))
(call-interactively 'read-only-mode)
)
;; todo org-mode
(defun build-org-mode-file-for-todo ()
(start-process "Building todo things" "*CodeTodo*" "bash" "-ic" "source ~/.bashrc; collecttodotags")
(set-process-sentinel (get-process "Building todo things") 'on-org-mode-todo-file-built)
)
;; ,
(defun todo-mode-get-buffer-create ()
"Return the todo-mode buffer.
If it doesn't exist, create it."
(or (get-buffer todo-mode-buffer-name)
(let ((buffer (get-buffer-create todo-mode-buffer-name)))
(with-current-buffer buffer
(org-mode)
(build-org-mode-file-for-todo)
(pop-to-buffer todo-mode-buffer-name))
buffer)))
collectotodotags :
alias collecttodotags="find `pwd` -type d \( -name .git -o -name myworkenv -o -name node_modules \) -prune -o -type f \( -name todo.org \) -prune -o -type f -print -exec grep -n '@todo' '{}' \; | create_org_mode_todo_file.py > ./todo.org"
,
todo todo :
github
, , -
todo
github
@todooo o , . , ?
, . misc purpos , , , , shortcuts:
(global-set-key "\C-c+" (lambda () (interactive) (enlarge-window +20)))
(global-set-key "\C-c_" (lambda () (interactive) (enlarge-window -20)))
, , , misc .
emacs extension?
!
P.S. , emacs
https://habrahabr.ru/post/333640/