Compare commits
No commits in common. "master" and "ab1503d2e851ce96aba74329c825ca99aa6f7e55" have entirely different histories.
master
...
ab1503d2e8
14 changed files with 3132 additions and 120 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -1,4 +1,2 @@
|
|||
elpa
|
||||
eshell
|
||||
backup/
|
||||
*.elc
|
||||
|
|
|
|||
6
.gitmodules
vendored
6
.gitmodules
vendored
|
|
@ -1,3 +1,9 @@
|
|||
[submodule "stuff/go-mode.el"]
|
||||
path = stuff/go.el
|
||||
url = https://github.com/dominikh/go-mode.el.git
|
||||
[submodule "stuff/dockerfile-mode"]
|
||||
path = stuff/dockerfile-mode
|
||||
url = https://github.com/spotify/dockerfile-mode
|
||||
[submodule "stuff/sass-mode"]
|
||||
path = stuff/sass-mode
|
||||
url = https://github.com/nex3/sass-mode
|
||||
|
|
|
|||
|
|
@ -1,20 +1,20 @@
|
|||
; Delete trailing whitespaces on save
|
||||
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
||||
(add-hook 'write-file-hooks 'delete-trailing-whitespace)
|
||||
|
||||
;; Mode to collapse code block
|
||||
(add-hook 'c-mode-common-hook (lambda () (hs-minor-mode 1)))
|
||||
(add-hook 'lisp-mode-hook (lambda () (hs-minor-mode 1)))
|
||||
(add-hook 'java-mode-hook (lambda () (hs-minor-mode 1)))
|
||||
(add-hook 'python-mode-hook (lambda () (hs-minor-mode 1)))
|
||||
(add-hook 'lisp-mode-hooks (lambda () (hs-minor-mode 1)))
|
||||
(add-hook 'java-mode-hooks (lambda () (hs-minor-mode 1)))
|
||||
(add-hook 'python-mode-hooks (lambda () (hs-minor-mode 1)))
|
||||
|
||||
; Auto insert C/C++ header guard
|
||||
(add-hook 'find-file-hook
|
||||
(add-hook 'find-file-hooks
|
||||
(lambda ()
|
||||
(when (and (memq major-mode '(c-mode c++-mode)) (equal (point-min) (point-max)) (string-match ".*\\.hh?" (buffer-file-name)))
|
||||
(insert-header-guard)
|
||||
(goto-line 3)
|
||||
(insert "\n"))))
|
||||
(add-hook 'find-file-hook
|
||||
(add-hook 'find-file-hooks
|
||||
(lambda ()
|
||||
(when (and (memq major-mode '(c-mode c++-mode)) (equal (point-min) (point-max)) (string-match ".*\\.cc?" (buffer-file-name)))
|
||||
(insert-header-inclusion))))
|
||||
|
|
@ -28,7 +28,18 @@
|
|||
(insert-shebang-if-empty "/usr/bin/ruby")))
|
||||
|
||||
; Golang
|
||||
; Modern Go configuration now in packages.el using eglot and go-mode
|
||||
(add-hook 'go-mode-hook
|
||||
(lambda ()
|
||||
(set (make-local-variable 'compile-command) "go build")))
|
||||
|
||||
(add-hook 'go-mode-hook
|
||||
(lambda ()
|
||||
(when (buffer-empty-p)
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(insert "package \n\nimport (\n\t\n)\n")))))
|
||||
|
||||
(add-hook 'before-save-hook 'gofmt-before-save)
|
||||
|
||||
(eval-after-load "go-mode"
|
||||
'(require 'flymake-go))
|
||||
|
|
|
|||
|
|
@ -41,6 +41,10 @@
|
|||
(global-set-key (kbd "C-c k") 'kill-this-buffer)
|
||||
(put 'narrow-to-region 'disabled nil)
|
||||
|
||||
;; Magit
|
||||
(global-set-key (kbd "C-x g") 'magit-status)
|
||||
(global-set-key (kbd "C-x M-g") 'magit-dispatch-popup)
|
||||
|
||||
;; Don't shift-selection
|
||||
(setq shift-select-mode nil)
|
||||
|
||||
|
|
|
|||
|
|
@ -18,76 +18,18 @@
|
|||
(add-to-list 'auto-mode-alist '("\\.bbclass$" . conf-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.bbappend$" . conf-mode))
|
||||
|
||||
;; Go mode
|
||||
(require 'go-mode-autoloads)
|
||||
|
||||
;; Changelog mode
|
||||
(add-to-list 'auto-mode-alist '("COMMIT_EDITMSG" . change-log-mode))
|
||||
|
||||
;; web-mode
|
||||
;; Now configured in packages.el with LSP support and prettier auto-formatting
|
||||
;(require 'web-mode)
|
||||
;(add-to-list 'auto-mode-alist '("\\.svelte$" . web-mode))
|
||||
;(setq web-mode-code-indent-offset 4)
|
||||
;(setq web-mode-css-indent-offset 4)
|
||||
;(setq web-mode-markup-indent-offset 4)
|
||||
;(setq web-mode-script-padding 4)
|
||||
;(setq web-mode-style-padding 4)
|
||||
;(setq web-mode-void-elements
|
||||
; '("area" "base" "br" "command" "embed" "hr" "img" "input" "keygen"
|
||||
; "link" "meta" "param" "source" "track" "wbr" "tmpl_var"))
|
||||
|
||||
;; Vue.js-mode
|
||||
(require 'vue-mode)
|
||||
(add-to-list 'auto-mode-alist '("\\.vue$" . vue-mode))
|
||||
;(setq mmm-js-mode-enter-hook (lambda () (setq syntax-ppss-table nil)))
|
||||
;(setq mmm-typescript-mode-enter-hook (lambda () (setq syntax-ppss-table nil)))
|
||||
(defun fix-mmm-syntax ()
|
||||
(save-restriction
|
||||
(setq-local syntax-ppss-table typescript-mode-syntax-table)
|
||||
))
|
||||
(add-hook 'mmm-typescript-mode-enter-hook 'fix-mmm-syntax)
|
||||
;; js-indent-level now configured in packages.el (set to 4 spaces)
|
||||
;(setq js-indent-level 2)
|
||||
(setq vue-html-extra-indent 2)
|
||||
(setq-default indent-tabs-mode nil)
|
||||
|
||||
(add-hook 'mmm-mode-hook
|
||||
(lambda ()
|
||||
(set-face-background 'mmm-default-submode-face nil)
|
||||
(add-to-list 'sgml-tag-alist '("b-col" \n ("cols" "6") ("sm" "6") ("md" "6") ("lg" "6") ("xl" "6") ("offset" "6") ("offset-sm" "6") ("offset-md" "6") ("offset-lg" "6") ("offset-xl" "6") ("order" "1") ("order-sm" "1") ("order-md" "1") ("order-lg" "1") ("order-xl" "1") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-container" \n ("fluid") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-row" \n ("no-gutters") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-form-row" \n ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-alert" \n ("variant" "info") ("dismissible") ("dismiss-label" "Close") ("show") ("fade") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-badge" \n ("href" "#") ("rel" "") ("target" "_self") ("active") ("disabled") ("to" "") ("append") ("replace") ("event" "click") ("active-class" "") ("exact") ("exact-active-class" "") ("router-tag" "a") ("no-prefetch") ("tag" "span") ("variant" "info") ("pill") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-breadcrumb" \n ("items" "") (":items" "{}") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-button" \n ("href" "#") ("rel" "") ("target" "_self") ("active") ("disabled") ("to" "") ("append") ("replace") ("event" "click") ("active-class" "") ("exact") ("exact-active-class" "") ("router-tag" "a") ("no-prefetch") ("block") ("size" "sm") ("variant" "info") ("type" "button") ("tag" "button") ("pill") ("squared") ("pressed") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-button-group" \n ("vertical") ("size" "sm") ("tag" "div") ("aria-role" "group") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-button-toolbar" \n ("justify") ("key-nav") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-calendar" \n ("id" "") ("value" "") ("value-as-date") ("initial-date" "") ("disabled") ("readonly") ("min" "") ("max" "") ("date-disabled-fn" "") ("start-weekday" "0") ("locale" "") ("direction" "") ("selected-variant" "primary") ("today-variant" "") ("no-highlight-today") ("date-info-fn" "") ("width" "270px") ("block") ("hide-header") ("show-decade-nav") ("hidden") ("aria-controls" "") ("role-description" "") ("label-prev-decade" "Previous decade") ("label-prev-year" "Previous year") ("label-prev-month" "Previous month") ("label-current-month" "Current month") ("label-next-month" "Next month") ("label-next-year" "Next year") ("label-next-decade" "Next decade") ("label-today" "Today") ("label-selected" "Selected date") ("label-no-date-selected" "No date selected") ("label-calendar" "Calendar") ("label-nav" "Calendar navigation") ("label-help" "Use cursor keys to navigate calendar dates") ("date-format-options" "{}") ("weekday-header-format" "short") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-form" \n ("id" "") ("inline") ("novalidate") ("validated") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-form-text" \n ("id" "") ("tag" "small") ("inline") ("text-variant" "muted") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-form-invalid-feedback" \n ("id" "") ("tag" "small") ("tooltip") ("force-show") ("state") ("aria-live" "") ("role" "") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-form-valid-feedback" \n ("id" "") ("tag" "small") ("tooltip") ("force-show") ("state") ("aria-live" "") ("role" "") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-form-datalist" \n (":options" "{}") ("value-field" "value") ("text-field" "text") ("html-field" "html") ("disabled-field" "disabled") ("id" "") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-form-input" \n ("id" "") ("name" "") ("disabled") ("required") ("form" "") ("autofocus") ("size" "sm") ("state") ("value" "") ("aria-invalid") ("readonly") ("plaintext") ("autocomplete" "") ("placeholder" "") ("formatter" "") ("lazy-formatter") ("trim") ("number") ("lazy") ("debounce" "0") ("type" "text") ("no-wheel") ("min" "") ("max" "") ("step" "") ("list" "{}") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-input-group" \n ("id" "") ("size" "sm") ("prepend" "") ("prepend-html" "") ("append" "") ("append-html" "") ("tag" "div") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-input-group-prepend" \n ("id" "") ("tag" "div") ("is-text") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-input-group-append" \n ("id" "") ("tag" "div") ("is-text") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-input-group-text" \n ("tag" "div") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-input-group-addon" \n ("id" "") ("tag" "div") ("is-text") ("append") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-nav" \n ("tag" "ul") ("fill") ("justified") ("align" "") ("tabs") ("pills") ("vertical") ("small") ("card-header") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-nav-item" \n ("href" "") ("rel" "") ("target" "") ("active") ("disabled") ("to" "") ("append") ("replace") ("event" "") ("active-class" "") ("exact") ("exact-active-class" "") ("router-tag" "a") ("no-prefetch") ("link-attrs" "{}") ("link-classes" "") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-nav-text" \n ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-nav-form" \n ("id" "") ("novalidate") ("validated") ("form-class" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-nav-item-dropdown" \n ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-navbar" \n ("tag" "nav") ("type" "light") ("variant" "") ("toggleable") ("fixed" "") ("sticky") ("print") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-navbar-nav" \n ("tag" "ul") ("fill") ("justified") ("align" "") ("small") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-navbar-brand" \n ("href" "#") ("ref" "") ("target" "_self") ("active") ("disabled") ("to" "") ("replace") ("event" "click") ("active-class" "") ("exact") ("exact-active-class" "") ("router-tag" "a") ("no-prefetch") ("tag" "div") ("v-model" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-navbar-toggle" \n ("label" "") ("target" "") ("v-if" "") ("v-for" "")))
|
||||
(add-to-list 'sgml-tag-alist '("b-spinner" \n ("type" "border") ("label" "") ("variant" "primary") ("small") ("role" "status") ("tag" "span") ("v-if" "") ("v-for" "")))
|
||||
)
|
||||
)
|
||||
;; Edje-mode
|
||||
(require 'edje-mode)
|
||||
(add-to-list 'auto-mode-alist '("\\.edc$" . edje-mode))
|
||||
|
||||
;; Org-mode
|
||||
(require 'org-install)
|
||||
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
|
||||
(define-key global-map "\C-cl" 'org-store-link)
|
||||
(define-key global-map "\C-ca" 'org-agenda)
|
||||
|
|
@ -101,3 +43,22 @@
|
|||
|
||||
;; Markdown-mode
|
||||
(add-to-list 'auto-mode-alist '("\\.md$" . markdown-mode))
|
||||
|
||||
;; Python-mode
|
||||
;(when (load "flymake" t)
|
||||
; (defun flymake-pyflakes-init ()
|
||||
; (let* ((temp-file (flymake-init-create-temp-buffer-copy
|
||||
; 'flymake-create-temp-inplace))
|
||||
; (local-file (file-relative-name
|
||||
; temp-file
|
||||
; (file-name-directory buffer-file-name))))
|
||||
; (list "pyflakes" (list local-file))))
|
||||
;
|
||||
; (add-to-list 'flymake-allowed-file-name-masks
|
||||
; '("\\.py\\'" flymake-pyflakes-init)))
|
||||
;(add-hook 'find-file-hook 'flymake-find-file-hook)
|
||||
|
||||
;; mmm-mode
|
||||
(add-hook 'mmm-mode-hook
|
||||
(lambda ()
|
||||
(set-face-background 'mmm-default-submode-face nil)))
|
||||
|
|
|
|||
17
configs/project.el
Normal file
17
configs/project.el
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
(setq project-roots
|
||||
`(("Django project"
|
||||
:root-contains-files ("manage.py")
|
||||
:filename-regex ,(regexify-ext-list '(py html css js sh))
|
||||
:exclude-paths '("contrib"))))
|
||||
|
||||
(global-set-key (kbd "C-c p f") 'project-root-find-file)
|
||||
(global-set-key (kbd "C-c p g") 'project-root-grep)
|
||||
(global-set-key (kbd "C-c p a") 'project-root-ack)
|
||||
(global-set-key (kbd "C-c p d") 'project-root-goto-root)
|
||||
(global-set-key (kbd "C-c p l") 'project-root-browse-seen-projects)
|
||||
|
||||
(global-set-key (kbd "C-c p s")
|
||||
(lambda () (interactive)
|
||||
(with-project-root
|
||||
(ansi-term (getenv "SHELL")
|
||||
(concat (car project-details) "-shell")))
|
||||
49
init.el
49
init.el
|
|
@ -3,45 +3,6 @@
|
|||
;;
|
||||
;; Made by Némunaire <nemunaire@nemunai.re>
|
||||
|
||||
(require 'site-gentoo)
|
||||
|
||||
(require 'package)
|
||||
(add-to-list 'package-archives
|
||||
'("MELPA Stable" . "https://stable.melpa.org/packages/") t)
|
||||
|
||||
;; Added by Package.el. This must come before configurations of
|
||||
;; installed packages. Don't delete this line. If you don't want it,
|
||||
;; just comment it out by adding a semicolon to the start of the line.
|
||||
;; You may delete these explanatory comments.
|
||||
|
||||
;; Initialize package system but don't activate packages yet
|
||||
(setq package-enable-at-startup nil)
|
||||
(package-initialize)
|
||||
|
||||
;; Register system-installed vterm in package-alist
|
||||
;; (site-gentoo only adds to load-path, not package-alist)
|
||||
(unless (assq 'vterm package-alist)
|
||||
(let ((desc (package-desc-create
|
||||
:name 'vterm
|
||||
:version '(0 0 2)
|
||||
:summary "Emulation of a terminal"
|
||||
:reqs '((emacs (25 1)))
|
||||
:kind 'dir
|
||||
:dir "/usr/share/emacs/site-lisp/vterm")))
|
||||
(push (cons 'vterm (list desc)) package-alist)))
|
||||
|
||||
;; Now activate all packages (including claude-code which will find vterm)
|
||||
(package-activate-all)
|
||||
|
||||
;; Bootstrap use-package
|
||||
(unless (package-installed-p 'use-package)
|
||||
(package-refresh-contents)
|
||||
(package-install 'use-package))
|
||||
(require 'use-package)
|
||||
(setq use-package-always-ensure t)
|
||||
|
||||
(setq flymake-allowed-file-name-masks nil)
|
||||
|
||||
(defun may-load (path)
|
||||
"Load a file if it exists."
|
||||
(when (file-readable-p path)
|
||||
|
|
@ -81,10 +42,11 @@
|
|||
(require 'my-layout)
|
||||
(require 'my-lisp-mode)
|
||||
(require 'my-python-mode)
|
||||
(require 'vue-mode)
|
||||
|
||||
;; load my configuration files
|
||||
(toc:load-config-file '("packages" ; Modern package management (load first)
|
||||
"key-binding"
|
||||
(toc:load-config-file '("key-binding"
|
||||
;; "project"
|
||||
"editing"
|
||||
"coding-style"
|
||||
"tags"
|
||||
|
|
@ -94,8 +56,3 @@
|
|||
"custom"
|
||||
"perso"
|
||||
))
|
||||
(custom-set-variables
|
||||
'(package-selected-packages nil)
|
||||
'(python-indent 4)
|
||||
'(query-user-mail-address nil)
|
||||
'(user-mail-address "nemunaire@nemunai.re"))
|
||||
|
|
|
|||
512
stuff/edje-mode.el
Normal file
512
stuff/edje-mode.el
Normal file
|
|
@ -0,0 +1,512 @@
|
|||
;;; edje-mode-el -- Major mode for editing Edje files
|
||||
|
||||
;; Author: Gustavo Sverzut Barbieri <barbieri@gmail.com>
|
||||
;; Created: 2007-07-23
|
||||
;; Keywords: Edje major-mode
|
||||
;; Url: http://barbieri-playground.googlecode.com/svn/dot-files/edje-mode.el
|
||||
;; (if you find this file have problems, check that Url and request update)
|
||||
|
||||
;; Copyright (C) 2007 Gustavo Sverzut Barbieri <barbieri@gmail.com>
|
||||
|
||||
;; This program is free software; you can redistribute it and/or
|
||||
;; modify it under the terms of the GNU General Public License as
|
||||
;; published by the Free Software Foundation; either version 2 of
|
||||
;; the License, or (at your option) any later version.
|
||||
|
||||
;; This program is distributed in the hope that it will be
|
||||
;; useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
;; PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public
|
||||
;; License along with this program; if not, write to the Free
|
||||
;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
;; MA 02111-1307 USA
|
||||
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; This mode is based on tutorial from Scott Andrew Borton:
|
||||
;; http://two-wugs.net/emacs/mode-tutorial.html
|
||||
|
||||
|
||||
(defvar edje-mode-hook nil)
|
||||
|
||||
(defun number-or-nil-to-string (v &optional default)
|
||||
(cond ((numberp v) (number-to-string v))
|
||||
((stringp v) (if (string= v "") (number-to-string default) v))
|
||||
(t (number-to-string default))))
|
||||
|
||||
(defun non-empty-string (s)
|
||||
(and (not (eq 'nil s))
|
||||
(not (string= "" s))))
|
||||
|
||||
(defun edje-new-program-action-signal-emit (source emission)
|
||||
"Insert new program SIGNAL_EMIT"
|
||||
(interactive "ssource: \nsemission: ")
|
||||
(insert
|
||||
(concat
|
||||
" action: SIGNAL_EMIT \"" source "\" \"" emission "\";\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-program-action-state-set (state value target)
|
||||
"Insert new program STATE_SET"
|
||||
(interactive "sstate: \nsvalue (0.0): \nstarget: ")
|
||||
(insert
|
||||
(concat
|
||||
" action: STATE_SET \"" state "\" "
|
||||
(number-or-nil-to-string value 0.0) ";\n"
|
||||
" target: \"" target "\";\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-program-action (action)
|
||||
"Insert new program action"
|
||||
(interactive "saction: ")
|
||||
(setq action (upcase action))
|
||||
(cond ((string= action "STATE_SET")
|
||||
(edje-new-program-action-state-set "" 0.0 ""))
|
||||
((string= action "SIGNAL_EMIT")
|
||||
(edje-new-program-action-signal-emit "" ""))
|
||||
))
|
||||
|
||||
(defun edje-new-program (name signal source action)
|
||||
"Insert new program block"
|
||||
(interactive "sname: \nssignal: \nssource: \nsaction: ")
|
||||
(insert
|
||||
(concat
|
||||
"\n"
|
||||
" program {\n"
|
||||
" name: \"" name "\";\n"
|
||||
|
||||
(if (non-empty-string signal)
|
||||
(concat " signal: \"" signal "\";\n"))
|
||||
|
||||
(if (non-empty-string source)
|
||||
(concat " source: \"" source "\";\n"))
|
||||
))
|
||||
|
||||
(edje-new-program-action action)
|
||||
|
||||
(insert
|
||||
(concat
|
||||
" }\n"
|
||||
"\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-desc-relative (x y &optional defx defy)
|
||||
"Insert new part description 'relative' line"
|
||||
(interactive "sx: \nsy: ")
|
||||
(insert
|
||||
(concat
|
||||
" relative: "
|
||||
(number-or-nil-to-string x defx) " "
|
||||
(number-or-nil-to-string y defy) ";\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-desc-offset (x y &optional defx defy)
|
||||
"Insert new part description 'offset' line"
|
||||
(interactive "sx: \nsy: ")
|
||||
(insert
|
||||
(concat
|
||||
" offset: "
|
||||
(number-or-nil-to-string x defx) " "
|
||||
(number-or-nil-to-string y defy) ";\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-desc-inherit (name val)
|
||||
"Insert new part description 'inherit' line"
|
||||
(interactive "sname: \nsvalue: ")
|
||||
(insert
|
||||
(concat
|
||||
" inherit: \"" name "\" "
|
||||
(number-or-nil-to-string val 0.0) ";\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-desc-text (font size text)
|
||||
"Insert new part description 'text' block"
|
||||
(interactive "sfont: \nssize: \nstext: ")
|
||||
(insert
|
||||
(concat
|
||||
" text {\n"
|
||||
" font: \"" font "\";\n"
|
||||
" size: " (number-or-nil-to-string size) ";\n"
|
||||
" text: \"" text "\";\n"
|
||||
" }\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-desc-image (name)
|
||||
"Insert new part description 'image' block"
|
||||
(interactive "sname: ")
|
||||
(insert
|
||||
(concat
|
||||
" image {\n"
|
||||
" normal: \"" name "\";\n"
|
||||
" }\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-desc-color (r g b a &optional defr defg defb defa)
|
||||
"Insert new part description 'color' line"
|
||||
(interactive "sred: \nsgreen: \nsblue: \nsalpha: ")
|
||||
(insert
|
||||
(concat
|
||||
" color: "
|
||||
(number-or-nil-to-string r defr) " "
|
||||
(number-or-nil-to-string g defg) " "
|
||||
(number-or-nil-to-string b defb) " "
|
||||
(number-or-nil-to-string a defa) ";\n"
|
||||
)))
|
||||
|
||||
(defun edje-new-desc (name val &optional
|
||||
r1_rx r1_ry
|
||||
r2_rx r2_ry
|
||||
r1_ox r1_oy
|
||||
r2_ox r2_oy
|
||||
part_type)
|
||||
"Insert new part description block"
|
||||
(interactive "sName: \nsValue: ")
|
||||
(insert
|
||||
(concat
|
||||
" description {\n"
|
||||
" state: \"" name "\" " (number-or-nil-to-string val 0.0) ";\n"))
|
||||
(if (string= part_type "RECT") (edje-new-desc-color 255 255 255 255))
|
||||
(insert " rel1 {\n")
|
||||
(edje-new-desc-relative r1_rx r1_ry 0.0 0.0)
|
||||
(edje-new-desc-offset r1_ox r1_oy 0 0)
|
||||
(insert
|
||||
(concat
|
||||
" }\n"
|
||||
" rel2 {\n"
|
||||
))
|
||||
(edje-new-desc-relative r2_rx r2_ry 1.0 1.0)
|
||||
(edje-new-desc-offset r2_ox r2_oy -1 -1)
|
||||
(insert " }\n")
|
||||
(cond ((string= part_type "IMAGE") (edje-new-desc-image ""))
|
||||
((string= part_type "TEXT") (edje-new-desc-text "" 10 "contents"))
|
||||
)
|
||||
(insert " }\n")
|
||||
)
|
||||
|
||||
(defun edje-new-part (name type &optional
|
||||
r1_rx r1_ry
|
||||
r2_rx r2_ry
|
||||
r1_ox r1_oy
|
||||
r2_ox r2_oy)
|
||||
"Insert new part"
|
||||
(interactive "sName: \nsType: ")
|
||||
(setq type (upcase type))
|
||||
(insert
|
||||
(concat
|
||||
"\n"
|
||||
" part {\n"
|
||||
" name: \"" name "\";\n"
|
||||
" type: " type ";\n"
|
||||
" mouse_events: 0;\n"
|
||||
))
|
||||
(edje-new-desc "default" 0.0 r1_rx r1_ry r2_rx r2_ry r1_ox r1_oy r2_ox r2_oy type)
|
||||
(insert
|
||||
(concat
|
||||
" }\n"
|
||||
)))
|
||||
|
||||
(defun edje-setup-compile ()
|
||||
(set (make-local-variable 'compile-command)
|
||||
(concat "edje_cc " (buffer-file-name))
|
||||
))
|
||||
|
||||
(defun edje-cc ()
|
||||
"Runs edje_cc with current buffer."
|
||||
(interactive)
|
||||
(compile (edje-setup-compile)))
|
||||
|
||||
(defvar edje-mode-map
|
||||
(let ((edje-mode-map (make-sparse-keymap)))
|
||||
(define-key edje-mode-map "\C-j" 'newline-and-indent)
|
||||
(define-key edje-mode-map "\C-cp" 'edje-new-part)
|
||||
(define-key edje-mode-map "\C-cd" 'edje-new-desc)
|
||||
(define-key edje-mode-map "\C-cr" 'edje-new-desc-relative)
|
||||
(define-key edje-mode-map "\C-co" 'edje-new-desc-offset)
|
||||
(define-key edje-mode-map "\C-ch" 'edje-new-desc-inherit)
|
||||
(define-key edje-mode-map "\C-cc" 'edje-new-desc-color)
|
||||
(define-key edje-mode-map "\C-ci" 'edje-new-desc-image)
|
||||
(define-key edje-mode-map "\C-ct" 'edje-new-desc-text)
|
||||
(define-key edje-mode-map "\C-cg" 'edje-new-program)
|
||||
(define-key edje-mode-map "\C-ca" 'edje-new-program-action)
|
||||
(define-key edje-mode-map "\C-cs" 'edje-new-program-action-state-set)
|
||||
(define-key edje-mode-map "\C-ce" 'edje-new-program-action-signal-emit)
|
||||
edje-mode-map)
|
||||
"Keymap for Edje major mode")
|
||||
|
||||
(add-hook 'c-mode-hook 'edje-setup-compile)
|
||||
(add-to-list 'auto-mode-alist '("\\.edc$" . edje-mode))
|
||||
|
||||
(defconst edje-font-lock-keywords-1
|
||||
(eval-when-compile
|
||||
(list
|
||||
(list (concat "[ \t]*\\<"
|
||||
(regexp-opt
|
||||
'(
|
||||
"collections"
|
||||
"data"
|
||||
"description"
|
||||
"dragable"
|
||||
"fill"
|
||||
"fonts"
|
||||
"group"
|
||||
"image"
|
||||
"images"
|
||||
"origin"
|
||||
"part"
|
||||
"parts"
|
||||
"program"
|
||||
"programs"
|
||||
"rel1"
|
||||
"rel2"
|
||||
"script"
|
||||
"spectra"
|
||||
"style"
|
||||
"styles"
|
||||
"text"
|
||||
) t) "\\>\\([ \t]*{\\|\\.\\)")
|
||||
'(1 font-lock-function-name-face))
|
||||
|
||||
))
|
||||
"Major keywords")
|
||||
|
||||
(defconst edje-font-lock-keywords-2
|
||||
(eval-when-compile
|
||||
(append edje-font-lock-keywords-1
|
||||
(list
|
||||
(list
|
||||
(concat "^\\([ \t]*\\|[ \t]*[a-z]+\\.\\|\\)\\<"
|
||||
(regexp-opt
|
||||
'("action"
|
||||
"after"
|
||||
"alias"
|
||||
"align"
|
||||
"angle"
|
||||
"aspect"
|
||||
"aspect_preference"
|
||||
"base"
|
||||
"border"
|
||||
"clip_to"
|
||||
"collections"
|
||||
"color"
|
||||
"color2"
|
||||
"color3"
|
||||
"color_class"
|
||||
"color_classes"
|
||||
"confine"
|
||||
"data"
|
||||
"description"
|
||||
"dragable"
|
||||
"effect"
|
||||
"elipsis"
|
||||
"events"
|
||||
"fill"
|
||||
"fit"
|
||||
"fixed"
|
||||
"font"
|
||||
"fonts"
|
||||
"gradient"
|
||||
"group"
|
||||
"ignore_flags"
|
||||
"image"
|
||||
"images"
|
||||
"in"
|
||||
"inherit"
|
||||
"item"
|
||||
"max"
|
||||
"middle"
|
||||
"min"
|
||||
"mouse_events"
|
||||
"name"
|
||||
"normal"
|
||||
"offset"
|
||||
"origin"
|
||||
"part"
|
||||
"parts"
|
||||
"pointer_mode"
|
||||
"precise_is_inside"
|
||||
"program"
|
||||
"programs"
|
||||
"rel1"
|
||||
"rel2"
|
||||
"relative"
|
||||
"repeat_events"
|
||||
"signal"
|
||||
"size"
|
||||
"smooth"
|
||||
"source"
|
||||
"spectra"
|
||||
"spectrum"
|
||||
"spread"
|
||||
"state"
|
||||
"step"
|
||||
"style"
|
||||
"styles"
|
||||
"tag"
|
||||
"target"
|
||||
"text"
|
||||
"text_class"
|
||||
"text_source"
|
||||
"to"
|
||||
"to_x"
|
||||
"to_y"
|
||||
"transition"
|
||||
"tween"
|
||||
"type"
|
||||
"use_alternate_font_metrics"
|
||||
"visible"
|
||||
"x"
|
||||
"y"
|
||||
) t) "\\>[ \t]*[:,]")
|
||||
'(2 font-lock-keyword-face))
|
||||
)))
|
||||
"Minor keywords")
|
||||
|
||||
(defconst edje-font-lock-keywords-3
|
||||
(eval-when-compile
|
||||
(append edje-font-lock-keywords-2
|
||||
(list
|
||||
(list
|
||||
(concat "\\<"
|
||||
(regexp-opt
|
||||
'(; image options (st_images_image)
|
||||
"RAW"
|
||||
"COMP"
|
||||
"LOSSY"
|
||||
"USER"
|
||||
; part types (st_collections_group_parts_part_type)
|
||||
"NONE"
|
||||
"RECT"
|
||||
"TEXT"
|
||||
"IMAGE"
|
||||
"SWALLOW"
|
||||
"TEXTBLOCK"
|
||||
"GRADIENT"
|
||||
"GROUP"
|
||||
; ignore flags (st_collections_group_parts_part_ignore_flags)
|
||||
;"NONE"
|
||||
"ON_HOLD"
|
||||
; pointer mode (st_collections_group_parts_part_pointer_mode)
|
||||
"AUTOGRAB"
|
||||
"NOGRAB"
|
||||
; aspect (st_collections_group_parts_part_description_aspect_preference)
|
||||
"NONE"
|
||||
"VERTICAL"
|
||||
"HORIZONTAL"
|
||||
"BOTH"
|
||||
; text effect (st_collections_group_parts_part_effect)
|
||||
"NONE"
|
||||
"PLAIN"
|
||||
"OUTLINE"
|
||||
"SOFT_OUTLINE"
|
||||
"SHADOW"
|
||||
"SOFT_SHADOW"
|
||||
"OUTLINE_SHADOW"
|
||||
"OUTLINE_SOFT_SHADOW"
|
||||
"FAR_SHADOW"
|
||||
"FAR_SOFT_SHADOW"
|
||||
"GLOW"
|
||||
; image fill (st_collections_group_parts_part_description_fill_type)
|
||||
"SCALE"
|
||||
"TILE"
|
||||
; program action (st_collections_group_programs_program_action)
|
||||
"STATE_SET"
|
||||
"ACTION_STOP"
|
||||
"SIGNAL_EMIT"
|
||||
"DRAG_VAL_SET"
|
||||
"DRAG_VAL_STEP"
|
||||
"DRAG_VAL_PAGE"
|
||||
"SCRIPT"
|
||||
; program transition (st_collections_group_programs_program_transition)
|
||||
"LINEAR"
|
||||
"SINUSOIDAL"
|
||||
"ACCELERATE"
|
||||
"DECELERATE"
|
||||
) t) "\\>")
|
||||
'(1 font-lock-builtin-face))
|
||||
)))
|
||||
"Enumerate values")
|
||||
|
||||
(defconst edje-font-lock-keywords-4
|
||||
(eval-when-compile
|
||||
(append edje-font-lock-keywords-3
|
||||
(list
|
||||
(list
|
||||
(concat "[ \t]*#"
|
||||
(regexp-opt
|
||||
'("if"
|
||||
"ifdef"
|
||||
"ifndef"
|
||||
"define"
|
||||
"else"
|
||||
"endif"
|
||||
"include"
|
||||
"undef") t) "[ \t]*")
|
||||
'(1 font-lock-builtin-face))
|
||||
)))
|
||||
"CPP directives")
|
||||
|
||||
(defconst edje-font-lock-keywords-5
|
||||
(eval-when-compile
|
||||
(append edje-font-lock-keywords-4
|
||||
(list
|
||||
(list "[ \t]*#undef[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
|
||||
'(1 font-lock-variable-name-face))
|
||||
(list "[ \t]*#define[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)("
|
||||
'(1 font-lock-function-name-face))
|
||||
(list "[ \t]*#define[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
|
||||
'(1 font-lock-variable-name-face))
|
||||
)))
|
||||
"CPP directives that define constants")
|
||||
|
||||
|
||||
(defvar edje-font-lock-keywords edje-font-lock-keywords-5)
|
||||
|
||||
(defvar edje-mode-syntax-table
|
||||
(let ((edje-mode-syntax-table (make-syntax-table)))
|
||||
; This is added so entity names with underscores can be more easily parsed
|
||||
(modify-syntax-entry ?_ "w" edje-mode-syntax-table)
|
||||
(modify-syntax-entry ?/ ". 124b" edje-mode-syntax-table)
|
||||
(modify-syntax-entry ?* ". 23" edje-mode-syntax-table)
|
||||
(modify-syntax-entry ?\n "> b" edje-mode-syntax-table)
|
||||
|
||||
edje-mode-syntax-table)
|
||||
"Syntax table for edje-mode")
|
||||
|
||||
(c-add-style
|
||||
"edje"
|
||||
'("gnu"
|
||||
(indent-tabs-mode . nil)
|
||||
(tab-width . 8)
|
||||
(c-basic-offset . 3)
|
||||
(c-backslash-column . 72)
|
||||
(c-hanging-braces-alist .
|
||||
((block-open after)
|
||||
(brace-list-open after)
|
||||
(substatement-open after))
|
||||
)
|
||||
(c-offsets-alist .
|
||||
((statement-block-intro . +)
|
||||
(defun-open . 0)
|
||||
(substatement-open . 0)
|
||||
(defun-block-intro . +)
|
||||
(block-open . 0)
|
||||
(label . +)
|
||||
))))
|
||||
|
||||
|
||||
(define-derived-mode edje-mode c-mode "Edje"
|
||||
"Major mode for editing Edje files"
|
||||
(interactive)
|
||||
(use-local-map edje-mode-map)
|
||||
(set-syntax-table edje-mode-syntax-table)
|
||||
(set (make-local-variable 'font-lock-defaults) '(edje-font-lock-keywords))
|
||||
(set (make-local-variable 'require-final-newline) t)
|
||||
(c-set-style "edje")
|
||||
(run-hooks 'edje-mode-hook)
|
||||
)
|
||||
|
||||
(provide 'edje-mode)
|
||||
|
||||
;;; edje-mode.el ends here
|
||||
242
stuff/find-cmd.el
Normal file
242
stuff/find-cmd.el
Normal file
|
|
@ -0,0 +1,242 @@
|
|||
;;; find-cmd.el --- Build a valid find(1) command with sexps
|
||||
|
||||
;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Philip Jackson <phil@shellarchive.co.uk>
|
||||
;; Version: 0.6
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; With this module you can build up a (hopefully) valid find(1)
|
||||
;; string ready for the command line. For example:
|
||||
|
||||
;; (find-cmd '(prune (name ".svn" ".git" ".CVS"))
|
||||
;; '(and (or (name "*.pl" "*.pm" "*.t")
|
||||
;; (mtime "+1"))
|
||||
;; (fstype "nfs" "ufs"))))
|
||||
|
||||
;; will become (un-wrapped):
|
||||
|
||||
;; "find '/home/phil/' \\( \\( -name '.svn' -or -name '.git' -or
|
||||
;; -name '.CVS' \\) -prune -or -true \\) \\( \\( \\( -name '*.pl'
|
||||
;; -or -name '*.pm' -or -name '*.t' \\) -or -mtime '+1' \\) -and \\(
|
||||
;; -fstype 'nfs' -or -fstype 'ufs' \\) \\)"
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defconst find-constituents
|
||||
'((and . find-and)
|
||||
(not . find-not)
|
||||
(or . find-or)
|
||||
|
||||
(a . find-and)
|
||||
(n . find-not)
|
||||
(o . find-or)
|
||||
|
||||
(prune . find-prune)
|
||||
|
||||
;; switches
|
||||
(L . (0))
|
||||
(P . (0))
|
||||
(H . (0))
|
||||
|
||||
;; generic tests
|
||||
(amin . (1))
|
||||
(anewer . (1))
|
||||
(atime . (1))
|
||||
(cmin . (1))
|
||||
(cnewer . (1))
|
||||
(ctime . (1))
|
||||
(empty . (0))
|
||||
(false . (0))
|
||||
(fstype . (1))
|
||||
(gid . (1))
|
||||
(group . (1))
|
||||
(ilname . (1))
|
||||
(iname . (1))
|
||||
(inum . (1))
|
||||
(iwholename . (1))
|
||||
(iregex . (1))
|
||||
(links . (1))
|
||||
(lname . (1))
|
||||
(mmin . (1))
|
||||
(mtime . (1))
|
||||
(name . (1))
|
||||
(newer . (1))
|
||||
(nouser . (0))
|
||||
(nogroup . (0))
|
||||
(path . (1))
|
||||
(perm . (0))
|
||||
(regex . (1))
|
||||
(wholename . (1))
|
||||
(size . (1))
|
||||
(true . (0))
|
||||
(type . (1))
|
||||
(uid . (1))
|
||||
(used . (1))
|
||||
(user . (1))
|
||||
(xtype . (nil))
|
||||
|
||||
;; normal options (always true)
|
||||
(depth . (0))
|
||||
(maxdepth . (1))
|
||||
(mindepth . (1))
|
||||
(mount . (0))
|
||||
(noleaf . (0))
|
||||
(xdev . (0))
|
||||
(ignore_readdir_race . (0))
|
||||
(noignore_readdir_race . (0))
|
||||
|
||||
;; actions
|
||||
(delete . (0))
|
||||
(print0 . (0))
|
||||
(printf . (1))
|
||||
(fprintf . (2))
|
||||
(print . (0))
|
||||
(fprint0 . (1))
|
||||
(fprint . (1))
|
||||
(ls . (0))
|
||||
(fls . (1))
|
||||
(prune . (0))
|
||||
(quit . (0))
|
||||
|
||||
;; these need to be terminated with a ;
|
||||
(exec . (1 find-command t))
|
||||
(ok . (1 find-command t))
|
||||
(execdir . (1 find-command t))
|
||||
(okdir . (1 find-command t)))
|
||||
"Holds details of each of the find options. The car of each
|
||||
alist is the name. The cdr is minimum args, the function used
|
||||
to join many occurences of the argument together, and whether or
|
||||
not to leave quotes off the string (non-nil means the string will
|
||||
be quoted).")
|
||||
|
||||
;;;###autoload
|
||||
(defun find-cmd (&rest subfinds)
|
||||
"Initiate the building of a find command. For exmple:
|
||||
|
||||
\(find-cmd '\(prune \(name \".svn\" \".git\" \".CVS\"\)\)
|
||||
'\(and \(or \(name \"*.pl\" \"*.pm\" \"*.t\"\)
|
||||
\(mtime \"+1\"\)\)
|
||||
\(fstype \"nfs\" \"ufs\"\)\)\)\)
|
||||
|
||||
`default-directory' is used as the initial search path. The
|
||||
result is a string that should be ready for the command line."
|
||||
(concat
|
||||
"find " (shell-quote-argument (expand-file-name default-directory)) " "
|
||||
(cond
|
||||
((cdr subfinds)
|
||||
(mapconcat 'find-to-string subfinds ""))
|
||||
(t
|
||||
(find-to-string (car subfinds))))))
|
||||
|
||||
(defun find-and (form)
|
||||
"And FORMs together, so:
|
||||
\(and \(mtime \"+1\"\) \(name \"something\"\)\)
|
||||
will produce:
|
||||
find . \\\( -mtime '+1' -and -name 'something' \\\)"
|
||||
(if (< (length form) 2)
|
||||
(find-to-string (car form))
|
||||
(concat "\\( "
|
||||
(mapconcat 'find-to-string form "-and ")
|
||||
"\\) ")))
|
||||
|
||||
(defun find-or (form)
|
||||
"Or FORMs together, so:
|
||||
\(or \(mtime \"+1\"\) \(name \"something\"\)\)
|
||||
will produce:
|
||||
find . \\\( -mtime '+1' -or -name 'something' \\\)"
|
||||
(if (< (length form) 2)
|
||||
(find-to-string (car form))
|
||||
(concat "\\( "
|
||||
(mapconcat 'find-to-string form "-or ")
|
||||
"\\) ")))
|
||||
|
||||
(defun find-not (form)
|
||||
"Or FORMs together and prefix with a -not, so:
|
||||
\(not \(mtime \"+1\"\) \(name \"something\"\)\)
|
||||
will produce:
|
||||
-not \\\( -mtime '+1' -or -name 'something' \\\)
|
||||
If you wanted the FORMs -and(ed) together instead then this would
|
||||
suffice:
|
||||
\(not \(and \(mtime \"+1\"\) \(name \"something\"\)\)\)"
|
||||
(concat "-not " (find-or (mapcar 'find-to-string form))))
|
||||
|
||||
(defun find-prune (form)
|
||||
"-or together FORM(s) postfix '-prune' and then -or that with a
|
||||
-true, so:
|
||||
\(prune \(name \".svn\" \".git\"\)\) \(name \"*.pm\"\)
|
||||
will produce (unwrapped):
|
||||
\\\( \\\( \\\( -name '.svn' -or -name '.git' \\\) /
|
||||
-prune -or -true \\\) -and -name '*.pm' \\\)"
|
||||
(find-or
|
||||
(list
|
||||
(concat (find-or (mapcar 'find-to-string form)) (find-generic "prune"))
|
||||
(find-generic "true"))))
|
||||
|
||||
(defun find-generic (option &optional oper argcount args dont-quote)
|
||||
"This function allows an arbitrary string to be used as a
|
||||
form. OPTION is the name of the form, OPER is the function used
|
||||
to either OR or AND multiple results together. ARGCOUNT is the
|
||||
minimum of args that OPTION can receive and ARGS are the
|
||||
arguments for OPTION."
|
||||
(when (and (numberp argcount) (< (length args) argcount))
|
||||
(error "'%s' needs at least %d arguments" option argcount))
|
||||
(let ((oper (or oper 'find-or)))
|
||||
(if (and args (length args))
|
||||
(funcall oper (mapcar (lambda (x)
|
||||
(concat "-" option
|
||||
(if dont-quote
|
||||
(concat " " x " ")
|
||||
(concat " "
|
||||
(shell-quote-argument x)
|
||||
" "))))
|
||||
args))
|
||||
(concat "-" option " "))))
|
||||
|
||||
(defun find-command (form)
|
||||
"For each item in FORM add a terminating semi-colon and turn
|
||||
them into valid switches. The result is -and(ed) together."
|
||||
(find-and (mapcar (lambda (x)
|
||||
(concat (find-to-string x) "\\; "))
|
||||
form)))
|
||||
|
||||
(defun find-to-string (form)
|
||||
"Parse FORM to produce a set of valid find arguments."
|
||||
(cond
|
||||
((stringp form)
|
||||
form)
|
||||
((consp form)
|
||||
(let ((option (cdr (assoc (car form) find-constituents))))
|
||||
(cond
|
||||
((and (symbolp option) (fboundp option))
|
||||
(funcall option (cdr form)))
|
||||
((consp option)
|
||||
(let ((option (symbol-name (car form)))
|
||||
(argcnt (car option))
|
||||
(oper (cadr option))
|
||||
(dont-quote (car (cddr option))))
|
||||
(find-to-string
|
||||
(find-generic option oper argcnt (cdr form) dont-quote))))
|
||||
(t
|
||||
(error "Sorry I don't know how to handle '%s'" (car form))))))))
|
||||
|
||||
(provide 'find-cmd)
|
||||
|
||||
;; arch-tag: 9687fd9e-4e90-4022-864a-f904526e2046
|
||||
;;; find-cmd.el ends here
|
||||
167
stuff/flymake-cursor.el
Normal file
167
stuff/flymake-cursor.el
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
;;; flymake-cursor.el --- displays flymake error msg in minibuffer after delay
|
||||
;;
|
||||
;; Author : ??
|
||||
;; origin : http://paste.lisp.org/display/60617,1/raw
|
||||
;; Maintainer : Dino Chiesa <dpchiesa@hotmail.com>
|
||||
;; : Donald Curtis <dcurtis@milkbox.net>
|
||||
;; Created : May 2011
|
||||
;; Modified : December 2012
|
||||
;; Version : 0.1.5
|
||||
;; Keywords : languages mode flymake
|
||||
;; X-URL : http://www.emacswiki.org/emacs/flymake-cursor.el
|
||||
;; Last-saved : <2012-Dec-20 09:49:28>
|
||||
;;
|
||||
;; -------------------------------------------------------
|
||||
;;
|
||||
;; License: None. This code is in the Public Domain.
|
||||
;;
|
||||
;;
|
||||
;; Additional functionality that makes flymake error messages appear
|
||||
;; in the minibuffer when point is on a line containing a flymake
|
||||
;; error. This saves having to mouse over the error, which is a
|
||||
;; keyboard user's annoyance.
|
||||
;; -------------------------------------------------------
|
||||
;;
|
||||
;; This flymake-cursor module displays the flymake error in the
|
||||
;; minibuffer, after a short delay. It is based on code I found roaming
|
||||
;; around on the net, unsigned and unattributed. I suppose it's public
|
||||
;; domain, because, while there is a "License" listed in it, there
|
||||
;; is no license holder, no one to own the license.
|
||||
;;
|
||||
;; This version is modified slightly from that code. The post-command fn
|
||||
;; defined in this code does not display the message directly. Instead
|
||||
;; it sets a timer, and when the timer fires, the timer event function
|
||||
;; displays the message.
|
||||
;;
|
||||
;; The reason to do this: the error message is displayed only if the
|
||||
;; user doesn't do anything, for about one second. This way, if the user
|
||||
;; scrolls through a buffer and there are myriad errors, the minibuffer
|
||||
;; is not constantly being updated.
|
||||
;;
|
||||
;; If the user moves away from the line with the flymake error message
|
||||
;; before the timer expires, then no error is displayed in the minibuffer.
|
||||
;;
|
||||
;; I've also updated the names of the defuns. They all start with flyc now.
|
||||
;;
|
||||
;; To use this, include this line in your .emacs:
|
||||
;;
|
||||
;; ;; enhancements for displaying flymake errors
|
||||
;; (require 'flymake-cursor)
|
||||
;;
|
||||
;; You can, of course, put that in an eval-after-load clause.
|
||||
;;
|
||||
;; -------------------------------------------------------
|
||||
;;
|
||||
;; Update 2012-03-06 by Donald Curtis
|
||||
;; --
|
||||
;; Added some autoload statements and the closing comment to make
|
||||
;; compatible with package.el parser.
|
||||
;;
|
||||
;; Update 2012-12-20 by Jeremy Moore
|
||||
;; --
|
||||
;; Alter post-command-hook's local value via add-hook so that it plays
|
||||
;; nicely with other packages.
|
||||
;;
|
||||
|
||||
|
||||
(require 'cl)
|
||||
|
||||
(defvar flyc--e-at-point nil
|
||||
"Error at point, after last command")
|
||||
|
||||
(defvar flyc--e-display-timer nil
|
||||
"A timer; when it fires, it displays the stored error message.")
|
||||
|
||||
(defun flyc/maybe-fixup-message (errore)
|
||||
"pyflake is flakey if it has compile problems, this adjusts the
|
||||
message to display, so there is one ;)"
|
||||
(cond ((not (or (eq major-mode 'Python) (eq major-mode 'python-mode) t)))
|
||||
((null (flymake-ler-file errore))
|
||||
;; normal message do your thing
|
||||
(flymake-ler-text errore))
|
||||
(t ;; could not compile error
|
||||
(format "compile error, problem on line %s" (flymake-ler-line errore)))))
|
||||
|
||||
(defun flyc/show-stored-error-now ()
|
||||
"Displays the stored error in the minibuffer."
|
||||
(interactive)
|
||||
(let ((editing-p (= (minibuffer-depth) 0)))
|
||||
(if (and flyc--e-at-point editing-p)
|
||||
(progn
|
||||
(message "%s" (flyc/maybe-fixup-message flyc--e-at-point))
|
||||
(setq flyc--e-display-timer nil)))))
|
||||
|
||||
|
||||
(defun flyc/-get-error-at-point ()
|
||||
"Gets the first flymake error on the line at point."
|
||||
(let ((line-no (line-number-at-pos))
|
||||
flyc-e)
|
||||
(dolist (elem flymake-err-info)
|
||||
(if (eq (car elem) line-no)
|
||||
(setq flyc-e (car (second elem)))))
|
||||
flyc-e))
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(defun flyc/show-fly-error-at-point-now ()
|
||||
"If the cursor is sitting on a flymake error, display
|
||||
the error message in the minibuffer."
|
||||
(interactive)
|
||||
(if flyc--e-display-timer
|
||||
(progn
|
||||
(cancel-timer flyc--e-display-timer)
|
||||
(setq flyc--e-display-timer nil)))
|
||||
(let ((error-at-point (flyc/-get-error-at-point)))
|
||||
(if error-at-point
|
||||
(progn
|
||||
(setq flyc--e-at-point error-at-point)
|
||||
(flyc/show-stored-error-now)))))
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(defun flyc/show-fly-error-at-point-pretty-soon ()
|
||||
"If the cursor is sitting on a flymake error, grab the error,
|
||||
and set a timer for \"pretty soon\". When the timer fires, the error
|
||||
message will be displayed in the minibuffer.
|
||||
|
||||
This allows a post-command-hook to NOT cause the minibuffer to be
|
||||
updated 10,000 times as a user scrolls through a buffer
|
||||
quickly. Only when the user pauses on a line for more than a
|
||||
second, does the flymake error message (if any) get displayed.
|
||||
|
||||
"
|
||||
(if flyc--e-display-timer
|
||||
(cancel-timer flyc--e-display-timer))
|
||||
|
||||
(let ((error-at-point (flyc/-get-error-at-point)))
|
||||
(if error-at-point
|
||||
(setq flyc--e-at-point error-at-point
|
||||
flyc--e-display-timer
|
||||
(run-at-time "0.9 sec" nil 'flyc/show-stored-error-now))
|
||||
(setq flyc--e-at-point nil
|
||||
flyc--e-display-timer nil))))
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(eval-after-load "flymake"
|
||||
'(progn
|
||||
|
||||
(defadvice flymake-goto-next-error (after flyc/display-message-1 activate compile)
|
||||
"Display the error in the mini-buffer rather than having to mouse over it"
|
||||
(flyc/show-fly-error-at-point-now))
|
||||
|
||||
(defadvice flymake-goto-prev-error (after flyc/display-message-2 activate compile)
|
||||
"Display the error in the mini-buffer rather than having to mouse over it"
|
||||
(flyc/show-fly-error-at-point-now))
|
||||
|
||||
(defadvice flymake-mode (before flyc/post-command-fn activate compile)
|
||||
"Add functionality to the post command hook so that if the
|
||||
cursor is sitting on a flymake error the error information is
|
||||
displayed in the minibuffer (rather than having to mouse over
|
||||
it)"
|
||||
(add-hook 'post-command-hook 'flyc/show-fly-error-at-point-pretty-soon t t))))
|
||||
|
||||
|
||||
(provide 'flymake-cursor)
|
||||
|
||||
;;; flymake-cursor.el ends here
|
||||
98
stuff/go-mode-autoloads.el
Normal file
98
stuff/go-mode-autoloads.el
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
;;; go-mode-autoloads.el --- automatically extracted autoloads
|
||||
;;
|
||||
;;; Code:
|
||||
|
||||
|
||||
;;;### (autoloads (go-download-play godoc gofmt-before-save go-mode)
|
||||
;;;;;; "go-mode" "go-mode.el" (21514 38760 682820 85000))
|
||||
;;; Generated autoloads from go-mode.el
|
||||
|
||||
(autoload 'go-mode "go-mode" "\
|
||||
Major mode for editing Go source text.
|
||||
|
||||
This mode provides (not just) basic editing capabilities for
|
||||
working with Go code. It offers almost complete syntax
|
||||
highlighting, indentation that is almost identical to gofmt and
|
||||
proper parsing of the buffer content to allow features such as
|
||||
navigation by function, manipulation of comments or detection of
|
||||
strings.
|
||||
|
||||
In addition to these core features, it offers various features to
|
||||
help with writing Go code. You can directly run buffer content
|
||||
through gofmt, read godoc documentation from within Emacs, modify
|
||||
and clean up the list of package imports or interact with the
|
||||
Playground (uploading and downloading pastes).
|
||||
|
||||
The following extra functions are defined:
|
||||
|
||||
- `gofmt'
|
||||
- `godoc'
|
||||
- `go-import-add'
|
||||
- `go-remove-unused-imports'
|
||||
- `go-goto-imports'
|
||||
- `go-play-buffer' and `go-play-region'
|
||||
- `go-download-play'
|
||||
- `godef-describe' and `godef-jump'
|
||||
- `go-coverage'
|
||||
|
||||
If you want to automatically run `gofmt' before saving a file,
|
||||
add the following hook to your emacs configuration:
|
||||
|
||||
\(add-hook 'before-save-hook #'gofmt-before-save)
|
||||
|
||||
If you want to use `godef-jump' instead of etags (or similar),
|
||||
consider binding godef-jump to `M-.', which is the default key
|
||||
for `find-tag':
|
||||
|
||||
\(add-hook 'go-mode-hook (lambda ()
|
||||
(local-set-key (kbd \"M-.\") #'godef-jump)))
|
||||
|
||||
Please note that godef is an external dependency. You can install
|
||||
it with
|
||||
|
||||
go get github.com/rogpeppe/godef
|
||||
|
||||
|
||||
If you're looking for even more integration with Go, namely
|
||||
on-the-fly syntax checking, auto-completion and snippets, it is
|
||||
recommended that you look at flycheck
|
||||
\(see URL `https://github.com/flycheck/flycheck') or flymake in combination
|
||||
with goflymake (see URL `https://github.com/dougm/goflymake'), gocode
|
||||
\(see URL `https://github.com/nsf/gocode'), go-eldoc
|
||||
\(see URL `github.com/syohex/emacs-go-eldoc') and yasnippet-go
|
||||
\(see URL `https://github.com/dominikh/yasnippet-go')
|
||||
|
||||
\(fn)" t nil)
|
||||
|
||||
(add-to-list 'auto-mode-alist (cons "\\.go\\'" 'go-mode))
|
||||
|
||||
(autoload 'gofmt-before-save "go-mode" "\
|
||||
Add this to .emacs to run gofmt on the current buffer when saving:
|
||||
(add-hook 'before-save-hook 'gofmt-before-save).
|
||||
|
||||
Note that this will cause go-mode to get loaded the first time
|
||||
you save any file, kind of defeating the point of autoloading.
|
||||
|
||||
\(fn)" t nil)
|
||||
|
||||
(autoload 'godoc "go-mode" "\
|
||||
Show Go documentation for a query, much like M-x man.
|
||||
|
||||
\(fn QUERY)" t nil)
|
||||
|
||||
(autoload 'go-download-play "go-mode" "\
|
||||
Downloads a paste from the playground and inserts it in a Go
|
||||
buffer. Tries to look for a URL at point.
|
||||
|
||||
\(fn URL)" t nil)
|
||||
|
||||
;;;***
|
||||
|
||||
(provide 'go-mode-autoloads)
|
||||
;; Local Variables:
|
||||
;; version-control: never
|
||||
;; no-byte-compile: t
|
||||
;; no-update-autoloads: t
|
||||
;; coding: utf-8
|
||||
;; End:
|
||||
;;; go-mode-autoloads.el ends here
|
||||
2009
stuff/go-mode.el
Normal file
2009
stuff/go-mode.el
Normal file
File diff suppressed because it is too large
Load diff
1
stuff/go.el
Submodule
1
stuff/go.el
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 64be4a31390a62d248da5c0509aaa0de09b8e4f4
|
||||
|
|
@ -1,4 +1,33 @@
|
|||
(custom-set-variables
|
||||
'(python-indent 4))
|
||||
|
||||
(defun python-mode-setup ()
|
||||
|
||||
;; ------------- ;;
|
||||
;; CONFIGURATION ;;
|
||||
;; ------------- ;;
|
||||
|
||||
;; Comment boxing style
|
||||
(set 'my-rebox-style 423)
|
||||
|
||||
;; -------- ;;
|
||||
;; BINDINGS ;;
|
||||
;; -------- ;;
|
||||
|
||||
;; comment
|
||||
(define-key
|
||||
py-mode-map
|
||||
[(control c) (control c)]
|
||||
'comment-region)
|
||||
|
||||
;; rebox
|
||||
(define-key
|
||||
py-mode-map
|
||||
[(meta q)]
|
||||
'my-rebox-comment)
|
||||
|
||||
)
|
||||
|
||||
(add-hook 'python-mode-hook 'python-mode-setup)
|
||||
|
||||
(provide 'my-python-mode)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue