mirror of
https://codeberg.org/scip/config-general-mode.git
synced 2025-12-17 12:30:59 +01:00
+toggle-flags,+completion
This commit is contained in:
@@ -58,6 +58,19 @@
|
|||||||
:group 'config-general
|
:group 'config-general
|
||||||
:type 'boolean)
|
:type 'boolean)
|
||||||
|
|
||||||
|
(defcustom config-general-toggle-values
|
||||||
|
'(("true" . "false")
|
||||||
|
("false" . "true")
|
||||||
|
("on" . "off")
|
||||||
|
("off" . "on")
|
||||||
|
("yes" . "no")
|
||||||
|
("no" . "yes")
|
||||||
|
("enable" . "disable")
|
||||||
|
("disable" . "enable"))
|
||||||
|
"Values which can be toggled, for simplicity's sake, add both values."
|
||||||
|
:group 'config-general
|
||||||
|
:type 'list)
|
||||||
|
|
||||||
;; faces
|
;; faces
|
||||||
(defface config-general-file-face
|
(defface config-general-file-face
|
||||||
'((t (:inherit link)))
|
'((t (:inherit link)))
|
||||||
@@ -116,15 +129,21 @@
|
|||||||
;;;; Public Functions
|
;;;; Public Functions
|
||||||
|
|
||||||
(defun config-general-reload()
|
(defun config-general-reload()
|
||||||
|
"Simple mode reloader"
|
||||||
(interactive)
|
(interactive)
|
||||||
(fundamental-mode)
|
(fundamental-mode)
|
||||||
(config-general-mode))
|
(config-general-mode))
|
||||||
|
|
||||||
(defun config-general-align-vars (beg end)
|
(defun config-general-align-vars (beg end)
|
||||||
|
"Automatically align variable assignments inside region marked
|
||||||
|
with BEG and END based on the = character."
|
||||||
(interactive "r")
|
(interactive "r")
|
||||||
(align-regexp beg end "\\(\\s-*\\)=" 1 1 nil))
|
(align-regexp beg end "\\(\\s-*\\)=" 1 1 nil))
|
||||||
|
|
||||||
(defun config-general-do-electric-return ()
|
(defun config-general-do-electric-return ()
|
||||||
|
"If (point) is on an include filename, call
|
||||||
|
`find-file-at-point' with it, otherwise add a new line below,
|
||||||
|
indent it and move (point) there."
|
||||||
(interactive)
|
(interactive)
|
||||||
(if (eq config-general-electric-return t)
|
(if (eq config-general-electric-return t)
|
||||||
(if (eq (get-text-property (point)'face) 'config-general-file-face)
|
(if (eq (get-text-property (point)'face) 'config-general-file-face)
|
||||||
@@ -133,10 +152,29 @@
|
|||||||
(newline)))
|
(newline)))
|
||||||
|
|
||||||
(defun config-general-open-line-below ()
|
(defun config-general-open-line-below ()
|
||||||
|
"Add a new line below, indent it and move (point) there."
|
||||||
(interactive)
|
(interactive)
|
||||||
(end-of-line)
|
(end-of-line)
|
||||||
(newline-and-indent))
|
(newline-and-indent))
|
||||||
|
|
||||||
|
(defun config-general-tab-or-complete ()
|
||||||
|
"Enter a <TAB> or do a dabbrev completion based on (point) position."
|
||||||
|
(interactive)
|
||||||
|
(if (looking-back "[-%$_a-zA-Z0-9]")
|
||||||
|
(dabbrev-completion)
|
||||||
|
(indent-for-tab-command)))
|
||||||
|
|
||||||
|
(defun config-general-toggle-flag ()
|
||||||
|
"Toggle a value of the list `config-general-toggle-values'."
|
||||||
|
(interactive)
|
||||||
|
(let* ((thing (downcase (thing-at-point 'word t)))
|
||||||
|
(flag (assoc thing config-general-toggle-values))
|
||||||
|
(A (car (bounds-of-thing-at-point 'word)))
|
||||||
|
(B (cdr (bounds-of-thing-at-point 'word))))
|
||||||
|
(when (and thing flag)
|
||||||
|
(goto-char B)
|
||||||
|
(backward-kill-word 1)
|
||||||
|
(insert (cdr flag)))))
|
||||||
|
|
||||||
;;;; Internal Functions
|
;;;; Internal Functions
|
||||||
|
|
||||||
@@ -218,12 +256,14 @@
|
|||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defvar config-general-mode-map
|
(defvar config-general-mode-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
(define-key map (kbd "C-c C-7") 'sh-backslash-region) ;; for latin keyboards
|
(define-key map (kbd "C-c C-7") 'sh-backslash-region) ;; for latin keyboards
|
||||||
(define-key map (kbd "C-c C-/") 'sh-backslash-region)
|
(define-key map (kbd "C-c C-/") 'sh-backslash-region)
|
||||||
(define-key map (kbd "C-c C-0") 'config-general-align-vars) ;; for latin keyboards
|
(define-key map (kbd "C-c C-0") 'config-general-align-vars) ;; for latin keyboards
|
||||||
(define-key map (kbd "C-c C-=") 'config-general-align-vars)
|
(define-key map (kbd "C-c C-=") 'config-general-align-vars)
|
||||||
(define-key map (kbd "C-c C-f") 'find-file-at-point) ;; FIXME: change to [follow-link]
|
(define-key map (kbd "C-c C-f") 'find-file-at-point) ;; FIXME: change to [follow-link]
|
||||||
(define-key map (kbd "<C-return>") 'config-general-do-electric-return)
|
(define-key map (kbd "C-c C-t") 'config-general-toggle-flag)
|
||||||
|
(define-key map (kbd "<C-return>") 'config-general-do-electric-return)
|
||||||
|
(define-key map (kbd "<tab>") 'config-general-tab-or-complete)
|
||||||
(define-key map [remap delete-backward-char] 'backward-delete-char-untabify)
|
(define-key map [remap delete-backward-char] 'backward-delete-char-untabify)
|
||||||
map)
|
map)
|
||||||
"Keymap used in Config::General mode."
|
"Keymap used in Config::General mode."
|
||||||
|
|||||||
Reference in New Issue
Block a user