-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


[ ] Emacs +

, 18 2017 . 17:32 +
, !

, , . , .

, , emacs-purpose.

. , layout. extension ide emacs . , IDE .

, .

image

IDE :

  1. , .
  2. .
  3. 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
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/333640/

:  

: [1] []
 

:
: 

: ( )

:

  URL