Add a keyboard shortcut to edit the kitty config file easily

Fixes #366
This commit is contained in:
Kovid Goyal 2018-03-09 17:57:09 +05:30
parent b3cc6f3802
commit 51b6b325b9
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
7 changed files with 52 additions and 15 deletions

View File

@ -39,6 +39,7 @@
:sc_scroll_page_up: pass:quotes[`ctrl+shift+page_up`]
:sc_second_window: pass:quotes[`ctrl+shift+2`]
:sc_seventh_window: pass:quotes[`ctrl+shift+7`]
:sc_show_preferences: pass:quotes[`ctrl+shift+f2`]
:sc_show_scrollback: pass:quotes[`ctrl+shift+h`]
:sc_sixth_window: pass:quotes[`ctrl+shift+6`]
:sc_tenth_window: pass:quotes[`ctrl+shift+0`]
@ -234,6 +235,7 @@ windows are:
|Input unicode character | {sc_input_unicode_character}
|Click URL using the keyboard | {sc_run_simple_kitten_text_url_hints}
|Pass current selection to program | {sc_pass_selection_to_program}
|Edit kitty config file| {sc_edit_config_file}
|===

View File

@ -3,7 +3,6 @@
# License: GPL v3 Copyright: 2018, Kovid Goyal <kovid at kovidgoyal.net>
import os
import shlex
import string
import subprocess
import sys
@ -11,7 +10,7 @@
from gettext import gettext as _
from kitty.config import cached_values_for
from kitty.constants import config_dir
from kitty.constants import config_dir, editor
from kitty.fast_data_types import wcswidth
from kitty.key_encoding import (
DOWN, ESCAPE, F1, F2, F3, F4, F12, LEFT, RELEASE, RIGHT, SHIFT, TAB, UP,
@ -426,7 +425,6 @@ def edit_favorites(self):
if not os.path.exists(favorites_path):
with open(favorites_path, 'wb') as f:
f.write(serialize_favorites(load_favorites()).encode('utf-8'))
editor = shlex.split(os.environ.get('EDITOR', 'vim'))
with self.suspend():
p = subprocess.Popen(editor + [favorites_path])
if p.wait() == 0:

View File

@ -10,8 +10,10 @@
from weakref import WeakValueDictionary
from .cli import create_opts, parse_args
from .config import MINIMUM_FONT_SIZE, initial_window_size
from .constants import appname, set_boss
from .config import (
MINIMUM_FONT_SIZE, initial_window_size, prepare_config_file_for_editing
)
from .constants import appname, editor, set_boss
from .fast_data_types import (
ChildMonitor, create_os_window, current_os_window, destroy_global_data,
destroy_sprite_map, get_clipboard_string, glfw_post_empty_event,
@ -410,6 +412,11 @@ def display_scrollback(self, window, data):
SpecialWindow(
self.opts.scrollback_pager, data, _('History'), overlay_for=window.id))
def edit_config_file(self, *a):
confpath = prepare_config_file_for_editing()
cmd = editor + [confpath]
self.new_os_window(*cmd)
def input_unicode_character(self):
w = self.active_window
tab = self.active_tab

View File

@ -59,11 +59,35 @@
return @"kitty";
}
@interface GlobalMenuTarget : NSObject
+ (GlobalMenuTarget *) shared_instance;
@end
@implementation GlobalMenuTarget
- (void) show_preferences : (id)sender {
(void)sender;
call_boss(edit_config_file, NULL);
}
+ (GlobalMenuTarget *) shared_instance
{
static GlobalMenuTarget *sharedGlobalMenuTarget = nil;
@synchronized(self)
{
if (!sharedGlobalMenuTarget)
sharedGlobalMenuTarget = [[GlobalMenuTarget alloc] init];
return sharedGlobalMenuTarget;
}
}
@end
void
cocoa_create_global_menu(void) {
NSString* app_name = find_app_name();
NSMenu* bar = [[NSMenu alloc] init];
GlobalMenuTarget *global_menu_target = [GlobalMenuTarget shared_instance];
[NSApp setMainMenu:bar];
NSMenuItem* appMenuItem =
@ -75,6 +99,9 @@
action:@selector(orderFrontStandardAboutPanel:)
keyEquivalent:@""];
[appMenu addItem:[NSMenuItem separatorItem]];
NSMenuItem* preferences_menu_item = [[NSMenuItem alloc] initWithTitle:@"Preferences..." action:@selector(show_preferences:) keyEquivalent:@","];
[preferences_menu_item setTarget:global_menu_target];
[appMenu addItem:preferences_menu_item];
[appMenu addItemWithTitle:[NSString stringWithFormat:@"Hide %@", app_name]
action:@selector(hide:)
keyEquivalent:@"h"];
@ -124,7 +151,7 @@
setKeyEquivalentModifierMask:NSEventModifierFlagControl | NSEventModifierFlagCommand];
[NSApp setWindowsMenu:windowMenu];
[windowMenu release];
[preferences_menu_item release];
[bar release];
}

View File

@ -478,13 +478,12 @@ def commented_out_default_config():
def prepare_config_file_for_editing():
if os.path.exists(defconf):
return
d = os.path.dirname(defconf)
try:
os.makedirs(d)
except FileExistsError:
pass
with open(defconf, 'w') as f:
f.write(commented_out_default_config)
if not os.path.exists(defconf):
d = os.path.dirname(defconf)
try:
os.makedirs(d)
except FileExistsError:
pass
with open(defconf, 'w') as f:
f.write(commented_out_default_config)
return defconf

View File

@ -4,6 +4,7 @@
import os
import pwd
import shlex
import sys
from collections import namedtuple
@ -15,6 +16,7 @@
_plat = sys.platform.lower()
is_macos = 'darwin' in _plat
base = os.path.dirname(os.path.abspath(__file__))
editor = shlex.split(os.environ.get('EDITOR', 'vim'))
ScreenGeometry = namedtuple('ScreenGeometry', 'xstart ystart xnum ynum dx dy')

View File

@ -11,6 +11,7 @@
#
# You can get a list of full family names available on your computer by running
# kitty list-fonts
# The default values shown below rely on your OS to choose an appropriate monospace font family.
font_family monospace
italic_font auto
bold_font auto
@ -341,6 +342,7 @@ map ctrl+shift+minus decrease_font_size
map ctrl+shift+backspace restore_font_size
map ctrl+shift+f11 toggle_fullscreen
map ctrl+shift+u input_unicode_character
map ctrl+shift+f2 edit_config_file
# Open a currently visible URL using the keyboard. The program used ot open the URL is specified in open_url_with.
# You can customize how the URLs are detected and opened by specifying command line options to
# url_hints. For example: